voruby 1.1.1 → 2.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 (257) hide show
  1. data/Rakefile.rb +107 -224
  2. data/lib/misc.rb +1 -0
  3. data/lib/misc/misc.rb +60 -0
  4. data/lib/misc/propertyfile.rb +31 -0
  5. data/lib/symphony.rb +1 -0
  6. data/lib/symphony/symphony.rb +247 -0
  7. data/lib/voruby.rb +186 -0
  8. data/lib/voruby/active_votable/active_votable.rb +468 -347
  9. data/lib/voruby/adql/1.0/adql.rb +2418 -0
  10. data/lib/voruby/adql/support.rb +2 -0
  11. data/lib/voruby/misc.rb +351 -0
  12. data/lib/voruby/misc/connection_monitor.rb +97 -0
  13. data/lib/voruby/misc/libxml_ext.rb +121 -0
  14. data/lib/voruby/misc/rexml_ext.rb +223 -0
  15. data/lib/voruby/resolver/resolver.rb +12 -0
  16. data/lib/voruby/resolver/sesame.rb +299 -0
  17. data/lib/voruby/sky_query/sky_query.rb +192 -0
  18. data/lib/voruby/stc/1.10/coords.rb +2272 -0
  19. data/lib/voruby/stc/1.10/region.rb +892 -0
  20. data/lib/voruby/stc/1.10/stc.rb +3271 -0
  21. data/lib/voruby/stc/1.30/stc.rb +8666 -0
  22. data/lib/voruby/stc/support.rb +2 -0
  23. data/lib/voruby/ucd/ucd.rb +173 -0
  24. data/lib/voruby/voevent/1.1/voevent.rb +1124 -0
  25. data/lib/voruby/voevent/support.rb +5 -0
  26. data/lib/voruby/votable/1.0/votable.rb +1807 -0
  27. data/lib/voruby/votable/1.1/votable.rb +2100 -0
  28. data/lib/voruby/votable/votable.rb +305 -0
  29. data/lib/voruby/wesix/wesix.rb +491 -0
  30. data/lib/voruby/xlink/1.2/xlink.rb +21 -0
  31. data/test/voruby/active_votable/complex.vot +60 -0
  32. data/test/voruby/active_votable/error.vot +6 -0
  33. data/test/voruby/active_votable/large.vot +130040 -0
  34. data/test/voruby/active_votable/simple1.vot +38 -0
  35. data/test/voruby/active_votable/simple2.vot +38 -0
  36. data/test/voruby/active_votable/test.rb +193 -0
  37. data/test/voruby/adql/1.0/adql-alias.sql +1 -0
  38. data/test/voruby/adql/1.0/adql-alias.xml +26 -0
  39. data/test/voruby/adql/1.0/adql-avg.sql +1 -0
  40. data/test/voruby/adql/1.0/adql-avg.xml +31 -0
  41. data/test/voruby/adql/1.0/adql-circle.sql +1 -0
  42. data/test/voruby/adql/1.0/adql-circle.xml +46 -0
  43. data/test/voruby/adql/1.0/adql-expr.sql +1 -0
  44. data/test/voruby/adql/1.0/adql-expr.xml +34 -0
  45. data/test/voruby/adql/1.0/adql-function.sql +1 -0
  46. data/test/voruby/adql/1.0/adql-function.xml +41 -0
  47. data/test/voruby/adql/1.0/adql-group.sql +1 -0
  48. data/test/voruby/adql/1.0/adql-group.xml +51 -0
  49. data/test/voruby/adql/1.0/adql-having.sql +1 -0
  50. data/test/voruby/adql/1.0/adql-having.xml +25 -0
  51. data/test/voruby/adql/1.0/adql-like.sql +1 -0
  52. data/test/voruby/adql/1.0/adql-like.xml +17 -0
  53. data/test/voruby/adql/1.0/adql-order.sql +1 -0
  54. data/test/voruby/adql/1.0/adql-order.xml +37 -0
  55. data/test/voruby/adql/1.0/adql-simple.sql +1 -0
  56. data/test/voruby/adql/1.0/adql-simple.xml +12 -0
  57. data/test/voruby/adql/1.0/adql-top.sql +1 -0
  58. data/test/voruby/adql/1.0/adql-top.xml +33 -0
  59. data/test/voruby/adql/1.0/test.rb +2220 -0
  60. data/test/voruby/misc/test.rb +32 -0
  61. data/test/voruby/resolver/sesame/test.rb +56 -0
  62. data/test/voruby/sky_query/test.rb +107 -0
  63. data/test/voruby/stc/1.10/coords_test.rb +3704 -0
  64. data/test/voruby/stc/1.10/region_test.rb +993 -0
  65. data/test/voruby/stc/1.10/stc-catalog-entry-location.xml +112 -0
  66. data/test/voruby/stc/1.10/stc-obs-data-location.xml +126 -0
  67. data/test/voruby/stc/1.10/stc-region-circle.xml +5 -0
  68. data/test/voruby/stc/1.10/stc-region-convex.xml +11 -0
  69. data/test/voruby/stc/1.10/stc-region-convexhull.xml +5 -0
  70. data/test/voruby/stc/1.10/stc-region-ellipse.xml +7 -0
  71. data/test/voruby/stc/1.10/stc-region-intersection.xml +25 -0
  72. data/test/voruby/stc/1.10/stc-region-negation.xml +7 -0
  73. data/test/voruby/stc/1.10/stc-region-polygon.xml +13 -0
  74. data/test/voruby/stc/1.10/stc-region-sector.xml +6 -0
  75. data/test/voruby/stc/1.10/stc-region-union.xml +25 -0
  76. data/test/voruby/stc/1.10/stc-resource-profile.xml +60 -0
  77. data/test/voruby/stc/1.10/stc-search-location.xml +54 -0
  78. data/test/voruby/stc/1.10/stc_test.rb +4626 -0
  79. data/test/voruby/stc/1.30/stc-catalog-entry-location.xml +210 -0
  80. data/test/voruby/stc/1.30/stc-obs-data-location-arecibo.xml +353 -0
  81. data/test/voruby/stc/1.30/stc-obs-data-location-fits.xml +250 -0
  82. data/test/voruby/stc/1.30/stc-obs-data-location-xlink.xml +63 -0
  83. data/test/voruby/stc/1.30/stc-obs-data-location.xml +216 -0
  84. data/test/voruby/stc/1.30/stc-resource-profile-unusual-ref-pos.xml +39 -0
  85. data/test/voruby/stc/1.30/stc-resource-profile.xml +129 -0
  86. data/test/voruby/stc/1.30/stc-search-location-arecibo.xml +86 -0
  87. data/test/voruby/stc/1.30/stc-search-location.xml +101 -0
  88. data/test/voruby/stc/1.30/test.rb +6274 -0
  89. data/test/voruby/ucd/test.rb +48 -0
  90. data/test/voruby/voevent/1.1/test.rb +812 -0
  91. data/test/{voevent/voevent_v1_1.xml → voruby/voevent/1.1/voevent.xml} +2 -2
  92. data/test/voruby/voregistry/0.3/test.rb +137 -0
  93. data/test/voruby/votable/1.0/test.rb +714 -0
  94. data/test/voruby/votable/1.0/votable.basic.xml +660 -0
  95. data/test/voruby/votable/1.0/votable.html +86 -0
  96. data/test/voruby/votable/1.0/votable.ns.xml +56 -0
  97. data/test/voruby/votable/1.1/test.rb +785 -0
  98. data/test/voruby/votable/1.1/votable.basic.xml +38 -0
  99. data/test/voruby/votable/1.1/votable.html +86 -0
  100. data/test/voruby/votable/1.1/votable.ns.xml +56 -0
  101. data/test/voruby/votable/test.rb +15 -0
  102. data/test/voruby/wesix/test.rb +268 -0
  103. data/test/voruby/wesix/testr.fits +28 -0
  104. metadata +234 -247
  105. data/REQUIREMENTS +0 -6
  106. data/lib/voruby/active_votable/loader.rb +0 -5
  107. data/lib/voruby/adql/adql.rb +0 -2787
  108. data/lib/voruby/adql/ext.rb +0 -14
  109. data/lib/voruby/adql/loader.rb +0 -6
  110. data/lib/voruby/adql/operations.rb +0 -54
  111. data/lib/voruby/adql/parser.rb +0 -160
  112. data/lib/voruby/adql/transforms.rb +0 -573
  113. data/lib/voruby/ext.rb +0 -17
  114. data/lib/voruby/loader.rb +0 -4
  115. data/lib/voruby/misc/propertyfile.rb +0 -36
  116. data/lib/voruby/plastic/applications.rb +0 -174
  117. data/lib/voruby/plastic/constants.rb +0 -30
  118. data/lib/voruby/plastic/loader.rb +0 -10
  119. data/lib/voruby/plastic/plastic.rb +0 -1
  120. data/lib/voruby/resources/conesearch/conesearch.rb +0 -9
  121. data/lib/voruby/resources/conesearch/conesearch_v0_2.rb +0 -55
  122. data/lib/voruby/resources/conesearch/conesearch_v0_3.rb +0 -50
  123. data/lib/voruby/resources/conesearch/conesearch_v1_0.rb +0 -72
  124. data/lib/voruby/resources/conesearch/loader.rb +0 -4
  125. data/lib/voruby/resources/loader.rb +0 -50
  126. data/lib/voruby/resources/nodes.rb +0 -190
  127. data/lib/voruby/resources/openskynode/loader.rb +0 -4
  128. data/lib/voruby/resources/openskynode/openskynode.rb +0 -9
  129. data/lib/voruby/resources/openskynode/openskynode_v0_1.rb +0 -54
  130. data/lib/voruby/resources/sia/loader.rb +0 -5
  131. data/lib/voruby/resources/sia/sia.rb +0 -9
  132. data/lib/voruby/resources/sia/sia_v0_6.rb +0 -90
  133. data/lib/voruby/resources/sia/sia_v0_7.rb +0 -89
  134. data/lib/voruby/resources/sia/sia_v1_0.rb +0 -122
  135. data/lib/voruby/resources/stsci.rb +0 -59
  136. data/lib/voruby/resources/vodataservice/coverage_v0_2.rb +0 -195
  137. data/lib/voruby/resources/vodataservice/coverage_v0_3.rb +0 -158
  138. data/lib/voruby/resources/vodataservice/loader.rb +0 -5
  139. data/lib/voruby/resources/vodataservice/vodataservice.rb +0 -9
  140. data/lib/voruby/resources/vodataservice/vodataservice_v0_4.rb +0 -189
  141. data/lib/voruby/resources/vodataservice/vodataservice_v0_5.rb +0 -163
  142. data/lib/voruby/resources/vodataservice/vodataservice_v1_0.rb +0 -221
  143. data/lib/voruby/resources/voregistry/loader.rb +0 -4
  144. data/lib/voruby/resources/voregistry/voregistry.rb +0 -9
  145. data/lib/voruby/resources/voregistry/voregistry_v0_2.rb +0 -40
  146. data/lib/voruby/resources/voregistry/voregistry_v0_3.rb +0 -30
  147. data/lib/voruby/resources/voregistry/voregistry_v1_0.rb +0 -86
  148. data/lib/voruby/resources/voresource/loader.rb +0 -17
  149. data/lib/voruby/resources/voresource/voresource.rb +0 -9
  150. data/lib/voruby/resources/voresource/voresource_v0_10.rb +0 -327
  151. data/lib/voruby/resources/voresource/voresource_v0_9.rb +0 -405
  152. data/lib/voruby/resources/voresource/voresource_v1_0.rb +0 -230
  153. data/lib/voruby/services/ext.rb +0 -11
  154. data/lib/voruby/services/gestalt/footprint.rb +0 -95
  155. data/lib/voruby/services/gestalt/wcs_fixer.rb +0 -105
  156. data/lib/voruby/services/gestalt/wesix.rb +0 -155
  157. data/lib/voruby/services/loader.rb +0 -7
  158. data/lib/voruby/services/registry/registry.rb +0 -53
  159. data/lib/voruby/services/resolver/resolver.rb +0 -35
  160. data/lib/voruby/services/schema/schema.rb +0 -644
  161. data/lib/voruby/sesame/loader.rb +0 -6
  162. data/lib/voruby/sesame/sesame_v1_0.rb +0 -64
  163. data/lib/voruby/simple/loader.rb +0 -6
  164. data/lib/voruby/simple/parameters.rb +0 -196
  165. data/lib/voruby/simple/sap.rb +0 -446
  166. data/lib/voruby/spacetime/loader.rb +0 -3
  167. data/lib/voruby/spacetime/spacetime.rb +0 -607
  168. data/lib/voruby/stc/coords_v1_20.rb +0 -900
  169. data/lib/voruby/stc/loader.rb +0 -55
  170. data/lib/voruby/stc/region_v1_20.rb +0 -274
  171. data/lib/voruby/stc/stc_v1_20.rb +0 -1196
  172. data/lib/voruby/util.rb +0 -27
  173. data/lib/voruby/voevent/loader.rb +0 -7
  174. data/lib/voruby/voevent/voevent_v1_0.rb +0 -213
  175. data/lib/voruby/voevent/voevent_v1_1.rb +0 -196
  176. data/lib/voruby/votables/chandra.rb +0 -373
  177. data/lib/voruby/votables/data.rb +0 -179
  178. data/lib/voruby/votables/galex.rb +0 -377
  179. data/lib/voruby/votables/int.rb +0 -354
  180. data/lib/voruby/votables/libxml_parser.rb +0 -411
  181. data/lib/voruby/votables/libxml_votable.rb +0 -67
  182. data/lib/voruby/votables/loader.rb +0 -10
  183. data/lib/voruby/votables/meta.rb +0 -763
  184. data/lib/voruby/votables/misc.rb +0 -51
  185. data/lib/voruby/votables/nsa.rb +0 -410
  186. data/lib/voruby/votables/rexml_parser.rb +0 -408
  187. data/lib/voruby/votables/rexml_votable.rb +0 -67
  188. data/lib/voruby/votables/sdss.rb +0 -356
  189. data/lib/voruby/votables/transforms.rb +0 -388
  190. data/lib/voruby/votables/tree.rb +0 -45
  191. data/lib/voruby/votables/types.rb +0 -391
  192. data/lib/voruby/votables/votable.rb +0 -687
  193. data/test/active_votable/database.yml +0 -6
  194. data/test/active_votable/test.vot +0 -168492
  195. data/test/active_votable/unittest.rb +0 -41
  196. data/test/adql/test1.adql +0 -49
  197. data/test/adql/test2.adql +0 -51
  198. data/test/adql/test3.adql +0 -81
  199. data/test/adql/test4.adql +0 -53
  200. data/test/adql/test5.adql +0 -55
  201. data/test/adql/test6.adql +0 -18
  202. data/test/adql/test7.adql +0 -48
  203. data/test/adql/unittest.rb +0 -1672
  204. data/test/plastic/test.rb +0 -44
  205. data/test/plastic/test.vot +0 -5385
  206. data/test/plastic/unittest.rb +0 -66
  207. data/test/resources/conesearch/conesearch_v0_3.xml +0 -31
  208. data/test/resources/conesearch/conesearch_v1_0.xml +0 -86
  209. data/test/resources/conesearch/unittest_v0_3.rb +0 -22
  210. data/test/resources/conesearch/unittest_v1_0.rb +0 -24
  211. data/test/resources/openskynode/open_sky_node_v0_1.xml +0 -32
  212. data/test/resources/openskynode/unittest_v0_1.rb +0 -31
  213. data/test/resources/sia/simple_image_access_v0_7.xml +0 -36
  214. data/test/resources/sia/simple_image_access_v1_0.xml +0 -122
  215. data/test/resources/sia/unittest_v0_7.rb +0 -24
  216. data/test/resources/sia/unittest_v1_0.rb +0 -29
  217. data/test/resources/stsci.xml +0 -336
  218. data/test/resources/unittest_stsci.rb +0 -25
  219. data/test/resources/vodataservice/catalog_service_resource_v1_0.xml +0 -128
  220. data/test/resources/vodataservice/data_collection_resource_v0_5.xml +0 -54
  221. data/test/resources/vodataservice/data_collection_resource_v1_0.xml +0 -117
  222. data/test/resources/vodataservice/data_service_resource_v1_0.xml +0 -115
  223. data/test/resources/vodataservice/sky_service_resource_v0_10.xml +0 -45
  224. data/test/resources/vodataservice/table_service_resource_v1_0.xml +0 -122
  225. data/test/resources/vodataservice/tabular_sky_service_resource_v0_10.xml +0 -60
  226. data/test/resources/vodataservice/unittest_v0_5.rb +0 -126
  227. data/test/resources/vodataservice/unittest_v1_0.rb +0 -151
  228. data/test/resources/voregistry/authority_resource_v0_3.xml +0 -20
  229. data/test/resources/voregistry/authority_resource_v1_0.xml +0 -82
  230. data/test/resources/voregistry/registry_service_v0_3.xml +0 -20
  231. data/test/resources/voregistry/registry_service_v1_0.xml +0 -107
  232. data/test/resources/voregistry/unittest_v0_3.rb +0 -31
  233. data/test/resources/voregistry/unittest_v1_0.rb +0 -34
  234. data/test/resources/voresource/organisation_resource_v1_0.xml +0 -90
  235. data/test/resources/voresource/resource_organisation_v0_10.xml +0 -22
  236. data/test/resources/voresource/resource_service_v0_10.xml +0 -19
  237. data/test/resources/voresource/resource_v0_10.xml +0 -19
  238. data/test/resources/voresource/resource_v1_0.xml +0 -79
  239. data/test/resources/voresource/service_resource_v1_0.xml +0 -91
  240. data/test/resources/voresource/unittest_v0_10.rb +0 -61
  241. data/test/resources/voresource/unittest_v0_9.rb +0 -4
  242. data/test/resources/voresource/unittest_v1_0.rb +0 -190
  243. data/test/services/gestalt/unittest.rb +0 -74
  244. data/test/services/registry/unittest.rb +0 -34
  245. data/test/services/resolver/unittest.rb +0 -38
  246. data/test/simple/unittest.rb +0 -46
  247. data/test/spacetime/unittest.rb +0 -39
  248. data/test/stc/catalog_entry_location_v1_20.xml +0 -112
  249. data/test/stc/obs_data_location_v1_20.xml +0 -108
  250. data/test/stc/search_location_v1_20.xml +0 -54
  251. data/test/stc/stc_resource_profile_v1_20.xml +0 -60
  252. data/test/stc/unittest_v1_20.rb +0 -620
  253. data/test/voevent/unittest_v1_0.rb +0 -79
  254. data/test/voevent/unittest_v1_1.rb +0 -70
  255. data/test/voevent/voevent_v1_0.xml +0 -96
  256. data/test/votables/test.vot +0 -366
  257. data/test/votables/unittest.rb +0 -54
