cosmos 4.1.1-java → 4.2.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -2
  3. data/.travis.yml +2 -0
  4. data/.yardopts +1 -0
  5. data/Gemfile +1 -0
  6. data/Manifest.txt +130 -0
  7. data/autohotkey/tools/ConfigEditorAHK +19 -0
  8. data/autohotkey/tools/cmd_extractor.ahk +4 -4
  9. data/autohotkey/tools/cmd_sequence.ahk +9 -5
  10. data/autohotkey/tools/config_editor.ahk +197 -0
  11. data/autohotkey/tools/packet_viewer.ahk +12 -6
  12. data/autohotkey/tools/replay.ahk +29 -29
  13. data/autohotkey/tools/script_runner.ahk +10 -2
  14. data/autohotkey/tools/tlm_extractor.ahk +7 -8
  15. data/autohotkey/tools/tlm_grapher.ahk +21 -9
  16. data/bin/dart_import +2 -0
  17. data/cosmos.gemspec +18 -16
  18. data/data/config/cmd_tlm_server.yaml +9 -0
  19. data/data/config/interface_modifiers.yaml +17 -0
  20. data/data/config/item_modifiers.yaml +3 -3
  21. data/data/crc.txt +184 -90
  22. data/data/dart.png +0 -0
  23. data/demo/Gemfile +1 -0
  24. data/demo/Rakefile +4 -0
  25. data/demo/config/dart/Gemfile +54 -0
  26. data/demo/config/data/crc.txt +28 -21
  27. data/demo/config/system/system.txt +3 -0
  28. data/demo/config/system/system2.txt +3 -0
  29. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +3 -3
  30. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +1 -1
  31. data/demo/config/targets/INST/lib/sim_inst.rb +1 -1
  32. data/demo/config/targets/INST/screens/adcs.txt +2 -1
  33. data/demo/config/targets/INST/screens/array.txt +1 -1
  34. data/demo/config/targets/INST/screens/block.txt +1 -1
  35. data/demo/config/targets/INST/screens/commanding.txt +7 -2
  36. data/demo/config/targets/INST/screens/graphs.txt +1 -1
  37. data/demo/config/targets/INST/screens/ground.txt +1 -1
  38. data/demo/config/targets/INST/screens/hs.txt +2 -1
  39. data/demo/config/targets/INST/screens/latest.txt +1 -1
  40. data/demo/config/targets/INST/screens/limits.txt +1 -1
  41. data/demo/config/targets/INST/screens/other.txt +1 -1
  42. data/demo/config/targets/INST/screens/tabs.txt +1 -1
  43. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  44. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +3 -1
  45. data/demo/config/tools/launcher/launcher.txt +3 -2
  46. data/demo/tools/Dart +16 -0
  47. data/demo/tools/Dart.bat +9 -0
  48. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
  49. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
  50. data/install/Gemfile +1 -0
  51. data/install/Rakefile +4 -0
  52. data/install/config/dart/Gemfile +54 -0
  53. data/install/config/data/crc.txt +6 -3
  54. data/install/config/system/system.txt +3 -0
  55. data/install/config/tools/launcher/launcher.txt +3 -2
  56. data/install/tools/Dart +16 -0
  57. data/install/tools/Dart.bat +9 -0
  58. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +0 -0
  59. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +0 -0
  60. data/lib/cosmos/core_ext/time.rb +8 -8
  61. data/lib/cosmos/dart/.rspec +1 -0
  62. data/lib/cosmos/dart/Gemfile +69 -0
  63. data/lib/cosmos/dart/Rakefile +7 -0
  64. data/lib/cosmos/dart/app/assets/config/manifest.js +4 -0
  65. data/lib/cosmos/dart/app/assets/images/.keep +0 -0
  66. data/lib/cosmos/dart/app/assets/javascripts/application.js +13 -0
  67. data/lib/cosmos/dart/app/assets/javascripts/cable.js +13 -0
  68. data/lib/cosmos/dart/app/assets/stylesheets/application.css.scss +15 -0
  69. data/lib/cosmos/dart/app/channels/application_cable/channel.rb +4 -0
  70. data/lib/cosmos/dart/app/channels/application_cable/connection.rb +4 -0
  71. data/lib/cosmos/dart/app/controllers/application_controller.rb +3 -0
  72. data/lib/cosmos/dart/app/helpers/application_helper.rb +2 -0
  73. data/lib/cosmos/dart/app/jobs/application_job.rb +2 -0
  74. data/lib/cosmos/dart/app/mailers/application_mailer.rb +4 -0
  75. data/lib/cosmos/dart/app/models/application_record.rb +3 -0
  76. data/lib/cosmos/dart/app/models/item.rb +6 -0
  77. data/lib/cosmos/dart/app/models/item_to_decom_table_mapping.rb +9 -0
  78. data/lib/cosmos/dart/app/models/packet.rb +4 -0
  79. data/lib/cosmos/dart/app/models/packet_config.rb +7 -0
  80. data/lib/cosmos/dart/app/models/packet_log.rb +3 -0
  81. data/lib/cosmos/dart/app/models/packet_log_entry.rb +41 -0
  82. data/lib/cosmos/dart/app/models/system_config.rb +2 -0
  83. data/lib/cosmos/dart/app/models/target.rb +4 -0
  84. data/lib/cosmos/dart/app/views/layouts/application.html.erb +14 -0
  85. data/lib/cosmos/dart/app/views/layouts/mailer.html.erb +13 -0
  86. data/lib/cosmos/dart/app/views/layouts/mailer.text.erb +1 -0
  87. data/lib/cosmos/dart/bin/bundle +3 -0
  88. data/lib/cosmos/dart/bin/rails +4 -0
  89. data/lib/cosmos/dart/bin/rake +4 -0
  90. data/lib/cosmos/dart/bin/setup +34 -0
  91. data/lib/cosmos/dart/bin/update +29 -0
  92. data/lib/cosmos/dart/config.ru +5 -0
  93. data/lib/cosmos/dart/config/application.rb +29 -0
  94. data/lib/cosmos/dart/config/boot.rb +3 -0
  95. data/lib/cosmos/dart/config/cable.yml +9 -0
  96. data/lib/cosmos/dart/config/database.yml +23 -0
  97. data/lib/cosmos/dart/config/environment.rb +5 -0
  98. data/lib/cosmos/dart/config/environments/development.rb +62 -0
  99. data/lib/cosmos/dart/config/environments/production.rb +84 -0
  100. data/lib/cosmos/dart/config/environments/test.rb +42 -0
  101. data/lib/cosmos/dart/config/initializers/application_controller_renderer.rb +6 -0
  102. data/lib/cosmos/dart/config/initializers/assets.rb +12 -0
  103. data/lib/cosmos/dart/config/initializers/backtrace_silencers.rb +7 -0
  104. data/lib/cosmos/dart/config/initializers/cookies_serializer.rb +5 -0
  105. data/lib/cosmos/dart/config/initializers/filter_parameter_logging.rb +4 -0
  106. data/lib/cosmos/dart/config/initializers/inflections.rb +16 -0
  107. data/lib/cosmos/dart/config/initializers/mime_types.rb +4 -0
  108. data/lib/cosmos/dart/config/initializers/new_framework_defaults.rb +25 -0
  109. data/lib/cosmos/dart/config/initializers/session_store.rb +3 -0
  110. data/lib/cosmos/dart/config/initializers/wrap_parameters.rb +14 -0
  111. data/lib/cosmos/dart/config/locales/en.yml +23 -0
  112. data/lib/cosmos/dart/config/puma.rb +47 -0
  113. data/lib/cosmos/dart/config/routes.rb +3 -0
  114. data/lib/cosmos/dart/config/secrets.yml +22 -0
  115. data/lib/cosmos/dart/db/migrate/20170406172907_create_targets.rb +8 -0
  116. data/lib/cosmos/dart/db/migrate/20170406172927_create_packets.rb +10 -0
  117. data/lib/cosmos/dart/db/migrate/20170406172937_create_packet_logs.rb +9 -0
  118. data/lib/cosmos/dart/db/migrate/20170406172943_create_packet_log_entries.rb +16 -0
  119. data/lib/cosmos/dart/db/migrate/20170406183500_change_packet_log_entries_primary_key.rb +5 -0
  120. data/lib/cosmos/dart/db/migrate/20170407153618_add_unique_requirements.rb +7 -0
  121. data/lib/cosmos/dart/db/migrate/20170511155447_add_meta_id_to_packet_log_entries.rb +6 -0
  122. data/lib/cosmos/dart/db/migrate/20170523185056_rename_received_time_and_add_is_tlm_to_packet_log_entries.rb +7 -0
  123. data/lib/cosmos/dart/db/migrate/20170525201157_create_items.rb +10 -0
  124. data/lib/cosmos/dart/db/migrate/20170525201315_create_system_configs.rb +9 -0
  125. data/lib/cosmos/dart/db/migrate/20170525201624_create_packet_configs.rb +11 -0
  126. data/lib/cosmos/dart/db/migrate/20170525201745_create_item_to_decom_table_mappings.rb +12 -0
  127. data/lib/cosmos/dart/db/migrate/20170525201939_create_decom_tables.rb +12 -0
  128. data/lib/cosmos/dart/db/migrate/20170525202051_add_decom_state_to_packet_log_entry.rb +5 -0
  129. data/lib/cosmos/dart/db/migrate/20170913160409_update_items.rb +6 -0
  130. data/lib/cosmos/dart/db/migrate/20170913160558_update_item_to_decom_table_mapping.rb +11 -0
  131. data/lib/cosmos/dart/db/migrate/20170913160916_udpate_decom_table.rb +6 -0
  132. data/lib/cosmos/dart/db/migrate/20170913212026_add_ready_to_packet_configs.rb +5 -0
  133. data/lib/cosmos/dart/db/migrate/20170913223556_modify_tables.rb +9 -0
  134. data/lib/cosmos/dart/db/migrate/20170914215744_modify_mapping_table.rb +6 -0
  135. data/lib/cosmos/dart/db/migrate/20170919201433_add_system_config_id_to_packet_config.rb +11 -0
  136. data/lib/cosmos/dart/db/migrate/20170919210307_add_max_table_index_to_packet_configs.rb +5 -0
  137. data/lib/cosmos/dart/db/migrate/20171215225546_add_ready_to_packet_log_entries.rb +5 -0
  138. data/lib/cosmos/dart/db/migrate/20180116214338_add_index_for_ple_ready_to_packet_log_entries.rb +5 -0
  139. data/lib/cosmos/dart/db/schema.rb +103 -0
  140. data/lib/cosmos/dart/db/seeds.rb +7 -0
  141. data/lib/cosmos/dart/examples/dart_decom_client.rb +45 -0
  142. data/lib/cosmos/dart/examples/dart_stream_client.rb +93 -0
  143. data/lib/cosmos/dart/lib/dart_common.rb +749 -0
  144. data/lib/cosmos/dart/lib/dart_database_cleaner.rb +172 -0
  145. data/lib/cosmos/dart/lib/dart_decom_query.rb +184 -0
  146. data/lib/cosmos/dart/lib/dart_decommutator.rb +235 -0
  147. data/lib/cosmos/dart/lib/dart_importer.rb +154 -0
  148. data/lib/cosmos/dart/lib/dart_logging.rb +50 -0
  149. data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +139 -0
  150. data/lib/cosmos/dart/lib/dart_reducer_manager.rb +85 -0
  151. data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +263 -0
  152. data/lib/cosmos/dart/lib/dart_tcpip_server_interface.rb +142 -0
  153. data/lib/cosmos/dart/processes/dart.rb +145 -0
  154. data/lib/cosmos/dart/processes/dart_decom_server.rb +39 -0
  155. data/lib/cosmos/dart/processes/dart_import.rb +63 -0
  156. data/lib/cosmos/dart/processes/dart_ingester.rb +92 -0
  157. data/lib/cosmos/dart/processes/dart_reducer.rb +27 -0
  158. data/lib/cosmos/dart/processes/dart_stream_server.rb +31 -0
  159. data/lib/cosmos/dart/processes/dart_worker.rb +37 -0
  160. data/lib/cosmos/dart/spec/dart/dart_common_spec.rb +333 -0
  161. data/lib/cosmos/dart/spec/dart/dart_database_cleaner_spec.rb +455 -0
  162. data/lib/cosmos/dart/spec/dart/dart_decom_query_spec.rb +153 -0
  163. data/lib/cosmos/dart/spec/dart/dart_decommutator_spec.rb +336 -0
  164. data/lib/cosmos/dart/spec/dart/dart_importer_spec.rb +83 -0
  165. data/lib/cosmos/dart/spec/dart/dart_logging_spec.rb +30 -0
  166. data/lib/cosmos/dart/spec/dart/dart_packet_log_writer_spec.rb +149 -0
  167. data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +289 -0
  168. data/lib/cosmos/dart/spec/dart/dart_tcpip_server_interface_spec.rb +241 -0
  169. data/lib/cosmos/dart/spec/rails_helper.rb +60 -0
  170. data/lib/cosmos/dart/spec/spec_helper.rb +139 -0
  171. data/lib/cosmos/gui/dialogs/about_dialog.rb +1 -1
  172. data/lib/cosmos/gui/dialogs/dart_dialog.rb +60 -0
  173. data/lib/cosmos/gui/dialogs/legal_dialog.rb +1 -0
  174. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +0 -3
  175. data/lib/cosmos/gui/qt.rb +10 -1
  176. data/lib/cosmos/gui/text/completion.rb +10 -9
  177. data/lib/cosmos/gui/text/completion_text_edit.rb +16 -14
  178. data/lib/cosmos/gui/text/ruby_editor.rb +2 -2
  179. data/lib/cosmos/gui/widgets/dart_frame.rb +142 -0
  180. data/lib/cosmos/gui/widgets/dart_meta_frame.rb +119 -0
  181. data/lib/cosmos/gui/widgets/packet_log_frame.rb +42 -12
  182. data/lib/cosmos/interfaces/interface.rb +1 -2
  183. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +26 -8
  184. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +8 -2
  185. data/lib/cosmos/interfaces/protocols/protocol.rb +2 -1
  186. data/lib/cosmos/interfaces/protocols/template_protocol.rb +1 -1
  187. data/lib/cosmos/interfaces/stream_interface.rb +1 -0
  188. data/lib/cosmos/interfaces/tcpip_server_interface.rb +2 -3
  189. data/lib/cosmos/io/json_drb_object.rb +1 -1
  190. data/lib/cosmos/io/json_rpc.rb +2 -1
  191. data/lib/cosmos/io/win32_serial_driver.rb +2 -9
  192. data/lib/cosmos/packet_logs/packet_log_writer.rb +1 -1
  193. data/lib/cosmos/packets/packet.rb +22 -12
  194. data/lib/cosmos/packets/packet_config.rb +2 -1
  195. data/lib/cosmos/packets/packet_item.rb +26 -24
  196. data/lib/cosmos/packets/parsers/macro_parser.rb +5 -2
  197. data/lib/cosmos/packets/parsers/packet_item_parser.rb +35 -17
  198. data/lib/cosmos/packets/parsers/packet_parser.rb +3 -10
  199. data/lib/cosmos/packets/parsers/xtce_converter.rb +21 -35
  200. data/lib/cosmos/packets/parsers/xtce_parser.rb +54 -46
  201. data/lib/cosmos/packets/structure.rb +10 -2
  202. data/lib/cosmos/packets/structure_item.rb +22 -8
  203. data/lib/cosmos/processors/statistics_processor.rb +2 -0
  204. data/lib/cosmos/script/api_shared.rb +13 -12
  205. data/lib/cosmos/script/cmd_tlm_server.rb +4 -0
  206. data/lib/cosmos/script/commands.rb +3 -15
  207. data/lib/cosmos/script/script.rb +69 -23
  208. data/lib/cosmos/streams/tcpip_client_stream.rb +2 -2
  209. data/lib/cosmos/system/system.rb +42 -25
  210. data/lib/cosmos/system/target.rb +6 -2
  211. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +177 -36
  212. data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +3 -2
  213. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +34 -8
  214. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +80 -25
  215. data/lib/cosmos/tools/cmd_tlm_server/api.rb +19 -4
  216. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +15 -14
  217. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +15 -9
  218. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +1 -9
  219. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +1 -6
  220. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +1 -3
  221. data/lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb +84 -7
  222. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +0 -1
  223. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +1 -5
  224. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +3 -2
  225. data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +159 -27
  226. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +1 -1
  227. data/lib/cosmos/tools/config_editor/config_editor.rb +17 -52
  228. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +0 -5
  229. data/lib/cosmos/tools/data_viewer/data_viewer.rb +111 -0
  230. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +31 -18
  231. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +12 -3
  232. data/lib/cosmos/tools/script_runner/script_runner.rb +27 -14
  233. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +104 -37
  234. data/lib/cosmos/tools/table_manager/table_config.rb +1 -1
  235. data/lib/cosmos/tools/table_manager/table_item_parser.rb +4 -2
  236. data/lib/cosmos/tools/table_manager/table_manager.rb +0 -5
  237. data/lib/cosmos/tools/table_manager/table_manager_core.rb +0 -1
  238. data/lib/cosmos/tools/test_runner/test.rb +1 -3
  239. data/lib/cosmos/tools/test_runner/test_runner.rb +26 -15
  240. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +290 -137
  241. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +122 -25
  242. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +67 -0
  243. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +28 -0
  244. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +36 -0
  245. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +42 -3
  246. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +88 -14
  247. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +2 -5
  248. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +2 -6
  249. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +74 -18
  250. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +3 -7
  251. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +159 -0
  252. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +49 -2
  253. data/lib/cosmos/tools/tlm_viewer/screen.rb +3 -0
  254. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +0 -2
  255. data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
  256. data/lib/cosmos/tools/tlm_viewer/widgets/backgroundbutton_widget.rb +54 -0
  257. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +5 -5
  258. data/lib/cosmos/top_level.rb +1 -0
  259. data/lib/cosmos/utilities/crc.rb +3 -0
  260. data/lib/cosmos/utilities/csv.rb +1 -0
  261. data/lib/cosmos/utilities/message_log.rb +2 -1
  262. data/lib/cosmos/utilities/simulated_target.rb +8 -8
  263. data/lib/cosmos/version.rb +5 -5
  264. data/lib/cosmos/win32/win32.rb +4 -10
  265. data/run_gui_tests.bat +2 -1
  266. data/spec/config/config_parser_spec.rb +4 -4
  267. data/spec/core_ext/array_spec.rb +1 -1
  268. data/spec/core_ext/exception_spec.rb +12 -12
  269. data/spec/core_ext/file_spec.rb +6 -6
  270. data/spec/core_ext/hash_spec.rb +1 -1
  271. data/spec/core_ext/socket_spec.rb +2 -2
  272. data/spec/core_ext/string_spec.rb +13 -13
  273. data/spec/core_ext/time_spec.rb +0 -2
  274. data/spec/gui/utilities/script_module_gui_spec.rb +3 -3
  275. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +6 -6
  276. data/spec/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +4 -0
  277. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +6 -2
  278. data/spec/interfaces/interface_spec.rb +0 -1
  279. data/spec/interfaces/linc_interface_spec.rb +0 -5
  280. data/spec/interfaces/protocols/crc_protocol_spec.rb +201 -85
  281. data/spec/interfaces/protocols/fixed_protocol_spec.rb +33 -9
  282. data/spec/interfaces/protocols/length_protocol_spec.rb +1 -1
  283. data/spec/interfaces/protocols/override_protocol_spec.rb +6 -2
  284. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +1 -5
  285. data/spec/interfaces/protocols/template_protocol_spec.rb +0 -1
  286. data/spec/interfaces/simulated_target_interface_spec.rb +5 -5
  287. data/spec/interfaces/udp_interface_spec.rb +2 -4
  288. data/spec/io/buffered_file_spec.rb +8 -12
  289. data/spec/io/json_drb_spec.rb +9 -9
  290. data/spec/io/json_rpc_spec.rb +4 -4
  291. data/spec/io/raw_logger_spec.rb +4 -3
  292. data/spec/packet_logs/packet_log_reader_spec.rb +3 -6
  293. data/spec/packet_logs/packet_log_writer_spec.rb +4 -4
  294. data/spec/packets/binary_accessor_spec.rb +5 -8
  295. data/spec/packets/commands_spec.rb +2 -2
  296. data/spec/packets/limits_spec.rb +2 -2
  297. data/spec/packets/packet_config_spec.rb +12 -0
  298. data/spec/packets/packet_item_limits_spec.rb +1 -1
  299. data/spec/packets/packet_item_spec.rb +9 -9
  300. data/spec/packets/packet_spec.rb +15 -5
  301. data/spec/packets/parsers/packet_item_parser_spec.rb +27 -0
  302. data/spec/packets/parsers/xtce_parser_spec.rb +27 -30
  303. data/spec/packets/structure_spec.rb +2 -1
  304. data/spec/packets/telemetry_spec.rb +3 -5
  305. data/spec/processors/statistics_processor_spec.rb +35 -0
  306. data/spec/script/cmd_tlm_server_spec.rb +4 -21
  307. data/spec/script/commands_disconnect_spec.rb +46 -58
  308. data/spec/script/commands_spec.rb +40 -61
  309. data/spec/script/limits_spec.rb +1 -21
  310. data/spec/script/script_spec.rb +32 -41
  311. data/spec/script/scripting_spec.rb +166 -185
  312. data/spec/script/telemetry_spec.rb +10 -5
  313. data/spec/script/tools_spec.rb +2 -24
  314. data/spec/spec_helper.rb +11 -5
  315. data/spec/system/system_spec.rb +17 -12
  316. data/spec/tools/cmd_tlm_server/api_spec.rb +21 -10
  317. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -16
  318. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +0 -1
  319. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +16 -27
  320. data/spec/tools/cmd_tlm_server/commanding_spec.rb +2 -6
  321. data/spec/tools/cmd_tlm_server/connections_spec.rb +0 -4
  322. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +13 -13
  323. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +5 -9
  324. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +11 -3
  325. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +0 -4
  326. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +5 -5
  327. data/spec/tools/cmd_tlm_server/routers_spec.rb +5 -9
  328. data/spec/tools/table_manager/table_config_spec.rb +0 -1
  329. data/spec/tools/table_manager/tablemanager_core_spec.rb +23 -23
  330. data/spec/tools/tlm_viewer/tlm_viewer_config_spec.rb +6 -4
  331. data/spec/top_level/top_level_spec.rb +9 -9
  332. data/spec/utilities/csv_spec.rb +2 -12
  333. data/spec/utilities/logger_spec.rb +6 -6
  334. data/spec/utilities/message_log_spec.rb +3 -11
  335. data/tasks/gemfile_stats.rake +2 -2
  336. metadata +167 -60
