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.
- data/Rakefile.rb +107 -224
- data/lib/misc.rb +1 -0
- data/lib/misc/misc.rb +60 -0
- data/lib/misc/propertyfile.rb +31 -0
- data/lib/symphony.rb +1 -0
- data/lib/symphony/symphony.rb +247 -0
- data/lib/voruby.rb +186 -0
- data/lib/voruby/active_votable/active_votable.rb +468 -347
- data/lib/voruby/adql/1.0/adql.rb +2418 -0
- data/lib/voruby/adql/support.rb +2 -0
- data/lib/voruby/misc.rb +351 -0
- data/lib/voruby/misc/connection_monitor.rb +97 -0
- data/lib/voruby/misc/libxml_ext.rb +121 -0
- data/lib/voruby/misc/rexml_ext.rb +223 -0
- data/lib/voruby/resolver/resolver.rb +12 -0
- data/lib/voruby/resolver/sesame.rb +299 -0
- data/lib/voruby/sky_query/sky_query.rb +192 -0
- data/lib/voruby/stc/1.10/coords.rb +2272 -0
- data/lib/voruby/stc/1.10/region.rb +892 -0
- data/lib/voruby/stc/1.10/stc.rb +3271 -0
- data/lib/voruby/stc/1.30/stc.rb +8666 -0
- data/lib/voruby/stc/support.rb +2 -0
- data/lib/voruby/ucd/ucd.rb +173 -0
- data/lib/voruby/voevent/1.1/voevent.rb +1124 -0
- data/lib/voruby/voevent/support.rb +5 -0
- data/lib/voruby/votable/1.0/votable.rb +1807 -0
- data/lib/voruby/votable/1.1/votable.rb +2100 -0
- data/lib/voruby/votable/votable.rb +305 -0
- data/lib/voruby/wesix/wesix.rb +491 -0
- data/lib/voruby/xlink/1.2/xlink.rb +21 -0
- data/test/voruby/active_votable/complex.vot +60 -0
- data/test/voruby/active_votable/error.vot +6 -0
- data/test/voruby/active_votable/large.vot +130040 -0
- data/test/voruby/active_votable/simple1.vot +38 -0
- data/test/voruby/active_votable/simple2.vot +38 -0
- data/test/voruby/active_votable/test.rb +193 -0
- data/test/voruby/adql/1.0/adql-alias.sql +1 -0
- data/test/voruby/adql/1.0/adql-alias.xml +26 -0
- data/test/voruby/adql/1.0/adql-avg.sql +1 -0
- data/test/voruby/adql/1.0/adql-avg.xml +31 -0
- data/test/voruby/adql/1.0/adql-circle.sql +1 -0
- data/test/voruby/adql/1.0/adql-circle.xml +46 -0
- data/test/voruby/adql/1.0/adql-expr.sql +1 -0
- data/test/voruby/adql/1.0/adql-expr.xml +34 -0
- data/test/voruby/adql/1.0/adql-function.sql +1 -0
- data/test/voruby/adql/1.0/adql-function.xml +41 -0
- data/test/voruby/adql/1.0/adql-group.sql +1 -0
- data/test/voruby/adql/1.0/adql-group.xml +51 -0
- data/test/voruby/adql/1.0/adql-having.sql +1 -0
- data/test/voruby/adql/1.0/adql-having.xml +25 -0
- data/test/voruby/adql/1.0/adql-like.sql +1 -0
- data/test/voruby/adql/1.0/adql-like.xml +17 -0
- data/test/voruby/adql/1.0/adql-order.sql +1 -0
- data/test/voruby/adql/1.0/adql-order.xml +37 -0
- data/test/voruby/adql/1.0/adql-simple.sql +1 -0
- data/test/voruby/adql/1.0/adql-simple.xml +12 -0
- data/test/voruby/adql/1.0/adql-top.sql +1 -0
- data/test/voruby/adql/1.0/adql-top.xml +33 -0
- data/test/voruby/adql/1.0/test.rb +2220 -0
- data/test/voruby/misc/test.rb +32 -0
- data/test/voruby/resolver/sesame/test.rb +56 -0
- data/test/voruby/sky_query/test.rb +107 -0
- data/test/voruby/stc/1.10/coords_test.rb +3704 -0
- data/test/voruby/stc/1.10/region_test.rb +993 -0
- data/test/voruby/stc/1.10/stc-catalog-entry-location.xml +112 -0
- data/test/voruby/stc/1.10/stc-obs-data-location.xml +126 -0
- data/test/voruby/stc/1.10/stc-region-circle.xml +5 -0
- data/test/voruby/stc/1.10/stc-region-convex.xml +11 -0
- data/test/voruby/stc/1.10/stc-region-convexhull.xml +5 -0
- data/test/voruby/stc/1.10/stc-region-ellipse.xml +7 -0
- data/test/voruby/stc/1.10/stc-region-intersection.xml +25 -0
- data/test/voruby/stc/1.10/stc-region-negation.xml +7 -0
- data/test/voruby/stc/1.10/stc-region-polygon.xml +13 -0
- data/test/voruby/stc/1.10/stc-region-sector.xml +6 -0
- data/test/voruby/stc/1.10/stc-region-union.xml +25 -0
- data/test/voruby/stc/1.10/stc-resource-profile.xml +60 -0
- data/test/voruby/stc/1.10/stc-search-location.xml +54 -0
- data/test/voruby/stc/1.10/stc_test.rb +4626 -0
- data/test/voruby/stc/1.30/stc-catalog-entry-location.xml +210 -0
- data/test/voruby/stc/1.30/stc-obs-data-location-arecibo.xml +353 -0
- data/test/voruby/stc/1.30/stc-obs-data-location-fits.xml +250 -0
- data/test/voruby/stc/1.30/stc-obs-data-location-xlink.xml +63 -0
- data/test/voruby/stc/1.30/stc-obs-data-location.xml +216 -0
- data/test/voruby/stc/1.30/stc-resource-profile-unusual-ref-pos.xml +39 -0
- data/test/voruby/stc/1.30/stc-resource-profile.xml +129 -0
- data/test/voruby/stc/1.30/stc-search-location-arecibo.xml +86 -0
- data/test/voruby/stc/1.30/stc-search-location.xml +101 -0
- data/test/voruby/stc/1.30/test.rb +6274 -0
- data/test/voruby/ucd/test.rb +48 -0
- data/test/voruby/voevent/1.1/test.rb +812 -0
- data/test/{voevent/voevent_v1_1.xml → voruby/voevent/1.1/voevent.xml} +2 -2
- data/test/voruby/voregistry/0.3/test.rb +137 -0
- data/test/voruby/votable/1.0/test.rb +714 -0
- data/test/voruby/votable/1.0/votable.basic.xml +660 -0
- data/test/voruby/votable/1.0/votable.html +86 -0
- data/test/voruby/votable/1.0/votable.ns.xml +56 -0
- data/test/voruby/votable/1.1/test.rb +785 -0
- data/test/voruby/votable/1.1/votable.basic.xml +38 -0
- data/test/voruby/votable/1.1/votable.html +86 -0
- data/test/voruby/votable/1.1/votable.ns.xml +56 -0
- data/test/voruby/votable/test.rb +15 -0
- data/test/voruby/wesix/test.rb +268 -0
- data/test/voruby/wesix/testr.fits +28 -0
- metadata +234 -247
- data/REQUIREMENTS +0 -6
- data/lib/voruby/active_votable/loader.rb +0 -5
- data/lib/voruby/adql/adql.rb +0 -2787
- data/lib/voruby/adql/ext.rb +0 -14
- data/lib/voruby/adql/loader.rb +0 -6
- data/lib/voruby/adql/operations.rb +0 -54
- data/lib/voruby/adql/parser.rb +0 -160
- data/lib/voruby/adql/transforms.rb +0 -573
- data/lib/voruby/ext.rb +0 -17
- data/lib/voruby/loader.rb +0 -4
- data/lib/voruby/misc/propertyfile.rb +0 -36
- data/lib/voruby/plastic/applications.rb +0 -174
- data/lib/voruby/plastic/constants.rb +0 -30
- data/lib/voruby/plastic/loader.rb +0 -10
- data/lib/voruby/plastic/plastic.rb +0 -1
- data/lib/voruby/resources/conesearch/conesearch.rb +0 -9
- data/lib/voruby/resources/conesearch/conesearch_v0_2.rb +0 -55
- data/lib/voruby/resources/conesearch/conesearch_v0_3.rb +0 -50
- data/lib/voruby/resources/conesearch/conesearch_v1_0.rb +0 -72
- data/lib/voruby/resources/conesearch/loader.rb +0 -4
- data/lib/voruby/resources/loader.rb +0 -50
- data/lib/voruby/resources/nodes.rb +0 -190
- data/lib/voruby/resources/openskynode/loader.rb +0 -4
- data/lib/voruby/resources/openskynode/openskynode.rb +0 -9
- data/lib/voruby/resources/openskynode/openskynode_v0_1.rb +0 -54
- data/lib/voruby/resources/sia/loader.rb +0 -5
- data/lib/voruby/resources/sia/sia.rb +0 -9
- data/lib/voruby/resources/sia/sia_v0_6.rb +0 -90
- data/lib/voruby/resources/sia/sia_v0_7.rb +0 -89
- data/lib/voruby/resources/sia/sia_v1_0.rb +0 -122
- data/lib/voruby/resources/stsci.rb +0 -59
- data/lib/voruby/resources/vodataservice/coverage_v0_2.rb +0 -195
- data/lib/voruby/resources/vodataservice/coverage_v0_3.rb +0 -158
- data/lib/voruby/resources/vodataservice/loader.rb +0 -5
- data/lib/voruby/resources/vodataservice/vodataservice.rb +0 -9
- data/lib/voruby/resources/vodataservice/vodataservice_v0_4.rb +0 -189
- data/lib/voruby/resources/vodataservice/vodataservice_v0_5.rb +0 -163
- data/lib/voruby/resources/vodataservice/vodataservice_v1_0.rb +0 -221
- data/lib/voruby/resources/voregistry/loader.rb +0 -4
- data/lib/voruby/resources/voregistry/voregistry.rb +0 -9
- data/lib/voruby/resources/voregistry/voregistry_v0_2.rb +0 -40
- data/lib/voruby/resources/voregistry/voregistry_v0_3.rb +0 -30
- data/lib/voruby/resources/voregistry/voregistry_v1_0.rb +0 -86
- data/lib/voruby/resources/voresource/loader.rb +0 -17
- data/lib/voruby/resources/voresource/voresource.rb +0 -9
- data/lib/voruby/resources/voresource/voresource_v0_10.rb +0 -327
- data/lib/voruby/resources/voresource/voresource_v0_9.rb +0 -405
- data/lib/voruby/resources/voresource/voresource_v1_0.rb +0 -230
- data/lib/voruby/services/ext.rb +0 -11
- data/lib/voruby/services/gestalt/footprint.rb +0 -95
- data/lib/voruby/services/gestalt/wcs_fixer.rb +0 -105
- data/lib/voruby/services/gestalt/wesix.rb +0 -155
- data/lib/voruby/services/loader.rb +0 -7
- data/lib/voruby/services/registry/registry.rb +0 -53
- data/lib/voruby/services/resolver/resolver.rb +0 -35
- data/lib/voruby/services/schema/schema.rb +0 -644
- data/lib/voruby/sesame/loader.rb +0 -6
- data/lib/voruby/sesame/sesame_v1_0.rb +0 -64
- data/lib/voruby/simple/loader.rb +0 -6
- data/lib/voruby/simple/parameters.rb +0 -196
- data/lib/voruby/simple/sap.rb +0 -446
- data/lib/voruby/spacetime/loader.rb +0 -3
- data/lib/voruby/spacetime/spacetime.rb +0 -607
- data/lib/voruby/stc/coords_v1_20.rb +0 -900
- data/lib/voruby/stc/loader.rb +0 -55
- data/lib/voruby/stc/region_v1_20.rb +0 -274
- data/lib/voruby/stc/stc_v1_20.rb +0 -1196
- data/lib/voruby/util.rb +0 -27
- data/lib/voruby/voevent/loader.rb +0 -7
- data/lib/voruby/voevent/voevent_v1_0.rb +0 -213
- data/lib/voruby/voevent/voevent_v1_1.rb +0 -196
- data/lib/voruby/votables/chandra.rb +0 -373
- data/lib/voruby/votables/data.rb +0 -179
- data/lib/voruby/votables/galex.rb +0 -377
- data/lib/voruby/votables/int.rb +0 -354
- data/lib/voruby/votables/libxml_parser.rb +0 -411
- data/lib/voruby/votables/libxml_votable.rb +0 -67
- data/lib/voruby/votables/loader.rb +0 -10
- data/lib/voruby/votables/meta.rb +0 -763
- data/lib/voruby/votables/misc.rb +0 -51
- data/lib/voruby/votables/nsa.rb +0 -410
- data/lib/voruby/votables/rexml_parser.rb +0 -408
- data/lib/voruby/votables/rexml_votable.rb +0 -67
- data/lib/voruby/votables/sdss.rb +0 -356
- data/lib/voruby/votables/transforms.rb +0 -388
- data/lib/voruby/votables/tree.rb +0 -45
- data/lib/voruby/votables/types.rb +0 -391
- data/lib/voruby/votables/votable.rb +0 -687
- data/test/active_votable/database.yml +0 -6
- data/test/active_votable/test.vot +0 -168492
- data/test/active_votable/unittest.rb +0 -41
- data/test/adql/test1.adql +0 -49
- data/test/adql/test2.adql +0 -51
- data/test/adql/test3.adql +0 -81
- data/test/adql/test4.adql +0 -53
- data/test/adql/test5.adql +0 -55
- data/test/adql/test6.adql +0 -18
- data/test/adql/test7.adql +0 -48
- data/test/adql/unittest.rb +0 -1672
- data/test/plastic/test.rb +0 -44
- data/test/plastic/test.vot +0 -5385
- data/test/plastic/unittest.rb +0 -66
- data/test/resources/conesearch/conesearch_v0_3.xml +0 -31
- data/test/resources/conesearch/conesearch_v1_0.xml +0 -86
- data/test/resources/conesearch/unittest_v0_3.rb +0 -22
- data/test/resources/conesearch/unittest_v1_0.rb +0 -24
- data/test/resources/openskynode/open_sky_node_v0_1.xml +0 -32
- data/test/resources/openskynode/unittest_v0_1.rb +0 -31
- data/test/resources/sia/simple_image_access_v0_7.xml +0 -36
- data/test/resources/sia/simple_image_access_v1_0.xml +0 -122
- data/test/resources/sia/unittest_v0_7.rb +0 -24
- data/test/resources/sia/unittest_v1_0.rb +0 -29
- data/test/resources/stsci.xml +0 -336
- data/test/resources/unittest_stsci.rb +0 -25
- data/test/resources/vodataservice/catalog_service_resource_v1_0.xml +0 -128
- data/test/resources/vodataservice/data_collection_resource_v0_5.xml +0 -54
- data/test/resources/vodataservice/data_collection_resource_v1_0.xml +0 -117
- data/test/resources/vodataservice/data_service_resource_v1_0.xml +0 -115
- data/test/resources/vodataservice/sky_service_resource_v0_10.xml +0 -45
- data/test/resources/vodataservice/table_service_resource_v1_0.xml +0 -122
- data/test/resources/vodataservice/tabular_sky_service_resource_v0_10.xml +0 -60
- data/test/resources/vodataservice/unittest_v0_5.rb +0 -126
- data/test/resources/vodataservice/unittest_v1_0.rb +0 -151
- data/test/resources/voregistry/authority_resource_v0_3.xml +0 -20
- data/test/resources/voregistry/authority_resource_v1_0.xml +0 -82
- data/test/resources/voregistry/registry_service_v0_3.xml +0 -20
- data/test/resources/voregistry/registry_service_v1_0.xml +0 -107
- data/test/resources/voregistry/unittest_v0_3.rb +0 -31
- data/test/resources/voregistry/unittest_v1_0.rb +0 -34
- data/test/resources/voresource/organisation_resource_v1_0.xml +0 -90
- data/test/resources/voresource/resource_organisation_v0_10.xml +0 -22
- data/test/resources/voresource/resource_service_v0_10.xml +0 -19
- data/test/resources/voresource/resource_v0_10.xml +0 -19
- data/test/resources/voresource/resource_v1_0.xml +0 -79
- data/test/resources/voresource/service_resource_v1_0.xml +0 -91
- data/test/resources/voresource/unittest_v0_10.rb +0 -61
- data/test/resources/voresource/unittest_v0_9.rb +0 -4
- data/test/resources/voresource/unittest_v1_0.rb +0 -190
- data/test/services/gestalt/unittest.rb +0 -74
- data/test/services/registry/unittest.rb +0 -34
- data/test/services/resolver/unittest.rb +0 -38
- data/test/simple/unittest.rb +0 -46
- data/test/spacetime/unittest.rb +0 -39
- data/test/stc/catalog_entry_location_v1_20.xml +0 -112
- data/test/stc/obs_data_location_v1_20.xml +0 -108
- data/test/stc/search_location_v1_20.xml +0 -54
- data/test/stc/stc_resource_profile_v1_20.xml +0 -60
- data/test/stc/unittest_v1_20.rb +0 -620
- data/test/voevent/unittest_v1_0.rb +0 -79
- data/test/voevent/unittest_v1_1.rb +0 -70
- data/test/voevent/voevent_v1_0.xml +0 -96
- data/test/votables/test.vot +0 -366
- 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
|