@@ -1,644 +0,0 @@
1
-
2
- module VORuby
3
- module Services
4
- module Schema
5
-
6
- module SSException
7
- # An exception thrown when the incoming type does not match
8
- # the expected value.
9
- class TypeException < Exception
10
- # [_obj_:]
11
- # The object itself.
12
- # [_prototype_:]
13
- # The prototype of the expected class.
14
- def initialize(obj=nil, prototype=nil)
15
- super("Invalid type: #{obj.class} (#{obj}) != #{prototype}")
16
- end
17
- end
18
-
19
- # A class which checks to see whether the type of the incoming class
20
- # matches expectation.
21
- class TypeCheck
22
- attr_accessor :obj, :proto
23
-
24
- # [_obj_:]
25
- # The object in question.
26
- # [_proto_:]
27
- # The prototype of the expected class.
28
- def initialize(obj=nil, proto=nil)
29
- @obj = obj
30
- @proto = proto
31
- end
32
-
33
- # Check to see whether the class is of the expected type.
34
- def check
35
- raise SSException::TypeException.new(@obj, @proto) if @obj == nil and !@obj.is_a?(@proto)
36
- end
37
-
38
- def to_s
39
- "{object=#{@obj};prototype=#{@proto}}"
40
- end
41
- end
42
- end
43
-
44
- module SchemaDefinition
45
- class Table
46
- #It's the same that MetaTable
47
- end
48
-
49
- class MetaTable
50
- attr_reader :name, :description, :rows
51
-
52
- def initialize(name=nil, description=nil, rows=nil)
53
- @name = name
54
- @description = description
55
- @rows = rows
56
- end
57
-
58
- # The node is MetaTable
59
- def self.from_xml(node)
60
- name_node = REXML::XPath.first(node, 'Name')
61
- name = name_node.get_text.value.strip if name_node.get_text
62
-
63
- description_node = REXML::XPath.first(node, 'Description')
64
- description = description_node.get_text.value.strip if description_node.get_text
65
-
66
- rows_node = REXML::XPath.first(node, 'Rows')
67
- rows = rows_node.get_text.value.strip if rows_node.get_text
68
-
69
- return MetaTable.new(name, description, rows)
70
- end
71
-
72
- def to_s
73
- "{name=#{self.name};description=#{self.description};rows=#{self.rows}}"
74
- end
75
- end
76
-
77
- class ArrayOfMetaTable
78
- attr_reader :meta_tables
79
-
80
- def initialize(meta_tables=[])
81
- @meta_tables = meta_tables
82
- end
83
-
84
- # The node is MetaTable
85
- def self.from_xml(node)
86
- meta_tbls = []
87
-
88
- node.elements.each('MetaTable') do |elem|
89
- meta_table = MetaTable.from_xml(elem)
90
- meta_tbls.push(meta_table) if meta_table
91
- end
92
-
93
- return ArrayOfMetaTable.new(meta_tbls)
94
- end
95
-
96
- def to_s
97
- meta_tbls = []
98
- @meta_tables.each do |meta_table|
99
- meta_tbls.push(meta_table.to_s)
100
- end
101
-
102
- return "{meta_tables=[#{meta_tbls.join(',')}]}"
103
- end
104
- end
105
-
106
- class Column
107
- attr_reader :name
108
-
109
- def initialize(name=nil)
110
- @name = name
111
- end
112
-
113
- # The node is String
114
- def self.from_xml(node)
115
- return Column.new(node.get_text.value.strip) if node.has_text?
116
- end
117
-
118
- def to_s
119
- "name=#{self.name}"
120
- end
121
- end
122
-
123
- class ArrayOfString
124
- attr_reader :columns
125
-
126
- def initialize(columns=[])
127
- @columns = columns
128
- end
129
-
130
- # The node is String
131
- def self.from_xml(node)
132
- cols = []
133
-
134
- node.elements.each('string') do |elem|
135
- column = Column.from_xml(elem)
136
- cols.push(column) if column
137
- end
138
-
139
- return ArrayOfString.new(cols)
140
- end
141
-
142
- def to_s
143
- cols = []
144
- @columns.each do |col|
145
- cols.push(col.to_s)
146
- end
147
-
148
- return "{columns=[#{cols.join(',')}]}"
149
- end
150
- end
151
-
152
- class MetaColumn
153
- attr_reader :name, :type, :unit, :description, :ucd
154
-
155
- def initialize(name=nil, type=nil, unit=nil, description=nil, ucd=nil)
156
- @name = name
157
- @type = type
158
- @unit = unit
159
- @description = description
160
- @ucd = ucd
161
- end
162
-
163
- # The node is MetaColumn
164
- def self.from_xml(node)
165
- name_node = REXML::XPath.first(node, 'Name')
166
- name = name_node.get_text.value.strip if name_node.get_text
167
-
168
- type_node = REXML::XPath.first(node, 'Type')
169
- type = type_node.get_text.value.strip if type_node.get_text
170
-
171
- unit_node = REXML::XPath.first(node, 'Unit')
172
- unit = unit_node.get_text.value.strip if unit_node.get_text
173
-
174
- description_node = REXML::XPath.first(node, 'Description')
175
- description = description_node.get_text.value.strip if description_node.get_text
176
-
177
- ucd_node = REXML::XPath.first(node, 'UCD')
178
- ucd = ucd_node.get_text.value.strip if ucd_node.get_text
179
-
180
- return MetaColumn.new(name, type, unit, description, ucd)
181
- end
182
-
183
- def to_s
184
- "{name=#{self.name};type=#{self.type};unit=#{self.unit};" +
185
- "description=#{self.description};ucd=#{self.ucd}}"
186
- end
187
- end
188
-
189
- class ArrayOfMetaColumn
190
- attr_reader :meta_columns
191
-
192
- def initialize(meta_columns=[])
193
- @meta_columns = meta_columns
194
- end
195
-
196
- # The node is String
197
- def self.from_xml(node)
198
- meta_cols = []
199
-
200
- node.elements.each('MetaColumn') do |elem|
201
- meta_column = MetaColumn.from_xml(elem)
202
- meta_cols.push(meta_column) if meta_column
203
- end
204
-
205
- return ArrayOfMetaColumn.new(meta_cols)
206
- end
207
-
208
- def to_s
209
- meta_cols = []
210
- @meta_columns.each do |meta_col|
211
- meta_cols.push(meta_col.to_s)
212
- end
213
-
214
- return "{meta_columns=[#{meta_cols.join(',')}]}"
215
- end
216
- end
217
- end
218
-
219
- module HTTPGetQuery
220
- require 'net/http'
221
- require 'net/https'
222
- require 'uri'
223
-
224
- def fetch
225
- http = Net::HTTP.new(uri.host, uri.port)
226
- http.read_timeout = query_timeout()
227
- http.use_ssl = (uri.scheme == 'https')# enable SSL/TLS
228
-
229
- if http.use_ssl
230
- http.ca_path = ssl_files[:ca_path]
231
- http.cert = OpenSSL::X509::Certificate.new(File.read(ssl_files[:cert_file]))
232
- http.key = OpenSSL::PKey::RSA.new(File.read(ssl_files[:key_file]), ssl_files[:password])
233
- end
234
-
235
- res = http.start {|http|
236
- http.get(uri.path + '?' + required_parameters().join('&'))
237
- }
238
-
239
- self.response = res.body
240
- end
241
-
242
- # URI::InvalidURIError: Raised if URI given is not a correct one.
243
- def uri=(u)
244
- @uri = URI.parse(u)
245
- end
246
-
247
- def ssl_files=(sf)
248
- if sf != nil
249
- SSException::TypeCheck.new(sf, Hash).check()
250
- raise "CA certification path isn't directory" if sf[:ca_path] == nil and
251
- !File.directory?(sf[:ca_path])
252
- raise "SSL Certificate file doesn't exists" if sf[:cert_file] == nil and
253
- !File.exist?(sf[:cert_file])
254
- raise "SSL Key file doesn't exists" if sf[:key_file] == nil and
255
- !File.exist?(sf[:key_file])
256
- @ssl_files = sf
257
- end
258
- end
259
-
260
- def query_timeout=(qt)
261
- SSException::TypeCheck.new(qt, Integer).check()
262
- @query_timeout = qt
263
- end
264
- end
265
-
266
- module SSParameters
267
- require 'uri'
268
-
269
- class Method
270
- attr_reader :method
271
-
272
- def initialize(method)
273
- self.method = method
274
- end
275
-
276
- def method=(m)
277
- SSException::TypeCheck.new(m, String).check()
278
- raise "method parameter is empty" if m.empty?
279
- @method = m
280
- end
281
-
282
- def to_p
283
- URI.escape("method=#{self.method}")
284
- end
285
-
286
- def to_s
287
- "#{self.method}"
288
- end
289
- end
290
-
291
- class TableName
292
- attr_reader :table_name
293
-
294
- def initialize(table_name)
295
- self.table_name = table_name
296
- end
297
-
298
- def table_name=(t)
299
- SSException::TypeCheck.new(t, String).check()
300
- raise "table_name parameter is empty" if t.empty?
301
- @table_name = t
302
- end
303
-
304
- def to_p
305
- URI.escape("tableName=#{self.table_name}")
306
- end
307
-
308
- def to_s
309
- "#{self.table_name}"
310
- end
311
- end
312
-
313
- class ColumnName
314
- attr_reader :column_name
315
-
316
- def initialize(column_name)
317
- self.column_name = column_name
318
- end
319
-
320
- def column_name=(c)
321
- SSException::TypeCheck.new(c, String).check()
322
- raise "column_name parameter is empty" if c.empty?
323
- @column_name = c
324
- end
325
-
326
- def to_p
327
- URI.escape("columnName=#{self.column_name}")
328
- end
329
-
330
- def to_s
331
- "#{self.column_name}"
332
- end
333
- end
334
- end
335
-
336
- module SSResponse
337
- require 'rexml/document'
338
-
339
- class ResponseParser
340
- attr_reader :xml_doc
341
-
342
- def initialize(src)
343
- begin
344
- @xml_doc = REXML::Document.new(src)
345
- rescue Exception => e
346
- raise "REXML Exception, is a XML?: #{e.message}"
347
- end
348
- end
349
-
350
- def parse
351
- return ResponseDocument.from_xml(self.xml_doc.root)
352
- end
353
- end
354
-
355
- class ObjectBuilder
356
- def self.classes
357
- {:ArrayOfMetaTable => SchemaDefinition::ArrayOfMetaTable,
358
- :MetaTable => SchemaDefinition::MetaTable,
359
- :ArrayOfString => SchemaDefinition::ArrayOfString,
360
- :ArrayOfMetaColumn => SchemaDefinition::ArrayOfMetaColumn,
361
- :MetaColumn => SchemaDefinition::MetaColumn}
362
- end
363
-
364
- def self.get_class_for(type)
365
- klass = self.classes()[type.to_sym] || self.classes()[type]
366
- raise "Unable to find type #{type}" if !klass
367
- return klass
368
- end
369
- end
370
-
371
- class ResponseContent
372
- def self.from_xml(node)
373
- return ObjectBuilder.get_class_for(node.name).from_xml(node)
374
- end
375
- end
376
-
377
- class ResponseDocument
378
- attr_reader :response, :status, :message
379
-
380
- def initialize(response=nil, status=nil, message=nil)
381
- @response = response
382
- @status = status
383
- @message = message
384
- end
385
-
386
- def self.from_xml(root)
387
- raise "root element is null." if root == nil
388
-
389
- response = ResponseContent.from_xml(root)
390
-
391
- if !response
392
- status = root.attributes['status']
393
- message = root.get_text.value.strip if root.has_text?
394
- end
395
-
396
- return ResponseDocument.new(response, status, message)
397
- end
398
-
399
- def to_s
400
- "{response=#{self.response};status=#{self.status};message=#{self.message}}"
401
- end
402
- end
403
- end
404
-
405
- module SchemaRetrieval
406
- class SchemaRetrievalGeneric
407
- def method=(m)
408
- @method = SSParameters::Method.new(m)
409
- end
410
-
411
- def marshall
412
- raise "response parameter is null" if self.response == nil
413
- return SSResponse::ResponseParser.new(self.response).parse()
414
- end
415
-
416
- def to_s
417
- "uri=#{self.uri.to_s};method=#{self.method.to_s};" +
418
- "response=#{self.response.to_s};" +
419
- "query_timeout=#{query_timeout.to_s}"
420
- end
421
- end
422
-
423
- # Gets the list of table names.
424
- class GetTables < SchemaRetrievalGeneric
425
- include HTTPGetQuery
426
-
427
- attr_reader :uri, :ssl_files, :query_timeout, :method
428
- attr_accessor :response
429
-
430
- def initialize(uri, ssl_files=nil, query_timeout=30)
431
- self.uri = uri
432
-
433
- self.ssl_files = ssl_files
434
- self.query_timeout = query_timeout
435
-
436
- self.method = 'getTables'
437
-
438
- self.response = nil
439
- end
440
-
441
- def required_parameters
442
- [self.method.to_p]
443
- end
444
-
445
- def to_s
446
- super.to_s
447
- end
448
- end
449
-
450
- # Just like getTables class but with additional metadata info.
451
- class GetMetaTables < SchemaRetrievalGeneric
452
- include HTTPGetQuery
453
-
454
- attr_reader :uri, :ssl_files, :query_timeout, :method
455
- attr_accessor :response
456
-
457
- def initialize(uri, ssl_files=nil, query_timeout=30)
458
- self.uri = uri
459
-
460
- self.ssl_files = ssl_files
461
- self.query_timeout = query_timeout
462
-
463
- self.method = 'getMetaTables'
464
-
465
- self.response = nil
466
- end
467
-
468
- def required_parameters
469
- [self.method.to_p]
470
- end
471
-
472
- def to_s
473
- super.to_s
474
- end
475
- end
476
-
477
- # Gets the info associated to a table
478
- class GetTableInfo < SchemaRetrievalGeneric
479
- include HTTPGetQuery
480
-
481
- attr_reader :uri, :ssl_files, :query_timeout, :method, :table_name
482
- attr_accessor :response
483
-
484
- def initialize(uri, table_name, ssl_files=nil, query_timeout=30)
485
- self.uri = uri
486
- self.table_name = table_name
487
-
488
- self.ssl_files = ssl_files
489
- self.query_timeout = query_timeout
490
-
491
- self.method = 'getTableInfo'
492
-
493
- self.response = nil
494
- end
495
-
496
- def table_name=(t)
497
- @table_name = SSParameters::TableName.new(t)
498
- end
499
-
500
- def required_parameters
501
- [self.method.to_p, self.table_name.to_p]
502
- end
503
-
504
- def to_s
505
- super.to_s + ";table_name=#{self.table_name.to_s}"
506
- end
507
- end
508
-
509
- # Gets the list of column names for a particular table.
510
- class GetColumns < SchemaRetrievalGeneric
511
- include HTTPGetQuery
512
-
513
- attr_reader :uri, :ssl_files, :query_timeout, :method, :table_name
514
- attr_accessor :response
515
-
516
- def initialize(uri, table_name, ssl_files=nil, query_timeout=30)
517
- self.uri = uri
518
- self.table_name = table_name
519
-
520
- self.ssl_files = ssl_files
521
- self.query_timeout = query_timeout
522
-
523
- self.method = 'getColumns'
524
-
525
- self.response = nil
526
- end
527
-
528
- def table_name=(t)
529
- @table_name = SSParameters::TableName.new(t)
530
- end
531
-
532
- def required_parameters
533
- [self.method.to_p, self.table_name.to_p]
534
- end
535
-
536
- def to_s
537
- super.to_s + ";table_name=#{self.table_name.to_s}"
538
- end
539
- end
540
-
541
- # Just like getColumns but with additional metadata info.
542
- class GetMetaColumns < SchemaRetrievalGeneric
543
- include HTTPGetQuery
544
-
545
- attr_reader :uri, :ssl_files, :query_timeout, :method, :table_name
546
- attr_accessor :response
547
-
548
- def initialize(uri, table_name, ssl_files=nil, query_timeout=30)
549
- self.uri = uri
550
- self.table_name = table_name
551
-
552
- self.ssl_files = ssl_files
553
- self.query_timeout = query_timeout
554
-
555
- self.method = 'getMetaColumns'
556
-
557
- self.response = nil
558
- end
559
-
560
- def table_name=(t)
561
- @table_name = SSParameters::TableName.new(t)
562
- end
563
-
564
- def required_parameters
565
- [self.method.to_p, self.table_name.to_p]
566
- end
567
-
568
- def to_s
569
- super.to_s + ";table_name=#{self.table_name.to_s}"
570
- end
571
- end
572
-
573
- # Gets the info associated to a column.
574
- class GetColumnInfo < SchemaRetrievalGeneric
575
- include HTTPGetQuery
576
-
577
- attr_reader :uri, :ssl_files, :query_timeout, :method, :table_name, :column_name
578
- attr_accessor :response
579
-
580
- def initialize(uri, table_name, column_name, ssl_files=nil, query_timeout=30)
581
- self.uri = uri
582
- self.table_name = table_name
583
- self.column_name = column_name
584
-
585
- self.ssl_files = ssl_files
586
- self.query_timeout = query_timeout
587
-
588
- self.method = 'getColumnInfo'
589
-
590
- self.response = nil
591
- end
592
-
593
- def table_name=(t)
594
- @table_name = SSParameters::TableName.new(t)
595
- end
596
-
597
- def column_name=(c)
598
- @column_name = SSParameters::ColumnName.new(c)
599
- end
600
-
601
- def required_parameters
602
- [self.method.to_p, self.table_name.to_p, self.column_name.to_p]
603
- end
604
-
605
- def to_s
606
- super.to_s + ";table_name=#{self.table_name.to_s};column_name=#{self.column_name}"
607
- end
608
- end
609
- end
610
-
611
- class QueryExecutor
612
- attr_reader :queries, :results
613
-
614
- def initialize(queries=[], abort_on_exception=false)
615
- self.queries = queries
616
- Thread::abort_on_exception = abort_on_exception
617
-
618
- @results = {}
619
- begin_queries()
620
- end
621
-
622
- def queries=(q)
623
- SSException::TypeCheck.new(q, Array).check()
624
- raise "queries Array is empty" if q.empty?
625
- @queries = q
626
- end
627
-
628
- def begin_queries
629
- threads = []
630
-
631
- queries.each do |query|
632
- threads << Thread.new(query){ |the_query|
633
- the_query.fetch()
634
- @results[the_query] = the_query.marshall()
635
- }
636
- end
637
-
638
- threads.each{ |thread| thread.join() }
639
- end
640
- end
641
-
642
- end
643
- end
644
- end