ontomde-core 1.0.2 → 1.0.4
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.
- data/History.txt +10 -5
- data/Manifest.txt +1 -2
- data/Manual.txt +88 -0
- data/README.txt +79 -48
- data/Rakefile +4 -3
- data/lib/ontomde-core/bootstrap_rdfs.rb +36 -37
- data/lib/ontomde-core/clone.rb +72 -73
- data/lib/ontomde-core/context.rb +114 -115
- data/lib/ontomde-core/customERB.rb +72 -72
- data/lib/ontomde-core/custom_method_missing.rb +52 -53
- data/lib/ontomde-core/delayed.rb +9 -9
- data/lib/ontomde-core/demoInstaller.rb +25 -25
- data/lib/ontomde-core/exceptions.rb +27 -28
- data/lib/ontomde-core/fileLoader.rb +191 -163
- data/lib/ontomde-core/fileTypes.rb +145 -133
- data/lib/ontomde-core/helper.rb +547 -538
- data/lib/ontomde-core/log.rb +32 -32
- data/lib/ontomde-core/meta.rb +410 -316
- data/lib/ontomde-core/profil.rb +60 -62
- data/lib/ontomde-core/resource.rb +277 -272
- data/lib/ontomde-core/resourceSet.rb +185 -173
- data/lib/ontomde-core/triplet.rb +159 -161
- data/lib/ontomde-core/version.rb +5 -5
- data/lib/ontomde-core.rb +26 -35
- data/test/protege/etatCivil.pprj +779 -526
- data/test/protege/etatCivil.rdf +3 -1
- data/test/protege/etatCivil.rdfs +6 -0
- data/test/protege/test_demo.rb +68 -46
- data/test/test_context.rb +88 -88
- data/test/test_ontomde-core.rb +9 -9
- data/test/test_protected.rb +291 -238
- data/test/test_uri.rb +37 -37
- data/test/unit_test_crash.rb +22 -22
- metadata +66 -59
- data/bin/ontomde-core +0 -0
- data/lib/ontomde-core/loader.rb +0 -70
data/lib/ontomde-core/meta.rb
CHANGED
@@ -1,316 +1,410 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
#
|
50
|
-
#
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
END
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
#{
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
end
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
1
|
+
|
2
|
+
#require "ontomde-core/exceptions.rb"
|
3
|
+
require "singleton"
|
4
|
+
|
5
|
+
# Helper methods to handle rdf ressources as object.
|
6
|
+
module IteratorOrSingleElement
|
7
|
+
def to_s
|
8
|
+
r=""
|
9
|
+
sep=""
|
10
|
+
self.each{ |elt|
|
11
|
+
r=r+sep+(elt.to_s)
|
12
|
+
sep=" "
|
13
|
+
}
|
14
|
+
return r
|
15
|
+
end
|
16
|
+
def isFalse?
|
17
|
+
return !isTrue?
|
18
|
+
end
|
19
|
+
def +(array)
|
20
|
+
return self if array.kind_of?(ArrayOrSingleElementEmpty)
|
21
|
+
return super(array)
|
22
|
+
end
|
23
|
+
|
24
|
+
STRING_TO_BOOLEAN_HASH={ "false" => false, "true" => true}
|
25
|
+
def other_implem_isTrue?
|
26
|
+
return false if length==0
|
27
|
+
raise Warning.new,"bad data for isTrue?(length=#{length}>1)" if length>1
|
28
|
+
ret=STRING_TO_BOOLEAN_HASH[self[0]]
|
29
|
+
return ret unless ret.nil?
|
30
|
+
raise Warning.new,"bad data for isTrue?(#{self[0]})" if length>1
|
31
|
+
end
|
32
|
+
def isTrue?
|
33
|
+
#return false if length==0
|
34
|
+
return false if empty?
|
35
|
+
raise Warning.new,"bad data for isTrue?(length=#{length}>1)" if length>1
|
36
|
+
return false if self[0]=="false"
|
37
|
+
return true if self[0]=="true"
|
38
|
+
raise Warning.new,"bad data for isTrue?(#{self[0]})" if length>1
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
class ArrayOrSingleElement < Array
|
43
|
+
include IteratorOrSingleElement
|
44
|
+
end
|
45
|
+
class SetOrSingleElement < Set
|
46
|
+
include IteratorOrSingleElement end
|
47
|
+
|
48
|
+
# Singleton of an empty ArrayOrSingleElement
|
49
|
+
# Note:
|
50
|
+
# This object is used for performance enhancement.
|
51
|
+
class ArrayOrSingleElementEmpty #< ArrayOrSingleElement
|
52
|
+
include Singleton
|
53
|
+
|
54
|
+
# Size of an empty Array (always 0)
|
55
|
+
def size
|
56
|
+
0
|
57
|
+
end
|
58
|
+
|
59
|
+
# Size of an empty Array (always 0)
|
60
|
+
def length
|
61
|
+
0
|
62
|
+
end
|
63
|
+
|
64
|
+
# Iterator (does nothing)
|
65
|
+
def each
|
66
|
+
end
|
67
|
+
|
68
|
+
# returns self as
|
69
|
+
def select
|
70
|
+
# quelque-soit le critere
|
71
|
+
# de selection le retour est tout aussi vide
|
72
|
+
return self;
|
73
|
+
end
|
74
|
+
|
75
|
+
# returns array
|
76
|
+
def +(array)
|
77
|
+
return array
|
78
|
+
end
|
79
|
+
|
80
|
+
# returns !isTrue?
|
81
|
+
def isFalse?
|
82
|
+
return !isTrue?
|
83
|
+
end
|
84
|
+
|
85
|
+
# returns false
|
86
|
+
def isTrue?
|
87
|
+
return false
|
88
|
+
end
|
89
|
+
|
90
|
+
# returns ""
|
91
|
+
def to_s
|
92
|
+
return ""
|
93
|
+
end
|
94
|
+
|
95
|
+
#return true
|
96
|
+
def empty?
|
97
|
+
return true
|
98
|
+
end
|
99
|
+
|
100
|
+
#returns false
|
101
|
+
def include?(elt)
|
102
|
+
return false
|
103
|
+
end
|
104
|
+
|
105
|
+
def delete(elt)
|
106
|
+
return nil
|
107
|
+
end
|
108
|
+
|
109
|
+
def sort(&block)
|
110
|
+
return self
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
module Mrdfs_Literal
|
115
|
+
end
|
116
|
+
class Crdf_Resource
|
117
|
+
|
118
|
+
# helper method used by rdf property getter
|
119
|
+
# return first value contained in val ArrayOrSingleElement
|
120
|
+
#
|
121
|
+
# When val is empty:
|
122
|
+
# log an error if warn==true
|
123
|
+
# returns nil
|
124
|
+
# When val contains more than one element:
|
125
|
+
# log an error
|
126
|
+
# returns first element found
|
127
|
+
def rdf_getter_one(val,warn,propNameShort)
|
128
|
+
if val.nil? || val.size==0
|
129
|
+
log_error_nil_one(propNameShort) if warn
|
130
|
+
return nil
|
131
|
+
end
|
132
|
+
return val[0] if val.length==1
|
133
|
+
log.error "#{propNameShort}_one used with multi-value (class=#{self.class.name})(uri=#{rdf_uri})(length=#{val.length})(value=(#{val.to_s}) Returning first one found as workaround : (#{val[0]})"
|
134
|
+
return val[0]
|
135
|
+
end
|
136
|
+
# raise an exception if value does not have a type in range array.
|
137
|
+
# This method is used by rdf attributes operators.
|
138
|
+
#
|
139
|
+
# range: array of types
|
140
|
+
# value: a value
|
141
|
+
# property: name of the property, value comes from (used in error message)
|
142
|
+
def check_rdfType(range,value,property)
|
143
|
+
return if value.nil?
|
144
|
+
return if range.empty?
|
145
|
+
range.each { |r|
|
146
|
+
return if value.kind_of?(r)
|
147
|
+
return if r==::Mrdfs_Literal && (value.kind_of?(String) || value.kind_of?(Fixnum))
|
148
|
+
}
|
149
|
+
raise Exception.new(
|
150
|
+
<<END
|
151
|
+
|
152
|
+
********* ILLEGAL ASSIGNEMENT TYPE **********
|
153
|
+
** property #{property}
|
154
|
+
** has a range of (valid value types)
|
155
|
+
** [ #{range} ]
|
156
|
+
** which is not compatible with type #{value.class.name}
|
157
|
+
** Please check your code for incorrect assignement.
|
158
|
+
**
|
159
|
+
** This model element is related to these other model elements:
|
160
|
+
#{mtk_related_message}
|
161
|
+
********* ILLEGAL ASSIGNEMENT TYPE **********
|
162
|
+
END
|
163
|
+
)
|
164
|
+
end
|
165
|
+
|
166
|
+
# helper method used by rdf property
|
167
|
+
# to retrieve the inverse of a property.
|
168
|
+
#
|
169
|
+
# This method return is randomly ordered
|
170
|
+
#
|
171
|
+
# sym_short: name of the inverse property
|
172
|
+
# filter: method calling the direct property
|
173
|
+
# (used for performance reason to avoid eval)
|
174
|
+
def rdf_getter_inv(sym_short,&filter)
|
175
|
+
ret=nil
|
176
|
+
ext_isReferencedBy.each { |g|
|
177
|
+
next unless g.respond_to?(sym_short)
|
178
|
+
next unless yield(g).include?(self)
|
179
|
+
ret=::ArrayOrSingleElement.new if ret.nil?
|
180
|
+
next if ret.include?(g)
|
181
|
+
ret << g
|
182
|
+
}
|
183
|
+
return ret.nil? ? ::ArrayOrSingleElementEmpty.instance : ret
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
module Kernel
|
188
|
+
|
189
|
+
#Creates accessors for rdf property passed as argument.
|
190
|
+
#
|
191
|
+
#Example:
|
192
|
+
# for rdf_safe_attr_reader_many uml_abcde_efgh
|
193
|
+
# the following methods are generated
|
194
|
+
#
|
195
|
+
# def uml_abcd_efgh ()
|
196
|
+
# returns an Array of reference elements.
|
197
|
+
# (This array is READ-ONLY)
|
198
|
+
#
|
199
|
+
# def uml_efgh ()
|
200
|
+
# same as uml_abcd_efgh
|
201
|
+
# in case of name clashing use long version.
|
202
|
+
#
|
203
|
+
# def uml_efgh_one()
|
204
|
+
# Returns nil if array is empty
|
205
|
+
# Triggers an error if array contains more than one element.
|
206
|
+
# returns the first element of array
|
207
|
+
#
|
208
|
+
# def uml_efgh=(x)
|
209
|
+
# reset array and add x
|
210
|
+
#
|
211
|
+
# def uml_efgh_add(x)
|
212
|
+
# add x to the existing array
|
213
|
+
#
|
214
|
+
# def uml_efgh?
|
215
|
+
# returns uml_efgh.isTrue?()
|
216
|
+
#
|
217
|
+
def rdf_safe_attr_reader_many(*syms)
|
218
|
+
syms.each { |s|
|
219
|
+
rdf_attr_rubyCode(s,[]).each { |code|
|
220
|
+
class_eval code
|
221
|
+
}
|
222
|
+
}
|
223
|
+
end
|
224
|
+
|
225
|
+
#creates rdf attribute and accessors
|
226
|
+
def rdf_attr(sym,range)
|
227
|
+
rdf_attr_rubyCode(sym,range).each { |code|
|
228
|
+
class_eval code
|
229
|
+
}
|
230
|
+
end
|
231
|
+
|
232
|
+
# returns ruby code generated for rdf attribute and accessors.
|
233
|
+
def rdf_attr_rubyCode(sym,range)
|
234
|
+
ret=[]
|
235
|
+
# TODO: ne pas crer un objet vide systématiquement.
|
236
|
+
|
237
|
+
#sym_array=sym.to_s.split("_",3)
|
238
|
+
#sym_short=""
|
239
|
+
#if sym_array[0]=="uml" && sym_array[2]!=""
|
240
|
+
# sym_short="#{sym_array[0]}_#{sym_array[2]}"
|
241
|
+
#else
|
242
|
+
sym_short=sym
|
243
|
+
#end
|
244
|
+
#version normale
|
245
|
+
#TODO: supprimer la version normale
|
246
|
+
# ou raccourcir les nom en amont
|
247
|
+
#class_eval %{def #{sym}
|
248
|
+
# log.warn "method #{sym} is deprecated. Use #{sym_short} instead"
|
249
|
+
# @#{sym}.nil? ? ::ArrayOrSingleElementEmpty.instance : @#{sym}
|
250
|
+
#end}
|
251
|
+
#version courte
|
252
|
+
|
253
|
+
#log.debug "sym_short: >#{sym_array[0]}< >#{sym_array[1]}< >#{sym_array[2]}<"
|
254
|
+
#log.debug sym_short
|
255
|
+
ret << %{def #{sym_short}
|
256
|
+
@#{sym}.nil? ? ::ArrayOrSingleElementEmpty.instance : @#{sym}
|
257
|
+
end}
|
258
|
+
|
259
|
+
(range.empty?&&true ? [Crdf_Resource] : range).each { |inv_res|
|
260
|
+
next if inv_res==::Mrdfs_Literal
|
261
|
+
inv_res.class_eval <<END
|
262
|
+
def #{sym_short}_inv
|
263
|
+
return rdf_getter_inv(:#{sym_short}) { |g| g.#{sym_short} }
|
264
|
+
end
|
265
|
+
def #{sym_short}_inv_one()
|
266
|
+
return rdf_getter_one(#{sym_short}_inv,true,:#{sym_short}_inv)
|
267
|
+
end
|
268
|
+
def #{sym_short}_inv_one0()
|
269
|
+
return rdf_getter_one(#{sym_short}_inv,false,:#{sym_short}_inv)
|
270
|
+
end
|
271
|
+
END
|
272
|
+
}
|
273
|
+
|
274
|
+
|
275
|
+
range_array="["; sep=""
|
276
|
+
range.each { |r|
|
277
|
+
range_array+=sep+r.name #.getRubyModuleName
|
278
|
+
sep=","
|
279
|
+
}
|
280
|
+
range_array+="]"
|
281
|
+
|
282
|
+
if (true)
|
283
|
+
ret << %{def #{sym_short}_typeOk?(val)
|
284
|
+
check_rdfType(#{range_array},val,:#{sym_short})
|
285
|
+
end
|
286
|
+
}
|
287
|
+
else
|
288
|
+
# TODO: more performant but generates warnings
|
289
|
+
# investigate reason of multiple execution
|
290
|
+
ret << %{RANGE_#{sym_short}=#{range_array}
|
291
|
+
def #{sym_short}_typeOk?(val)
|
292
|
+
check_rdfType(RANGE_#{sym_short},val,:#{sym_short})
|
293
|
+
end
|
294
|
+
}
|
295
|
+
end
|
296
|
+
|
297
|
+
ret << %{def #{sym_short}?
|
298
|
+
return #{sym_short}.isTrue?
|
299
|
+
end}
|
300
|
+
|
301
|
+
ret << %{def #{sym_short}_one()
|
302
|
+
return rdf_getter_one(@#{sym},true,:#{sym_short})
|
303
|
+
end}
|
304
|
+
|
305
|
+
ret << %{def #{sym_short}_one0()
|
306
|
+
return rdf_getter_one(@#{sym},false,:#{sym_short})
|
307
|
+
end}
|
308
|
+
|
309
|
+
inv=(sym_short.to_s=="ext_isReferencedBy") ? "" : "item.ext_isReferencedBy_add(self) if item.respond_to?(:ext_isReferencedBy_add) "
|
310
|
+
|
311
|
+
ret << %{def #{sym_short}=(v)
|
312
|
+
if v.nil?
|
313
|
+
@#{sym}=nil
|
314
|
+
elsif v.kind_of?(ArrayOrSingleElement) || v.kind_of?(Array) || v.kind_of?(ArrayOrSingleElementEmpty)
|
315
|
+
@#{sym}= ArrayOrSingleElement.new
|
316
|
+
v.each { |item|
|
317
|
+
#{sym_short}_typeOk?(item)
|
318
|
+
@#{sym}.push(item)
|
319
|
+
#{inv}
|
320
|
+
}
|
321
|
+
else
|
322
|
+
@#{sym}= ArrayOrSingleElement.new
|
323
|
+
#{sym_short}_typeOk?(v)
|
324
|
+
@#{sym}.push(v)
|
325
|
+
item=v
|
326
|
+
#{inv}
|
327
|
+
end
|
328
|
+
end}
|
329
|
+
|
330
|
+
ret << %{def #{sym_short}_add(item)
|
331
|
+
if !item.nil?
|
332
|
+
#log.debug @#{sym}.size+1000
|
333
|
+
if @#{sym}.nil?
|
334
|
+
#log.debug "reset @#{sym}"
|
335
|
+
@#{sym}= ArrayOrSingleElement.new
|
336
|
+
end
|
337
|
+
#{sym_short}_typeOk?(item)
|
338
|
+
@#{sym}.push(item)
|
339
|
+
#{inv}
|
340
|
+
end
|
341
|
+
end}
|
342
|
+
|
343
|
+
return ret
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
|
348
|
+
module Mrdf_Model
|
349
|
+
def mtk_object_message
|
350
|
+
return ""
|
351
|
+
end
|
352
|
+
def mtk_related_message
|
353
|
+
return ""
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
357
|
+
module Mrdf_Resource
|
358
|
+
#return a string describing this object
|
359
|
+
#(used for error log messages)
|
360
|
+
def mtk_object_message
|
361
|
+
return <<END
|
362
|
+
** uri =#{rdf_uri}
|
363
|
+
** type=#{self.class.name}
|
364
|
+
** to_s=#{self.to_s}
|
365
|
+
END
|
366
|
+
end
|
367
|
+
#return a string describing object related to this object
|
368
|
+
#(used for error log messages)
|
369
|
+
def mtk_related_message
|
370
|
+
related=""
|
371
|
+
ext_isReferencedBy.each { |g|
|
372
|
+
related=related+"** (#{g.class.name}) #{g}\n"
|
373
|
+
}
|
374
|
+
return related
|
375
|
+
end
|
376
|
+
|
377
|
+
|
378
|
+
# generates an error message used when
|
379
|
+
# "meth" returns unexpectedly no data.
|
380
|
+
def log_error_nil_one(meth)
|
381
|
+
return if log_already_displayed?("#{rdf_uri}__#{meth}")
|
382
|
+
log.error {
|
383
|
+
|
384
|
+
<<END
|
385
|
+
#{meth}_one nil for #{self}::#{self.class.name} (uri=#{rdf_uri})
|
386
|
+
********* INVALID DATA DETECTED **********
|
387
|
+
** This software expects the model element specified bellow
|
388
|
+
**#{mtk_object_message}
|
389
|
+
** to have exactly one "#{meth}".
|
390
|
+
**
|
391
|
+
** This is most likely caused by a missing data in source model.
|
392
|
+
** Please check that previous element has a #{meth} defined.
|
393
|
+
**
|
394
|
+
** This model element is related to these other model elements:
|
395
|
+
#{mtk_related_message}
|
396
|
+
********* INVALID DATA DETECTED **********
|
397
|
+
END
|
398
|
+
}
|
399
|
+
raise Warning.new,"#{meth}_one nil null" if context[:failOnEmptyCallto_one,true]
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
403
|
+
#List of error message keys already displayed
|
404
|
+
MDA_LOG_ALREADY_DISPLAYED=Array.new
|
405
|
+
|
406
|
+
def log_already_displayed?(key)
|
407
|
+
return true if MDA_LOG_ALREADY_DISPLAYED.include?(key)
|
408
|
+
MDA_LOG_ALREADY_DISPLAYED<< key
|
409
|
+
return false
|
410
|
+
end
|