@@ -1,6 +1,6 @@
1
1
  # encoding: ascii-8bit
2
2
 
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
3
+ # Copyright 2018 Ball Aerospace & Technologies Corp.
4
4
  # All Rights Reserved.
5
5
  #
6
6
  # This program is free software; you can modify and/or redistribute it
@@ -9,6 +9,7 @@
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
11
  require 'cosmos'
12
+ require 'cosmos/io/json_drb_object'
12
13
 
13
14
  module Cosmos
14
15
 
@@ -16,6 +17,8 @@ module Cosmos
16
17
  class TlmExtractorConfig
17
18
 
18
19
  VALUE_TYPES = [:RAW, :CONVERTED, :FORMATTED, :WITH_UNITS]
20
+ DART_REDUCTION_OPTIONS = [:NONE, :MINUTE, :HOUR, :DAY]
21
+ DART_REDUCED_TYPES = [:AVG, :MIN, :MAX, :STDDEV]
19
22
  COLUMN_MODES = [:NORMAL, :SHARE_ALL_COLUMNS, :SHARE_INDIV_COLUMNS, :FULL_COLUMN_NAMES]
20
23
  DEFAULT_UNIQUE_IGNORED = ['RECEIVED_TIMEFORMATTED', 'RECEIVED_TIMESECONDS']
