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,75 @@
1
+ class Function < NodeEntityAbstract
2
+ has_many :function_outputs, :order => :position, :dependent => :destroy
3
+ has_many :function_arguments, :order => :position, :dependent => :destroy
4
+
5
+ validates_presence_of :nvars, :script
6
+
7
+ before_save :check_name
8
+ after_update :update_yml
9
+ after_save :update_yml
10
+
11
+ def get_script
12
+ result = ""
13
+ function_arguments.length.times{|i|
14
+ arg = function_arguments[i]
15
+ result += " arg#{i} = arg#{i}.#{to_type(arg.name)}\n"
16
+ }
17
+ result += script
18
+ return result
19
+ end
20
+
21
+ protected
22
+
23
+ def check_name
24
+ func = Function.find(:first, :conditions=>["name=?",node.name],:user=>:all)
25
+ if func && func != self
26
+ errors.add("name", "must be uniq")
27
+ return false
28
+ end
29
+ end
30
+
31
+ def update_yml
32
+ return if default
33
+ h = Hash.new
34
+ h[:name] = self.name
35
+ h[:description] = self.description
36
+ h[:nvars] = self.nvars
37
+ h[:script] = self.script
38
+ ary = Array.new
39
+ function_arguments.each{|fa|
40
+ h2 = Hash.new
41
+ h2[:description] = fa.description
42
+ h2[:value_type] = fa.value_type.name
43
+ h2[:default] = fa.default
44
+ ary.push h2
45
+ }
46
+ h[:arguments] = ary if ary.length > 0
47
+ ary = Array.new
48
+ function_outputs.each{|fo|
49
+ h2 = Hash.new
50
+ h2[:name] = fo.name
51
+ h2[:subscript] = fo.subscript
52
+ h2[:description] = fo.description
53
+ ary.push h2
54
+ }
55
+ h[:outputs] = ary if ary.length > 0
56
+ yml = node.add_prefix(self.path)+".yml"
57
+ File.open(yml,"w"){|file|
58
+ file.print h.to_yaml
59
+ }
60
+ end
61
+
62
+ def to_type(type)
63
+ case type.value_type
64
+ when "int"
65
+ "to_i"
66
+ when "float"
67
+ "to_f"
68
+ when "string"
69
+ "to_s"
70
+ else
71
+ raise "argument type of function is invalid"
72
+ end
73
+ end
74
+
75
+ end
@@ -0,0 +1,6 @@
1
+ class FunctionArgument < ActiveRecord::Base
2
+ belongs_to :function
3
+ belongs_to :value_type
4
+ acts_as_list :scope => :function
5
+ validates_presence_of :value_type_id
6
+ end
@@ -0,0 +1,4 @@
1
+ class FunctionOutput < ActiveRecord::Base
2
+ belongs_to :function
3
+ acts_as_list :scope => :function
4
+ end
@@ -0,0 +1,153 @@
1
+ class Group < ActiveRecord::Base
2
+
3
+ MAX_GROUP_NO = 64
4
+
5
+ belongs_to :owner, :class_name => "User", :foreign_key => "owner_id"
6
+ # has_many :members, :through => :group_members, :source => :user, :order => :login
7
+ # has_many :group_members, :dependent => :destroy
8
+
9
+ after_save :save_file
10
+
11
+ before_validation_on_create :set_id
12
+ validates_presence_of :name, :owner_id
13
+ validates_uniqueness_of :name, :on => :create
14
+ validates_inclusion_of :id, :in=>1..MAX_GROUP_NO, :on => :create
15
+
16
+ def bit_mask
17
+ 1 << (id-1)
18
+ end
19
+
20
+ def self.bit_mask_for(*groups)
21
+ ids = Array.new
22
+ groups.each do |g|
23
+ case g
24
+ when Integer
25
+ id = g
26
+ ids.push(id) if id>1 and id<MAX_GROUP_NO
27
+ when Group
28
+ ids.push(g.id)
29
+ when String
30
+ if (gr=Group.find_by_name(g)) # substitution, not ==
31
+ ids.push(gr.id)
32
+ end
33
+ else
34
+ raise ArgumentError, "Unsupported kind of object : #{g.inspect}"
35
+ end
36
+ end
37
+ bitmask = 0
38
+ ids.each{|id| bitmask |= (1 << (id-1))}
39
+ bitmask
40
+ end
41
+
42
+ def members
43
+ User.find(:all, :conditions => ["(groups & ?) != 0",bit_mask])
44
+ end
45
+
46
+ def self.find_by_bit_flag(groups)
47
+ ids = Array.new
48
+ (1..MAX_GROUP_NO).each do |i|
49
+ ids.push(i) if ( groups % 2 == 1 )
50
+ groups = groups >> 1
51
+ end
52
+ if ids.length == 0
53
+ []
54
+ elsif ids.length == 1
55
+ [self.find(ids[0])]
56
+ else
57
+ self.find(*ids)
58
+ end
59
+ end
60
+
61
+ # * users (Array of User) : members to add
62
+ #
63
+ def add_members(users)
64
+ bm = bit_mask
65
+ User.transaction do
66
+ users.each do |usr|
67
+ if String === usr
68
+ usr = User.find(:first,:conditions=>["login=?",un=usr])
69
+ unless usr
70
+ return [false, "No such a usr #{un}"]
71
+ end
72
+ end
73
+ usr.groups = ( usr.groups | bm )
74
+ usr.save!
75
+ end
76
+ end
77
+ return [true, "add members successed"]
78
+ end
79
+
80
+ alias members= add_members
81
+
82
+ def add_member(user)
83
+ add_members([user])
84
+ end
85
+
86
+ def del_members(users)
87
+ mask = ~bit_mask
88
+ User.transaction do
89
+ users.each do |usr|
90
+ unless User === usr
91
+ usr = User.find(:first,:conditions=>["login=?",un=usr])
92
+ unless usr
93
+ return [false, "No such a usr #{un}"]
94
+ end
95
+ end
96
+ usr.groups = ( usr.groups & mask )
97
+ usr.save!
98
+ end
99
+ end
100
+ return [true, "delete member successed"]
101
+ end
102
+
103
+ def del_member(user)
104
+ del_members([user])
105
+ end
106
+
107
+ def before_destroy
108
+ mask = ~bit_mask
109
+ User.update_all("groups = groups & #{mask}")
110
+ Node.update_all("rgroups = rgroups & #{mask}")
111
+ Node.update_all("wgroups = wgroups & #{mask}")
112
+ true
113
+ end
114
+
115
+ def set_id
116
+ min_id = ((1..MAX_GROUP_NO).to_a - Group.find(:all).collect{|g| g.id})[0]
117
+ if min_id.nil?
118
+ raise("Exceeded max group num (#{MAX_GROUP_NO}). Delete one or more.")
119
+ end
120
+ self.id = min_id
121
+ true
122
+ end
123
+
124
+ def save_file
125
+ fname = File.join(RAILS_ROOT,"db","group.yml")
126
+ if File.exist?(fname)
127
+ yml = YAML.load(File.read(fname))
128
+ File.rename(fname, fname+"."+Time.now.strftime("%Y%m%d%H%M%S"))
129
+ unless Hash === yml
130
+ raise "data is invalid"
131
+ end
132
+ else
133
+ yml = Hash.new
134
+ end
135
+ hash = Hash.new
136
+ self.class.column_names.each{|name|
137
+ hash[name] = self[name]
138
+ }
139
+ yml[self.name] = hash
140
+ File.open(fname,"w"){|file| file.print yml.to_yaml}
141
+ end
142
+
143
+
144
+ # def create_or_update # called in save and save!
145
+ # Group.transaction do
146
+ # super
147
+ # bit_flag = 2**(id-1)
148
+ # STDERR.puts '@@@@@@',bit_flag
149
+ # nil
150
+ # end
151
+ # end
152
+
153
+ end
@@ -0,0 +1,20 @@
1
+ class Image < NodeEntityAbstract
2
+
3
+ def content_type
4
+ case name
5
+ when /\.png$/i
6
+ 'image/png'
7
+ when /\.jpeg$|\.jpg$/i
8
+ 'image/jpeg'
9
+ when /\.gif$/i
10
+ 'image/gif'
11
+ when /\.tiff?$/i
12
+ 'image/tiff'
13
+ when /\.xwd?$/i
14
+ 'image/xwindowdump'
15
+ else
16
+ raise "#{name} Not a image file or unsupported image type (which can be easily extended. Contact the gfdnavi developpers.)"
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,179 @@
1
+ require "narray"
2
+
3
+ class KeywordAttribute < ActiveRecord::Base
4
+ belongs_to :node
5
+ validates_presence_of :name
6
+ after_create :set_title_in_node
7
+ after_update :set_title_in_node
8
+
9
+ ### // standard name space -->
10
+
11
+ StdName = {
12
+ 'title' => ['title','subject','long_name','standard_name','name'],
13
+ 'description' => ['description'],
14
+ 'who' => ['creator','maintainer'],
15
+ 'information_url' => [{:conditions => "name = 'information_url' OR ( (name = 'reference' OR name = 'references' ) AND value LIKE 'http://%' ) OR name = 'url'", :order => 'name'}] # order: information_url > reference% > url
16
+ }
17
+
18
+ def self.find_by_stdname(name)
19
+ if aliases=StdName[name] # substitution, not ==
20
+ strs = Array.new
21
+ has = Array.new
22
+ aliases.each do |expr|
23
+ case expr
24
+ when String
25
+ strs.push expr
26
+ when Hash
27
+ has.push expr
28
+ else
29
+ raise "[BUG] Unsupported expression type #{expr.class}"
30
+ end
31
+ end
32
+ if strs.length > 0
33
+ if ar = find(:first, :conditions => strs.collect{|st| "name='#{st}'"}.join(" OR "))
34
+ return ar
35
+ end
36
+ end
37
+ if has.length > 0
38
+ has.each{|ha|
39
+ if ar = find(:first, ha)
40
+ return ar
41
+ end
42
+ }
43
+ end
44
+ end
45
+ nil
46
+ end
47
+
48
+ def self.find_by_stdname_or_name(name)
49
+ find_by_stdname(name) || find(:first,:conditions=>["name=?",name])
50
+ end
51
+
52
+ ### <-- standard name space //
53
+
54
+ ### // support numerical (NArray) attribute values with num_value -->
55
+
56
+ def value= (v)
57
+ case v
58
+ when String
59
+ super(v)
60
+ when NArray
61
+ raise "Supported typecodes are 1 digit" if v.typecode>=10
62
+ # Currently (narray-0.5), it never happens since typecode<= 8
63
+ self.num_value= v.typecode.to_s + v.hton.to_s
64
+ else
65
+ raise ArgumentError, "Unsupported class for a keyword value: #{v.class} (name=#{name})"
66
+ end
67
+ v
68
+ end
69
+
70
+ def value
71
+ if (buf=num_value) && buf != "NULL" # substitution into buf, not ==
72
+ v=NArray.to_na(buf[1..-1],buf[0..0].to_i).ntoh # typecode is one-digit
73
+ else
74
+ v=super
75
+ end
76
+ v
77
+ end
78
+
79
+ def self.format_value_search(val, mode=:equal, name="")
80
+ name += "." unless name==""
81
+ allowed = [:equal, :like]
82
+ if !allowed.include?(mode)
83
+ raise ArgumentError,"2nd arg must be one of #{allowed.inspect}"
84
+ end
85
+ case val
86
+ when String
87
+ case mode
88
+ when :like
89
+ "#{name}value LIKE '%#{val}%'"
90
+ when :equal
91
+ "#{name}value = '#{val}'"
92
+ else
93
+ raise "Unsupported mode #{mode.inspect}"
94
+ end
95
+ when Numeric
96
+ if val.is_a?(Integer)
97
+ tcrange = 1..5 # check all integer- and float-types
98
+ elsif val.is_a?(Float)
99
+ tcrange = 4..5 # check float-types
100
+ else
101
+ raise "Unsupported Numeric type #{val.class}"
102
+ end
103
+ case mode
104
+ when :like
105
+ exprs = []
106
+ for tc in tcrange
107
+ str = NArray.new(tc,1).fill!(val).hton.to_s
108
+ if connection.adapter_name=="SQLite"
109
+ str.gsub!(/\000/,'%00')
110
+ wild_chr = "*"
111
+ operator = "GLOB"
112
+ else
113
+ str = str.gsub(/_/,'\_').gsub(/%/,'\%')
114
+ wild_chr = "%"
115
+ operator = "LIKE BINARY"
116
+ end
117
+ exprs.push( "#{name}num_value #{operator} '#{tc.to_s}#{wild_chr}#{str}#{wild_chr}'")
118
+ end
119
+ exprs.join(' OR ')
120
+ when :equal
121
+ exprs = []
122
+ for tc in tcrange
123
+ str = NArray.new(tc,1).fill!(val).hton.to_s
124
+
125
+ str.gsub!(/\000/,'%00') if connection.adapter_name=="SQLite"
126
+ exprs.push( "#{name}num_value = '" + tc.to_s + str + "'")
127
+
128
+ end
129
+ exprs.join(' OR ')
130
+ else
131
+ raise "Unsupported mode #{mode.inspect}"
132
+ end
133
+ when NArray
134
+ # :like are treated as :equal here
135
+ str = val.hton.to_s
136
+ str.gsub!(/\000/,'%00') if connection.adapter_name=="SQLite"
137
+ "#{name}num_value = '" + val.typecode.to_s + str + "'"
138
+ end
139
+ end
140
+
141
+ ### <-- support numerical (NArray) attribute values with num_value //
142
+
143
+
144
+ alias _node node
145
+ def node(reload=false, hash={})
146
+ if u = hash[:user]
147
+ return Node.find(node_id, :user=>u)
148
+ else
149
+ return _node(reload)
150
+ end
151
+ end
152
+
153
+
154
+ def to_xml(opt)
155
+ opt = opt.dup.update(:except => [:id, :node_id, :value, :num_value])
156
+ super(opt) do |xml|
157
+ xml.value self.value
158
+ end
159
+ end
160
+
161
+
162
+ protected
163
+ def set_title_in_node
164
+ nod = self.node(false,:user=>:all)
165
+ if StdName["title"].include? self.name
166
+ unless nod.title && nod.title != "NULL"
167
+ nod.title = self.value
168
+ nod.save!
169
+ end
170
+ elsif StdName["description"].include? self.name
171
+ unless nod.description && nod.description != "NULL"
172
+ nod.description = self.value
173
+ nod.save!
174
+ end
175
+ end
176
+ end
177
+
178
+
179
+ end
@@ -0,0 +1,94 @@
1
+ class Knowledge < NodeEntityAbstract
2
+
3
+ has_many :knowledge_figures, :dependent => :destroy
4
+
5
+ # validates_length_of :title, :within => 0..400
6
+ validates_length_of :textbody, :within => 0..100000
7
+ validates_length_of :description, :within => 0..4000
8
+ validates_format_of :category, :with => /^[a-zA-Z0-9_]+$/, :message => "you can only use alphabets and numbers and underscore to Category."
9
+
10
+ #<< class methods >>
11
+
12
+ class << self
13
+ def read_parameters_of_knowledge_document(path, user)
14
+ knowledge = Knowledge.find(:first, :conditions => ["path=?", path], :user => user)
15
+ comments = Knowledge.find(:all, :conditions => ["comment_on = ?" ,knowledge.node_id])
16
+ knowledge_figures = KnowledgeFigure.find(:all, :conditions => ["knowledge_id=?", knowledge.id]) # not find -> return []
17
+
18
+ # = �G�̃p�X�Ƒ傫��
19
+ # * �G�̃p�X��nodes�e�[�u����path���擾
20
+ # * �G�̑傫����images�e�[�u����vizshot���擾
21
+ image_paths = Array.new
22
+ image_widths = Array.new
23
+ image_heights = Array.new
24
+ caption_widths = Array.new
25
+ caption_heights = Array.new
26
+ knowledge_figures.each do |kf|
27
+ unless (image = Image.find(kf.image_id, :user => user))
28
+ raise "Figure is not found.\n"
29
+ else
30
+ image_paths << image.path
31
+ vizshot_yaml = image.vizshot
32
+ begin
33
+ vizshot = YAML.load(vizshot_yaml)
34
+ if (image_size = vizshot.get_size)
35
+ image_widths << image_size[0]
36
+ image_heights << image_size[1]
37
+ caption_widths << (image_size[0] * 0.8).to_i
38
+ caption_heights << (image_size[1] * 0.8).to_i
39
+ else
40
+ # vizshot���畜���ł��Ȃ������Ƃ���normal�T�C�Y��K�p����
41
+ image_widths << 554
42
+ image_heights << 554
43
+ caption_widths << 440
44
+ caption_heights << 440
45
+ end
46
+ rescue
47
+ # vizshot�������Ƃ���normal�T�C�Y��K�p����
48
+ image_widths << 250
49
+ image_heights << 254
50
+ caption_widths << 440
51
+ caption_heights << 440
52
+ end
53
+ end
54
+ end
55
+ return knowledge, knowledge_figures, comments, image_paths, image_widths, image_heights, caption_widths, caption_heights
56
+ end
57
+
58
+ # == �V���ȃR�����g�ɑ΂��ăR�����g�ԍ�������U��
59
+ def new_comment_number_from_parent_document(parent_knowledge_node_id, user)
60
+ comments = Knowledge.find(:all, :conditions => ["comment_on = ? AND comment_number IS NOT NULL", parent_knowledge_node_id], :user => user)
61
+ if comments.length > 0
62
+ comments.collect! {|comment|
63
+ comment = comment.comment_number
64
+ }
65
+ comment_number = comments.max + 1
66
+ else
67
+ comment_number = 1
68
+ end
69
+ end
70
+
71
+ # OpenID�̐ړ��ɂ‚� http:// �� https:// �A�܂������ɂ‚� / ����菜��
72
+ def remove_scheme(user)
73
+ if user.internal_user
74
+ user.login
75
+ else
76
+ username_in_path = user.login
77
+ case username_in_path
78
+ when /^http:\/\/(.+)/, /^https:\/\/(.+)/
79
+ username_in_path = $1
80
+ end
81
+
82
+ case username_in_path
83
+ when /(.+)\/$/
84
+ username_in_path = $1
85
+ end
86
+ return username_in_path
87
+ end
88
+ end
89
+
90
+ end
91
+ end
92
+
93
+
94
+