Blame view

src/main/kotlin/application/controller/DataPanelController.kt 9.09 KB
513c0341c   lsagona   add chart
1
2
3
4
5
6
7
  package application.controller
  
  import application.model.*
  import javafx.collections.FXCollections
  import javafx.collections.ObservableList
  import javafx.fxml.FXML
  import javafx.fxml.Initializable
513c0341c   lsagona   add chart
8
9
  import javafx.scene.control.ListCell
  import javafx.scene.control.ListView
f15a58907   lsagona   add better chart
10
11
  import org.charts.dataviewer.api.config.DataViewerConfiguration
  import org.charts.dataviewer.api.data.PlotData
f15a58907   lsagona   add better chart
12
13
14
  import org.charts.dataviewer.api.trace.ScatterTrace
  import org.charts.dataviewer.javafx.JavaFxDataViewer
  import org.charts.dataviewer.utils.TraceColour
f15a58907   lsagona   add better chart
15
  import org.charts.dataviewer.utils.TraceVisibility
513c0341c   lsagona   add chart
16
17
18
19
20
21
22
  import java.net.URL
  import java.util.*
  
  
  class DataPanelController : Initializable, SelectedVesselListener {
      private var dataList: ObservableList<Pair<String, ArrayList<MessageData?>>> = FXCollections.observableArrayList()
      private lateinit var timeData: ArrayList<MessageData?>
513c0341c   lsagona   add chart
23
24
  
      @FXML
f15a58907   lsagona   add better chart
25
      var dataListView = ListView<Pair<String, ArrayList<MessageData?>>>()
513c0341c   lsagona   add chart
26

513c0341c   lsagona   add chart
27
      @FXML
f15a58907   lsagona   add better chart
28
      var dataViewer = JavaFxDataViewer()
513c0341c   lsagona   add chart
29
30
  
      override fun initialize(location: URL?, resources: ResourceBundle?) {
513c0341c   lsagona   add chart
31
32
          setObservableSelectedVesselListener()
          dataListView.items = dataList
f15a58907   lsagona   add better chart
33
          val plotData = PlotData()
f15a58907   lsagona   add better chart
34
35
36
          val config = DataViewerConfiguration()
          config.showLegend(true)
          config.setLegendInsidePlot(false)
513c0341c   lsagona   add chart
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  
          dataListView.setCellFactory {
              object : ListCell<Pair<String, ArrayList<MessageData?>>?>() {
                  override fun updateItem(item: Pair<String, ArrayList<MessageData?>>?, empty: Boolean) {
                      super.updateItem(item, empty)
                      text = if (empty) {
                          null
                      } else {
                          item?.first
                      }
                  }
              }
          }
  
          dataListView.selectionModel.selectedItemProperty().addListener { _, _, newValue ->
f15a58907   lsagona   add better chart
52
53
54
55
              if (newValue == null) {
                  plotData.allTraces.clear()
                  config.setxAxisTitle("")
                  config.setyAxisTitle("")
f39d90e60   lsagona   Select/deselect MMSI
56
                  dataViewer.updateConfiguration(config)
f15a58907   lsagona   add better chart
57
                  dataViewer.resetPlot()
513c0341c   lsagona   add chart
58
59
                  return@addListener
              }
513c0341c   lsagona   add chart
60
61
62
  
              val getValueVisitorX = GetValueVisitor()
              val getValueVisitorY = GetValueVisitor()
f15a58907   lsagona   add better chart
63
64
65
66
              val arrayListStringX = arrayListOf<String>()
              val arrayListDoubleX = arrayListOf<Double>()
              val arrayListStringY = arrayListOf<String>()
              val arrayListDoubleY = arrayListOf<Double>()
513c0341c   lsagona   add chart
67

f15a58907   lsagona   add better chart
68
              for (x in 0 until newValue.second.size) {
513c0341c   lsagona   add chart
69
70
                  timeData[x]?.accept(getValueVisitorX)
                  newValue.second[x]?.accept(getValueVisitorY)
f15a58907   lsagona   add better chart
71
72
73
74
75
76
                  if (getValueVisitorY.value.toDoubleOrNull() == null) {
                      arrayListStringX.add(getValueVisitorX.value)
                      arrayListStringY.add(getValueVisitorY.value)
                  } else {
                      arrayListStringX.add(getValueVisitorX.value)
                      arrayListDoubleY.add(getValueVisitorY.value.toDouble())
513c0341c   lsagona   add chart
77
                  }
513c0341c   lsagona   add chart
78
              }
f15a58907   lsagona   add better chart
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
              val scatterTrace = ScatterTrace<Any>()
              scatterTrace.traceColour = TraceColour.RED
              scatterTrace.traceVisibility = TraceVisibility.TRUE
  
              val serieStringX: Array<String> = arrayListStringX.toTypedArray()
  //            val serieDoubleX: Array<Double> = arrayListDoubleX.toTypedArray()
              val serieStringY: Array<String> = arrayListStringY.toTypedArray()
              val serieDoubleY: Array<Double> = arrayListDoubleY.toTypedArray()
  
              if (getValueVisitorY.value.toDoubleOrNull() == null) {
                  scatterTrace.setxArray(serieStringX)
                  scatterTrace.setyArray(serieStringY)
              } else {
                  scatterTrace.setxArray(serieStringX)
                  scatterTrace.setyArray(serieDoubleY)
513c0341c   lsagona   add chart
94
              }
f15a58907   lsagona   add better chart
95
96
97
98
99
100
101
              config.setxAxisTitle("Date")
              config.setyAxisTitle(newValue.first)
              dataViewer.resetPlot()
              plotData.allTraces.clear()
              plotData.addTrace(scatterTrace)
              dataViewer.updateConfiguration(config)
              dataViewer.updatePlot(plotData)
513c0341c   lsagona   add chart
102
          }
f15a58907   lsagona   add better chart
103
          plotData.allTraces.clear()
f15a58907   lsagona   add better chart
104
105
          config.setxAxisTitle("")
          config.setyAxisTitle("")
f15a58907   lsagona   add better chart
106
107
          dataViewer.updateConfiguration(config)
          dataViewer.updatePlot(plotData)
513c0341c   lsagona   add chart
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
      }
  
      private fun setObservableSelectedVesselListener() {
          observableSelectedVessel.listeners.add(this)
      }
  
      private fun populateTime(vessel: Vessel): ArrayList<MessageData?> {
          val allTime: ArrayList<MessageData?> = vessel.getAllTime()
          allTime.sortBy { (it as Time).value }
  
          return allTime
      }
  
      private fun populateLatitude(vessel: Vessel): ArrayList<MessageData?> {
          val allLatitude: ArrayList<MessageData?> = vessel.getAllLatitude()
          allLatitude.sortBy { (it as Latitude).value }
  
          return allLatitude
      }
  
      private fun populateLongitude(vessel: Vessel): ArrayList<MessageData?> {
          val allLongitude: ArrayList<MessageData?> = vessel.getAllLongitude()
          allLongitude.sortBy { (it as Longitude).value }
  
          return allLongitude
      }
  
      private fun populateSpeedOverGround(vessel: Vessel): ArrayList<MessageData?> {
          val allSpeedOverGround: ArrayList<MessageData?> = vessel.getAllSpeedOverGround()
          allSpeedOverGround.sortBy { (it as SpeedOverGround).value }
  
          return allSpeedOverGround
      }
  
      private fun populateCourseOverGround(vessel: Vessel): ArrayList<MessageData?> {
          val allCourseOverGround: ArrayList<MessageData?> = vessel.getAllCourseOverGround()
          allCourseOverGround.sortBy { (it as CourseOverGround).value }
  
          return allCourseOverGround
      }
  
      private fun populateHeading(vessel: Vessel): ArrayList<MessageData?> {
          val allHeading: ArrayList<MessageData?> = vessel.getAllHeading()
          allHeading.sortBy { (it as Heading).value }
  
          return allHeading
      }
f15a58907   lsagona   add better chart
155
      private fun populateVesselName(vessel: Vessel): ArrayList<MessageData?> {
513c0341c   lsagona   add chart
156
157
158
159
160
          val allVesselName: ArrayList<MessageData?> = vessel.getAllVesselName()
          allVesselName.sortBy { (it as VesselName).value }
  
          return allVesselName
      }
f15a58907   lsagona   add better chart
161
      private fun populateIMO(vessel: Vessel): ArrayList<MessageData?> {
513c0341c   lsagona   add chart
162
163
164
165
166
          val allIMO: ArrayList<MessageData?> = vessel.getAllIMO()
          allIMO.sortBy { (it as IMO).value }
  
          return allIMO
      }
f15a58907   lsagona   add better chart
167
      private fun populateCallSign(vessel: Vessel): ArrayList<MessageData?> {
513c0341c   lsagona   add chart
168
169
170
171
172
          val allCallSign: ArrayList<MessageData?> = vessel.getAllCallSign()
          allCallSign.sortBy { (it as CallSign).value }
  
          return allCallSign
      }
f15a58907   lsagona   add better chart
173
      private fun populateVesselType(vessel: Vessel): ArrayList<MessageData?> {
513c0341c   lsagona   add chart
174
175
176
177
178
          val allVesselType: ArrayList<MessageData?> = vessel.getAllVesselType()
          allVesselType.sortBy { (it as VesselType).value }
  
          return allVesselType
      }
f15a58907   lsagona   add better chart
179
      private fun populateStatus(vessel: Vessel): ArrayList<MessageData?> {
513c0341c   lsagona   add chart
180
181
182
183
184
          val allStatus: ArrayList<MessageData?> = vessel.getAllStatus()
          allStatus.sortBy { (it as Status).value }
  
          return allStatus
      }
f15a58907   lsagona   add better chart
185
      private fun populateLength(vessel: Vessel): ArrayList<MessageData?> {
513c0341c   lsagona   add chart
186
187
188
189
190
          val allLength: ArrayList<MessageData?> = vessel.getAllLength()
          allLength.sortBy { (it as Length).value }
  
          return allLength
      }
f15a58907   lsagona   add better chart
191
      private fun populateWidth(vessel: Vessel): ArrayList<MessageData?> {
513c0341c   lsagona   add chart
192
193
194
195
196
          val allWidth: ArrayList<MessageData?> = vessel.getAllWidth()
          allWidth.sortBy { (it as Width).value }
  
          return allWidth
      }
f15a58907   lsagona   add better chart
197
      private fun populateDraft(vessel: Vessel): ArrayList<MessageData?> {
513c0341c   lsagona   add chart
198
199
200
201
202
          val allDraft: ArrayList<MessageData?> = vessel.getAllDraft()
          allDraft.sortBy { (it as Draft).value }
  
          return allDraft
      }
f15a58907   lsagona   add better chart
203
      private fun populateCargo(vessel: Vessel): ArrayList<MessageData?> {
513c0341c   lsagona   add chart
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
          val allCargo: ArrayList<MessageData?> = vessel.getAllCargo()
          allCargo.sortBy { (it as Cargo).value }
  
          return allCargo
      }
  
      private fun populateDataList(vessel: Vessel) {
          val data = arrayListOf<Pair<String, ArrayList<MessageData?>>>()
  
          timeData = populateTime(vessel)
  
          data.add(Pair("Latitude", populateLatitude(vessel)))
  
          data.add(Pair("Longitude", populateLongitude(vessel)))
  
          data.add(Pair("Speed Over Ground", populateSpeedOverGround(vessel)))
  
          data.add(Pair("Course Over Ground", populateCourseOverGround(vessel)))
  
          data.add(Pair("Heading", populateHeading(vessel)))
f15a58907   lsagona   add better chart
224
          data.add(Pair("Vessel Name", populateVesselName(vessel)))
513c0341c   lsagona   add chart
225

f15a58907   lsagona   add better chart
226
          data.add(Pair("IMO", populateIMO(vessel)))
513c0341c   lsagona   add chart
227

f15a58907   lsagona   add better chart
228
          data.add(Pair("Call Sign", populateCallSign(vessel)))
513c0341c   lsagona   add chart
229

f15a58907   lsagona   add better chart
230
          data.add(Pair("Vessel Type", populateVesselType(vessel)))
513c0341c   lsagona   add chart
231

f15a58907   lsagona   add better chart
232
          data.add(Pair("Status", populateStatus(vessel)))
513c0341c   lsagona   add chart
233

f15a58907   lsagona   add better chart
234
          data.add(Pair("Length", populateLength(vessel)))
513c0341c   lsagona   add chart
235

f15a58907   lsagona   add better chart
236
          data.add(Pair("Width", populateWidth(vessel)))
513c0341c   lsagona   add chart
237

f15a58907   lsagona   add better chart
238
          data.add(Pair("Draft", populateDraft(vessel)))
513c0341c   lsagona   add chart
239

f15a58907   lsagona   add better chart
240
          data.add(Pair("Cargo", populateCargo(vessel)))
513c0341c   lsagona   add chart
241
242
243
244
245
246
247
248
249
250
251
  
          dataList.addAll(data)
      }
  
      override fun onValueChanged(newValue: Vessel) {
          dataList.clear()
          populateDataList(newValue)
  
      }
  
  }