21
24
  ITEM = 'ITEM'.freeze
@@ -28,7 +31,9 @@ module Cosmos
28
31
  attr_accessor :delimiter
29
32
  attr_accessor :downsample_seconds
30
33
  attr_accessor :print_filenames_to_output
34
+ attr_accessor :mode
31
35
  attr_reader :items
36
+ attr_reader :normal_items
32
37
  attr_reader :shared_indiv_columns
33
38
 
34
39
  attr_accessor :output_filename
@@ -38,6 +43,7 @@ module Cosmos
38
43
  @output_filename = nil
39
44
  @input_filenames = []
40
45
  @output_file = nil
46
+ @mode = :log_file
41
47
  reset_settings()
42
48
  clear_items()
43
49
  clear_shared_columns()
@@ -61,15 +67,18 @@ module Cosmos
61
67
  @columns_hash = {}
62
68
  @previous_row = nil
63
69
  @items = []
70
+ @normal_items = []
64
71
  @text_items = []
65
72
  end
66
73
 
67
- def add_item(target_name, packet_name, item_name, value_type = :CONVERTED)
74
+ def add_item(target_name, packet_name, item_name, value_type = :CONVERTED, dart_reduction = :NONE, dart_reduced_type = :AVG)
68
75
  target_name = target_name.upcase
