voruby 1.1.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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