source: ruby/trunk/lib/open_ehr/am/archetype/constraint_model/primitive.rb@ 400

Last change on this file since 400 was 400, checked in by KOBAYASHI, Shinji, 14 years ago

refs #71

File size: 8.3 KB
Line 
1# Ticket #71
2module OpenEHR
3 module AM
4 module Archetype
5 module ConstraintModel
6 module Primitive
7 class CPrimitive
8 attr_reader :default_value
9 attr_accessor :assumed_value
10
11 def initialize(args = { })
12 self.default_value = args[:default_value]
13 self.assumed_value = args[:assumed_value]
14 end
15
16 def default_value=(default_value)
17 if default_value.nil?
18 raise ArgumentError, 'default_value is mandatory'
19 end
20 @default_value = default_value
21 end
22
23 def has_assumed_value?
24 return !assumed_value.nil?
25 end
26 end
27
28 class CBoolean < CPrimitive
29 attr_reader :true_valid, :false_valid
30
31 def initialize(args = { })
32 binary_consistency(args[:true_valid], args[:false_valid])
33 @true_valid = args[:true_valid]
34 @false_valid = args[:false_valid]
35 super(args)
36 end
37
38 def default_value=(default_value)
39 super
40 default_value_consistency(default_value)
41 end
42
43 def true_valid=(true_valid)
44 binary_consistency(true_valid, @false_valid)
45 @true_valid = true_valid
46 end
47
48 def false_valid=(false_valid)
49 binary_consistency(@true_valid, false_valid)
50 @false_valid = false_valid
51 end
52
53 def true_valid?
54 return @true_valid
55 end
56
57 def false_valid?
58 return @false_valid
59 end
60
61 private
62 def binary_consistency(true_valid, false_valid)
63 if (true_valid == false) && (false_valid == false)
64 raise ArgumentError, 'true_valid or false_valid should be true'
65 end
66 end
67
68 def default_value_consistency(default_value)
69 if (!@true_valid && default_value) || (!@false_valid && !default_value)
70 raise ArgumentError, 'default value inconsistency'
71 end
72 end
73 end
74
75 class CString < CPrimitive
76 attr_reader :pattern, :list
77
78 def initialize(args = { })
79 super
80 consistency(args[:pattern], args[:list])
81 @pattern = args[:pattern]
82 @list = args[:list]
83 end
84
85 def pattern=(pattern)
86 consistency(pattern, @list)
87 @pattern = pattern
88 end
89
90 def list=(list)
91 consistency(@pattern, list)
92 @list = list
93 end
94
95 private
96 def consistency(pattern, list)
97 if pattern.nil? == list.nil?
98 raise ArgumentError, 'consistency invaild'
99 end
100 end
101 end
102
103 class CInteger < CPrimitive
104 attr_reader :list, :range
105
106 def initialize(args = { })
107 super
108 consistency(args[:list], args[:range])
109 @list = args[:list]
110 @range = args[:range]
111 end
112
113 def list=(list)
114 consistency(list, @range)
115 @list = list
116 end
117
118 def range=(range)
119 consistency(@list, range)
120 @range = range
121 end
122
123 private
124 def consistency(list, range)
125 if list.nil? == range.nil?
126 raise ArgumentError, 'consistency invalid'
127 end
128 end
129 end
130
131 class CReal < CInteger
132
133 end
134
135 module CDateModule
136 attr_accessor :range, :timezone_validity
137 attr_reader :month_validity, :day_validity
138
139 def month_validity=(month_validity)
140 if (month_validity == ValidityKind::OPTIONAL &&
141 !(@day_validity == ValidityKind::OPTIONAL ||
142 @day_validity == ValidityKind::DISALLOWED)) ||
143 (month_validity == ValidityKind::DISALLOWED &&
144 !(@day_validity == ValidityKind::DISALLOWED))
145 raise ArgumentError, 'month validity disallowed'
146 end
147 @month_validity = month_validity
148 end
149
150 def day_validity=(day_validity)
151 @day_validity = day_validity
152 end
153
154 def validity_is_range?
155 return !@range.nil?
156 end
157
158 private
159 def consistency_validity(month_validity, day_validity)
160 end
161 end
162
163 class CDate < CPrimitive
164 include CDateModule
165
166 def initialize(args = { })
167 super(args)
168 self.range = args[:range]
169 self.timezone_validity = args[:timezone_validity]
170 self.day_validity = args[:day_validity]
171 self.month_validity = args[:month_validity]
172 end
173 end
174
175 module CTimeModule
176 attr_accessor :range
177 attr_reader :minute_validity, :second_validity,
178 :millisecond_validity
179
180 def minute_validity=(minute_validity)
181 if (minute_validity == ValidityKind::OPTIONAL &&
182 @second_validity == ValidityKind::MANDATORY) ||
183 (minute_validity == ValidityKind::DISALLOWED &&
184 @second_validity != ValidityKind::DISALLOWED)
185 raise ArgumentError, 'minute_validity is invalid'
186 end
187 @minute_validity = minute_validity
188 end
189
190 def second_validity=(second_validity)
191 if (second_validity == ValidityKind::OPTIONAL &&
192 @millisecond_validity == ValidityKind::MANDATORY) ||
193 (second_validity == ValidityKind::DISALLOWED &&
194 @millisecond_validity != ValidityKind::DISALLOWED)
195 raise ArgumentError, 'second_validity is invalid'
196 end
197 @second_validity = second_validity
198 end
199
200 def millisecond_validity=(millisecond_validity)
201 @millisecond_validity = millisecond_validity
202 end
203
204 def validity_is_range?
205 return !@range.nil?
206 end
207 end
208
209 class CTime < CPrimitive
210 include CTimeModule
211
212 def initialize(args = { })
213 super
214 self.range = args[:range]
215 self.millisecond_validity = args[:millisecond_validity]
216 self.second_validity = args[:second_validity]
217 self.minute_validity = args[:minute_validity]
218 end
219 end
220
221 class CDateTime < CPrimitive
222 include CDateModule, CTimeModule
223 attr_reader :hour_validity
224
225 def initialize(args = { })
226 super
227 self.timezone_validity = args[:timezone_validity]
228 self.millisecond_validity = args[:millisecond_validity]
229 self.second_validity = args[:second_validity]
230 self.minute_validity = args[:minute_validity]
231 self.hour_validity = args[:hour_vaildity]
232 self.day_validity = args[:day_validity]
233 self.month_validity = args[:day_validity]
234 end
235
236 def hour_validity=(hour_validity)
237 if (hour_validity == ValidityKind::DISALLOWED &&
238 @minute_validity != ValidityKind::DISALLOWED) ||
239 (hour_validity == ValidityKind::OPTIONAL &&
240 !(@minute_validity == ValidityKind::OPTIONAL ||
241 @minute_validity == ValidityKind::DISALLOWED))
242 raise ArgumentError, 'hour_validity is invalid'
243 end
244 @hour_validity = hour_validity
245 end
246
247 def day_validity=(day_validity)
248 if (day_validity == ValidityKind::DISALLOWED &&
249 @hour_validity != ValidityKind::DISALLOWED) ||
250 (day_validity == ValidityKind::OPTIONAL &&
251 !(@hour_validity == ValidityKind::OPTIONAL ||
252 @hour_validity == ValidityKind::DISALLOWED))
253 raise ArgumentError, 'day_validity is invaild'
254 end
255 @day_validity = day_validity
256 end
257 end
258 end # of Primitive
259 end # of CostraintModel
260 end # of Archetype
261 end # of AM
262end # of OpenEHR
Note: See TracBrowser for help on using the repository browser.