69
76
  packet_name = packet_name.upcase
70
77
  item_name = item_name.upcase
71
78
 
72
79
  raise "Unknown Value Type: #{value_type}" unless VALUE_TYPES.include?(value_type)
80
+ raise "Unknown Dart Reduction: #{dart_reduction}" unless DART_REDUCTION_OPTIONS.include?(dart_reduction)
81
+ raise "Unknown Dart Reduced Type: #{dart_reduced_type}" unless DART_REDUCED_TYPES.include?(dart_reduced_type)
73
82
 
74
83
  hash_index = item_name + ' ' + value_type.to_s
75
84
 
@@ -78,19 +87,20 @@ module Cosmos
78
87
  elsif @column_mode == :SHARE_INDIV_COLUMNS and @shared_indiv_columns.include?(hash_index) and @columns_hash[hash_index]
79
88
  column_index = @columns_hash[hash_index]
80
89
  else
81
- @columns << [item_name, value_type, nil, target_name, packet_name]
90
+ @columns << [item_name, value_type, nil, target_name, packet_name, dart_reduction, dart_reduced_type]
82
91
  column_index = @columns.length - 1
83
92
  @columns_hash[hash_index] = column_index
84
93
  end
85
94
  @packet_to_column_mapping[target_name] ||= {}
