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