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,31 @@
1
+ def add_conditions(conditions, new_condition, andor="AND")
2
+ if conditions.nil?
3
+ conditions = ["(#{new_condition})"]
4
+ elsif Array === conditions
5
+ conditions[0] += " #{andor} (#{new_condition})"
6
+ elsif String === conditions
7
+ conditions += " #{andor} (#{new_condition})"
8
+ else
9
+ raise "bug"
10
+ end
11
+ conditions
12
+ end
13
+
14
+
15
+ def concat(*ary)
16
+ if ActiveRecord::Base.connection.adapter_name=="MySQL"
17
+ "concat(#{ary.join(",")})"
18
+ else
19
+ "#{ary.join("||")}"
20
+ end
21
+ end
22
+
23
+
24
+ def boolean_condition(name)
25
+ if ActiveRecord::Base.connection.adapter_name=="SQLite"
26
+ "#{name}=='t'"
27
+ else
28
+ name
29
+ end
30
+ end
31
+
@@ -0,0 +1,50 @@
1
+ require_dependency "user"
2
+
3
+ module BasicAuthorization
4
+ protected
5
+
6
+ def basic_authorization
7
+ return get_basic_user
8
+ end
9
+
10
+ def basic_authorization_required
11
+ if get_basic_user
12
+ if @basic_login == "guest"
13
+ @basic_login = nil
14
+ return false
15
+ end
16
+ return true
17
+ else
18
+ return false
19
+ end
20
+ end
21
+
22
+ def basic_login
23
+ @basic_login
24
+ end
25
+
26
+ private
27
+ def get_basic_user
28
+ if src = request.env["HTTP_AUTHORIZATION"]
29
+ type, body = src.split
30
+ if type == "Basic"
31
+ login, password = Base64.decode64(body).split(":")
32
+ if login == "guest"
33
+ @basic_login = "guest"
34
+ return true
35
+ end
36
+ if ( user = User.authenticate(login, password) )
37
+ @basic_login = login
38
+ return true
39
+ end
40
+ end
41
+ else
42
+ @basic_login = "guest"
43
+ return true
44
+ end
45
+ response.headers["WWW-Authenticate"] = 'Basic realm="guest can access without password"'
46
+ render :text => "Atuthorization requireed", :layout => false, :status => :unauthorized
47
+ return false
48
+ end
49
+
50
+ end
@@ -0,0 +1,108 @@
1
+ module API
2
+ class API::Node < ActiveResource::Base
3
+ def self.top_directory_nodes
4
+ self.find(:all, :from => :to_directory_nodes)
5
+ end
6
+
7
+ def parent
8
+ @@parent ||= Hash.new
9
+ if @@parent.has_key?(path)
10
+ @@parent[path]
11
+ else
12
+ begin
13
+ parent = self.class.find(:one, :from => "/nodes/#{self.id}/parent.xml")
14
+ rescue ActiveResource::ResourceNotFound
15
+ parent = nil
16
+ end
17
+ @@parent[path] = parent
18
+ end
19
+ end
20
+
21
+ def children
22
+ @@children ||= Hash.new
23
+ @@children[path] ||= self.class.find(:all, :from => "/nodes/#{self.id}/children.xml")
24
+ end
25
+
26
+ def keyword_attributes
27
+ @@keyword_attributes ||= Hash.new
28
+ @@keyword_attributes[path] ||= self.class.find(:all, :from => "/nodes/#{self.id}/keyword_attributes.xml")
29
+ end
30
+
31
+ %w(directory variable image knowledge).each{|type|
32
+ eval <<"EOF"
33
+ def #{type}_nodes(user=nil)
34
+ @@#{type}_nodes ||= Hash.new
35
+ if tn = @@#{type}_nodes[path]
36
+ return tn
37
+ else
38
+ @@#{type}_nodes[path] = (ary = Array.new)
39
+ self.children.each{|node|
40
+ if node.node_type == "#{type}"
41
+ ary.push node
42
+ end
43
+ }
44
+ return ary
45
+ end
46
+ end
47
+ def count_#{type}_nodes(user=nil)
48
+ #{type}_nodes.length
49
+ end
50
+ def #{type}?
51
+ node_type == "#{type}"
52
+ end
53
+ EOF
54
+ }
55
+
56
+ def has_directory_nodes?(user=nil)
57
+ self.num_dirs.length > 0
58
+ end
59
+
60
+ def entity
61
+ self
62
+ end
63
+
64
+ def full_path
65
+ self.class.site.to_s + "@" + path
66
+ end
67
+
68
+ def stdname(name)
69
+ self.keyword_attributes.each{|ka|
70
+ if KeywordAttribute::StdName[name].include?(ka.name)
71
+ return ka
72
+ end
73
+ }
74
+ return nil
75
+ end
76
+
77
+ def references(*arg)
78
+ []
79
+ end
80
+ def referenced_by(*arg)
81
+ []
82
+ end
83
+ def knowledges(*arg)
84
+ []
85
+ end
86
+ def plain_file
87
+ false
88
+ end
89
+
90
+ end
91
+ end
92
+
93
+ Node_Remote = Array.new
94
+ if GFDNAVI_OTHER_GFDNAVI_SERVERS
95
+ module API
96
+ end
97
+ GFDNAVI_OTHER_GFDNAVI_SERVERS.each_with_index{|gs,id|
98
+ mod_name = "API::Server#{id}"
99
+ eval <<"EOF"
100
+ module #{mod_name}
101
+ class Node < API::Node
102
+ self.site = "#{gs}"
103
+ end
104
+ end
105
+ Node_Remote.push #{mod_name}::Node
106
+ EOF
107
+ }
108
+ end
@@ -0,0 +1,472 @@
1
+ require "fileutils"
2
+ require "vizshot_gfdnavi"
3
+ require "file_gfdnavi"
4
+ require "open-uri"
5
+
6
+ module ExecuteAnalysis
7
+
8
+ WORK_FILE_BASENAME = "temp"
9
+
10
+ private
11
+
12
+ def work_dir
13
+ if "ActionController::TestSession" == session.class.to_s # for test
14
+ dir = File.join(GFDNAVI_WORK_PATH, "test")
15
+ else
16
+ dir = File.join(GFDNAVI_WORK_PATH, Digest::MD5.hexdigest(session.session_id)[0,16])
17
+ end
18
+ FileUtils.makedirs(dir) unless File.exist?(dir)
19
+ return dir
20
+ end
21
+
22
+ def debug(obj)
23
+ obj = obj.inspect unless String === obj
24
+ if GFDNAVI_DEBUG
25
+ # STDOUT.print obj,"\n"
26
+ STDERR.print obj,"\n"
27
+ end
28
+ end
29
+
30
+ def system_with_error(command, prio)
31
+ debug( command )
32
+ if /linux/ =~ Config::CONFIG["arch"]
33
+ rr,rw = IO.pipe
34
+ er,ew = IO.pipe
35
+ pid = fork {
36
+ rr.close
37
+ er.close
38
+ STDERR.reopen(ew)
39
+ begin
40
+ Process.setpriority(Process::PRIO_PROCESS, 0, prio)
41
+ rescue Errno::EACCES
42
+ end
43
+ res = system(command)
44
+ rw.print res
45
+ rw.close
46
+ ew.close
47
+ }
48
+ rw.close
49
+ ew.close
50
+ Process.waitpid(pid)
51
+ res = rr.gets == "true" ? true : false
52
+ mes = er.readlines
53
+ debug( mes.join("") ) unless res
54
+ mes = mes.delete_if{|me| /^\s*from / =~ me }.collect{|me|
55
+ me.sub(/[\/\w\.]*\.rb:\d*:in /,"")
56
+ }
57
+ mes = mes.join("").gsub(/\n/,"<br/>")
58
+ rr.close
59
+ er.close
60
+ if res
61
+ mes = nil
62
+ end
63
+ else
64
+ res = system( command )
65
+ mes = res ? nil : "failed to execute"
66
+ end
67
+ ActiveRecord::Base.connection.reconnect!
68
+ return [res, mes]
69
+ end
70
+
71
+ def get_ofname
72
+ files = Dir["#{work_dir}/#{WORK_FILE_BASENAME}_*.nc"].sort
73
+ if files.length >0
74
+ files[-1] =~ /.*_(\d*).nc$/
75
+ num = $1.next
76
+ else
77
+ num = "000"
78
+ end
79
+ return "#{work_dir}/#{WORK_FILE_BASENAME}_#{num}.nc"
80
+ end
81
+
82
+
83
+
84
+ def variables_set(params_vars)
85
+ analysis = session[:analysis] || Analysis.new
86
+ analysis.user = session[:user]
87
+ analysis.variable_clear
88
+ params_vars && params_vars.each do |k,v|
89
+ var = Variable.find(:first, :conditions => ["path=?", k], :user => session[:user] )
90
+
91
+ if var
92
+ session[:variables_list] ||= Array.new
93
+ session[:variables_list].push(var.path) unless session[:variables_list].include?(var.path)
94
+ elsif /^http:\/\/([^\/]*)(.*)$/ =~ k
95
+ ary = k.split("/")
96
+ path = ary[0..-2].join("/")
97
+ name = ary[-1]
98
+ begin
99
+ io = open(path+".html")
100
+ io.each_line{|line|
101
+ if /OPeNDAP/ =~ line
102
+ opendap = true
103
+ break
104
+ end
105
+ }
106
+ opendap = false
107
+ rescue OpenURI::HTTPError
108
+ opendap = false
109
+ end
110
+ if opendap
111
+ else
112
+ ofname = get_ofname
113
+ File.open(ofname,"wb"){|file|
114
+ io = open(path)
115
+ while (str = io.read(1024))
116
+ file.write str
117
+ end
118
+ }
119
+ path = ofname.sub(/^#{GFDNAVI_WORK_PATH}/,"")
120
+ end
121
+ var = Variable.new(:path => "temporary:#{path}/#{vname}", :name => vname, :file => path )
122
+ session[:temp_variables_list] ||= Array.new
123
+ session[:temp_variables_list].push var
124
+ elsif /temp_(\d*)/ =~ k
125
+ var = session[:temp_variables_list][$1.to_i]
126
+ end
127
+ if var && v!="0"
128
+ analysis.variables.push var unless analysis.variables.include?(var)
129
+ else
130
+ analysis.variables.delete var
131
+ end
132
+ end
133
+ if ( var = analysis.variables[0] )
134
+ ans = [var]
135
+ pa = var
136
+ while (pa = pa.parent)
137
+ ans.unshift pa
138
+ end
139
+ ans.each{|v|
140
+ v.draw_parameters.each{|dp|
141
+ analysis[dp.name] = dp.value
142
+ }
143
+ }
144
+ end
145
+ return analysis
146
+ end
147
+
148
+
149
+ def clear_diagram_files
150
+ if ( dir = work_dir )
151
+ files = Dir[dir+"/gfdnavi_*.png"].each do |file|
152
+ File.delete(file)
153
+ end
154
+ end
155
+ session[:diagrams] = nil
156
+ end
157
+
158
+
159
+ def get_diagram(analysis, keep=nil)
160
+ res = analysis.get_vizshots(WORK_FILE_BASENAME)
161
+ unless res[0]
162
+ return false, res[1]
163
+ else
164
+ keep = analysis.draw_keep if keep.nil?
165
+ return vizs_to_diagram(res[1], keep, analysis.draw_share)
166
+ end
167
+ end
168
+
169
+ def vizs_to_diagram(vizs, keep, share, pile=true)
170
+ diagrams = Array.new
171
+ draw_or_cache = [0,0]
172
+ NumRu::VizShot.dumpdir = work_dir
173
+ vizs.length.times{|i|
174
+ viz = vizs[i]
175
+ msss = nil
176
+ diagram_cache = nil
177
+ # if !pile && ( diagram_cache = find_diagram_cache(viz) )
178
+ if (diagram_cache = find_diagram_cache(viz))
179
+ draw_or_cache[1] += 1
180
+ flag = true
181
+ else
182
+ viz.dump_code( nil, false, :image_dump => true, :for => :in )
183
+ wdir = work_dir
184
+ wdir.gsub!(/\//,File::ALT_SEPARATOR) if File::ALT_SEPARATOR
185
+ command = "cd #{wdir} && ruby \"#{work_dir}/#{WORK_FILE_BASENAME}.rb\""
186
+ flag, mess = system_with_error(command, 10)
187
+ diagram_fname = "#{work_dir}/#{WORK_FILE_BASENAME}_001.png"
188
+ # if flag && !pile
189
+ if flag
190
+ diagram_cache = push_diagram_cache(diagram_fname, viz, share)
191
+ end
192
+ draw_or_cache[0] += 1
193
+ end
194
+ if flag
195
+ keep2 = i==0 ? keep : true
196
+ dir = work_dir
197
+ return nil unless dir
198
+ diagrams.push diagram_cache
199
+ else
200
+ messages = "could not draw diagram<br/>"
201
+ if mess
202
+ messages += mess
203
+ else
204
+ messages += "[BUG] cannot move diagram file"
205
+ end
206
+ return false, messages
207
+ end
208
+ }
209
+ return true, diagrams, draw_or_cache
210
+ end
211
+
212
+ def find_diagram_cache(viz)
213
+ viz_yml = viz.to_yaml
214
+ vs = viz.get_variables.each{|v|
215
+ unless v.id
216
+ return nil
217
+ end
218
+ v.diagram_caches(true).each{|dc|
219
+ if YAML.load(dc.vizshot) == YAML.load(viz_yml)
220
+ if (dcs = dc.diagram_cache_sessions.find_by_session(session.session_id))
221
+ if session[:analysis] && session[:analysis].draw_share && !dcs.share
222
+ dcs.share = true
223
+ dcs.save!
224
+ end
225
+ elsif !( /^aws/ =~ session.session_id )
226
+ dcs = DiagramCacheSession.new
227
+ dcs.diagram_cache = dc
228
+ dcs.session = session.session_id
229
+ dcs.save!
230
+ end
231
+ return dc
232
+ end
233
+ }
234
+ }
235
+ return nil
236
+ end
237
+
238
+ def push_diagram_cache(fname_from, viz, share)
239
+ return nil if viz.nil?
240
+ dc = DiagramCache.new
241
+ dc.vizshot = viz.to_yaml
242
+ fname_dest = File.temp_name(GFDNAVI_DIAGRAM_CACHE_PATH, ".png")
243
+ File.rename(fname_from, fname_dest)
244
+ dc.path = fname_dest
245
+ analysis = Analysis.from_vizshot(viz)
246
+ analysis.user = session[:user]
247
+ dc.label = analysis.diagram_label
248
+ dc.save!
249
+ dcs = DiagramCacheSession.new
250
+ dcs.diagram_cache = dc
251
+ dcs.session = session.session_id
252
+ dcs.share = share
253
+ dcs.save!
254
+ viz.get_variables.each{|v|
255
+ if Variable===v && v.id
256
+ v = Variable===v ? v : Variable.find(v)
257
+ dcd = DiagramCacheDatum.new
258
+ dcd.diagram_cache = dc
259
+ dcd.variable = v
260
+ dcd.save!
261
+ end
262
+ }
263
+ return dc
264
+ end
265
+
266
+ def viz_to_script_and_data(viz, work_dir)
267
+ dir = work_dir
268
+ NumRu::VizShot.dumpdir = dir
269
+ basename = "gfdnavi"
270
+ paths = viz.dump_code_and_data(basename, false, :for => :out, :basename => basename)
271
+ names = paths.collect{|path| File.basename(path)}
272
+ command = "cd #{dir} && ruby -r #{File.join(Dir.pwd,"lib/tar")} -e 'Tar.zcf(\"#{WORK_FILE_BASENAME}.tar.gz\", #{names.inspect})'"
273
+ begin
274
+ res = system_with_error(command, 19)
275
+ if res[0]
276
+ return true, "#{work_dir}/#{WORK_FILE_BASENAME}.tar.gz"
277
+ else
278
+ return false, res[1]
279
+ end
280
+ ensure
281
+ File.delete(*paths)
282
+ end
283
+ end
284
+
285
+
286
+
287
+ def create_new_variable(analysis, work_dir)
288
+ vlen = analysis.variables.length
289
+ function = analysis.function
290
+ function_variables_order = analysis.function_variables_order
291
+ function_arguments = analysis.function_arguments
292
+ func_nvars = function.nvars
293
+ unless function && (vlen==func_nvars || function_variables_order)
294
+ return false, "invalid operation was required"
295
+ else
296
+ messages = ""
297
+ new_vars = Array.new
298
+ variables = analysis.variables
299
+ (vlen/func_nvars).times{|n|
300
+ if func_nvars == 1
301
+ vars = [ variables[n] ]
302
+ else
303
+ vars = function_variables_order[n].collect{|i| variables[i] }
304
+ end
305
+ vname = vars.collect{|v| v.name }.join("_")
306
+ outputs = function.function_outputs
307
+ ovnames = Array.new
308
+ attrs = Array.new
309
+ outputs.length.times{|i|
310
+ output = outputs[i]
311
+ ovnames[i] = "#{vname}_#{output.subscript}"
312
+ attrs[i] = [["analysis", output.description + " calculated from " + vname]]
313
+ }
314
+ fa = function.function_arguments
315
+ args_length = fa.length
316
+ if args_length != 0
317
+ func_args = Array.new
318
+ args_length.times{|i|
319
+ func_args[i] = function_arguments[i] || fa[i].default
320
+ func_args[i] = func_args[i].inspect
321
+ }
322
+ else
323
+ func_args = nil
324
+ end
325
+ script = function.script
326
+ owner = function.owner
327
+ nvars = vars.length
328
+ names = vars.collect{|var| [var.fname, var.vname]}
329
+ code = <<"EOF"
330
+ require "numru/gphys"
331
+ begin
332
+ require File.dirname(__FILE__)+"/../../../lib/gphys_gfdnavi"
333
+ rescue LoadError
334
+ end
335
+ begin
336
+ require File.dirname(__FILE__)+"/../../../../lib/gphys_gfdnavi"
337
+ rescue LoadError
338
+ end
339
+ include NumRu
340
+
341
+ GPhys::read_size_limit_2 = #{GPHYS_READ_SIZE_LIMIT_2.inspect}
342
+ GPhys::read_size_limit_1 = #{GPHYS_READ_SIZE_LIMIT_1.inspect}
343
+
344
+ gphys = Array.new
345
+ EOF
346
+ nvars.times do |i|
347
+ code +=<<"EOF"
348
+ if (arg = ARGV.shift)
349
+ arg = arg.split(",")
350
+ fname#{i} = arg.length==1 ? arg.first : arg
351
+ else
352
+ fname#{i} = "gfdnavi#{i}.nc"
353
+ end
354
+ vname#{i} = "#{names[i][1]}"
355
+ gphys[#{i}] = GPhys::IO.open(fname#{i}, vname#{i})
356
+ gphys[#{i}] = gphys[#{i}].cut(#{analysis.index.inspect})
357
+ EOF
358
+ end
359
+ code +=<<"EOF"
360
+ ovnames = Array.new
361
+ EOF
362
+ ovnames.length.times do |i|
363
+ code +=<<"EOF"
364
+ ovnames[#{i}] = "#{ovnames[i]}"
365
+ EOF
366
+ end
367
+ if script
368
+ code +=<<"EOF"
369
+ args = Array.new
370
+ EOF
371
+ arg = Array.new
372
+ if Array===func_args
373
+ func_args.length.times do |i|
374
+ str = func_args[i]
375
+ if /^(\[.*), ""\]$/ =~ str
376
+ str = $1+"]"
377
+ end
378
+ code +=<<"EOF"
379
+ args[#{i}] = #{str}
380
+ EOF
381
+ arg.push "arg#{i}"
382
+ end
383
+ end
384
+ nvars.times{|i| arg.push "gphys#{i}"}
385
+ arg = arg.join(", ")
386
+ code +=<<"EOF"
387
+ proc = Proc.new{|#{arg}|
388
+ EOF
389
+ unless owner.super_user?
390
+ code +=<<"EOF"
391
+ $SAFE = 3
392
+ EOF
393
+ end
394
+ code +=<<"EOF"
395
+ #{script}
396
+ }
397
+ gphys = proc.call(*(args+gphys))
398
+ if !gphys.is_a?(Array)
399
+ gphys = [gphys]
400
+ end
401
+ if !gphys[0].is_a?(GPhys)
402
+ raise "Return value of the block must be a GPhys or an Array of GPhys"
403
+ end
404
+ EOF
405
+ end
406
+ code +=<<"EOF"
407
+ ofname = ARGV.shift || "output.nc"
408
+ file = NetCDF.create(ofname)
409
+ $SAFE=1
410
+ gphys.length.times do |i|
411
+ gp = gphys[i]
412
+ gp.name = ovnames[i]
413
+ GPhys::IO.write( file, gp )
414
+ end
415
+ file.close
416
+ EOF
417
+ args = names.collect{|f,v| Array===f ? f.join(",") : f}
418
+ ofname = get_ofname
419
+ args.push ofname
420
+ args = args.join(" ")
421
+ debug( code )
422
+ script_name = "#{work_dir}/#{WORK_FILE_BASENAME}.rb"
423
+ File.open(script_name,"w"){|file|
424
+ file.print code
425
+ }
426
+ command = "ruby #{script_name} #{args}"
427
+ res = system_with_error(command, 19)
428
+ if res[0]
429
+ nvars = ovnames.length
430
+ nvars.times{|i|
431
+ name = ovnames[i]
432
+ var = Variable.new
433
+ var.file = "temporary:#{ofname.sub(/^#{GFDNAVI_WORK_PATH}/,"")}"
434
+ var.path = File.join(var.file, name)
435
+ var.name = name
436
+ vars.each{|v|
437
+ var.references_tmp << v
438
+ }
439
+ if vars[0].spatial_and_time_attributes[0]
440
+ # var.starttime = Date.new()
441
+ # var.endtime = Date.new()
442
+ end
443
+ if attrs && attrs[i]
444
+ attrs[i].each do |k,v|
445
+ var.keyword_attributes.build({:name => k, :value => v})
446
+ end
447
+ end
448
+ new_vars.push var
449
+ }
450
+ else
451
+ messages += "faild to create some variable<br/>" + res[1]
452
+ end
453
+ }
454
+ return new_vars, messages
455
+ end
456
+ end
457
+
458
+ def dest_fname(path,suffix)
459
+ page = "000"
460
+ files = Dir[path+"/gfdnavi_*.#{suffix}"].sort
461
+ if files.length >0
462
+ files[-1] =~ /.*gfdnavi_(\d*)\.#{suffix}$/
463
+ page = $1.next
464
+ end
465
+ fname = "#{path}/gfdnavi_#{page}.#{suffix}"
466
+ dname = File.dirname( fname )
467
+ File.makedirs( dname ) unless File.exists?( dname )
468
+ return [fname, page.to_i]
469
+ end
470
+
471
+
472
+ end