source: ruby/branches/0.5/lib/open_ehr/rm/support/identification.rb@ 216

Last change on this file since 216 was 216, checked in by KOBAYASHI, Shinji, 15 years ago

move from Test:Unit to RSpec

File size: 9.4 KB
Line 
1# This module is an implementation of this UML:
2# http://www.openehr.org/uml/release-1.0.1/Browsable/_9_0_76d0249_1109331021343_528780_2066Report.html
3# Ticket refs #39
4module OpenEHR
5 module RM
6 module Support
7 module Identification
8 class ObjectId
9 attr_reader :value
10
11 def initialize(value)
12 self.value=value
13 end
14
15 def value=(value)
16 raise ArgumentError, "empty value" if value.nil? or value.empty?
17 @value = value
18 end
19 def ==(object_id)
20 @value == object_id.value
21 end
22 end # of ObjectID
23
24 class ObjectRef
25 attr_reader :namespace, :type, :id
26
27 def initialize(namespace, type, id)
28 self.namespace = namespace
29 self.type = type
30 self.id = id
31 end
32
33 def namespace=(namespace)
34 raise ArgumentError if namespace.nil? or namespace.empty? or !(/([a-z]|[A-Z]).*/ =~ namespace) # error original is =~ #([a-z][A-Z])([a-z]|[A-Z]|\s|[0-9]|[_-\:\/\&\+\?])*/
35 @namespace = namespace
36 end
37
38 def type=(type)
39 raise ArgumentError if type.nil? or type.empty?
40 @type = type
41 end
42
43 def id=(id)
44 raise ArgumentError if id.nil?
45 @id = id
46 end
47 end
48
49 class ArchetypeId < ObjectId
50 attr_reader :domain_concept, :rm_name, :rm_entity, :rm_originator, :specialisation, :version_id
51
52 def initialize(value, domain_concept, rm_name, rm_entity, rm_originator, specialisation, version_id)
53 super(value)
54 self.domain_concept = domain_concept
55 self.rm_name = rm_name
56 self.rm_entity = rm_entity
57 self.rm_originator = rm_originator
58 self.specialisation = specialisation
59 self.version_id = version_id
60 end
61
62 def domain_concept=(domain_concept)
63 raise ArgumentError, "domain concept not valid" if domain_concept.nil? or domain_concept.empty?
64 @domain_concept = domain_concept
65 end
66
67 def rm_name=(rm_name)
68 raise ArgumentError, "rm_name not valid" if rm_name.nil? or rm_name.empty?
69 @rm_name = rm_name
70 end
71
72 def rm_entity=(rm_entity)
73 raise ArgumentError, "rm_entity not valid" if rm_entity.nil? or rm_entity.empty?
74 @rm_entity = rm_entity
75 end
76
77 def rm_originator=(rm_originator)
78 raise ArgumentError, "rm_originator not valid" if rm_originator.nil? or rm_originator.empty?
79 @rm_originator = rm_originator
80 end
81
82 def specialisation=(specialisation)
83 raise ArgumentError, "rm_specialisation not valid" if specialisation.nil? or specialisation.empty?
84 @specialisation = specialisation
85 end
86 def version_id=(version_id)
87 raise ArgumentError, "version_id not valid" if version_id.nil? or version_id.empty?
88 @version_id = version_id
89 end
90 end
91
92 class TerminologyId < ObjectId
93 attr_reader :name, :version_id
94
95 def initialize(value)
96 super(value)
97 end
98
99 def value
100 if @version_id.empty?
101 @name
102 else
103 @name + '(' + @version_id + ')'
104 end
105 end
106
107
108 def value=(value)
109 raise ArgumentError, "value not valid" if value.nil? or value.empty?
110 if /(.*)\((.*)\)$/ =~ value
111 @name = $1
112 @version_id = $2
113 else
114 @name = value
115 @version_id = ''
116 end
117 @value = value
118 end
119
120 def name=(name)
121 raise ArgumentError, "name not valid" if name.nil? or name.empty?
122 @name = name
123 end
124
125 def version_id=(version_id)
126 raise ArgumentError, "version_id not valid" if version_id.nil?
127 @version_id = version_id
128 end
129 end # of Terminology_ID
130
131 class GenericId < ObjectId
132 attr_reader :scheme
133
134 def initialize(value, scheme)
135 super(value)
136 self.scheme = scheme
137 end
138
139 def scheme=(scheme)
140 raise ArgumentError, "scheme not valid" if scheme.nil? or scheme.empty?
141 @scheme = scheme
142 end
143 end # of Generic_ID
144
145 class TemplateId < ObjectId
146
147 end
148
149 class UidBasedId < ObjectId
150 def initialize(value)
151 super(value)
152 end
153
154 def extension
155 if self.has_extension?
156 @value[/::.*/][2..-1]
157 else
158 ''
159 end
160 end
161
162 def has_extension?
163 @value.include? '::'
164 end
165
166 def root
167 if self.has_extension?
168 @value[/.*::/][0..-3]
169 else
170 @value
171 end
172 end
173 end
174
175 class ObjectVersionId < UidBasedId
176 attr_reader :object_id, :creating_system_id, :version_tree_id
177
178 def initialize(value)
179 super(value)
180 end
181
182 def value=(value)
183 super(value)
184 if /^(\w+)::(\w+)::((\d|\.)+)$/ =~ value
185 self.object_id = Uid.new($1)
186 self.creating_system_id = Uid.new($2)
187 self.version_tree_id = VersionTreeId.new($3)
188 else
189 raise ArgumentError, 'invalid format'
190 end
191 end
192
193 def object_id=(object_id)
194 raise ArgumentError, 'object_id is mandatory' if object_id.nil?
195 @object_id = object_id
196 end
197
198 def creating_system_id=(creating_system_id)
199 if creating_system_id.nil?
200 raise ArgumentError, 'creating_system_id is mandatory'
201 end
202 @creating_system_id = creating_system_id
203 end
204
205 def version_tree_id=(version_tree_id)
206 if version_tree_id.nil?
207 raise ArgumentError, 'version_tree_id is mandatory'
208 end
209 @version_tree_id = version_tree_id
210 end
211
212 def is_branch?
213 return @version_tree_id.is_branch?
214 end
215 end
216
217 class LocatableRef < ObjectRef
218 attr_reader :namespace, :type, :id, :path
219
220 def initialize(namespace, type, id, path)
221 super(namespace, type, id)
222 self.path = path
223 end
224
225 def path=(path)
226 raise ArgumentError if path.nil? or path.empty?
227 @path = path
228 end
229
230 def as_uri
231 'ehr://' + @id.value + '/' + @path
232 end
233 end
234
235 class PartyRef < ObjectRef
236
237 def type=(type)
238 parties = ['PERSON', 'ORGANISATION', 'GROUP', 'AGENT', 'ROLE','PARTY', 'ACTOR']
239 raise ArgumentError, 'type invalid' unless parties.include? type
240 @type = type
241 end
242 end
243
244 class AccessGroupRef < ObjectRef
245 def type=(type)
246 raise ArgumentError, 'type invalid' unless type == 'ACCESS_GROUP'
247 @type = type
248 end
249 end
250
251 class HierObjectId < UidBasedId
252
253 end
254
255 class VersionTreeId
256 attr_reader :value, :trunk_version, :branch_number, :branch_version
257
258 def initialize(value)
259 self.value = value
260 end
261
262 def value=(value)
263 raise ArgumentError, 'value invalid' if value.nil? or value.empty?
264 @trunk_version = @branch_number = @branch_version = nil
265 (trunk_version, branch_number, branch_version) = value.split '.'
266 self.trunk_version = trunk_version
267 self.branch_number = branch_number
268 self.branch_version = branch_version
269 end
270
271 def trunk_version=(trunk_version)
272 raise ArgumentError, 'trunk_version invalid' if trunk_version.nil? and !trunk_version.to_i >= 1
273 @trunk_version = trunk_version
274 set_value
275 end
276
277 def branch_number=(branch_number)
278 raise ArgumentError, 'branch number invalid' unless branch_number.nil? or branch_number.to_i >= 1
279 @branch_number = branch_number
280 set_value
281 end
282
283 def branch_version=(branch_version)
284 raise ArgumentError, 'branch version invalid' if (!branch_version.nil? and !( branch_version.to_i >= 1)) or (!branch_version.nil? and @branch_number.nil?)
285 @branch_version = branch_version
286 set_value
287 end
288 def is_branch?
289 !@branch_version.nil? and !@branch_number.nil?
290 end
291
292 def is_first?
293 trunk_version == '1'
294 end
295
296 private
297 def set_value
298 @value = trunk_version
299 @value = @value + '.' + @branch_number unless @branch_number.nil?
300 @value = @value + '.' + @branch_version unless @branch_version.nil?
301 end
302 end
303
304 class Uid
305 attr_reader :value
306
307 def initialize(value)
308 self.value = value
309 end
310
311 def value=(value)
312 raise ArgumentError if value.nil? or value.empty?
313 @value = value
314 end
315 end
316
317 class Uuid < Uid
318
319 end
320
321 class InternetId <Uid
322
323 end
324
325 class IsoOid <Uid
326
327 end
328 end # of Identification
329 end # of Support
330 end # of RM
331end # of OpenEHR
Note: See TracBrowser for help on using the repository browser.