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
data/lib/opendapdir.rb ADDED
@@ -0,0 +1,171 @@
1
+ require 'open-uri'
2
+ require 'numru/gphys'
3
+ require 'date'
4
+
5
+ module NumRu
6
+ class OPeNDAPDir
7
+ def initialize(url)
8
+ @path = url.sub(/\/$/,'')
9
+ @child_dirs = Array.new
10
+ @child_gphys_files = Array.new # files that can have gphysiable data
11
+ @child_plain_files = Array.new # external files (non-opendap access)
12
+ open(url) {|f|
13
+ if f.content_type != 'text/html'
14
+ raise(ArgumentError,"#{url}: Not text/html. Cannot be an OPeNDAP Dir")
15
+ end
16
+ opendapdir = false # to initialize
17
+ while(line = f.gets)
18
+ if /Parent Directory/i =~ line
19
+ opendapdir = true
20
+ break
21
+ end
22
+ end
23
+ if !opendapdir
24
+ raise(ArgumentError,"#{url}: is not likely an OPeNDAP directory.")
25
+ end
26
+ while(line = f.gets)
27
+ case line
28
+ when /<A HREF="(.*)">(.*)<\/a>\s*(.*)$/
29
+ child = { :url => $1 }
30
+ label = $2
31
+ time_size_descr = $3
32
+ if /^(\S+\s+\S+)\s+(\S+)/ =~ time_size_descr
33
+ size = $2
34
+ time = $1
35
+ t = DateTime.parse(time)
36
+ child[:mtime] = Time.local(t.year,t.mon,t.day,t.hour,t.min,t.sec)
37
+ #^ local works with mysql (how about others?)
38
+ if /^([\d\.]+)([KMG])?$/ =~ size
39
+ if $2.nil?
40
+ child[:size] = $1.to_i
41
+ else
42
+ size = $1.to_f
43
+ size *= 1000 if $2=='K'
44
+ size *= 1000000 if $2=='M'
45
+ size *= 10000000 if $2=='G'
46
+ child[:size] = size.to_i
47
+ end
48
+ elsif '-' == size
49
+ child[:size] = nil
50
+ else
51
+ raise "(BUG) new pattern to support : #{size}"
52
+ end
53
+ end
54
+ /^(.*)\/([^\/]+)\/?$/ =~ child[:url]
55
+ dir = $1
56
+ child[:name] = $2
57
+ if /\/$/ =~ child[:url]
58
+ @child_dirs.push(child)
59
+ elsif /\.html$/ !~ label and /\.html$/ =~ child[:name]
60
+ child[:url].sub!(/\.html$/,'')
61
+ child[:name].sub!(/\.html$/,'')
62
+ if /\.nc$/ =~ label # we don't need to limit to .nc files, but..
63
+ @child_gphys_files.push(child)
64
+ end
65
+ elsif dir != @path
66
+ @child_plain_files.push(child)
67
+ else
68
+ raise "(BUG) Unclassified kind of a child : #{child[:url]}"
69
+ end
70
+ # p child
71
+ # print "#{File.basename(child[:url])} #{child[:mtime]} ",child[:size],"\n"
72
+ # print "@@\n"
73
+ end
74
+ end
75
+ }
76
+ end
77
+
78
+ class << self
79
+ alias open new
80
+ end
81
+
82
+ def path
83
+ @path
84
+ end
85
+
86
+ def name
87
+ File.basename(path)
88
+ end
89
+
90
+ def entries
91
+ if @enttries.nil?
92
+ @enttries = @child_dirs.collect{|c| c[:name]} +
93
+ @child_gphys_files.collect{|c| c[:name]} +
94
+ @child_plain_files.collect{|c| c[:name]}
95
+ end
96
+ @enttries
97
+ end
98
+
99
+ def each_dir
100
+ @child_dirs.each{|child|
101
+ dir = OPeNDAPDir.new(child[:url])
102
+ yield(dir, child[:mtime])
103
+ }
104
+ nil
105
+ end
106
+
107
+ # Open dods url as NetCDF files and iterate.
108
+ # It is up to the users to close the files.
109
+ def each_gphys_file
110
+ @child_gphys_files.each{|child|
111
+ begin
112
+ file = NetCDF.open(child[:url])
113
+ yield(file.path, child[:mtime], child[:size], file.class)
114
+ rescue NetcdfSyserr
115
+ warn "#{__FILE__}:#{__LINE__}: **Error neglected** Unable to open #{child[:url]}"
116
+ end
117
+ }
118
+ nil
119
+ end
120
+
121
+ # name_pattern : regexp to limit by name
122
+ #
123
+ def each_file(name_pattern = nil)
124
+ @child_plain_files.each{|child|
125
+ if name_pattern.nil? or name_pattern =~ child[:name]
126
+ yield(child[:url], child[:mtime], child[:size])
127
+ end
128
+ }
129
+ end
130
+
131
+ #def plain_file_paths
132
+ # @child_plain_files.collect{|child| child[:url]}
133
+ #end
134
+
135
+ end
136
+ end
137
+
138
+ if __FILE__ == $0
139
+ include NumRu
140
+ urls = %w(http://coastwatch.chesapeakebay.noaa.gov/dap/edac/qscat_wind/data/
141
+ http://coastwatch.chesapeakebay.noaa.gov/dap/edac/qscat_wind/
142
+ http://stellwagen.er.usgs.gov/cgi-bin/nph-dods/DATAFILES/ECOHAB_II/
143
+ http://dods.ipsl.jussieu.fr/cgi-bin/nph-dods/prism/gridsCF/
144
+ http://test.opendap.org/opendap-3.7/nph-dods/data/ )
145
+ # urls = %w( http://dust.ess.uci.edu/cgi-bin/dods/nph-dods/dodsdata )
146
+ # urls = %w( http://test.opendap.org/opendap-3.7/nph-dods/data/ )
147
+
148
+ urls.each do |url|
149
+ dir = OPeNDAPDir.new(url)
150
+ print dir.path,"\n"
151
+ dir.each_dir{|d,mtime| print " (sub dir) #{d.path} #{mtime}\n"}
152
+
153
+ count = 0
154
+ dir.each_gphys_file do |file, mtime, size|
155
+ print " #{file.path} #{mtime} size:#{size}\n "
156
+ p GPhys::IO.var_names_except_coordinates(file)
157
+ file.close
158
+ count += 1
159
+ break if count >= 3
160
+ end
161
+
162
+ pat = Regexp.union(/readme$/i, /\.txt$/)
163
+ dir.each_file(pat) do |path, mtime, size|
164
+ open(path){ |file|
165
+ print " ***** ",path, " ", mtime, " ", size, "\n"
166
+ file.gets && print($_) && file.gets && print($_)
167
+ }
168
+ end
169
+ end
170
+
171
+ end
data/lib/tar.rb ADDED
@@ -0,0 +1,127 @@
1
+ require "zlib"
2
+
3
+ module Tar
4
+
5
+ Header = [
6
+ ["name" , 100],
7
+ ["mode" , 8],
8
+ ["uid" , 8],
9
+ ["gid" , 8],
10
+ ["size" , 12],
11
+ ["mtime" , 12],
12
+ ["chksum" , 8],
13
+ ["typeflag", 1],
14
+ ["linkname", 100],
15
+ ["magic" , 6],
16
+ ["version" , 2],
17
+ ["uname" , 32],
18
+ ["gname" , 32],
19
+ ["devmajor", 8],
20
+ ["devminor", 8],
21
+ ["prefix" , 155]
22
+ ]
23
+
24
+ TMAGIC = "ustar "
25
+ TVERSION = " "
26
+
27
+ REGTYPE = 0
28
+ DIRTYPE = "5"
29
+
30
+ def cf(io, files)
31
+ lclose = false
32
+ if String === io
33
+ io = File.open(io,"wb")
34
+ lclose = true
35
+ elsif ! IO === io
36
+ raise "the first argument must be IO or String"
37
+ end
38
+ begin
39
+ files.each{|name|
40
+ type = name[-1..-1] == "/" ? "d" : "f"
41
+ if type == "f"
42
+ size = File.stat(name).size
43
+ else
44
+ size = 0
45
+ end
46
+ io.write create_header(name, type, size)
47
+ if type == "f"
48
+ File.open(name,"rb"){|file|
49
+ while (buf = file.read(512))
50
+ io.write buf
51
+ io.write "\000"*(512 - buf.length) unless buf.length == 512
52
+ end
53
+ }
54
+ end
55
+ }
56
+ io.write "\000"*1024
57
+ ensure
58
+ io.close if lclose
59
+ end
60
+ return nil
61
+ end
62
+ module_function :cf
63
+
64
+ def zcf(io, files)
65
+ if IO === io
66
+ gz = Zlib::GzipWriter.new(io)
67
+ lclose = false
68
+ elsif String === io
69
+ gz = Zlib::GzipWriter.open(io)
70
+ lclose = true
71
+ else
72
+ raise "the first argument must be IO or String"
73
+ end
74
+ begin
75
+ cf(gz, files)
76
+ ensure
77
+ lclose ? gz.close : gz.finish
78
+ end
79
+ return nil
80
+ end
81
+ module_function :zcf
82
+
83
+ def create_header(name, type, size)
84
+ hash = Hash.new
85
+ hash["name"] = name
86
+ case type
87
+ when "f"
88
+ hash["mode"] = "0100644"
89
+ hash["typeflag"] = "%i"%REGTYPE
90
+ when "d"
91
+ hash["mode"] = "0000755"
92
+ hash["typeflag"] = "%i"%DIRTYPE
93
+ end
94
+ hash["uid"] = "0001000"
95
+ hash["gid"] = "0001000"
96
+ hash["size"] = "%0#11o"%size
97
+ hash["mtime"] = ("%#o"%Time.now.to_i)[1..-1]
98
+ hash["linkname"] = ""
99
+ hash["magic"] = TMAGIC
100
+ hash["version"] = TVERSION
101
+ hash["uname"] = "gfdnavi"
102
+ hash["gname"] = "gfdnavi"
103
+ hash["devmajor"] = ""
104
+ hash["devminor"] = ""
105
+ hash["prefix"] = ""
106
+ hash["chksum"] = " "*8
107
+ chksum = 0
108
+ hash.each{|n,v|
109
+ v.each_byte{|byte| chksum += byte }
110
+ }
111
+ chksum = "%#o"%chksum
112
+ len = chksum.size
113
+ hash["chksum"][0...len] = chksum
114
+ hash["chksum"][len..len] = "\000"
115
+
116
+ header = ""
117
+ Header.each{|ary|
118
+ str = hash[ary[0]]
119
+ str += "\000"*(ary[1]-str.length) if ary[1] > str.length
120
+ header += str
121
+ }
122
+ header += "\000"*(512-header.length%512)
123
+ return header
124
+ end
125
+ module_function :create_header
126
+
127
+ end
@@ -0,0 +1,65 @@
1
+ desc "Clean all"
2
+ task :clean do
3
+ Rake::Task["clean:diagram_cache"].invoke
4
+ Rake::Task["clean:session_files"].invoke
5
+ Rake::Task["clean:work_dirs"].invoke
6
+ end
7
+
8
+ namespace :clean do
9
+
10
+ desc "Clean diagram cache"
11
+ task :diagram_cache => :environment do
12
+ path = GFDNAVI_DIAGRAM_CACHE_PATH + "/"
13
+ Dir.foreach(path){|fname|
14
+ fname = path + fname
15
+ File.delete(fname) unless File.directory?(fname)
16
+ }
17
+ connection = ActiveRecord::Base.connection
18
+ tables = connection.tables
19
+ if tables.include?("diagram_cache_sessions")
20
+ DiagramCacheSession.destroy_all unless DiagramCacheSession.count == 0
21
+ end
22
+ if tables.include?("diagram_cache_data")
23
+ DiagramCacheDatum.destroy_all unless DiagramCacheDatum.count == 0
24
+ end
25
+ if tables.include?("diagram_caches")
26
+ DiagramCache.destroy_all unless DiagramCache.count == 0
27
+ end
28
+ end
29
+
30
+ desc "Clean session files"
31
+ task :session_files do
32
+ session_dir = "#{RAILS_ROOT}/tmp/sessions"
33
+ Dir.foreach(session_dir){|fname|
34
+ if fname =~ /^ruby_sess\./
35
+ File.delete("#{session_dir}/#{fname}")
36
+ end
37
+ }
38
+ end
39
+
40
+ except_dirs = %w(. .. CVS)
41
+
42
+ desc "Clean work directories"
43
+ task :work_dirs => :environment do
44
+ path = GFDNAVI_WORK_PATH + "/"
45
+ Dir.foreach(path){|dname|
46
+ next if except_dirs.include?(dname)
47
+ dname = path + dname + "/"
48
+ next unless File.directory?(dname)
49
+ Dir.foreach(dname){|fname|
50
+ begin
51
+ File.delete(dname + fname) unless except_dirs.include?(fname)
52
+ rescue
53
+ # Suppose that fname is a directory
54
+ Dir.foreach(dname + fname){|subfname|
55
+ File.delete(dname + fname +'/' + subfname) \
56
+ unless except_dirs.include?(subfname)
57
+ }
58
+ Dir.delete(dname + fname)
59
+ end
60
+ }
61
+ Dir.delete(dname)
62
+ }
63
+ end
64
+
65
+ end
@@ -0,0 +1,316 @@
1
+ desc "Setup all"
2
+
3
+ task :setup_noquestions do
4
+ $noquestions = true
5
+ Rake::Task["setup:tables"].invoke
6
+ # UPDATE NODE INFO
7
+ NodeEntityAbstract.define_name_methods
8
+ Rake::Task["setup:tree"].invoke
9
+ Rake::Task["setup:functions"].invoke
10
+ Rake::Task["setup:draw_methods"].invoke
11
+ end
12
+
13
+ task :setup => :environment do
14
+ if exist_tables.include?("nodes") && Node.count > 0
15
+ print "This will clear all the database tables and caches.\n"
16
+ print "If you want just to rebuild database tables, use \"rake update\",\n"
17
+ print " or update tree, use \"rake update:tree\",\n"
18
+ print "instead.\n"
19
+ print "Are you sure to continue? (no/yes, default:no) "
20
+ res = $stdin.gets.chomp!
21
+ unless res == "yes"
22
+ abort "execution was canceled"
23
+ end
24
+ end
25
+ Rake::Task["clean"].invoke
26
+ Rake::Task["setup:tables"].invoke
27
+ # UPDATE NODE INFO
28
+ Rake::Task["setup:tree"].invoke
29
+ Rake::Task["setup:functions"].invoke
30
+ Rake::Task["setup:draw_methods"].invoke
31
+ end
32
+
33
+ namespace :setup do
34
+ desc "Setup database tables"
35
+ task :tables => :environment do
36
+ command = 'ruby "' + File.join(File.expand_path(RAILS_ROOT), 'db', 'dump_db.rb') + '"'
37
+ unless system( command )
38
+ raise "failed to execute '#{command}'"
39
+ end
40
+ fname_user = File.join(RAILS_ROOT,"db","user.yml")
41
+ if File.exist?(fname_user)
42
+ unless $noquestions
43
+ print "Do you want to keep user information? (yes/no, default:yes): "
44
+ res = $stdin.gets.chomp!
45
+ else
46
+ res = "yes"
47
+ end
48
+ if res == "no"
49
+ suffix = Time.now.strftime("%Y%m%d%H%M%S")
50
+ File.rename(fname_user, fname_user+"."+suffix)
51
+ fname_group = File.join(RAILS_ROOT,"db","group.yml")
52
+ File.rename(fname_group, fname_group+"."+suffix) if File.exist?(fname_group)
53
+ end
54
+ end
55
+
56
+ connection = ActiveRecord::Base.connection
57
+ connection.drop_table("schema_info") if connection.tables.include?("schema_info")
58
+ connection.drop_table("schema_migrations") if connection.tables.include?("schema_migrations")
59
+ Rake::Task["db:migrate"].invoke
60
+
61
+ if File.exist?(fname_user)
62
+ Rake::Task["setup:user"].invoke
63
+ else
64
+ Rake::Task["setup:root_password"].invoke
65
+ end
66
+
67
+ end
68
+
69
+ desc "Set root password"
70
+ task :root_password => :environment do
71
+ unless /mswin(?!ce)|mingw|bccwin/ =~ RUBY_PLATFORM
72
+ system("stty -echo > /dev/null 2>&1") #for unix-like systems
73
+ end
74
+ while true
75
+ while true
76
+ print "Input password for root (number of characters must be 5 to 40): "
77
+ pw2 = $stdin.gets.chomp!
78
+ if pw2.length < 5
79
+ print "The password which you input is too short.\n"
80
+ elsif pw2.length > 40
81
+ print "The password which you input is too long.\n"
82
+ else
83
+ break
84
+ end
85
+ end
86
+ print "\nRepeat password: "
87
+ tmp = $stdin.gets.chomp!
88
+ break if tmp == pw2
89
+ print "\nNot correct!\n"
90
+ end
91
+ unless /mswin(?!ce)|mingw|bccwin/ =~ RUBY_PLATFORM
92
+ system("stty echo > /dev/null 2>&1") #for unix-like systems
93
+ end
94
+ print("\n")
95
+ if root = User.find_by_login("root")
96
+ if root.change_password(pw2,tmp)
97
+ print "changing was succeded\n"
98
+ else
99
+ print "changing was not succeded\n"
100
+ end
101
+ else
102
+ root = User.new( :login => "root",
103
+ :full_name => "default super user",
104
+ :email_address => GFDNAVI_ADMIN_EMAIL,
105
+ :affiliation => "GFDNAVI",
106
+ :password => pw2,
107
+ :password_confirmation => pw2 )
108
+ root.super_user = true
109
+ root.internal_user = true
110
+ root.save!
111
+ end
112
+ end
113
+
114
+ desc "Create or restore User information"
115
+ task :user => :environment do
116
+ %w(user group).each{|table_name|
117
+ if exist_tables.include?(table_name)
118
+ model = ActiveRecord.class_eval(table_name.classify)
119
+ model.delete_all
120
+ end
121
+ }
122
+ fname = File.join(RAILS_ROOT,"db","user.yml")
123
+ if File.exist?(fname)
124
+ yml = YAML.load(File.read(fname))
125
+ raise("user data is invalid") unless Hash===yml
126
+ yml.each{|u,hash|
127
+ pw = hash.delete("password")
128
+ su = hash.delete("super_user")
129
+ user = User.new(hash)
130
+ pw_tmp = "temporary passowrd"
131
+ user.password = pw_tmp
132
+ user.password_confirmation = pw_tmp
133
+ user.super_user = su
134
+ User.transaction do
135
+ user.password = pw
136
+ user.instance_eval("create_without_callbacks") || raise(RecodeNotSaved)
137
+ end
138
+ }
139
+ end
140
+ fname = File.join(RAILS_ROOT,"db","group.yml")
141
+ if File.exist?(fname)
142
+ yml = YAML.load(File.read(fname))
143
+ raise("group data is invalid") unless Hash===yml
144
+ yml.each{|g,hash|
145
+ group = Group.new(hash)
146
+ group.save!
147
+ }
148
+ end
149
+ end
150
+
151
+ desc "Setup tree of directories and variables"
152
+ task :tree => :environment do
153
+ Rake::Task["clean:diagram_cache"].invoke
154
+ %w( draw_parameters
155
+ keyword_attributes spatial_and_time_attributes
156
+ node_relations node_lineages
157
+ knowledge_figures knowledges
158
+ actual_files images variables directories
159
+ nodes).each{|table_name|
160
+ if exist_tables.include?(table_name)
161
+ model = ActiveRecord.class_eval(table_name.classify)
162
+ model.delete_all
163
+ end
164
+ }
165
+ command = 'ruby "' + File.join(File.expand_path(RAILS_ROOT), 'db', 'register_directory_tree.rb') + '"'
166
+ unless system( command )
167
+ raise "failed to execute '#{command}'"
168
+ end
169
+ end
170
+
171
+ desc "Setup default functions database"
172
+ task :functions => :environment do
173
+ print "registeration functions\n"
174
+ create_value_type_table
175
+ unless Function.table_exists?
176
+ raise "functions table does not exist"
177
+ end
178
+ unless FunctionOutput.table_exists?
179
+ raise "function_outputs table does not exist"
180
+ end
181
+ unless FunctionArgument.table_exists?
182
+ raise "function_arguments table does not exist"
183
+ end
184
+ FunctionArgument.delete_all
185
+ FunctionOutput.delete_all if FunctionOutput.table_exists?
186
+ Function.delete_all if Function.table_exists?
187
+ Node.delete_all(['node_type = ?',Node::FUNCTION])
188
+ dir = File.join(File.expand_path(RAILS_ROOT), 'db', 'functions')
189
+ root = User.find_by_login("root")
190
+ regist_functions(dir, root, true)
191
+ Dir.foreach(GFDNAVI_USER_PATH){|dname|
192
+ user = User.find_by_login(dname)
193
+ dir = File.join(GFDNAVI_USER_PATH, dname, "functions")
194
+ if user && File.exist?(dir)
195
+ regist_functions(dir, user)
196
+ end
197
+ }
198
+ end
199
+
200
+ desc "Setup default draw methods database"
201
+ task :draw_methods => :environment do
202
+ print "registeration draw methods\n"
203
+ create_value_type_table
204
+ unless DrawMethod.table_exists?
205
+ raise "draw_methods table does not exist"
206
+ end
207
+ unless DrawMethodAttribute.table_exists?
208
+ raise "draw_method_options table does not exist"
209
+ end
210
+ DrawMethodAttribute.delete_all
211
+ DrawMethod.delete_all
212
+ Node.delete_all(['node_type = ?',Node::DRAW_METHOD])
213
+ dir = File.join(File.expand_path(RAILS_ROOT), 'db', 'draw_methods')
214
+ root = User.find_by_login("root")
215
+ regist_draw_methods(dir, root, true)
216
+ Dir.foreach(GFDNAVI_USER_PATH){|dname|
217
+ user = User.find_by_login(dname)
218
+ dir = File.join(GFDNAVI_USER_PATH, dname, "draw_methods")
219
+ if user && File.exist?(dir)
220
+ regist_draw_methods(dir, user)
221
+ end
222
+ }
223
+ end
224
+
225
+ end
226
+
227
+
228
+
229
+ def create_value_type_table
230
+ if ValueType.table_exists?
231
+ %w(int float string array_int array_float array_string boolean).each{|typ|
232
+ ValueType.new(:name => typ).save! unless ValueType.find_by_name(typ)
233
+ }
234
+ end
235
+ end
236
+
237
+
238
+ def regist_functions(dir, user, default=false)
239
+ path = "/usr/#{user.login}/functions"
240
+ Node.make_user_directory(path, user, default ? 4 : 0)
241
+ Dir.foreach(dir){|yml|
242
+ next unless /\.yml$/=~yml
243
+ fname = File.join(dir,yml)
244
+ fixture = YAML.load( File.read(fname) )
245
+ arguments = fixture.delete(:arguments)
246
+ outputs = fixture.delete(:outputs)
247
+ func = Function.new
248
+ fixture.each{|k,v|
249
+ func.send(k.to_s+"=",v)
250
+ }
251
+ func.path = File.join(path, func.name)
252
+ func.owner = user
253
+ func.default = default
254
+ func.other_mode = default ? 4 : 0
255
+ Function.transaction{
256
+ FunctionOutput.transaction{
257
+ FunctionArgument.transaction{
258
+ func.save!
259
+ func.function_outputs.create(outputs)
260
+ if arguments
261
+ arguments.each{|arg|
262
+ typ = arg.delete(:value_type)
263
+ fa = FunctionArgument.new(arg)
264
+ fa.value_type = ValueType.find_by_name(typ)
265
+ fa.function = func
266
+ fa.save!
267
+ }
268
+ end
269
+ }
270
+ }
271
+ }
272
+ }
273
+ end
274
+
275
+
276
+
277
+ def exist_tables
278
+ ActiveRecord::Base.connection.tables
279
+ end
280
+
281
+
282
+ def regist_draw_methods(dir, user, default=false)
283
+ path = "/usr/#{user.login}/draw_methods"
284
+ Node.make_user_directory(path, user, default ? 4 : 0)
285
+ Dir.foreach(dir){|yml|
286
+ next unless /\.yml$/=~yml
287
+ fname = File.join(dir,yml)
288
+ fixture = YAML.load( File.read(fname) )
289
+ attrs = fixture.delete(:attributes)
290
+ dm = DrawMethod.new
291
+ fixture.each{|k,v|
292
+ dm.send(k.to_s+"=",v)
293
+ }
294
+ dm.path = File.join(path, dm.name)
295
+ dm.owner = user
296
+ dm.default = default
297
+ dm.other_mode = default ? 4 : 0
298
+ DrawMethod.transaction{
299
+ DrawMethodAttribute.transaction{
300
+ dm.save!
301
+ if attrs
302
+ attrs.each{|attr|
303
+ typ = attr.delete(:type)
304
+ unless typ
305
+ raise "type must be set for attributes"
306
+ end
307
+ dma = DrawMethodAttribute.new(attr)
308
+ dma.value_type = ValueType.find_by_name(typ)
309
+ dma.draw_method = dm
310
+ dma.save!
311
+ }
312
+ end
313
+ }
314
+ }
315
+ }
316
+ end