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, 11 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.