gfdnavi 1.3.0.0

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 (446) hide show
  1. data/ChangeLog +10949 -0
  2. data/LICENCE.txt +57 -0
  3. data/Makefile +18 -0
  4. data/TODO +132 -0
  5. data/app/controllers/analysis_controller.rb +700 -0
  6. data/app/controllers/application.rb +41 -0
  7. data/app/controllers/draw_method_controller.rb +172 -0
  8. data/app/controllers/explorer_controller.rb +197 -0
  9. data/app/controllers/finder_controller.rb +331 -0
  10. data/app/controllers/function_controller.rb +204 -0
  11. data/app/controllers/group_controller.rb +115 -0
  12. data/app/controllers/keyword_attributes_controller.rb +52 -0
  13. data/app/controllers/knowledge_controller.rb +928 -0
  14. data/app/controllers/nodes_controller.rb +515 -0
  15. data/app/controllers/search_controller.rb +341 -0
  16. data/app/controllers/user_controller.rb +337 -0
  17. data/app/helpers/analysis_helper.rb +2 -0
  18. data/app/helpers/application_helper.rb +105 -0
  19. data/app/helpers/description_helper.rb +2 -0
  20. data/app/helpers/function_helper.rb +2 -0
  21. data/app/helpers/group_helper.rb +2 -0
  22. data/app/helpers/search_helper.rb +3 -0
  23. data/app/helpers/user_helper.rb +2 -0
  24. data/app/helpers/work_flow_helper.rb +92 -0
  25. data/app/models/actual_file.rb +3 -0
  26. data/app/models/analysis.rb +715 -0
  27. data/app/models/analysis_history.rb +42 -0
  28. data/app/models/cross_array.rb +22 -0
  29. data/app/models/cross_result.rb +254 -0
  30. data/app/models/derived_spatial_attribute.rb +3 -0
  31. data/app/models/diagram_cache.rb +16 -0
  32. data/app/models/diagram_cache_datum.rb +4 -0
  33. data/app/models/diagram_cache_session.rb +8 -0
  34. data/app/models/directory.rb +21 -0
  35. data/app/models/draw_method.rb +48 -0
  36. data/app/models/draw_method_attribute.rb +8 -0
  37. data/app/models/draw_parameter.rb +12 -0
  38. data/app/models/explorer_query.rb +354 -0
  39. data/app/models/explorer_result.rb +312 -0
  40. data/app/models/function.rb +75 -0
  41. data/app/models/function_argument.rb +6 -0
  42. data/app/models/function_output.rb +4 -0
  43. data/app/models/group.rb +153 -0
  44. data/app/models/image.rb +20 -0
  45. data/app/models/keyword_attribute.rb +179 -0
  46. data/app/models/knowledge.rb +94 -0
  47. data/app/models/knowledge_backup.rb +32 -0
  48. data/app/models/knowledge_figure.rb +16 -0
  49. data/app/models/knowledge_figure_backup.rb +16 -0
  50. data/app/models/knowledge_parser.rb +392 -0
  51. data/app/models/node.rb +605 -0
  52. data/app/models/node_entity_abstract.rb +112 -0
  53. data/app/models/node_lineage.rb +6 -0
  54. data/app/models/node_relation.rb +4 -0
  55. data/app/models/path_node.rb +60 -0
  56. data/app/models/query.rb +193 -0
  57. data/app/models/query_history.rb +12 -0
  58. data/app/models/results.rb +48 -0
  59. data/app/models/sign_up_user.rb +25 -0
  60. data/app/models/spatial_and_time_attribute.rb +11 -0
  61. data/app/models/user.rb +115 -0
  62. data/app/models/user_mailer.rb +48 -0
  63. data/app/models/value_type.rb +3 -0
  64. data/app/models/variable.rb +70 -0
  65. data/app/models/virtual_node.rb +457 -0
  66. data/app/views/analysis/__help_analysis_tab.en.html +57 -0
  67. data/app/views/analysis/__help_draw_share.en.html +12 -0
  68. data/app/views/analysis/__help_draw_tab.en.html +6 -0
  69. data/app/views/analysis/_analysis_function_settings.rhtml +61 -0
  70. data/app/views/analysis/_analysis_settings.rhtml +28 -0
  71. data/app/views/analysis/_diagram.rhtml +70 -0
  72. data/app/views/analysis/_dimension_option.rhtml +59 -0
  73. data/app/views/analysis/_draw_general_settings.rhtml +217 -0
  74. data/app/views/analysis/_draw_settings.rhtml +73 -0
  75. data/app/views/analysis/_history.rhtml +19 -0
  76. data/app/views/analysis/_popular_diagrams.rhtml +42 -0
  77. data/app/views/analysis/_save_form.rhtml +44 -0
  78. data/app/views/analysis/_variables.rhtml +66 -0
  79. data/app/views/analysis/_variables_order.rhtml +56 -0
  80. data/app/views/analysis/index.rhtml +195 -0
  81. data/app/views/analysis/preview.rhtml +3 -0
  82. data/app/views/analysis/save.rhtml +73 -0
  83. data/app/views/analysis/show_diagram.rhtml +42 -0
  84. data/app/views/cross/_display_map.rhtml +201 -0
  85. data/app/views/cross/_result.rhtml +205 -0
  86. data/app/views/cross/_show_result_tree.rhtml +40 -0
  87. data/app/views/cross/_show_results.rhtml +80 -0
  88. data/app/views/cross/_style.rhtml +21 -0
  89. data/app/views/cross/index.rhtml +271 -0
  90. data/app/views/draw_method/_edit_form.rhtml +110 -0
  91. data/app/views/draw_method/create.rhtml +8 -0
  92. data/app/views/draw_method/details.rhtml +113 -0
  93. data/app/views/draw_method/edit.rhtml +8 -0
  94. data/app/views/draw_method/list.rhtml +80 -0
  95. data/app/views/explorer/_display_map.rhtml +199 -0
  96. data/app/views/explorer/_show_result_tree.rhtml +40 -0
  97. data/app/views/explorer/_show_results.rhtml +101 -0
  98. data/app/views/explorer/_style.rhtml +21 -0
  99. data/app/views/explorer/index.rhtml +214 -0
  100. data/app/views/finder/_children.html.erb +84 -0
  101. data/app/views/finder/_children_details.html.erb +74 -0
  102. data/app/views/finder/_children_details_tr.html.erb +196 -0
  103. data/app/views/finder/create_tree.html.erb +15 -0
  104. data/app/views/finder/flex.html.erb +52 -0
  105. data/app/views/finder/index.html.erb +47 -0
  106. data/app/views/finder/show_details.html.erb +3 -0
  107. data/app/views/finder/show_images.html.erb +3 -0
  108. data/app/views/function/_edit_form.rhtml +106 -0
  109. data/app/views/function/create.rhtml +8 -0
  110. data/app/views/function/details.rhtml +96 -0
  111. data/app/views/function/edit.rhtml +8 -0
  112. data/app/views/function/list.rhtml +80 -0
  113. data/app/views/group/add_member.rhtml +13 -0
  114. data/app/views/group/change_owner.rhtml +15 -0
  115. data/app/views/group/create.rhtml +11 -0
  116. data/app/views/group/delete_member.rhtml +14 -0
  117. data/app/views/group/list.rhtml +63 -0
  118. data/app/views/knowledge/_backup.rhtml +135 -0
  119. data/app/views/knowledge/_category.rhtml +58 -0
  120. data/app/views/knowledge/_category_list.rhtml +34 -0
  121. data/app/views/knowledge/_category_table.rhtml +23 -0
  122. data/app/views/knowledge/_comment.rhtml +64 -0
  123. data/app/views/knowledge/_comment_input_form.rhtml +19 -0
  124. data/app/views/knowledge/_comments.rhtml +84 -0
  125. data/app/views/knowledge/_form.rhtml +139 -0
  126. data/app/views/knowledge/_group_figure_form.rhtml +187 -0
  127. data/app/views/knowledge/_layout_figure.rhtml +61 -0
  128. data/app/views/knowledge/_layout_figures_in_a_row_above_text.rhtml +42 -0
  129. data/app/views/knowledge/_layout_figures_under_text.rhtml +45 -0
  130. data/app/views/knowledge/_layout_one_figure_above_text.rhtml +28 -0
  131. data/app/views/knowledge/_summary.rhtml +21 -0
  132. data/app/views/knowledge/edit.rhtml +37 -0
  133. data/app/views/knowledge/list.rhtml +287 -0
  134. data/app/views/knowledge/new.rhtml +23 -0
  135. data/app/views/knowledge/new_from_analysis.rhtml +21 -0
  136. data/app/views/knowledge/show.rhtml +196 -0
  137. data/app/views/layouts/gfdnavi.rhtml +105 -0
  138. data/app/views/nodes/_ancestors.html.erb +89 -0
  139. data/app/views/nodes/_description_methods_table.html.erb +75 -0
  140. data/app/views/nodes/_mode.html.erb +16 -0
  141. data/app/views/nodes/description.html.erb +181 -0
  142. data/app/views/nodes/description_methods.html.erb +1 -0
  143. data/app/views/nodes/edit.html.erb +73 -0
  144. data/app/views/nodes/index.html.erb +25 -0
  145. data/app/views/nodes/show.html.erb +20 -0
  146. data/app/views/search/_children_details_mapsearch.rhtml +68 -0
  147. data/app/views/search/_children_details_tr.rhtml +205 -0
  148. data/app/views/search/_show_grouplist.rhtml +74 -0
  149. data/app/views/search/_show_results.rhtml +43 -0
  150. data/app/views/search/_show_results_global.rhtml +36 -0
  151. data/app/views/search/_show_results_partial.rhtml +39 -0
  152. data/app/views/search/_show_results_partial_groupbyfile.rhtml +50 -0
  153. data/app/views/search/_show_variablelist.rhtml +28 -0
  154. data/app/views/search/mapsearch.rhtml +176 -0
  155. data/app/views/search/remapsearch.rjs +18 -0
  156. data/app/views/search/show_details.rhtml +3 -0
  157. data/app/views/user/add_user.rhtml +30 -0
  158. data/app/views/user/change_password.rhtml +25 -0
  159. data/app/views/user/edit.html.erb +50 -0
  160. data/app/views/user/index.rhtml +162 -0
  161. data/app/views/user/login.rhtml +41 -0
  162. data/app/views/user/logout.rhtml +4 -0
  163. data/app/views/user/signup.rhtml +36 -0
  164. data/app/views/user/signup_succeeded.rhtml +36 -0
  165. data/app/views/user_mailer/authorization_inform.rhtml +15 -0
  166. data/app/views/user_mailer/signup_accepted.rhtml +12 -0
  167. data/app/views/user_mailer/signup_confirm.rhtml +14 -0
  168. data/app/views/user_mailer/signup_inform.rhtml +13 -0
  169. data/app/views/user_mailer/signup_rejected.rhtml +11 -0
  170. data/app/views/work_flow/_push_wsdls.rhtml +55 -0
  171. data/app/views/work_flow/index.rhtml +46 -0
  172. data/config/database.yml.example +35 -0
  173. data/config/environment.rb +68 -0
  174. data/config/gfdnavi.yml.example +95 -0
  175. data/config/load_config.rb +151 -0
  176. data/config/routes.rb +35 -0
  177. data/consistency_checker.rb +129 -0
  178. data/data/gfdnavi_docs/how_to_draw_multiple_images.knlge +68 -0
  179. data/data/gfdnavi_docs/how_to_knowledge.knlge +138 -0
  180. data/data/gfdnavi_docs/how_to_write_document_about_Gfdnavi.knlge +30 -0
  181. data/data/samples/jmadata.SIGEN +8 -0
  182. data/data/samples/jmadata.yml +6 -0
  183. data/data/samples/jmadata/MSM-P/2006.nc.yml +2 -0
  184. data/data/samples/jmadata/MSM-P/2006.yml +17 -0
  185. data/data/samples/jmadata/MSM-P/2006/0101.nc +0 -0
  186. data/data/samples/jmadata/MSM-P/2006/0101.nc.yml +13 -0
  187. data/data/samples/jmadata/MSM-P/2006/0102.nc +0 -0
  188. data/data/samples/jmadata/MSM-P/2006/0103.nc +0 -0
  189. data/data/samples/jmadata/MSM-P/2006/0104.nc +0 -0
  190. data/data/samples/jmadata/MSM-P/2006/0105.nc +0 -0
  191. data/data/samples/jmadata/MSM-P/2006/010[1-3].nc.yml +2 -0
  192. data/data/samples/jmadata/MSM-P/2006/skip_data.rb +96 -0
  193. data/data/samples/jmadata/MSM-P/2006/skip_data.sh +6 -0
  194. data/data/samples/reanalysis.SIGEN +8 -0
  195. data/data/samples/reanalysis/era40.SIGEN +8 -0
  196. data/data/samples/reanalysis/era40.yml +2 -0
  197. data/data/samples/reanalysis/era40/t.jan.nc +0 -0
  198. data/data/samples/reanalysis/era40/t.jan.nc.yml +1 -0
  199. data/data/samples/reanalysis/ncep.SIGEN +9 -0
  200. data/data/samples/reanalysis/ncep/T.jan.100hPa.png +0 -0
  201. data/data/samples/reanalysis/ncep/T.jan.100hPa.png.yml +43 -0
  202. data/data/samples/reanalysis/ncep/T.jan.nc +0 -0
  203. data/data/samples/reanalysis/ncep/T.jan.zonal_mean.nc +0 -0
  204. data/data/samples/reanalysis/ncep/T.jan.zonal_mean.nc.yml +8 -0
  205. data/data/samples/reanalysis/ncep/T.jan_only_root.nc +0 -0
  206. data/data/samples/reanalysis/ncep/T.jan_only_root.nc.yml +4 -0
  207. data/data/samples/reanalysis/ncep/UV.jan.nc +0 -0
  208. data/data/samples/reanalysis/ncep/UV.jan.nc.yml +10 -0
  209. data/data/samples/reanalysis/ncep/UV.jan.nc.yml.ja +11 -0
  210. data/data/samples/sonde_operational.yml +5 -0
  211. data/data/samples/sonde_operational/std_plev.yml +12 -0
  212. data/data/samples/sonde_operational/std_plev/41256.spl.nc +0 -0
  213. data/data/samples/sonde_operational/std_plev/42410.spl.nc +0 -0
  214. data/data/samples/sonde_operational/std_plev/43333.spl.nc +0 -0
  215. data/data/samples/sonde_operational/std_plev/43346.spl.nc +0 -0
  216. data/data/samples/sonde_operational/std_plev/48698.spl.nc +0 -0
  217. data/data/samples/sonde_operational/std_plev/61641.spl.nc +0 -0
  218. data/data/samples/sonde_operational/std_plev/63741.spl.nc +0 -0
  219. data/data/samples/sonde_operational/std_plev/67083.spl.nc +0 -0
  220. data/data/samples/sonde_operational/std_plev/72261.spl.nc +0 -0
  221. data/data/samples/sonde_operational/std_plev/76805.spl.nc +0 -0
  222. data/data/samples/sonde_operational/std_plev/82193.spl.nc +0 -0
  223. data/data/samples/sonde_operational/std_plev/91165.spl.nc +0 -0
  224. data/data/samples/sonde_operational/std_plev/91610.spl.nc +0 -0
  225. data/data/samples/sonde_operational/std_plev/91948.spl.nc +0 -0
  226. data/data/samples/sonde_operational/std_plev/94294.spl.nc +0 -0
  227. data/db/NetCDFparser.rb +406 -0
  228. data/db/create_derived_spatial_attributes.sql +12 -0
  229. data/db/draw_methods/line.yml +6 -0
  230. data/db/draw_methods/scatter.yml +38 -0
  231. data/db/draw_methods/tone.yml +64 -0
  232. data/db/draw_methods/vector.yml +19 -0
  233. data/db/dump_db.rb +43 -0
  234. data/db/functions/additions.yml +10 -0
  235. data/db/functions/cut.yml +10 -0
  236. data/db/functions/division.yml +10 -0
  237. data/db/functions/mean.yml +28 -0
  238. data/db/functions/multiplication.yml +10 -0
  239. data/db/functions/stddev.yml +28 -0
  240. data/db/functions/subtraction.yml +10 -0
  241. data/db/migrate/001_initial_scheme.rb +289 -0
  242. data/db/migrate/002_add_open_id_authentication_tables.rb +20 -0
  243. data/db/register_directory_tree.rb +760 -0
  244. data/db/restore_db.rb +60 -0
  245. data/gfdnavi-install +828 -0
  246. data/install.rb +828 -0
  247. data/lib/activerecord_gfdnavi.rb +31 -0
  248. data/lib/basic_authorization.rb +50 -0
  249. data/lib/create_activeresources.rb +108 -0
  250. data/lib/execute_analysis.rb +472 -0
  251. data/lib/file_gfdnavi.rb +38 -0
  252. data/lib/gphys_gfdnavi.rb +81 -0
  253. data/lib/localdir.rb +110 -0
  254. data/lib/login_system.rb +110 -0
  255. data/lib/multibytes.rb +20 -0
  256. data/lib/narray_yaml.rb +58 -0
  257. data/lib/no_rdb_base.rb +40 -0
  258. data/lib/opendapdir.rb +171 -0
  259. data/lib/tar.rb +127 -0
  260. data/lib/tasks/clean.rake +65 -0
  261. data/lib/tasks/setup.rake +316 -0
  262. data/lib/tasks/update.rake +62 -0
  263. data/lib/vizshot_gfdnavi.rb +224 -0
  264. data/public/crossdomain.xml +4 -0
  265. data/public/flex/NodeTreeDescriptor.as +55 -0
  266. data/public/flex/TreeNode.as +253 -0
  267. data/public/flex/finder.mxml +304 -0
  268. data/public/flex/finder.swf +0 -0
  269. data/public/flex/gfdnavi.mxml +52 -0
  270. data/public/flex/gfdnavi.swf +0 -0
  271. data/public/images/Help_S-shots/dir_tree_with_add.jpg +0 -0
  272. data/public/images/analyze.gif +0 -0
  273. data/public/images/circle.gif +0 -0
  274. data/public/images/create_from_analysis_button.png +0 -0
  275. data/public/images/delete.png +0 -0
  276. data/public/images/down.png +0 -0
  277. data/public/images/drawbutton.gif +0 -0
  278. data/public/images/gfdnavi_home_logo.png +0 -0
  279. data/public/images/gfdnavi_logo_big.png +0 -0
  280. data/public/images/gfdnavi_logo_med.png +0 -0
  281. data/public/images/gfdnavi_logo_mini.png +0 -0
  282. data/public/images/gfdnavi_logo_nobg_big.png +0 -0
  283. data/public/images/gfdnavi_logo_nobg_med.png +0 -0
  284. data/public/images/gfdnavi_logo_nobg_small.png +0 -0
  285. data/public/images/gfdnavi_logo_small.png +0 -0
  286. data/public/images/gfdnavi_logo_xsmall.png +0 -0
  287. data/public/images/hbar.png +0 -0
  288. data/public/images/helpmark16.png +0 -0
  289. data/public/images/helpmark18.png +0 -0
  290. data/public/images/kikyu_g.gif +0 -0
  291. data/public/images/kikyu_r.gif +0 -0
  292. data/public/images/map_icon_g.gif +0 -0
  293. data/public/images/map_icon_r.gif +0 -0
  294. data/public/images/new_knowledge.png +0 -0
  295. data/public/images/openid.png +0 -0
  296. data/public/images/read_in_the_form.png +0 -0
  297. data/public/images/slider_f.gif +0 -0
  298. data/public/images/slider_f_red.gif +0 -0
  299. data/public/images/star1.gif +0 -0
  300. data/public/images/star2.gif +0 -0
  301. data/public/images/startanim.gif +0 -0
  302. data/public/images/stopanim.gif +0 -0
  303. data/public/images/tree/DL.png +0 -0
  304. data/public/images/tree/anal_viz.png +0 -0
  305. data/public/images/tree/analyze_visualize_checked_items.png +0 -0
  306. data/public/images/tree/binary.png +0 -0
  307. data/public/images/tree/details.png +0 -0
  308. data/public/images/tree/download_checked_items.png +0 -0
  309. data/public/images/tree/folder.png +0 -0
  310. data/public/images/tree/folder_close.gif +0 -0
  311. data/public/images/tree/image2.png +0 -0
  312. data/public/images/tree/knowledge.png +0 -0
  313. data/public/images/tree/knowledges.png +0 -0
  314. data/public/images/tree/last.gif +0 -0
  315. data/public/images/tree/last.png +0 -0
  316. data/public/images/tree/minus.gif +0 -0
  317. data/public/images/tree/minus_simple.gif +0 -0
  318. data/public/images/tree/none.gif +0 -0
  319. data/public/images/tree/none.png +0 -0
  320. data/public/images/tree/plus.gif +0 -0
  321. data/public/images/tree/plus_simple.gif +0 -0
  322. data/public/images/tree/show.png +0 -0
  323. data/public/images/tree/show_checked_items.png +0 -0
  324. data/public/images/tree/t.gif +0 -0
  325. data/public/images/tree/t.png +0 -0
  326. data/public/images/tree/tate.gif +0 -0
  327. data/public/images/tree/tate.png +0 -0
  328. data/public/images/up.png +0 -0
  329. data/public/images/vbar.png +0 -0
  330. data/public/images/white.bmp +0 -0
  331. data/public/images/x.gif +0 -0
  332. data/public/index.html +100 -0
  333. data/public/javascripts/AC_OETags.js +269 -0
  334. data/public/javascripts/analysis.js +751 -0
  335. data/public/javascripts/application.js +29 -0
  336. data/public/javascripts/directory_tree.js +102 -0
  337. data/public/javascripts/draw_method.js +83 -0
  338. data/public/javascripts/excanvas.js +704 -0
  339. data/public/javascripts/function.js +107 -0
  340. data/public/javascripts/gfdnavi.js +175 -0
  341. data/public/javascripts/knowledge.js +384 -0
  342. data/public/javascripts/mapsearch.js +313 -0
  343. data/public/javascripts/progress.js +42 -0
  344. data/public/javascripts/resizable_box.js +164 -0
  345. data/public/javascripts/slider.js +260 -0
  346. data/public/javascripts/tab.js +17 -0
  347. data/public/javascripts/work_flow.js +452 -0
  348. data/public/stylesheets/analysis.css +111 -0
  349. data/public/stylesheets/description.css +71 -0
  350. data/public/stylesheets/gfdnavi.css +141 -0
  351. data/public/stylesheets/knowledge.css +218 -0
  352. data/public/stylesheets/search.css +184 -0
  353. data/public/stylesheets/tree.css +45 -0
  354. data/public/stylesheets/tree_for_ie.css +3 -0
  355. data/public/stylesheets/work_flow.css +78 -0
  356. data/script/cleaner +11 -0
  357. data/script/server_ssl +131 -0
  358. data/test/fixtures/diagram_cache_data.yml +5 -0
  359. data/test/fixtures/diagram_cache_sessions.yml +6 -0
  360. data/test/fixtures/diagram_caches.yml +6 -0
  361. data/test/fixtures/directories.yml +57 -0
  362. data/test/fixtures/draw_parameters.yml +6 -0
  363. data/test/fixtures/function_arguments.yml +15 -0
  364. data/test/fixtures/function_outputs.yml +15 -0
  365. data/test/fixtures/functions.yml +29 -0
  366. data/test/fixtures/group_members.yml +33 -0
  367. data/test/fixtures/groups.yml +25 -0
  368. data/test/fixtures/images.yml +12 -0
  369. data/test/fixtures/keyword_attributes.yml +73 -0
  370. data/test/fixtures/knowledges.yml +10 -0
  371. data/test/fixtures/node_relations.yml +11 -0
  372. data/test/fixtures/nodes.yml +298 -0
  373. data/test/fixtures/sign_up_users.yml +8 -0
  374. data/test/fixtures/spatial_and_time_attributes.yml +29 -0
  375. data/test/fixtures/user_mailer/authorization_inform +11 -0
  376. data/test/fixtures/user_mailer/signup_accepted +10 -0
  377. data/test/fixtures/user_mailer/signup_confirm +17 -0
  378. data/test/fixtures/user_mailer/signup_inform +10 -0
  379. data/test/fixtures/user_mailer/signup_rejected +9 -0
  380. data/test/fixtures/users.yml +31 -0
  381. data/test/fixtures/value_types.yml +10 -0
  382. data/test/fixtures/variables.yml +17 -0
  383. data/test/functional/analysis_controller_test.rb +169 -0
  384. data/test/functional/description_controller_test.rb +18 -0
  385. data/test/functional/function_controller_test.rb +18 -0
  386. data/test/functional/group_controller_test.rb +18 -0
  387. data/test/functional/search_controller_test.rb +83 -0
  388. data/test/functional/user_controller_test.rb +77 -0
  389. data/test/functional/webservice_analysis_api_test.rb +12 -0
  390. data/test/functional/work_flow_controller_test.rb +18 -0
  391. data/test/test_helper.rb +28 -0
  392. data/test/unit/diagram_cache_datum_test.rb +10 -0
  393. data/test/unit/diagram_cache_session_test.rb +10 -0
  394. data/test/unit/diagram_cache_test.rb +10 -0
  395. data/test/unit/directory_test.rb +49 -0
  396. data/test/unit/draw_parameter_test.rb +10 -0
  397. data/test/unit/function_argument_test.rb +10 -0
  398. data/test/unit/function_output_test.rb +10 -0
  399. data/test/unit/function_test.rb +10 -0
  400. data/test/unit/group_test.rb +48 -0
  401. data/test/unit/image_test.rb +13 -0
  402. data/test/unit/keyword_attribute_test.rb +33 -0
  403. data/test/unit/knowledge_test.rb +13 -0
  404. data/test/unit/node_relation_test.rb +20 -0
  405. data/test/unit/node_test.rb +85 -0
  406. data/test/unit/sign_up_user_test.rb +20 -0
  407. data/test/unit/spatial_and_time_attribute_test.rb +29 -0
  408. data/test/unit/user_mailer_test.rb +101 -0
  409. data/test/unit/user_test.rb +134 -0
  410. data/test/unit/value_type_test.rb +10 -0
  411. data/test/unit/variable_test.rb +35 -0
  412. data/vendor/plugins/acts_as_list/README +23 -0
  413. data/vendor/plugins/acts_as_list/init.rb +3 -0
  414. data/vendor/plugins/acts_as_list/lib/active_record/acts/list.rb +256 -0
  415. data/vendor/plugins/acts_as_list/test/list_test.rb +332 -0
  416. data/vendor/plugins/acts_as_tree/README +26 -0
  417. data/vendor/plugins/acts_as_tree/Rakefile +22 -0
  418. data/vendor/plugins/acts_as_tree/init.rb +1 -0
  419. data/vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb +96 -0
  420. data/vendor/plugins/acts_as_tree/test/abstract_unit.rb +0 -0
  421. data/vendor/plugins/acts_as_tree/test/acts_as_tree_test.rb +219 -0
  422. data/vendor/plugins/acts_as_tree/test/database.yml +0 -0
  423. data/vendor/plugins/acts_as_tree/test/fixtures/mixin.rb +0 -0
  424. data/vendor/plugins/acts_as_tree/test/fixtures/mixins.yml +0 -0
  425. data/vendor/plugins/acts_as_tree/test/schema.rb +0 -0
  426. data/vendor/plugins/will_paginate/CHANGELOG +92 -0
  427. data/vendor/plugins/will_paginate/LICENSE +18 -0
  428. data/vendor/plugins/will_paginate/README.rdoc +131 -0
  429. data/vendor/plugins/will_paginate/Rakefile +62 -0
  430. data/vendor/plugins/will_paginate/examples/apple-circle.gif +0 -0
  431. data/vendor/plugins/will_paginate/examples/index.haml +69 -0
  432. data/vendor/plugins/will_paginate/examples/index.html +92 -0
  433. data/vendor/plugins/will_paginate/examples/pagination.css +90 -0
  434. data/vendor/plugins/will_paginate/examples/pagination.sass +91 -0
  435. data/vendor/plugins/will_paginate/init.rb +1 -0
  436. data/vendor/plugins/will_paginate/lib/will_paginate.rb +86 -0
  437. data/vendor/plugins/will_paginate/lib/will_paginate/array.rb +16 -0
  438. data/vendor/plugins/will_paginate/lib/will_paginate/collection.rb +145 -0
  439. data/vendor/plugins/will_paginate/lib/will_paginate/core_ext.rb +32 -0
  440. data/vendor/plugins/will_paginate/lib/will_paginate/finder.rb +247 -0
  441. data/vendor/plugins/will_paginate/lib/will_paginate/named_scope.rb +132 -0
  442. data/vendor/plugins/will_paginate/lib/will_paginate/named_scope_patch.rb +39 -0
  443. data/vendor/plugins/will_paginate/lib/will_paginate/version.rb +9 -0
  444. data/vendor/plugins/will_paginate/lib/will_paginate/view_helpers.rb +373 -0
  445. data/vendor/plugins/will_paginate/will_paginate.gemspec +21 -0
  446. metadata +586 -0
