soar_sr 0.1.3
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.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/CODE_OF_CONDUCT.md +0 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +41 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/soar_sr/associations.rb +125 -0
- data/lib/soar_sr/contacts.rb +77 -0
- data/lib/soar_sr/domain_perspectives.rb +164 -0
- data/lib/soar_sr/failure_error.rb +3 -0
- data/lib/soar_sr/handler.rb +56 -0
- data/lib/soar_sr/juddi_provider.rb +172 -0
- data/lib/soar_sr/search.rb +104 -0
- data/lib/soar_sr/service_components.rb +92 -0
- data/lib/soar_sr/service_definitions.rb +39 -0
- data/lib/soar_sr/service_registry.rb +71 -0
- data/lib/soar_sr/services.rb +157 -0
- data/lib/soar_sr/teams.rb +20 -0
- data/lib/soar_sr/validation_error.rb +4 -0
- data/lib/soar_sr/validator.rb +93 -0
- data/lib/soar_sr/version.rb +3 -0
- data/lib/soar_sr.rb +19 -0
- data/soar_sr.gemspec +27 -0
- metadata +128 -0
@@ -0,0 +1,172 @@
|
|
1
|
+
require 'jsender'
|
2
|
+
require 'soap4juddi'
|
3
|
+
require 'persistent-cache'
|
4
|
+
|
5
|
+
module SoarSr
|
6
|
+
class JUDDIProvider
|
7
|
+
def initialize(urns, broker, cache_freshness)
|
8
|
+
@urns = urns
|
9
|
+
@broker = broker
|
10
|
+
@cache = Persistent::Cache.new("uddi-broker", cache_freshness, Persistent::Cache::STORAGE_RAM)
|
11
|
+
end
|
12
|
+
|
13
|
+
def broker
|
14
|
+
@broker
|
15
|
+
end
|
16
|
+
|
17
|
+
def assign_service_to_business(name, business_key = @urns['company'])
|
18
|
+
@broker.authorize
|
19
|
+
result = get_service(name)
|
20
|
+
service = result['data']
|
21
|
+
@broker.save_service_element(service['name'], service['description'], service['definition'], @urns['services'], business_key)
|
22
|
+
end
|
23
|
+
|
24
|
+
def assign_service_component_to_business(name, business_key = @urns['company'])
|
25
|
+
@broker.authorize
|
26
|
+
result = get_service_component(name)
|
27
|
+
service = result['data']
|
28
|
+
@broker.save_service_element(service['name'], service['description'], service['definition'], @urns['service-components'], business_key)
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_service(name)
|
32
|
+
cached = @cache["get_service:#{name}"]; return cached if cached
|
33
|
+
value = @broker.get_service_element(name, @urns['services'])
|
34
|
+
@cache["get_service:#{name}"] = value
|
35
|
+
value
|
36
|
+
end
|
37
|
+
|
38
|
+
def save_service(name, description = nil, definition = nil)
|
39
|
+
@broker.authorize
|
40
|
+
@broker.save_service_element(name, description.is_a?(Array) ? description : [description], definition, @urns['services'], @urns['company'])
|
41
|
+
end
|
42
|
+
|
43
|
+
def delete_service(name)
|
44
|
+
@broker.authorize
|
45
|
+
@broker.delete_service_element(name, @urns['services'])
|
46
|
+
end
|
47
|
+
|
48
|
+
def find_services(pattern = nil)
|
49
|
+
pattern = pattern.nil? ? '%' : "%#{pattern}%"
|
50
|
+
|
51
|
+
cached = @cache["find_services:#{pattern}"]; return cached if cached
|
52
|
+
value = @broker.find_services(pattern)
|
53
|
+
@cache["find_services:#{pattern}"] = value
|
54
|
+
value
|
55
|
+
end
|
56
|
+
|
57
|
+
def add_service_uri(service, uri)
|
58
|
+
result = remove_service_uri(service, uri)
|
59
|
+
result = save_service_uri(service, uri) if result['status'] == 'success'
|
60
|
+
result
|
61
|
+
end
|
62
|
+
|
63
|
+
def remove_service_uri(service, uri)
|
64
|
+
@broker.authorize
|
65
|
+
result = service_uris(service)
|
66
|
+
existing_id = has_existing_binding?(result['data']['bindings'], uri) if has_bindings?(result)
|
67
|
+
result = @broker.delete_binding(existing_id) if existing_id
|
68
|
+
result
|
69
|
+
end
|
70
|
+
|
71
|
+
def service_uris(service)
|
72
|
+
cached = @cache["service_uris:#{service}"]; return cached if cached
|
73
|
+
value = @broker.find_element_bindings(service, @urns['services'])
|
74
|
+
@cache["service_uris:#{service}"] = value
|
75
|
+
value
|
76
|
+
end
|
77
|
+
|
78
|
+
def get_service_component(name)
|
79
|
+
cached = @cache["get_service_component:#{name}"]; return cached if cached
|
80
|
+
value = @broker.get_service_element(name, @urns['service-components'])
|
81
|
+
@cache["get_service_component:#{name}"] = value
|
82
|
+
value
|
83
|
+
end
|
84
|
+
|
85
|
+
def save_service_component(name, description = nil, definition = nil)
|
86
|
+
@broker.authorize
|
87
|
+
@broker.save_service_element(name, description.is_a?(Array) ? description : [description], definition, @urns['service-components'], @urns['company'])
|
88
|
+
end
|
89
|
+
|
90
|
+
def delete_service_component(name)
|
91
|
+
@broker.authorize
|
92
|
+
@broker.delete_service_element(name, @urns['service-components'])
|
93
|
+
end
|
94
|
+
|
95
|
+
def find_service_components(pattern = nil)
|
96
|
+
pattern = pattern.nil? ? '%' : "%#{pattern}%"
|
97
|
+
cached = @cache["find_service_components:#{pattern}"]; return cached if cached
|
98
|
+
|
99
|
+
value = @broker.find_service_components(pattern)
|
100
|
+
@cache["find_service_components:#{pattern}"] = value
|
101
|
+
value
|
102
|
+
end
|
103
|
+
|
104
|
+
def save_service_component_uri(service_component, uri)
|
105
|
+
@broker.authorize
|
106
|
+
result = @broker.find_element_bindings(service_component, @urns['service-components'])
|
107
|
+
# only one binding for service components
|
108
|
+
delete_existing_bindings(result['data']['bindings']) if has_bindings?(result)
|
109
|
+
@broker.save_element_bindings(service_component, [uri], @urns['service-components'], "service component")
|
110
|
+
end
|
111
|
+
|
112
|
+
def delete_existing_bindings(bindings)
|
113
|
+
bindings.each do |binding, detail|
|
114
|
+
@broker.delete_binding(binding)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def find_service_component_uri(service_component)
|
119
|
+
cached = @cache["find_service_component_uri:#{service_component}"]; return cached if cached
|
120
|
+
value = @broker.find_element_bindings(service_component, @urns['service-components'])
|
121
|
+
@cache["find_service_component_uri:#{service_component}"] = value
|
122
|
+
value
|
123
|
+
end
|
124
|
+
|
125
|
+
def save_business(key, name, description = nil, contacts = nil)
|
126
|
+
@broker.authorize
|
127
|
+
@broker.save_business(key, name, description, contacts)
|
128
|
+
end
|
129
|
+
|
130
|
+
def get_business(key)
|
131
|
+
cached = @cache["get_business:#{key}"]; return cached if cached
|
132
|
+
value = @broker.get_business(key)
|
133
|
+
@cache["get_business:#{key}"] = value
|
134
|
+
value
|
135
|
+
end
|
136
|
+
|
137
|
+
def find_businesses(pattern = nil)
|
138
|
+
pattern = pattern.nil? ? '%' : "%#{pattern}%"
|
139
|
+
cached = @cache["find_businesses:#{pattern}"]; return cached if cached
|
140
|
+
value = @broker.find_business(pattern)
|
141
|
+
@cache["find_businesses:#{pattern}"] = value
|
142
|
+
value
|
143
|
+
end
|
144
|
+
|
145
|
+
def delete_business(key)
|
146
|
+
@broker.authorize
|
147
|
+
@broker.delete_business(key)
|
148
|
+
end
|
149
|
+
|
150
|
+
def business_eq?(business, comparison)
|
151
|
+
business == "#{@urns['domains']}#{comparison}"
|
152
|
+
end
|
153
|
+
|
154
|
+
private
|
155
|
+
|
156
|
+
def has_bindings?(result)
|
157
|
+
result and result['data'] and result['data']['bindings'] and (result['data']['bindings'].size > 0)
|
158
|
+
end
|
159
|
+
|
160
|
+
def has_existing_binding?(bindings, uri)
|
161
|
+
bindings.each do |binding, detail|
|
162
|
+
return binding if detail['access_point'] == uri
|
163
|
+
end
|
164
|
+
nil
|
165
|
+
end
|
166
|
+
|
167
|
+
def save_service_uri(service, uri)
|
168
|
+
@broker.authorize
|
169
|
+
@broker.save_element_bindings(service, [uri], @urns['services'], "service uri")
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'jsender'
|
2
|
+
require 'soap4juddi'
|
3
|
+
|
4
|
+
module SoarSr
|
5
|
+
class Search < SoarSr::Handler
|
6
|
+
include Jsender
|
7
|
+
|
8
|
+
def query_service_by_pattern(pattern)_{
|
9
|
+
provided?(pattern, 'pattern')
|
10
|
+
result = @uddi.find_services
|
11
|
+
list = {}
|
12
|
+
if has_data?(result, 'services')
|
13
|
+
result['data']['services'].each do |service, name|
|
14
|
+
detail = @uddi.get_service(service)
|
15
|
+
if has_data?(detail, 'description')
|
16
|
+
found = false
|
17
|
+
dss = nil
|
18
|
+
detail['data']['description'].each do |description|
|
19
|
+
found = true if (description and description.include?(pattern))
|
20
|
+
dss = description.gsub("dss:", "").strip if (description and description.include?('dss:'))
|
21
|
+
end
|
22
|
+
list[service] = detail if ((dss and (@dss and check_dss(service))) or (not dss)) and found
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
success_data({ 'services' => list })
|
28
|
+
}end
|
29
|
+
|
30
|
+
def search_for_service_by_name(name)
|
31
|
+
search_for_service(name, false, false)
|
32
|
+
end
|
33
|
+
|
34
|
+
def search_for_service(pattern, include_service_components = true, full_text = true)_{
|
35
|
+
provided?(pattern, 'pattern') and length_at_least?(pattern, 4, 'pattern')
|
36
|
+
|
37
|
+
services = {}
|
38
|
+
service_components = {}
|
39
|
+
services_list = @uddi.find_services(pattern)['data']['services'] if not include_service_components
|
40
|
+
services_list, service_components_list = @registry.services.find_services_and_service_components(nil) if include_service_components
|
41
|
+
services_list.each do |service, detail|
|
42
|
+
service_name = extract_domain_name('services', service)
|
43
|
+
if full_text
|
44
|
+
data = @uddi.get_service(service)['data'] if full_text
|
45
|
+
if search_for_pattern_in_hash_values(data, pattern)
|
46
|
+
services[service_name] = data
|
47
|
+
services[service_name]['uris'] = @registry.services.service_uris(service_name)['data']['bindings']
|
48
|
+
end
|
49
|
+
else
|
50
|
+
if service_name == service
|
51
|
+
services[service_name] = detail
|
52
|
+
services[service_name]['uris'] = @registry.services.service_uris(service_name)['data']['bindings']
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
if (include_service_components)
|
57
|
+
service_components_list.each do |service_component, detail|
|
58
|
+
service_name = extract_domain_name('services-components', service_component)
|
59
|
+
if full_text
|
60
|
+
data = @uddi.get_service_component(service_component)['data']
|
61
|
+
service_components[service_name] = data if search_for_pattern_in_hash_values(data, pattern)
|
62
|
+
else
|
63
|
+
service_components[service_name] = detail if service_name == service_component
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
found = services.merge!(service_components)
|
68
|
+
|
69
|
+
success_data({'services' => found})
|
70
|
+
}end
|
71
|
+
|
72
|
+
def search_domain_perspective(domain_perspective, pattern)_{
|
73
|
+
provided?(domain_perspective, 'domain perspective') and registered?(domain_perspective, 'domain perspective')
|
74
|
+
|
75
|
+
found = {}
|
76
|
+
data = @registry.associations.domain_perspective_associations(domain_perspective)['data']['associations']
|
77
|
+
services = {}
|
78
|
+
service_components = {}
|
79
|
+
services_list = data['services']
|
80
|
+
service_components_list = data['service_components']
|
81
|
+
services_list.each do |service, detail|
|
82
|
+
data = @uddi.get_service(service)['data']
|
83
|
+
services[extract_domain_name('services', service)] = data if search_for_pattern_in_hash_values(data, pattern)
|
84
|
+
end
|
85
|
+
service_components_list.each do |service_component, detail|
|
86
|
+
data = @uddi.get_service_component(service_component)['data']
|
87
|
+
service_components[extract_domain_name('services-components', service_component)] = data if search_for_pattern_in_hash_values(data, pattern)
|
88
|
+
end
|
89
|
+
found = services.merge!(service_components)
|
90
|
+
success_data({'services' => found})
|
91
|
+
}end
|
92
|
+
|
93
|
+
private
|
94
|
+
|
95
|
+
def search_for_pattern_in_hash_values(data, pattern)
|
96
|
+
data.keys.each do |key|
|
97
|
+
value = data[key]
|
98
|
+
return true if (not value.is_a?(Hash)) and (value.to_s.include?(pattern))
|
99
|
+
return true if (value.is_a?(Hash)) and (search_for_pattern_in_hash_values(value, pattern))
|
100
|
+
end
|
101
|
+
return false
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'jsender'
|
2
|
+
require 'soap4juddi'
|
3
|
+
|
4
|
+
module SoarSr
|
5
|
+
class ServiceComponents < SoarSr::Handler
|
6
|
+
include Jsender
|
7
|
+
|
8
|
+
def delete_all_service_components()_{
|
9
|
+
authorize
|
10
|
+
result = list_service_components
|
11
|
+
if has_data?(result, 'service_components')
|
12
|
+
result['data']['service_components'].each do |name, detail|
|
13
|
+
@uddi.delete_service_component(name)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
}end
|
17
|
+
|
18
|
+
def list_service_components(domain_perspective = nil)_{
|
19
|
+
return fail('unknown domain perspective provided') if domain_perspective and (not is_registered?(@registry.domain_perspectives.domain_perspective_registered?(domain_perspective)))
|
20
|
+
|
21
|
+
result = @uddi.find_service_components
|
22
|
+
service_components = has_data?(result, 'services') ? result['data']['services'] : {}
|
23
|
+
found = []
|
24
|
+
|
25
|
+
if not domain_perspective.nil?
|
26
|
+
associations = @registry.associations.domain_perspective_associations(domain_perspective)['data']['associations']['service_components']
|
27
|
+
return success_data({'service_components' => []}) if associations.count == 0
|
28
|
+
|
29
|
+
associations.each do |id, associated|
|
30
|
+
if associated
|
31
|
+
service_components.each do |sid, service_component|
|
32
|
+
found << sid if compile_domain_id('service-components', sid) == id
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
else
|
37
|
+
service_components.each do |sid, service_component|
|
38
|
+
found << sid
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
success_data('service_components' => found)
|
43
|
+
}end
|
44
|
+
|
45
|
+
def service_component_registered?(service_component)_{
|
46
|
+
result = @uddi.find_service_components(service_component)
|
47
|
+
registered = false
|
48
|
+
if has_data?(result, 'services')
|
49
|
+
result['data']['services'].each do |service_key, description|
|
50
|
+
registered = (service_component.downcase == service_key.downcase)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
success_data({'registered' => registered})
|
54
|
+
}end
|
55
|
+
|
56
|
+
def register_service_component(service_component)_{
|
57
|
+
authorize
|
58
|
+
provided?(service_component, 'service component') and not_registered?(service_component, 'service component')
|
59
|
+
|
60
|
+
result = @uddi.save_service_component(service_component)
|
61
|
+
authorized?(result) and identifier?(result, 'service component')
|
62
|
+
success('service component registered')
|
63
|
+
}end
|
64
|
+
|
65
|
+
def deregister_service_component(service_component)_{
|
66
|
+
# byebug
|
67
|
+
authorize
|
68
|
+
provided?(service_component, 'service component') and registered?(service_component, 'service component')
|
69
|
+
raise ValidationError, 'service component has domain perspective associations' if @registry.associations.service_component_has_domain_perspective_associations?(service_component)
|
70
|
+
result = @uddi.delete_service_component(service_component)
|
71
|
+
authorized?(result) and identifier?(result, 'service component')
|
72
|
+
success('service component deregistered')
|
73
|
+
}end
|
74
|
+
|
75
|
+
def configure_service_component_uri(service_component, uri)_{
|
76
|
+
authorize
|
77
|
+
provided?(service_component, 'service component') and provided?(uri, 'URI') and uri?(uri) and registered?(service_component, 'service component')
|
78
|
+
result = @uddi.save_service_component_uri(service_component, uri)
|
79
|
+
authorized?(result) and identifier?(result, 'service component')
|
80
|
+
success
|
81
|
+
}end
|
82
|
+
|
83
|
+
def service_component_uri(service_component)_{
|
84
|
+
provided?(service_component, 'service component') and registered?(service_component, 'service component')
|
85
|
+
result = @uddi.find_service_component_uri(service_component)
|
86
|
+
identifier?(result, 'service component')
|
87
|
+
uri = (has_data?(result, 'bindings') and (result['data']['bindings'].size > 0)) ? result['data']['bindings'].first[1]['access_point'] : nil
|
88
|
+
result['data']['uri'] = uri
|
89
|
+
success_data(result['data'])
|
90
|
+
}end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'jsender'
|
2
|
+
require 'soap4juddi'
|
3
|
+
|
4
|
+
module SoarSr
|
5
|
+
class ServiceDefinitions < SoarSr::Handler
|
6
|
+
include Jsender
|
7
|
+
|
8
|
+
def register_service_definition(service, definition)_{
|
9
|
+
authorize
|
10
|
+
provided?(service, 'service') and registered?(service, 'service') and provided?(definition, 'service definition') and wadl?(definition)
|
11
|
+
result = @uddi.get_service(service)
|
12
|
+
service = result['data']
|
13
|
+
service['definition'] = definition
|
14
|
+
result = @uddi.save_service(service['name'], service['description'], service['definition'])
|
15
|
+
authorized?(result) and identifier?(result, 'service')
|
16
|
+
success('service definition registered')
|
17
|
+
}end
|
18
|
+
|
19
|
+
def service_definition_for_service(service)_{
|
20
|
+
# byebug
|
21
|
+
provided?(service, 'service') and registered?(service, 'service')
|
22
|
+
result = @uddi.get_service(service)['data']
|
23
|
+
identifier?(result, 'service')
|
24
|
+
return fail('service has no definition') if (result['definition'].nil?) or (result['definition'] == "")
|
25
|
+
success_data({'definition' => result['definition']})
|
26
|
+
}end
|
27
|
+
|
28
|
+
def deregister_service_definition(service)_{
|
29
|
+
authorize
|
30
|
+
provided?(service, 'service') and registered?(service, 'service')
|
31
|
+
result = @uddi.get_service(service)
|
32
|
+
service = result['data']
|
33
|
+
service['definition'] = ""
|
34
|
+
result = @uddi.save_service(service['name'], service['description'], service['definition'])
|
35
|
+
authorized?(result) and identifier?(result, 'service')
|
36
|
+
success('service definition deregistered')
|
37
|
+
}end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'jsender'
|
2
|
+
require 'soap4juddi'
|
3
|
+
|
4
|
+
module SoarSr
|
5
|
+
class ServiceRegistry
|
6
|
+
attr_reader :services
|
7
|
+
attr_reader :service_definitions
|
8
|
+
attr_reader :service_components
|
9
|
+
attr_reader :domain_perspectives
|
10
|
+
attr_reader :teams
|
11
|
+
attr_reader :associations
|
12
|
+
attr_reader :search
|
13
|
+
attr_reader :broker
|
14
|
+
attr_reader :contacts
|
15
|
+
|
16
|
+
def initialize(uri, company, company_name, credentials, cache_freshness = 60)
|
17
|
+
@urns = initialize_urns(company, company_name)
|
18
|
+
@uddi = initialize_uddi_provider(uri, @urns, credentials, cache_freshness)
|
19
|
+
initialize_handlers(@urns, @uddi, credentials)
|
20
|
+
end
|
21
|
+
|
22
|
+
def check_dss(name)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def initialize_urns(fqdn, company_name)
|
28
|
+
base = "uddi:#{fqdn}"
|
29
|
+
@urns = { 'base' => base,
|
30
|
+
'company' => "#{base}:#{company_name}",
|
31
|
+
'domains' => "#{base}:domains-",
|
32
|
+
'teams' => "#{base}:teams-",
|
33
|
+
'services' => "#{base}:services:",
|
34
|
+
'service-components' => "#{base}:service-components:" }
|
35
|
+
@urns
|
36
|
+
end
|
37
|
+
|
38
|
+
def initialize_uddi_provider(uri, urns, credentials, cache_freshness)
|
39
|
+
@broker = ::Soap4juddi::Broker.new(urns)
|
40
|
+
@broker.set_uri(uri)
|
41
|
+
@uddi = ::SoarSr::JUDDIProvider.new(urns, @broker, cache_freshness)
|
42
|
+
end
|
43
|
+
|
44
|
+
def initialize_handlers(urns, uddi, credentials)
|
45
|
+
initialize_service_handlers(urns, uddi, credentials)
|
46
|
+
initialize_domain_handlers(urns, uddi, credentials)
|
47
|
+
initialize_associations_and_search(urns, uddi, credentials)
|
48
|
+
initialize_contacts(urns, uddi, credentials)
|
49
|
+
end
|
50
|
+
|
51
|
+
def initialize_service_handlers(urns, uddi, credentials)
|
52
|
+
@services = SoarSr::Services.new(urns, uddi, credentials, self)
|
53
|
+
@service_definitions = SoarSr::ServiceDefinitions.new(urns, uddi, credentials, self)
|
54
|
+
@service_components = SoarSr::ServiceComponents.new(urns, uddi, credentials, self)
|
55
|
+
end
|
56
|
+
|
57
|
+
def initialize_domain_handlers(urns, uddi, credentials)
|
58
|
+
@domain_perspectives = SoarSr::DomainPerspectives.new(urns, uddi, credentials, self)
|
59
|
+
@teams = SoarSr::Teams.new(urns, uddi, credentials, self)
|
60
|
+
end
|
61
|
+
|
62
|
+
def initialize_associations_and_search(urns, uddi, credentials)
|
63
|
+
@associations = SoarSr::Associations.new(urns, uddi, credentials, self)
|
64
|
+
@search = SoarSr::Search.new(urns, uddi, credentials, self)
|
65
|
+
end
|
66
|
+
|
67
|
+
def initialize_contacts(urns, uddi, credentials)
|
68
|
+
@contacts = SoarSr::Contacts.new(urns, uddi, credentials, self)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
require 'jsender'
|
2
|
+
require 'soap4juddi'
|
3
|
+
require 'json'
|
4
|
+
require 'byebug'
|
5
|
+
|
6
|
+
module SoarSr
|
7
|
+
class Services < SoarSr::Handler
|
8
|
+
include Jsender
|
9
|
+
|
10
|
+
def register_service(service, description = nil)_{
|
11
|
+
authorize
|
12
|
+
key_provided?(service, 'name', 'service') and not_registered?(service['name'], 'service')
|
13
|
+
result = @uddi.save_service(service['name'], extract_description_and_meta(service, description), service['definition'])
|
14
|
+
authorized?(result) and identifier?(result, 'service')
|
15
|
+
success('service registered')
|
16
|
+
}end
|
17
|
+
|
18
|
+
def deregister_service(service)_{
|
19
|
+
authorize
|
20
|
+
provided?(service, 'service') and registered?(service, 'service')
|
21
|
+
result = @uddi.delete_service(service)
|
22
|
+
authorized?(result) and identifier?(result, 'service')
|
23
|
+
success('service deregistered')
|
24
|
+
}end
|
25
|
+
|
26
|
+
def service_registered?(service)_{
|
27
|
+
registered = false
|
28
|
+
if present?(service)
|
29
|
+
result = @uddi.find_services(service)
|
30
|
+
registered = find_matching_service(service, result) if has_data?(result, 'services')
|
31
|
+
end
|
32
|
+
success_data({'registered' => (registered ||= false)})
|
33
|
+
}end
|
34
|
+
|
35
|
+
def add_service_uri(service, uri)_{
|
36
|
+
authorize
|
37
|
+
provided?(service, 'service') and provided?(uri, 'URI') and uri?(uri) and registered?(service, 'service')
|
38
|
+
result = @uddi.add_service_uri(service, uri)
|
39
|
+
authorized?(result) and identifier?(result, 'service')
|
40
|
+
success
|
41
|
+
}end
|
42
|
+
|
43
|
+
def service_uris(service)_{
|
44
|
+
authorize
|
45
|
+
provided?(service, 'service') and registered?(service, 'service')
|
46
|
+
result = @uddi.service_uris(service)
|
47
|
+
authorized?(result) and identifier?(result, 'service')
|
48
|
+
success_data(result['data'])
|
49
|
+
}end
|
50
|
+
|
51
|
+
def remove_uri_from_service(service, uri)_{
|
52
|
+
authorize
|
53
|
+
provided?(service, 'service') and provided?(uri, 'URI') and uri?(uri) and registered?(service, 'service')
|
54
|
+
result = @uddi.remove_service_uri(service, uri)
|
55
|
+
authorized?(result) and identifier?(result, 'service')
|
56
|
+
success
|
57
|
+
}end
|
58
|
+
|
59
|
+
def configure_meta_for_service(service, meta)_{
|
60
|
+
authorize
|
61
|
+
provided?(service, 'service') and provided?(meta, 'meta') and meta?(meta) and registered?(service, 'service')
|
62
|
+
|
63
|
+
descriptions = merge_meta_with_service_descriptions(service, meta)
|
64
|
+
result = update_service_descriptions(service, descriptions)
|
65
|
+
|
66
|
+
authorized?(result) and identifier?(result, 'meta')
|
67
|
+
success('meta updated', result['data'])
|
68
|
+
}end
|
69
|
+
|
70
|
+
def meta_for_service(service)
|
71
|
+
provided?(service, "service") and registered?(service, 'service')
|
72
|
+
detail = @uddi.get_service(service)['data']
|
73
|
+
if detail['description']
|
74
|
+
detail['description'].each do |desc|
|
75
|
+
return JSON.parse(CGI.unescape(desc)) if (description_is_meta?(desc))
|
76
|
+
end
|
77
|
+
end
|
78
|
+
{}
|
79
|
+
end
|
80
|
+
|
81
|
+
def service_by_name(name)_{
|
82
|
+
provided?(name, "service")
|
83
|
+
services = search_for_service(name)
|
84
|
+
return extract_service_by_name_from_services_list(services, name) if has_data?(services, 'services')
|
85
|
+
raise FailureErrorError, 'failure finding service by name'
|
86
|
+
}end
|
87
|
+
|
88
|
+
def find_services_and_service_components(pattern)
|
89
|
+
services = @uddi.find_services(pattern)['data']['services']
|
90
|
+
service_components = @uddi.find_service_components(pattern)['data']['services']
|
91
|
+
services ||= {}
|
92
|
+
service_components ||= {}
|
93
|
+
return services, service_components
|
94
|
+
end
|
95
|
+
|
96
|
+
private
|
97
|
+
|
98
|
+
def update_service_descriptions(service, descriptions)
|
99
|
+
detail = @uddi.get_service(service)['data']
|
100
|
+
detail['description'] = descriptions
|
101
|
+
@uddi.save_service(detail['name'], detail['description'], detail['definition'])
|
102
|
+
end
|
103
|
+
|
104
|
+
def merge_meta_with_service_descriptions(service, meta)
|
105
|
+
descriptions = []
|
106
|
+
detail = @uddi.get_service(service)['data']
|
107
|
+
detail['description'] ||= {}
|
108
|
+
detail['description'].each do |desc|
|
109
|
+
descriptions << desc if not description_is_meta?(desc)
|
110
|
+
end
|
111
|
+
descriptions << CGI.escape(meta.to_json)
|
112
|
+
descriptions
|
113
|
+
end
|
114
|
+
|
115
|
+
def find_matching_service(service, result)
|
116
|
+
registered = false
|
117
|
+
result['data']['services'].each do |service_key, description|
|
118
|
+
registered = (service.downcase == service_key.downcase)
|
119
|
+
end
|
120
|
+
registered
|
121
|
+
end
|
122
|
+
|
123
|
+
def extract_description_and_meta(service, description = nil)
|
124
|
+
result = []
|
125
|
+
result << service['description'] if service['description'] and description.nil?
|
126
|
+
result << description if not description.nil?
|
127
|
+
result << service['meta'] if service['meta']
|
128
|
+
result
|
129
|
+
end
|
130
|
+
|
131
|
+
def search_for_service(pattern)
|
132
|
+
provided?(pattern, "pattern") and length_at_least?(pattern, 4, "pattern")
|
133
|
+
|
134
|
+
services, service_components = find_services_and_service_components(pattern)
|
135
|
+
services = map_service_uris(services)
|
136
|
+
found = services.merge!(service_components)
|
137
|
+
|
138
|
+
success_data({'services' => found})
|
139
|
+
end
|
140
|
+
|
141
|
+
def map_service_uris(services)
|
142
|
+
services_detailed = {}
|
143
|
+
services.each do |id, service|
|
144
|
+
service['uris'] = service_uris(service['name'])['data']['bindings']
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
def extract_service_by_name_from_services_list(result, name)
|
149
|
+
result['data']['services'].each do |sname, service|
|
150
|
+
compare_service = "#{@urns['services']}#{name}" == sname
|
151
|
+
compare_service_component = "#{@urns['service-components']}#{name}" == sname
|
152
|
+
return success_data({ 'services' => { sname => service }}) if compare_service or compare_service_component or (name == sname)
|
153
|
+
end
|
154
|
+
success_data({ 'services' => {}})
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'jsender'
|
2
|
+
require 'soap4juddi'
|
3
|
+
|
4
|
+
module SoarSr
|
5
|
+
class Teams < SoarSr::DomainPerspectives
|
6
|
+
include Jsender
|
7
|
+
|
8
|
+
def team_registered?(domain_perspective)_{
|
9
|
+
domain_registered?('teams', domain_perspective)
|
10
|
+
}end
|
11
|
+
|
12
|
+
def register_team(domain_perspective)_{
|
13
|
+
register_domain('teams', domain_perspective)
|
14
|
+
}end
|
15
|
+
|
16
|
+
def deregister_team(domain_perspective)_{
|
17
|
+
deregister_domain('teams', domain_perspective)
|
18
|
+
}end
|
19
|
+
end
|
20
|
+
end
|