86
95
  @packet_to_column_mapping[target_name][packet_name] ||= []
87
96
  @packet_to_column_mapping[target_name][packet_name] << column_index
88
- @items << [ITEM, target_name, packet_name, item_name, value_type]
97
+ @items << [ITEM, target_name, packet_name, item_name, value_type, dart_reduction, dart_reduced_type]
98
+ @normal_items << @items[-1]
89
99
  end
90
100
 
91
101
  def add_text(column_name, text)
92
- @columns << [column_name, nil, nil, nil, nil]
93
- @items << [TEXT, column_name, text, nil, nil]
102
+ @columns << [column_name, nil, nil, nil, nil, nil, nil]
103
+ @items << [TEXT, column_name, text, nil, nil, nil, nil]
94
104
  @text_items << [@columns.length - 1, text]
95
105
  end
96
106
 
@@ -116,30 +126,40 @@ module Cosmos
116
126
  end
117
127
 
118
128
  def column_names
119
- if @column_mode == :FULL_COLUMN_NAMES
129
+ if @column_mode == :FULL_COLUMN_NAMES or @mode == :dart
120
130
  col_offset = 0
121
- row = Array.new(@columns.length)
131
+ cnames = Array.new(@columns.length)
122
132
  else
123
133
  col_offset = 2
124
- row = Array.new(@columns.length + 2)
125
- row[0] = 'TARGET'
126
- row[1] = 'PACKET'
134
+ cnames = Array.new(@columns.length + 2)
135
+ cnames[0] = 'TARGET'
136
+ cnames[1] = 'PACKET'
127
137
  end
128
138
  index = 0
129
- @columns.each do |column_name, column_value_type, item_data_type, target_name, packet_name|
139
+ @columns.each do |column_name, column_value_type, item_data_type, target_name, packet_name, dart_reduction, dart_reduced_type|
130
140
  if @column_mode == :FULL_COLUMN_NAMES and target_name and packet_name
131
141
  column_name = [target_name, packet_name, column_name].join(' ')
132
142
  end
133
143
  case column_value_type
134
144
  when :CONVERTED, nil
135
- row[index + col_offset] = column_name
145
+ cname = column_name
136
146
  else
137
- row[index + col_offset] = (column_name + '(' + column_value_type.to_s + ')')
147
+ cname = (column_name + ' (' + column_value_type.to_s + ')')
138
148
  end
149
+ case dart_reduction
150
+ when :NONE, nil
151
+ # Nothing
152
+ else
153
+ cname = cname + ' [' + dart_reduction.to_s + ' ' + dart_reduced_type.to_s + ' ]'
154
+ end
155
+ if @mode == :dart and target_name and packet_name
156
+ cnames[index + col_offset] = cname + " TIMESTAMP"
157
+ index += 1
158
+ end
159
+ cnames[index + col_offset] = cname
139
160
  index += 1
140
161
  end
141
-
142
- row
162
+ cnames
143
163
  end
144
164
 
145
165
  def restore(filename)
@@ -209,12 +229,14 @@ module Cosmos
209
229
 
210
230
  when 'ITEM'
211
231
  # Expect 3 or 4 parameters
212
- parser.verify_num_parameters(3, 4, "ITEM <Target Name> <Packet Name> <Item Name> <Data Type (optional)>")
232
+ parser.verify_num_parameters(3, 6, "ITEM <Target Name> <Packet Name> <Item Name> <Data Type (optional)> <Dart Reduction (optional)> <Dart Reduced Type (optional)>")
213
233
  target_name = params[0].upcase
214
234
  packet_name = params[1].upcase
215
235
  item_name = params[2].upcase
216
236
  if params.length == 3
217
237
  value_type = :CONVERTED