@@ -0,0 +1,2 @@
1
+ module AnalysisHelper
2
+ end
@@ -0,0 +1,105 @@
1
+ # Methods added to this helper will be available to all templates in the application.
2
+ module ApplicationHelper
3
+
4
+ @@locale = 'en' # or 'ja' etc etc
5
+ def self.locale= (locale)
6
+ @@locale = locale
7
+ end
8
+
9
+ def render_erb(src)
10
+ ::ERB.new(src).result(binding)
11
+ end
12
+
13
+ def relative_url_root
14
+ if ActionController::Base.respond_to?(:relative_url_root)
15
+ # for >= 2.2.2
16
+ return ActionController::Base.relative_url_root || ""
17
+ elsif controller.request.respond_to?(:relative_url_root)
18
+ # for < 2.2.2
19
+ return controller.request.relative_url_root
20
+ else
21
+ raise "bug"
22
+ end
23
+ end
24
+
25
+ def help_popup(html_file_partial)
26
+ if base_path
27
+ dir = File.join(base_path, controller.controller_name)
28
+ elsif defined?(finder)
29
+ dir = File.join(finder.view_paths[0], controller.controller_name)
30
+ else
31
+ dir = File.join(view_paths.to_a[0], controller.controller_name)
32
+ end
33
+ prefix = dir + '/__help_' + html_file_partial
34
+ if File.exists?( path = prefix+'.'+@@locale+'.html' ) ||
35
+ File.exists?( path = prefix+'.html' ) ||
36
+ File.exists?( path = prefix+'.en.html' )
37
+ help_text = File.read( path )
38
+ else
39
+ help_text = '[BUG] Sorry, no help text was found for '+html_file_partial
40
+ end
41
+
42
+ html =<<-EOS
43
+ <label id='#{'help_'+html_file_partial}' style="cursor:pointer">
44
+ #{image_tag('helpmark16.png', :title=>'Help')}
45
+ </label>
46
+ <script>
47
+ new PopupMenu('#{'help_'+html_file_partial}',
48
+ '#{escape_javascript(help_text)}',
49
+ 'Help' );
50
+ </script>
51
+ EOS
52
+ html
53
+ end
54
+
55
+ def host_information_table
56
+ request = controller.request
57
+ html =<<-"EOS"
58
+ <table>
59
+ <tr><td>Host</td><td>#{request.host_with_port}</td></tr>
60
+ <tr><td>Gfdnavi Root</td><td>/#{request.relative_url_root}</td></tr>
61
+ <tr><td>Path</td><td>#{request.path}</td></tr>
62
+ <tr><td>Env</td><td>#{RAILS_ENV}</td></tr>
63
+ <tr><td>Server Software</td><td>#{request.server_software}</td></tr>
64
+ </table>
65
+ EOS
66
+ return html
67
+ end
68
+
69
+ def image_path(obj)
70
+ case obj
71
+ when Image, Node
72
+ data_dl_url(:path => obj.path.sub(/^\//,""))
73
+ when DiagramCache
74
+ url_for(:controller => 'analysis', :action => 'show_image', :id => obj.id)
75
+ when String
76
+ image_tag(obj)
77
+ else
78
+ nil
79
+ end
80
+ end
81
+
82
+ def tree_lines(dir, user, first=true)
83
+ lines = ""
84
+ if (parent = dir.parent)
85
+ if parent.directory_nodes(:user=>user)[-1] == dir
86
+ if first
87
+ type = "last"
88
+ else
89
+ type = "none"
90
+ end
91
+ else
92
+ if first
93
+ type = "t"
94
+ else
95
+
96
+ type = "tate"
97
+ end
98
+ end
99
+ lines += tree_lines(parent, user, false)
100
+ lines += image_tag("tree/#{type}.gif", :border => "0", :align => "middle", :class => "tree")+"<span class=\"tree\">\n</span>"
101
+ end
102
+ return lines
103
+ end
104
+
105
+ end
@@ -0,0 +1,2 @@
1
+ module DescriptionHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module FunctionHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module GroupHelper
2
+ end
@@ -0,0 +1,3 @@
1
+ module SearchHelper
2
+
3
+ end
@@ -0,0 +1,2 @@
1
+ module UserHelper
2
+ end
@@ -0,0 +1,92 @@
1
+ module WorkFlowHelper
2
+
3
+ def get_input_html(name, value, write_type=true)
4
+ html = ""
5
+ javascript = ""
6
+ if Array === value
7
+ ary = get_input_html(name+[0], value[0])
8
+ fname = "add_#{name.join("_")}"
9
+ html += "["
10
+ html += ary[0]
11
+ html += ", "
12
+ html += "<span class=\"link\" onclick=\"#{fname}(this);\">add</span>"
13
+ html += "]"
14
+ if ary[1]
15
+ javascript += ary[1]
16
+ end
17
+ tmp = "tmp#{name.length}"
18
+ ary = get_input_html(name+[tmp], value[0], false)
19
+ javascript +=<<"EOF"
20
+ window.#{fname} = function(elm) {
21
+ if (elm.count)
22
+ elm.count += 1;
23
+ else
24
+ elm.count = 1;
25
+ new Insertion.Before(elm,'#{ary[0]}, '.gsub('#{tmp}',elm.count));
26
+ EOF
27
+ if ary[1]
28
+ javascript += " eval('#{escape_javascript(ary[1])}'.gsub('#{tmp}',elm.count));\n"
29
+ end
30
+ javascript += "}\n"
31
+ elsif Hash === value
32
+ html += '<ul style="margin:0">'
33
+ value.each{|k,v|
34
+ ary = get_input_html(name+[k], v)
35
+ html += "<li>#{k}: "
36
+ html += ary[0]
37
+ if ary[1]
38
+ javascript += ary[1]
39
+ end
40
+ }
41
+ html += '</ul>'
42
+ elsif value == "string"
43
+ if write_type
44
+ html += "(#{value})"
45
+ end
46
+ html += text_field_tag("apis[api_id][#{name.join("][")}]")
47
+ elsif value == "int" || value == "float" || value == "double"
48
+ if write_type
49
+ html += "(#{value})"
50
+ end
51
+ html += text_field_tag("apis[api_id][#{name.join("][")}]", nil, :size=>5)
52
+ elsif value == "boolean"
53
+ html += select_tag("apis[api_id][#{name.join("][")}]", "<option></option><option>true</option><option>false</option>")
54
+ elsif
55
+ if write_type
56
+ html += "(#{value})"
57
+ end
58
+ html += text_field_tag("apis[api_id][#{name.join("][")}]")
59
+ end
60
+ return html, javascript=="" ? nil : javascript
61
+ end
62
+
63
+ def get_output_text(value, type, name="")
64
+ if Array === value
65
+ case type
66
+ when "html"
67
+ return "[#{get_output_text(value[0], type)}]"
68
+ when "list"
69
+ ary = Array.new
70
+ 3.times{|i|
71
+ ary[i] = get_output_text(value[0], type, name+"[#{i}]")
72
+ }
73
+ return ary.join(",")
74
+ end
75
+ elsif Hash === value
76
+ case type
77
+ when "html"
78
+ return "{#{value.collect{|k,v| k+"=>"+get_output_text(v,type)}.join(", ")}}"
79
+ when "list"
80
+ return value.collect{|k,v| get_output_text(v,type,name+"[#{k}]")}.join(", ")
81
+ end
82
+ else
83
+ case type
84
+ when "html"
85
+ return "(#{value})"
86
+ when "list"
87
+ return "'(#{value})#{name}'"
88
+ end
89
+ end
90
+ end
91
+
92
+ end
@@ -0,0 +1,3 @@
1
+ class ActualFile < ActiveRecord::Base
2
+ belongs_to :variable
3
+ end
@@ -0,0 +1,715 @@
1
+ require "numru/gphys"
2
+ require "no_rdb_base"
3
+ require "vizshot_gfdnavi"
4
+
5
+ class AnalysisColumn < ActiveRecord::ConnectionAdapters::Column
6
+
7
+ def type_cast_code(var_name)
8
+ case type
9
+ when :array
10
+ "#{self.class.name}.value_to_array(#{var_name})"
11
+ when :array_int
12
+ "#{self.class.name}.value_to_array(#{var_name}, :int)"
13
+ when :array_float
14
+ "#{self.class.name}.value_to_array(#{var_name}, :float)"
15
+ when :model
16
+ "#{self.class.name}.value_to_model(#{var_name})"
17
+ else
18
+ super("(#{var_name}=='NULL' ? nil : #{var_name})")
19
+ end
20
+ end
21
+
22
+ def self.value_to_array(value, val_type=nil)
23
+ if Array === value
24
+ ary = value
25
+ elsif Hash === value
26
+ ary = Array.new
27
+ value.each{|k,v|
28
+ ary[k.to_i] = v
29
+ }
30
+ elsif String === value
31
+ ary = value.split(/,/)
32
+ else
33
+ ary = [value]
34
+ end
35
+ case val_type
36
+ when :int
37
+ ary.collect!{|v| v.to_i}
38
+ when :float
39
+ ary.collect!{|v| v.to_f}
40
+ end
41
+ return ary
42
+ end
43
+
44
+ def self.value_to_model(value)
45
+ return nil if value.nil? || value[:name].nil?
46
+ if Hash === value && value[:class]
47
+ case value[:class]
48
+ when "user"
49
+ return User.find_by_login(value[:name])
50
+ when "function"
51
+ return Function.find(:first, :conditions=>["name=?",value[:name]], :user=>value[:user])
52
+ when "draw_method"
53
+ return DrawMethod.find(:first, :conditions=>["name=?",value[:name]], :user=>value[:user])
54
+ end
55
+ else
56
+ raise "a model is expected"
57
+ end
58
+ end
59
+
60
+ def default
61
+ Array===@default ? @default.dup : @default
62
+ end
63
+
64
+
65
+ private
66
+ def simplified_type(type)
67
+ case type
68
+ when /array_int/i
69
+ :array_int
70
+ when /array_float/i
71
+ :array_float
72
+ when /array/i
73
+ :array
74
+ when /model/i
75
+ :model
76
+ else
77
+ super(type)
78
+ end
79
+ end
80
+
81
+ end
82
+
83
+ class Analysis < ActiveRecord::NoRdbBase
84
+
85
+ ACTION_TYPE = %w( draw analysis )
86
+
87
+ DRAW_PROJECTION = {1 => "rectangular uniform coordinate",
88
+ 2 => "semi-logarithmic coordinate (y axis)",
89
+ 3 => "semi-logarithmic coordinate (x axis)",
90
+ 4 => "logarithmic coordinate",
91
+ 5 => "polar coordinate",
92
+ 6 => "bipolar coordinate",
93
+ # 7 => "elliptic coordinate",
94
+ 10 => "equidistant cylindrical projection",
95
+ 11 => "Mercator's projection",
96
+ 12 => "Mollweide's projection",
97
+ 13 => "Hammer's projection",
98
+ 14 => "Eckert VI projection",
99
+ 15 => "Kitada's elliptic projection",
100
+ 20 => "equidistant conical projection",
101
+ 21 => "Lambert's equal-area conical projection",
102
+ 22 => "Lambert's conformal conical projection",
103
+ 23 => "Bonne's projection",
104
+ 30 => "orthographic projection",
105
+ 31 => "polar stereo projection",
106
+ 32 => "azimuthal equidistant projection",
107
+ 33 => "Lambert's azimuthal equal-area projection"
108
+ }
109
+
110
+ DRAW_SIZE = [[700,700], [550,550], [400,400], [250,250]]
111
+
112
+
113
+ common_attrs =
114
+ [
115
+ {:name => "variables", :default => [], :type => "array"},
116
+ {:name => "action_type", :default => ACTION_TYPE.index("draw"), :type => "int"}
117
+ ]
118
+ draw_attrs =
119
+ [
120
+ {:name => "draw_share", :default => true, :type => "boolean"},
121
+ {:name => "draw_method", :type => "model"},
122
+ {:name => "x_axis", :type => "string"},
123
+ {:name => "y_axis", :type => "string"},
124
+ {:name => "z_axis", :type => "string"},
125
+ {:name => "draw_projection", :default => 1, :type => "int"},
126
+ {:name => "region", :default => {}, :type => "hash"},
127
+ {:name => "draw_pileup", :default => false, :type => "boolean"},
128
+ {:name => "draw_keep", :default => false, :type => "boolean"},
129
+ {:name => "draw_size", :default => 1, :type => "int"},
130
+ {:name => "anim", :default => false, :type => "boolean", :optional => true},
131
+ {:name => "anim_dim", :type => "string", :optional => true},
132
+ {:name => "viewport", :default => "0.2, 0.8, 0.2, 0.8", :type => "array_float", :optional => true},
133
+ {:name => "draw_variables_order", :default => [], :type => "array", :optional => true},
134
+ {:name => "map", :default => false, :type => "boolean", :optional => true}
135
+ ]
136
+ function_attrs =
137
+ [
138
+ {:name => "function", :type => "model"},
139
+ {:name => "function_arguments", :default => [], :type => "array"},
140
+ {:name => "function_variables_order", :default => [], :type => "array"}
141
+ ]
142
+
143
+ @@minmaxs =
144
+ {
145
+ "action_type" => [0, ACTION_TYPE.length-1],
146
+ "draw_size" => [0, DRAW_SIZE.length-1]
147
+ }
148
+
149
+ push_column AnalysisColumn.new("user", nil, "model", true)
150
+ (common_attrs +
151
+ draw_attrs +
152
+ function_attrs
153
+ ).each{ |hash|
154
+ push_column AnalysisColumn.new(hash[:name], hash[:default], hash[:type], hash[:optional]==true )
155
+ }
156
+ if ActiveRecord::Base.connection.tables.include?("nodes")
157
+ DrawMethod.find(:all, :user=>:all).each{|dm|
158
+ dm.draw_method_attributes.each{|dma|
159
+ push_column AnalysisColumn.new( "#{dm.name}_#{dma.name}", dma.default=="NULL"?nil : dma.default, dma.value_type.name, dma.optional)
160
+ }
161
+ }
162
+ end
163
+
164
+ def write_attribute(attr_name, value)
165
+ case attr_name.to_s
166
+ when "function"
167
+ unless Function === value
168
+ value = Function.find(:first, :conditions=>["name=?",value], :user=>user)
169
+ end
170
+ value = {:class => "function", :name => value && value.name, :user => user}
171
+ when "draw_method"
172
+ unless DrawMethod === value
173
+ value = DrawMethod.find(:first, :conditions=>["name=?",value], :user=>user)
174
+ end
175
+ value = {:class => "draw_method", :name => value && value.name, :user => user}
176
+ when "user"
177
+ unless User === value
178
+ value = User.find_by_login(value)
179
+ end
180
+ value = {:class => "user", :name => value && value.login}
181
+ when "draw_variables_order"
182
+ value = variables_order(value)
183
+ when "function_variables_order"
184
+ value = variables_order(value)
185
+ end
186
+
187
+ value = nil if value == "NULL"
188
+
189
+ super(attr_name, value)
190
+
191
+ if (minmax = @@minmaxs[attr_name.to_s])
192
+ val = read_attribute(attr_name)
193
+ if val < minmax[0]
194
+ write_attribute(attr_name, minmax[0].to_s)
195
+ elsif val > minmax[1]
196
+ write_attribute(attr_name, minmax[1].to_s)
197
+ end
198
+ end
199
+ xa = read_attribute("x_axis")
200
+ ya = read_attribute("y_axis")
201
+ za = read_attribute("z_axis")
202
+ ad = read_attribute("anim") && read_attribute("anim_dim")
203
+ case attr_name.to_s
204
+ when "x_axis"
205
+ =begin
206
+ if xa
207
+ if xa == ya
208
+ write_attribute("y_axis", nil)
209
+ elsif xa == za
210
+ write_attribute("z_axis", nil)
211
+ elsif xa == ad
212
+ write_attribute("anim_dim", nil)
213
+ end
214
+ end
215
+ =end
216
+ when "y_axis"
217
+ =begin
218
+ if ya
219
+ if ya == xa
220
+ write_attribute("x_axis", nil)
221
+ elsif ya == za
222
+ write_attribute("z_axis", nil)
223
+ elsif ya == ad
224
+ write_attribute("anim_dim", nil)
225
+ end
226
+ end
227
+ =end
228
+ when "z_axis"
229
+ =begin
230
+ if za
231
+ if za == xa
232
+ write_attribute("x_axis", nil)
233
+ elsif za == ya
234
+ write_attribute("y_axis", nil)
235
+ elsif ya == ad
236
+ write_attribute("anim_dim", nil)
237
+ end
238
+ end
239
+ =end
240
+ when "anim_dim"
241
+ =begin
242
+ if ad
243
+ if ad == xa
244
+ write_attribute("x_axis", nil)
245
+ elsif ad == ya
246
+ write_attribute("x_axis", nil)
247
+ elsif ad == za
248
+ write_attribute("z_axis", nil)
249
+ end
250
+ end
251
+ =end
252
+ when "draw_projection"
253
+ unless DRAW_PROJECTION[value.to_i]
254
+ write_attribute("draw_projection", "1")
255
+ end
256
+ when "viewport"
257
+ unless viewport.length==4
258
+ write_attribute("viewport", Analysis.columns_hash["viewport"].default)
259
+ end
260
+ end
261
+ end
262
+
263
+ def variables
264
+ user_model = user && User.find_by_login(user)
265
+ vars = read_attribute("variables")
266
+ vars.each{|var|
267
+ next if var.new_record?
268
+ unless var.other_mode==4 || ( user_model && (var.rgroups & user_model.groups) )
269
+ raise "an invalid variable was set"
270
+ end
271
+ }
272
+ return vars
273
+ end
274
+
275
+ def draw_methods
276
+ dm = read_attribute("draw_method")
277
+ return dm if dm.nil?
278
+ user_model = user && User.find_by_login(user)
279
+ unless dm == DrawMethod.find(:first, :conditions=>["id=>",dm.node.id], :user=>user_model)
280
+ raise "an invalid draw method was set"
281
+ end
282
+ return dm
283
+ end
284
+
285
+ def functions
286
+ func = read_attribute("function")
287
+ return func if func.nil?
288
+ user_model = user && User.find_by_login(user)
289
+ unless func == Function.find(:first, :conditions=>["id=?",func.id], :user=>user_model)
290
+ raise "an invalid function was set"
291
+ end
292
+ return func
293
+ end
294
+
295
+
296
+ def variable_clear
297
+ @dimensions = nil
298
+ %w( variables region x_axis y_axis z_axis draw_variables_order function_variables_order ).each{|name|
299
+ column = column_for_attribute(name)
300
+ default = column.default
301
+ self[name] = default
302
+ }
303
+ end
304
+
305
+ def file_and_variable_names
306
+ variables.collect do |var|
307
+ [fname, vname]
308
+ end
309
+ end
310
+
311
+ def gphyses
312
+ variables.collect do |var|
313
+ var.gphys
314
+ end
315
+ end
316
+
317
+ def dimensions
318
+ unless @dimensions
319
+ axes = Hash.new
320
+ @dimensions = Array.new
321
+ self.gphyses.each{|gp|
322
+ gp.rank.times do |i|
323
+ ax = gp.axis(i)
324
+ ax_name = ax.name
325
+ if axes[ax_name]
326
+ ind, units, ary = axes[ax_name]
327
+ pos = ax.pos
328
+ ary2 = pos.val
329
+ unless pos.units == units
330
+ begin
331
+ factor,offset = Units.new(units).factor_and_offset(Units.new(pos.units))
332
+ ary2 = ary*factor + offset
333
+ rescue
334
+ end
335
+ end
336
+ ary += ary2.to_a
337
+ ary.sort!.uniq!
338
+ axes[ax_name] = [ind, units, ary]
339
+ else
340
+ pos = ax.pos
341
+ axes[ax_name] = [axes.length, pos.units, pos.val.to_a]
342
+ end
343
+ end
344
+ axes.each do |name, ary|
345
+ @dimensions[ary[0]] = {:name => name, :units => ary[1], :ary => ary[2]}
346
+ end
347
+ }
348
+ end
349
+ return @dimensions
350
+ end
351
+
352
+ def index
353
+ dims = region
354
+ if region.length == 0
355
+ dims = Hash.new
356
+ dimensions.each{|dim|
357
+ dims[dim[:name]] = {"min"=>dim[:ary][0], "max"=>dim[:ary][-1]}
358
+ }
359
+ end
360
+ twoD = dimensions.length > 1
361
+ threeD = dimensions.length > 2
362
+ dim0 = dimensions[0][:name]
363
+ dim1 = dimensions[1][:name] if twoD
364
+ dim2 = dimensions[2][:name] if threeD
365
+ unless x_axis
366
+ xa = dim0
367
+ xa = (twoD && y_axis==xa) ? dim1 : xa
368
+ xa = (threeD && z_axis==xa) ? dim2 : xa
369
+ self.x_axis = xa
370
+ end
371
+ if twoD && !y_axis
372
+ ya = dim1
373
+ ya = x_axis==ya ? dim0 : ya
374
+ ya = (threeD && z_axis==ya) ? dim2 : ya
375
+ self.y_axis = ya
376
+ end
377
+ if threeD && !z_axis
378
+ za = dim2
379
+ za = y_axis==za ? dim1 : za
380
+ za = x_axis==za ? dim0 : za
381
+ self.z_axis = za
382
+ end
383
+ hash = Hash.new
384
+ dims.each do |name,range|
385
+ if ACTION_TYPE[action_type]=="analysis" || (name==x_axis || (draw_method.ndims>1&&name==y_axis) || (draw_method.ndims>2&&name==z_axis))
386
+ min = range["min"].to_f
387
+ max = range["max"].to_f
388
+ hash[name] = min==max ? min : min..max
389
+ else
390
+ hash[name] = range["min"].to_f
391
+ end
392
+ end
393
+ return hash
394
+ end
395
+
396
+ def get_vizshots(basename)
397
+ options = Hash.new
398
+ vars = variables
399
+ nvars = variables.length
400
+ if nvars == 0
401
+ return [false, "at least one variable must be selected"]
402
+ end
403
+ dm_nvars = draw_method.nvars
404
+ if nvars%dm_nvars != 0
405
+ return [false, "number of variable must be multiples of #{dm_nvars}"]
406
+ end
407
+ ix = get_index_from_name(x_axis)
408
+ iy = get_index_from_name(y_axis)
409
+ iz = get_index_from_name(z_axis)
410
+
411
+ options[:method] = draw_method.vizshot_method.to_sym
412
+ options.update( get_vizshot_options )
413
+ options["transpose"] = true if draw_method.ndims>1 && ix && iy && ix > iy
414
+ options[:cut] = index
415
+
416
+ size = Analysis::DRAW_SIZE[draw_size]
417
+ vizs = Array.new
418
+ nfig = nvars/dm_nvars
419
+ nfig.times{|n|
420
+ if dm_nvars == 2
421
+ options[:variables] = [ vars[draw_variables_order[n][0]].path, vars[draw_variables_order[n][1]].path ]
422
+ else
423
+ options[:variables] = [ vars[n].path ]
424
+ end
425
+ if draw_pileup && vizs[0]
426
+ viz = vizs[0]
427
+ else
428
+ viz = NumRu::VizShot.new(:iwidth => size[0], :iheight => size[1], :basename => basename)
429
+ viz.set_fig('itr' => draw_projection, 'viewport' => viewport)
430
+ unless draw_projection == 5
431
+ viz.set_tone('tonf' => true )
432
+ end
433
+ vizs.push viz
434
+ end
435
+ viz.plot( options.dup )
436
+ }
437
+ return [true, vizs]
438
+ end
439
+
440
+
441
+
442
+
443
+ def diagram_label
444
+ label = draw_method.name
445
+ label += ", #{region[x_axis][:name]}(#{region[x_axis]["min"]}:#{region[x_axis]["max"]})"
446
+ if draw_method.ndims > 1
447
+ label += " vs #{region[y_axis][:name]}(#{region[y_axis]["min"]}:#{region[y_axis]["max"]})"
448
+ end
449
+ if draw_method.ndims > 2
450
+ label += " vs #{region[z_axis][:name]}(#{region[z_axis]["min"]}:#{region[z_axis]["max"]})"
451
+ end
452
+ tmp = Array.new
453
+ dimensions.each{|dim|
454
+ name = dim[:name]
455
+ next if name==x_axis
456
+ next if draw_method.ndims>1 && name==y_axis
457
+ next if draw_method.ndims>2 && name==z_axis
458
+ tmp.push "#{name}=#{region[name]["min"]}" if region[name]
459
+ }
460
+ label += " @ "+tmp.join(",") unless tmp.length==0
461
+ return label
462
+ end
463
+
464
+
465
+ def self.from_vizshot(viz)
466
+ if viz && (par = parse_vizshot(viz))
467
+ vars, params = par
468
+ analysis = Analysis.new
469
+ vars.each{|var|
470
+ analysis.variables.push var
471
+ }
472
+ analysis.action_type = ACTION_TYPE.index("draw")
473
+ params.each{|name,val|
474
+ analysis.send(name+"=", val)
475
+ }
476
+ return analysis
477
+ else
478
+ return nil
479
+ end
480
+ end
481
+
482
+
483
+ def self.uri_params_from_vizshot(viz)
484
+ if viz && (par = parse_vizshot(viz))
485
+ vars, params = par
486
+ ary = Array.new
487
+ vars.each{|var|
488
+ ary.push "variables[#{var.path}]=1"
489
+ }
490
+ ary.push "action_type=draw"
491
+ params.each{|name,val|
492
+ ary += param_to_str("analysis[#{name}]",val)
493
+ }
494
+ # params.collect{|str| str.gsub(/[/,"%5B").gsub(/]/,"%5D")}.join("&")
495
+ URI.escape( ary.join("&") )
496
+ else
497
+ return nil
498
+ end
499
+ end
500
+
501
+
502
+
503
+ private
504
+ def self.parse_vizshot(viz)
505
+ if viz.get_variables.length == 0
506
+ return nil
507
+ end
508
+
509
+ plots = viz.get_plots
510
+ plots.each{|plot|
511
+ plot.each{|k,v|
512
+ plot[k.to_sym] = v if String === k
513
+ }
514
+ }
515
+ vars = Array.new
516
+ viz.get_variables.each{|var|
517
+ # return nil unless var.id # commented out by horinout on 2007-06-28
518
+ vars.push var
519
+ }
520
+
521
+ params = Array.new
522
+
523
+ cut = plots[0][:cut]
524
+ =begin
525
+ plots.each{|plot|
526
+ unless cut == plot[:cut]
527
+ raise "different cuts exist"
528
+ end
529
+ }
530
+ =end
531
+ if Array === cut
532
+ gphys = vars[0].gphys
533
+ cut_ary = Array.new
534
+ gphys.rank.times{|i|
535
+ name = gphys.coord(i).name
536
+ cut_ary.push [name, cut[i]]
537
+ }
538
+ else Hash === cut
539
+ gphys = vars[0].gphys
540
+ cut_ary = Array.new
541
+ gphys.rank.times{|i|
542
+ name = gphys.coord(i).name
543
+ cut_ary.push [name, cut[name]]
544
+ }
545
+ end
546
+ reg = Hash.new
547
+ axes = Array.new
548
+
549
+ cut_ary.each{|name,range|
550
+ case range
551
+ when Range
552
+ reg[name] = {"min"=>range.first,"max"=>range.last}
553
+ axes.push name
554
+ when Numeric
555
+ reg[name] = {"min"=>range}
556
+ else
557
+ raise "[BUG]"
558
+ end
559
+ }
560
+
561
+ params.push ["region", reg]
562
+
563
+ method = plots[0][:method].to_s
564
+ draw_method = Node.find_draw_methods(:first, :conditions => ["vizshot_method=?",method]).entity
565
+ plots.each{|plot|
566
+ =begin
567
+ unless method == plot[:method].to_s
568
+ raise "[BUG]"
569
+ end
570
+ =end
571
+ }
572
+ unless draw_method.ndims == axes.length
573
+ raise "[BUG]"
574
+ end
575
+
576
+ params.push ["draw_method", draw_method.name]
577
+
578
+ axes = [axes[1],axes[0]] if draw_method.ndims>1 && plots[0][:transpose]
579
+ params.push ["x_axis", axes[0]]
580
+ params.push ["y_axis", axes[1]] if draw_method.ndims > 1
581
+ params.push ["z_axis", axes[2]] if draw_method.ndims > 2
582
+ params.push ["draw_projection", viz.get_itr]
583
+ params.push ["viewport", viz.get_viewport]
584
+
585
+ isize = DRAW_SIZE.index(viz.get_size)
586
+ unless isize
587
+ raise "[BUG]"
588
+ end
589
+ params.push ["draw_size", isize]
590
+
591
+ params += get_params_from_vizshot_plot(draw_method,plots[0])
592
+ if draw_method.ndims == 2
593
+ params.push ["draw_variables_order", {0 => {0=>0,1=>1}}]
594
+ end
595
+
596
+ return [vars, params]
597
+ end
598
+
599
+
600
+ def self.param_to_str(name, val)
601
+ ary = Array.new
602
+ case val
603
+ when String
604
+ ary.push "#{name}=#{val}"
605
+ when Numeric
606
+ val = val.to_i if Float === val && val.to_i == val
607
+ ary.push "#{name}=#{val}"
608
+ when TrueClass
609
+ ary.push "#{name}=1"
610
+ when FalseClass
611
+ ary.push "#{name}=0"
612
+ when Array
613
+ ary.push "#{name}=#{val.join(',')}"
614
+ when Hash
615
+ val = val.sort{|a,b|
616
+ if String===a
617
+ if a=="min"
618
+ return -1
619
+ elsif a=="max"
620
+ return 1
621
+ end
622
+ end
623
+ a <=> b
624
+ }
625
+ val.each{|k,v|
626
+ ary += param_to_str("#{name}[#{k}]", v)
627
+ }
628
+ else
629
+ ary.push "#{name}=#{val.inspect}"
630
+ end
631
+ return ary
632
+ end
633
+
634
+
635
+ def self.get_params_from_vizshot_plot(draw_method,plot)
636
+ ary = Array.new
637
+ draw_method.draw_method_attributes.each{|attr|
638
+ case attr.parser
639
+ when :vizshot, "vizshot"
640
+ name = attr.name.to_sym
641
+ when :ggraph, "ggraph"
642
+ name = attr.name
643
+ else
644
+ next
645
+ end
646
+ val = plot[name]
647
+ ary.push(["#{draw_method.name}_#{attr.name}",val]) if val
648
+ }
649
+ return ary
650
+ end
651
+
652
+
653
+
654
+ def variables_order(val)
655
+ unless Hash === val
656
+ return nil
657
+ end
658
+ variables_order = Hash.new
659
+ val.each{|k,v|
660
+ if Hash === v
661
+ tmp = Array.new
662
+ v.each{|k1,v1|
663
+ tmp[k1.to_i] = v1.to_i
664
+ }
665
+ variables_order[k.to_i] = tmp
666
+ else
667
+ return nil
668
+ end
669
+ }
670
+ ary = variables_order.values.flatten
671
+ unless ary.max == ary.length-1
672
+ return nil
673
+ end
674
+ ary.length.times{|i|
675
+ unless ary.include?(i)
676
+ return nil
677
+ end
678
+ }
679
+ return variables_order
680
+ end
681
+
682
+
683
+ def get_vizshot_options
684
+ hash = Hash.new
685
+ draw_method.draw_method_attributes.each{|attr|
686
+ case attr.parser
687
+ when :vizshot, "vizshot"
688
+ name = attr.name.to_sym
689
+ when :ggraph, "ggraph"
690
+ name = attr.name
691
+ else
692
+ next
693
+ end
694
+ val = self.send("#{draw_method.name}_#{attr.name}")
695
+ if !val.nil? && val!=[] && val!=""
696
+ hash[name] = val
697
+ elsif !attr.optional
698
+ raise "#{attr.name} of #{draw_method.name} cannot not be omitted"
699
+ end
700
+ }
701
+ return hash
702
+ end
703
+
704
+ def get_index_from_name(name)
705
+ dimensions.each_with_index{|dim,i|
706
+ if dim[:name] == name
707
+ return i
708
+ end
709
+ }
710
+ return nil
711
+ end
712
+
713
+
714
+
715
+ end