238
+ dart_reduction = :NONE
239
+ dart_reduced_type = :AVG
218
240
  else
219
241
  value_type = params[3].upcase
220
242
  case value_type
@@ -223,8 +245,33 @@ module Cosmos
223
245
  else
224
246
  raise "Unknown Value Type: #{value_type}"
225
247
  end
248
+
249
+ if params.length == 4
250
+ dart_reduction = :NONE
251
+ dart_reduced_type = :AVG
252
+ else
253
+ dart_reduction = params[4].upcase
254
+ case dart_reduction
255
+ when 'NONE', 'MINUTE', 'HOUR', 'DAY'
256
+ dart_reduction = dart_reduction.intern
257
+ else
258
+ raise "Unknown Dart Reduction: #{dart_reduction}"
259
+ end
260
+
261
+ if params.length == 5
262
+ dart_reduced_type = :AVG
263
+ else
264
+ dart_reduced_type = params[5].upcase
265
+ case dart_reduced_type
266
+ when 'AVG', 'MIN', 'MAX', 'STDDEV'
267
+ dart_reduced_type = dart_reduced_type.intern
268
+ else
269
+ raise "Unknown Dart Reduced Type: #{dart_reduced_type}"
270
+ end
271
+ end
272
+ end
226
273
  end
227
- add_item(target_name, packet_name, item_name, value_type)
274
+ add_item(target_name, packet_name, item_name, value_type, dart_reduction, dart_reduced_type)
228
275
 
229
276
  when 'TEXT'
230
277
  # Expect 2 parameters
@@ -287,12 +334,16 @@ module Cosmos
287
334
  end
288
335
  end
289
336
  end
290
- @items.each do |item_type, target_name_or_column_name, packet_name_or_text, item_name, value_type|
337
+ @items.each do |item_type, target_name_or_column_name, packet_name_or_text, item_name, value_type, dart_reduction, dart_reduced_type|
291
338
  if item_type == ITEM
292
- if value_type != :CONVERTED
293
- file.puts "#{item_type} #{target_name_or_column_name} #{packet_name_or_text} #{item_name} #{value_type}"
294
- else
339
+ if value_type == :CONVERTED and dart_reduction == :NONE
295
340
  file.puts "#{item_type} #{target_name_or_column_name} #{packet_name_or_text} #{item_name}"
341
+ else
342
+ if dart_reduction == :NONE
343
+ file.puts "#{item_type} #{target_name_or_column_name} #{packet_name_or_text} #{item_name} #{value_type}"
344
+ else
345
+ file.puts "#{item_type} #{target_name_or_column_name} #{packet_name_or_text} #{item_name} #{value_type} #{dart_reduction} #{dart_reduced_type}"
346
+ end
296
347
  end
297
348
  else
298
349
  file.puts "#{item_type} \"#{target_name_or_column_name}\" \"#{packet_name_or_text}\""
@@ -312,7 +363,7 @@ module Cosmos
312
363
  # Open the output file
313
364
  @output_file = File.open(@output_filename, 'w')
314
365
 
315
- if @print_filenames_to_output
366
+ if @print_filenames_to_output and @mode != :dart
316
367
  # Print input filenames to output file
317
368
  @input_filenames.each do |input_filename|
318
369
  if @matlab_header
@@ -378,13 +429,13 @@ module Cosmos
378
429
 
379
430
  # Add each packet item to the row
380
431
  packet_mapping.each do |column_index|
381
- column_name, column_value_type, item_data_type, target_name, packet_name = @columns[column_index]
432
+ column_name, column_value_type, item_data_type, target_name, packet_name, dart_reduction, dart_reduced_type = @columns[column_index]
382
433
 
383
434
  # Lookup item data type on first use
384
435
  unless item_data_type
385
436
  _, item = System.telemetry.packet_and_item(packet.target_name, packet.packet_name, column_name)
386
437
  item_data_type = item.data_type
387
- @columns[column_index] = [column_name, column_value_type, item_data_type, target_name, packet_name]
438
+ @columns[column_index] = [column_name, column_value_type, item_data_type, target_name, packet_name, dart_reduction, dart_reduced_type]
388
439
  end
389
440
 
390
441
  if item_data_type == :BLOCK
@@ -436,6 +487,52 @@ module Cosmos
436
487
  end # if target_mapping
437
488
  end
438
489
 
490
+ def process_dart(dart_results)
491
+ row_index = 0
492
+ while (true)
493
+ row = Array.new(@normal_items.length * 2 + @text_items.length)
494
+ column_index = 0
495
+ found_data = false
496
+ @items.each do |item_type, target_name_or_column_name, packet_name_or_text, item_name, value_type, dart_reduction, dart_reduced_type|
497
+ if item_type == TEXT
498
+ row[column_index] = packet_name_or_text.gsub('%', (row_index + 2).to_s)
499
+ column_index += 1
500
+ else
501
+ value_type = :CONVERTED if !value_type or value_type != :RAW
502
+ query_string = "#{target_name_or_column_name} #{packet_name_or_text} #{item_name} #{value_type} #{dart_reduction} #{dart_reduced_type}"
503
+ results = dart_results[query_string]
504
+ results_row = results[row_index]
505
+ if results_row
506
+ found_data = true
507
+ row[column_index] = Time.at(results_row[1], 0).strftime("%Y-%m-%d %H:%M:%S") << ".#{results_row[2]}"
508
+ column_index += 1
509
+ row[column_index] = results_row[0]
510
+ column_index += 1
511
+ else
512
+ column_index += 2
513
+ end
514
+ end
515
+ end
516
+
517
+ break unless found_data
518
+
519
+ # Output the row
520
+ if @column_mode != :FULL_COLUMN_NAMES and @mode != :dart
521
+ @output_file.print packet.target_name
522
+ @output_file.print @delimiter
523
+ @output_file.print packet.packet_name
524
+ end
525
+ row.each_with_index do |value, index|
526
+ if (@column_mode != :FULL_COLUMN_NAMES and @mode != :dart) or index != 0
527
+ @output_file.print @delimiter
528
+ end
529
+ @output_file.print value if value
530
+ end
531
+ @output_file.puts ""
532
+ row_index += 1
533
+ end
534
+ end
535
+
439
536
  end # class TlmExtractorConfig
440
537
 
441
538
  end # module Cosmos
@@ -55,6 +55,73 @@ module Cosmos
55
55
  configs.each { |config| config.close_output_file }
56
56
  end # def process
57
57
 
58
+ def process_dart_batch(batch_name, output_dir, output_extension, config_filenames, time_start = nil, time_end = nil, meta_filters = [], &block)
59
+ configs = []
60
+ config_filenames.each_with_index do |config_filename, config_file_index|
61
+ configs << TlmExtractorConfig.new(config_filename)
62
+ base = File.basename(config_filename)
63
+ extension = File.extname(base)
64
+ filename_no_extension = base[0..-(extension.length + 1)]
65
+ configs[-1].output_filename = File.join(output_dir, batch_name.tr(' ', '_') + '_' + filename_no_extension.tr(' ', '_') + output_extension)
66
+ end
67
+ process_dart(configs, time_start, time_end, meta_filters, &block)
68
+ end
69
+
70
+ def process_dart(configs, time_start = nil, time_end = nil, meta_filters = [])
71
+ Cosmos.set_working_dir do
72
+ items = []
73
+ configs.each { |config| config.mode = :dart; items.concat(config.normal_items); config.open_output_file }
74
+ items.uniq!
75
+
76
+ time_start = Time.utc(1970, 1, 1) unless time_start
77
+ time_end = Time.now unless time_end
78
+
79
+ results = {}
80
+ begin
81
+ server = JsonDRbObject.new(System.connect_hosts['DART_DECOM'], System.ports['DART_DECOM'])
82
+
83
+ index = 0
84
+ items.each do |item_type, target_name, packet_name, item_name, value_type, dart_reduction, dart_reduced_type|
85
+ value_type = :CONVERTED if !value_type or value_type != :RAW
86
+ # TODO: Support FORMATTED and WITH_UNITS by iterating and modifying results
87
+ begin
88
+ query_string = "#{target_name} #{packet_name} #{item_name} #{value_type} #{dart_reduction} #{dart_reduced_type}"
89
+ yield(index.to_f / items.length, "Querying #{query_string}") if block_given?
90
+ request = {}
91
+ request['start_time_sec'] = time_start.tv_sec
92
+ request['start_time_usec'] = time_start.tv_usec
93
+ request['end_time_sec'] = time_end.tv_sec
94
+ request['end_time_usec'] = time_end.tv_usec
95
+ request['item'] = [target_name, packet_name, item_name]
96
+ request['reduction'] = dart_reduction.to_s
97
+ request['cmd_tlm'] = 'TLM'
98
+ request['offset'] = 0
99
+ request['limit'] = 10000
100
+ if dart_reduction == :NONE
101
+ request['value_type'] = value_type.to_s
102
+ else
103
+ request['value_type'] = value_type.to_s + "_#{dart_reduced_type}"
104
+ end
105
+ request['meta_filters'] = meta_filters if meta_filters.length > 0
106
+ result = server.query(request)
107
+ results[query_string] = result
108
+ index += 1
109
+ yield(index.to_f / items.length, " Received #{result.length} values") if block_given?
110
+ rescue Exception => error
111
+ yield(index.to_f / items.length, "Error querying #{query_string} : #{error.class}:#{error.message}\n#{error.backtrace.join("\n")}\n") if block_given?
112
+ return # Bail out because something bad happened
113
+ end
114
+ end
115
+
116
+ configs.each { |config| config.process_dart(results) }
117
+ ensure
118
+ server.disconnect if defined? server
119
+ end
120
+ end # Cosmos.set_working_dir
121
+ ensure
122
+ configs.each { |config| config.close_output_file }
123
+ end
124
+
58
125
  end # class TlmExtractorProcessor
59
126
 
60
127
  end # module Cosmos
@@ -95,6 +95,16 @@ module Cosmos
95
95
  @value_type.set_current(data_object.value_type.to_s) if data_object.value_type
96
96
  local_layout.addWidget(@value_type)
97
97
 
98
+ # Chooser for dart reduction
99
+ @dart_reduction = ComboboxChooser.new(self, '*DART Reduction:', HousekeepingDataObject::DART_REDUCTIONS.map {|x| x.to_s})
100
+ @dart_reduction.set_current(data_object.dart_reduction.to_s) if data_object.dart_reduction
101
+ local_layout.addWidget(@dart_reduction)
102
+
103
+ # Chooser for dart reduced type
104
+ @dart_reduced_type = ComboboxChooser.new(self, '*DART Reduced Type:', HousekeepingDataObject::DART_REDUCED_TYPES.map {|x| x.to_s})
105
+ @dart_reduced_type.set_current(data_object.dart_reduced_type.to_s) if data_object.dart_reduced_type
106
+ local_layout.addWidget(@dart_reduced_type)
107
+
98
108
  # Chooser for analysis type
99
109
  @analysis = ComboboxChooser.new(self, '*Analysis Type:', HousekeepingDataObject::ANALYSIS_TYPES.map {|x| x.to_s})
100
110
  @analysis.set_current(data_object.analysis.to_s) if data_object.analysis
@@ -148,6 +158,8 @@ module Cosmos
148
158
  data_object.formatted_time_item_name = formatted_time_item_name
149
159
  end
150
160
  data_object.value_type = @value_type.symbol
161
+ data_object.dart_reduction = @dart_reduction.symbol
162
+ data_object.dart_reduced_type = @dart_reduced_type.symbol
151
163
  data_object.analysis = @analysis.symbol
152
164
  data_object.analysis_samples = @analysis_samples.value
153
165
  if @show_limits_lines
@@ -182,6 +194,14 @@ module Cosmos
182
194
  value_types.delete(data_object.value_type.to_s)
183
195
  value_types.unshift(data_object.value_type.to_s)
184
196
  @value_type.update_items(value_types, false)
197
+ dart_reductions = HousekeepingDataObject::DART_REDUCTIONS.map {|x| x.to_s}
198
+ dart_reductions.delete(data_object.dart_reduction.to_s)
199
+ dart_reductions.unshift(data_object.dart_reduction.to_s)
200
+ @dart_reduction.update_items(dart_reductions, false)
201
+ dart_reduced_types = HousekeepingDataObject::DART_REDUCED_TYPES.map {|x| x.to_s}
202
+ dart_reduced_types.delete(data_object.dart_reduced_type.to_s)
203
+ dart_reduced_types.unshift(data_object.dart_reduced_type.to_s)
204
+ @dart_reduced_type.update_items(dart_reduced_types, false)
185
205
 
186
206
  packet, item = System.telemetry.packet_and_item(data_object.target_name,
187
207
  data_object.packet_name,
@@ -204,6 +224,14 @@ module Cosmos
204
224
  value_types.delete(data_object.value_type.to_s)
205
225
  value_types.unshift(data_object.value_type.to_s)
206
226
  @value_type.update_items(value_types, false)
227
+ dart_reductions = HousekeepingDataObject::DART_REDUCTIONS.map {|x| x.to_s}
228
+ dart_reductions.delete(data_object.dart_reduction.to_s)
229
+ dart_reductions.unshift(data_object.dart_reduction.to_s)
230
+ @dart_reduction.update_items(dart_reductions, false)
231
+ dart_reduced_types = HousekeepingDataObject::DART_REDUCED_TYPES.map {|x| x.to_s}
232
+ dart_reduced_types.delete(data_object.dart_reduced_type.to_s)
233
+ dart_reduced_types.unshift(data_object.dart_reduced_type.to_s)
234
+ @dart_reduced_type.update_items(dart_reduced_types, false)
207
235
 
208
236
  packet, item = System.telemetry.packet_and_item(data_object.target_name,
209
237
  data_object.packet_name,
@@ -91,6 +91,16 @@ module Cosmos
91
91
  @x_value_type.set_current(data_object.x_value_type.to_s) if data_object.x_value_type
92
92
  @local_layout.addWidget(@x_value_type)
93
93
 
94
+ # Chooser for dart reduction
95
+ @dart_reduction = ComboboxChooser.new(self, '*DART Reduction:', XyDataObject::DART_REDUCTIONS.map {|x| x.to_s})
96
+ @dart_reduction.set_current(data_object.dart_reduction.to_s) if data_object.dart_reduction
97
+ @local_layout.addWidget(@dart_reduction)
98
+
99
+ # Chooser for dart reduced type
100
+ @dart_reduced_type = ComboboxChooser.new(self, '*DART Reduced Type:', XyDataObject::DART_REDUCED_TYPES.map {|x| x.to_s})
101
+ @dart_reduced_type.set_current(data_object.dart_reduced_type.to_s) if data_object.dart_reduced_type
102
+ @local_layout.addWidget(@dart_reduced_type)
103
+
94
104
  @layout.insertLayout(0, @local_layout)
95
105
  end
96
106
 
@@ -112,6 +122,8 @@ module Cosmos
112
122
  end
113
123
  data_object.y_value_type = @y_value_type.symbol
114
124
  data_object.x_value_type = @x_value_type.symbol
125
+ data_object.dart_reduction = @dart_reduction.symbol
126
+ data_object.dart_reduced_type = @dart_reduced_type.symbol
115
127
  data_object
116
128
  end
117
129
 
@@ -143,6 +155,14 @@ module Cosmos
143
155
  value_types.delete(data_object.x_value_type)
144
156
  value_types.unshift(data_object.x_value_type)
145
157
  @x_value_type.update_items(value_types, false)
158
+ dart_reductions = HousekeepingDataObject::DART_REDUCTIONS.map {|x| x.to_s}
159
+ dart_reductions.delete(data_object.dart_reduction.to_s)
160
+ dart_reductions.unshift(data_object.dart_reduction.to_s)
161
+ @dart_reduction.update_items(dart_reductions, false)
162
+ dart_reduced_types = HousekeepingDataObject::DART_REDUCED_TYPES.map {|x| x.to_s}
163
+ dart_reduced_types.delete(data_object.dart_reduced_type.to_s)
164
+ dart_reduced_types.unshift(data_object.dart_reduced_type.to_s)
165
+ @dart_reduced_type.update_items(dart_reduced_types, false)
146
166
  end
147
167
 
148
168
  # Handles the y item name changing
@@ -155,6 +175,14 @@ module Cosmos
155
175
  value_types.delete(data_object.y_value_type)
156
176
  value_types.unshift(data_object.y_value_type)
157
177
  @y_value_type.update_items(value_types, false)
178
+ dart_reductions = HousekeepingDataObject::DART_REDUCTIONS.map {|x| x.to_s}
179
+ dart_reductions.delete(data_object.dart_reduction.to_s)
180
+ dart_reductions.unshift(data_object.dart_reduction.to_s)
181
+ @dart_reduction.update_items(dart_reductions, false)
182
+ dart_reduced_types = HousekeepingDataObject::DART_REDUCED_TYPES.map {|x| x.to_s}
183
+ dart_reduced_types.delete(data_object.dart_reduced_type.to_s)
184
+ dart_reduced_types.unshift(data_object.dart_reduced_type.to_s)
185
+ @dart_reduced_type.update_items(dart_reduced_types, false)
158
186
  end
159
187
 
160
188
  # Handles the x item name changing
@@ -166,6 +194,14 @@ module Cosmos
166
194
  value_types.delete(data_object.x_value_type)
167
195
  value_types.unshift(data_object.x_value_type)
168
196
  @x_value_type.update_items(value_types, false)
197
+ dart_reductions = XyDataObject::DART_REDUCTIONS.map {|x| x.to_s}
198
+ dart_reductions.delete(data_object.dart_reduction.to_s)
199
+ dart_reductions.unshift(data_object.dart_reduction.to_s)
200
+ @dart_reduction.update_items(dart_reductions, false)
201
+ dart_reduced_types = XyDataObject::DART_REDUCED_TYPES.map {|x| x.to_s}
202
+ dart_reduced_types.delete(data_object.dart_reduced_type.to_s)
203
+ dart_reduced_types.unshift(data_object.dart_reduced_type.to_s)
204
+ @dart_reduced_type.update_items(dart_reduced_types, false)
169
205
  end
170
206
  end
171
207