ontomde-uml2 2.0.0 → 2.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/Manifest.txt +1 -0
- data/lib/ontomde-uml2.rb +1 -0
- data/lib/ontomde-uml2/UMLdatatypeMapping.rb +80 -51
- data/lib/ontomde-uml2/autoImplement.rb +27 -5
- data/lib/ontomde-uml2/createAndAdd.rb +15 -0
- data/lib/ontomde-uml2/kb/protege.rb +7 -7
- data/lib/ontomde-uml2/nocode.rb +45 -0
- data/lib/ontomde-uml2/owner.rb +12 -2
- data/lib/ontomde-uml2/uml2.rb +39 -0
- data/lib/ontomde-uml2/umlx.rb +25 -0
- data/lib/ontomde-uml2/version.rb +1 -1
- metadata +4 -3
data/Manifest.txt
CHANGED
@@ -24,6 +24,7 @@ lib/ontomde-uml2/kb/command.rb
|
|
24
24
|
lib/ontomde-uml2/kb/datatypeMapping.rb
|
25
25
|
lib/ontomde-uml2/kb/protege.rb
|
26
26
|
lib/ontomde-uml2/multipleInheritance.rb
|
27
|
+
lib/ontomde-uml2/nocode.rb
|
27
28
|
lib/ontomde-uml2/nt_old_to_nt_new.sh
|
28
29
|
lib/ontomde-uml2/owner.rb
|
29
30
|
lib/ontomde-uml2/salvageErrors.rb
|
data/lib/ontomde-uml2.rb
CHANGED
@@ -25,7 +25,7 @@ def addDataTypeMapping(umlDataTypeName,baseMapping,regexp=nil,&block)
|
|
25
25
|
end
|
26
26
|
DatatypeMapping#{rubyName}.class_eval( &block ) unless block.nil?
|
27
27
|
|
28
|
-
DatatypeMapping#{rubyName}.instance #register
|
28
|
+
DatatypeMapping#{rubyName}.instance.register #register
|
29
29
|
}
|
30
30
|
t=eval s
|
31
31
|
puts "Added datatype '#{umlDataTypeName}'"
|
@@ -37,7 +37,7 @@ class DatatypeMapping
|
|
37
37
|
return @@types
|
38
38
|
end
|
39
39
|
@@types=Array.new
|
40
|
-
def
|
40
|
+
def register
|
41
41
|
return if self.class==DatatypeMapping
|
42
42
|
@@types << self
|
43
43
|
#log.debug { %{registered(##{@@types.size}): #{self.class}} }
|
@@ -110,7 +110,10 @@ END
|
|
110
110
|
# max length of this element represented as a string
|
111
111
|
attr :maxStringLength
|
112
112
|
attr_writer :maxStringLength
|
113
|
-
|
113
|
+
def initialize
|
114
|
+
super
|
115
|
+
@maxStringLength=nil
|
116
|
+
end
|
114
117
|
|
115
118
|
def getValidationRegexp
|
116
119
|
#log.error %{getValidationRegexp not implemented for #{self.class}}
|
@@ -126,13 +129,16 @@ class DatatypeMappingText < DatatypeMapping
|
|
126
129
|
include Singleton
|
127
130
|
|
128
131
|
#default string length
|
129
|
-
|
132
|
+
def initialize
|
133
|
+
super
|
134
|
+
@maxStringLength=255 # aligned with mysql default
|
135
|
+
end
|
130
136
|
|
131
|
-
MATCHING_UML_NAME=[
|
137
|
+
MATCHING_UML_NAME=['string','shorttext','text']
|
132
138
|
#MATCHING_JAVA_NAME=["String","java.lang.String"]
|
133
139
|
|
134
140
|
def appliesTo?(datatype)
|
135
|
-
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one)
|
141
|
+
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one.downcase)
|
136
142
|
#return true if MATCHING_JAVA_NAME.include?(datatype.java_qualifiedName)
|
137
143
|
return false
|
138
144
|
end
|
@@ -144,10 +150,14 @@ end
|
|
144
150
|
|
145
151
|
class DatatypeMappingLargeText < DatatypeMappingText
|
146
152
|
include Singleton
|
153
|
+
def initialize
|
154
|
+
super
|
155
|
+
@maxStringLength=5000
|
156
|
+
end
|
147
157
|
HELPMSG=" "
|
148
|
-
MATCHING_UML_NAME=[
|
158
|
+
MATCHING_UML_NAME=['largetext','longtext']
|
149
159
|
def appliesTo?(datatype)
|
150
|
-
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one)
|
160
|
+
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one.downcase)
|
151
161
|
return false
|
152
162
|
end
|
153
163
|
|
@@ -159,9 +169,9 @@ end
|
|
159
169
|
|
160
170
|
class DatatypeMappingMimeType < DatatypeMappingText
|
161
171
|
include Singleton
|
162
|
-
MATCHING_UML_NAME=[
|
172
|
+
MATCHING_UML_NAME=['mimetype']
|
163
173
|
def appliesTo?(datatype)
|
164
|
-
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one)
|
174
|
+
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one.downcase)
|
165
175
|
end
|
166
176
|
|
167
177
|
def getHelp
|
@@ -179,10 +189,10 @@ end
|
|
179
189
|
|
180
190
|
class DatatypeMappingInteger < DatatypeMappingOrdinal
|
181
191
|
include Singleton
|
182
|
-
MATCHING_UML_NAME=[
|
192
|
+
MATCHING_UML_NAME=['integer','int']
|
183
193
|
#MATCHING_JAVA_NAME=[]
|
184
194
|
def appliesTo?(datatype)
|
185
|
-
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one)
|
195
|
+
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one.downcase)
|
186
196
|
# return true if MATCHING_JAVA_NAME.include?(datatype.java_qualifiedName)
|
187
197
|
return false
|
188
198
|
end
|
@@ -208,7 +218,7 @@ class DatatypeMappingLong < DatatypeMappingOrdinal
|
|
208
218
|
end
|
209
219
|
class DatatypeMappingLongObject < DatatypeMappingOrdinal
|
210
220
|
include Singleton
|
211
|
-
MATCHING_UML_NAME=["Long"]
|
221
|
+
MATCHING_UML_NAME=["Long","longOrNull"]
|
212
222
|
#MATCHING_JAVA_NAME=[]
|
213
223
|
def appliesTo?(datatype)
|
214
224
|
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one)
|
@@ -226,7 +236,7 @@ class DatatypeMappingFile < DatatypeMapping
|
|
226
236
|
MATCHING_UML_NAME=["file"]
|
227
237
|
def appliesTo?(datatype)
|
228
238
|
return false unless datatype.kind_of?(Muml_DataType)
|
229
|
-
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one)
|
239
|
+
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one.downcase)
|
230
240
|
#return datatype.struts_isBlob?
|
231
241
|
#return ["image"].include?(datatype.java_qualifiedName)
|
232
242
|
end
|
@@ -238,10 +248,10 @@ end
|
|
238
248
|
|
239
249
|
class DatatypeMappingBoolean < DatatypeMapping
|
240
250
|
include Singleton
|
241
|
-
MATCHING_UML_NAME=["
|
251
|
+
MATCHING_UML_NAME=["boolean"]
|
242
252
|
#MATCHING_JAVA_NAME=[]
|
243
253
|
def appliesTo?(datatype)
|
244
|
-
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one)
|
254
|
+
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one.downcase)
|
245
255
|
# return true if MATCHING_JAVA_NAME.include?(datatype.java_qualifiedName)
|
246
256
|
return false
|
247
257
|
end
|
@@ -259,10 +269,10 @@ end
|
|
259
269
|
# Calendar and TimeStamp should be prefered.
|
260
270
|
class DatatypeMappingTimeStamp < DatatypeMapping
|
261
271
|
include Singleton
|
262
|
-
MATCHING_UML_NAME=["
|
272
|
+
MATCHING_UML_NAME=["timestamp","date"]
|
263
273
|
#MATCHING_JAVA_NAME=[]
|
264
274
|
def appliesTo?(datatype)
|
265
|
-
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one)
|
275
|
+
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one.downcase)
|
266
276
|
#return true if MATCHING_JAVA_NAME.include?(datatype.java_qualifiedName)
|
267
277
|
return false
|
268
278
|
end
|
@@ -283,10 +293,10 @@ end
|
|
283
293
|
# Calendar and TimeStamp are used instead
|
284
294
|
class DatatypeMappingCalendar < DatatypeMapping
|
285
295
|
include Singleton
|
286
|
-
MATCHING_UML_NAME=["
|
296
|
+
MATCHING_UML_NAME=["calendar"]
|
287
297
|
#MATCHING_JAVA_NAME=[]
|
288
298
|
def appliesTo?(datatype)
|
289
|
-
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one)
|
299
|
+
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one.downcase)
|
290
300
|
#return true if MATCHING_JAVA_NAME.include?(datatype.java_qualifiedName)
|
291
301
|
return false
|
292
302
|
end
|
@@ -336,10 +346,10 @@ end
|
|
336
346
|
|
337
347
|
class DatatypeMappingURL < DatatypeMappingText
|
338
348
|
include Singleton
|
339
|
-
MATCHING_UML_NAME=["
|
349
|
+
MATCHING_UML_NAME=["url","uri"]
|
340
350
|
#MATCHING_JAVA_NAME=[]
|
341
351
|
def appliesTo?(datatype)
|
342
|
-
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one)
|
352
|
+
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one.downcase)
|
343
353
|
#return true if MATCHING_JAVA_NAME.include?(datatype.java_qualifiedName)
|
344
354
|
return false
|
345
355
|
end
|
@@ -351,9 +361,9 @@ end
|
|
351
361
|
|
352
362
|
class DatatypeMappingBLOB < DatatypeMapping
|
353
363
|
include Singleton
|
354
|
-
MATCHING_UML_NAME=["
|
364
|
+
MATCHING_UML_NAME=["blob"]
|
355
365
|
def appliesTo?(datatype)
|
356
|
-
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one)
|
366
|
+
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one.downcase)
|
357
367
|
return false
|
358
368
|
end
|
359
369
|
def getHelp
|
@@ -362,9 +372,9 @@ class DatatypeMappingBLOB < DatatypeMapping
|
|
362
372
|
end
|
363
373
|
class DatatypeMappingIMG < DatatypeMappingBLOB
|
364
374
|
include Singleton
|
365
|
-
MATCHING_UML_NAME=["
|
375
|
+
MATCHING_UML_NAME=["img","image"]
|
366
376
|
def appliesTo?(datatype)
|
367
|
-
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one)
|
377
|
+
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one.downcase)
|
368
378
|
return false
|
369
379
|
end
|
370
380
|
def getHelp
|
@@ -374,9 +384,9 @@ end
|
|
374
384
|
|
375
385
|
class DatatypeMappingGRAPHVIZ < DatatypeMappingLargeText
|
376
386
|
include Singleton
|
377
|
-
MATCHING_UML_NAME=["
|
387
|
+
MATCHING_UML_NAME=["graphviz"]
|
378
388
|
def appliesTo?(datatype)
|
379
|
-
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one)
|
389
|
+
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one.downcase)
|
380
390
|
return false
|
381
391
|
end
|
382
392
|
def getHelp
|
@@ -386,9 +396,9 @@ end
|
|
386
396
|
|
387
397
|
class DatatypeMappingPassword < DatatypeMappingText
|
388
398
|
include Singleton
|
389
|
-
MATCHING_UML_NAME=["
|
399
|
+
MATCHING_UML_NAME=["password"]
|
390
400
|
def appliesTo?(datatype)
|
391
|
-
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one)
|
401
|
+
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one.downcase)
|
392
402
|
return false
|
393
403
|
end
|
394
404
|
|
@@ -399,9 +409,9 @@ end
|
|
399
409
|
|
400
410
|
class DatatypeMappingEmailAddress < DatatypeMappingText
|
401
411
|
include Singleton
|
402
|
-
MATCHING_UML_NAME=["
|
412
|
+
MATCHING_UML_NAME=["emailaddress","emailadress"]
|
403
413
|
def appliesTo?(datatype)
|
404
|
-
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one)
|
414
|
+
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one.downcase)
|
405
415
|
return false
|
406
416
|
end
|
407
417
|
|
@@ -416,26 +426,45 @@ class DatatypeMappingEmailAddress < DatatypeMappingText
|
|
416
426
|
end
|
417
427
|
end
|
418
428
|
|
429
|
+
class DatatypeMappingSimpleUnixPath < DatatypeMappingText
|
430
|
+
include Singleton
|
431
|
+
MATCHING_UML_NAME=["simpleunixpath"]
|
432
|
+
def appliesTo?(datatype)
|
433
|
+
return true if MATCHING_UML_NAME.include?(datatype.uml_name_one.downcase)
|
434
|
+
return false
|
435
|
+
end
|
419
436
|
|
437
|
+
def getValidationRegexp
|
438
|
+
# // not valid
|
439
|
+
# ok: /a/b/c a a/b
|
440
|
+
#nok: //a ./a/b
|
441
|
+
return /([a-zA-Z0-9_%+-]\/?)*/
|
442
|
+
end
|
443
|
+
|
444
|
+
def getHelp
|
445
|
+
return "simple unix path (no relative, no space, no escape)"
|
446
|
+
end
|
447
|
+
end
|
420
448
|
|
421
|
-
DatatypeMappingGenericEnum.instance #register
|
422
|
-
|
423
|
-
DatatypeMappingCalendar.instance #register
|
424
|
-
DatatypeMappingText.instance #register
|
425
|
-
DatatypeMappingLargeText.instance #register
|
426
|
-
DatatypeMappingPassword.instance #register
|
427
|
-
DatatypeMappingEmailAddress.instance #register
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
449
|
+
DatatypeMappingGenericEnum.instance.register #register
|
450
|
+
|
451
|
+
DatatypeMappingCalendar.instance.register #register
|
452
|
+
DatatypeMappingText.instance.register #register
|
453
|
+
DatatypeMappingLargeText.instance.register #register
|
454
|
+
DatatypeMappingPassword.instance.register #register
|
455
|
+
DatatypeMappingEmailAddress.instance.register #register
|
456
|
+
DatatypeMappingSimpleUnixPath.instance.register #register
|
457
|
+
DatatypeMappingURL.instance.register #register
|
458
|
+
DatatypeMappingFile.instance.register #register
|
459
|
+
DatatypeMappingBoolean.instance.register #register
|
460
|
+
DatatypeMappingTimeStamp.instance.register #register
|
461
|
+
DatatypeMappingGenericClass.instance.register #register
|
462
|
+
DatatypeMappingLong.instance.register #register
|
463
|
+
DatatypeMappingLongObject.instance.register #register
|
464
|
+
DatatypeMappingInteger.instance.register #register
|
465
|
+
DatatypeMappingBLOB.instance.register #register
|
466
|
+
DatatypeMappingIMG.instance.register #register
|
467
|
+
DatatypeMappingGRAPHVIZ.instance.register #register
|
468
|
+
DatatypeMappingMimeType.instance.register #register
|
440
469
|
|
441
470
|
|
@@ -11,6 +11,18 @@ module Mrdf_Repository
|
|
11
11
|
}
|
12
12
|
end
|
13
13
|
end
|
14
|
+
class String
|
15
|
+
def str_to_uri
|
16
|
+
return self.tr(" <>:/","_")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
module Muml_Element
|
20
|
+
def umlx_copyStereotypesFrom!(ia)
|
21
|
+
ia.uml_appliedStereotype.each { |s|
|
22
|
+
self.uml_appliedStereotype_add(s)
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end
|
14
26
|
module Muml_Class
|
15
27
|
rdf_safe_attr_reader_many :umlx_autoImplementComplete
|
16
28
|
def umlx_autoImplementProperty!
|
@@ -29,9 +41,12 @@ module Muml_Class
|
|
29
41
|
#log.debug { "umlx_autoImplementProperty #{ia} for #{self} #{ia.umlx_isAssociation?}" }
|
30
42
|
next if impAttNames.include?(ia.uml_name.to_s)
|
31
43
|
if(ia.umlx_isAttribute?)
|
32
|
-
att=self.umlx_createAndAddProperty(ia.uml_name.to_s)
|
44
|
+
att=self.umlx_createAndAddProperty(self.rdf_uri+ia.uml_name.to_s.str_to_uri)
|
33
45
|
att.uml_name=ia.uml_name
|
34
46
|
att.uml_type=ia.uml_type
|
47
|
+
att.umlx_copyStereotypesFrom!(ia)
|
48
|
+
att.uml_upperValue=ia.uml_upperValue unless ia.uml_upperValue.empty?
|
49
|
+
att.uml_lowerValue=ia.uml_lowerValue unless ia.uml_lowerValue.empty?
|
35
50
|
else
|
36
51
|
#puts "create and add ..."
|
37
52
|
ms=ia.uml_association_one
|
@@ -40,12 +55,16 @@ module Muml_Class
|
|
40
55
|
#puts "ms=#{ms}"
|
41
56
|
#puts "ms1=#{ms1} #{ms1.uml_type}"
|
42
57
|
#puts "ms2=#{ms2} #{ms2.uml_type}"
|
43
|
-
m,m1,m2=self.umlx_createAndAddAssociation(self.rdf_uri+ia.uml_name.to_s,ia.uml_type)
|
58
|
+
m,m1,m2=self.umlx_createAndAddAssociation(self.rdf_uri+ia.uml_name.to_s.str_to_uri,ia.uml_type)
|
44
59
|
m1.uml_aggregation=ms1.uml_aggregation
|
45
60
|
m2.uml_aggregation=ms2.uml_aggregation
|
46
61
|
m1.uml_name=ms1.uml_name
|
47
62
|
m2.uml_name=ms2.uml_name
|
48
63
|
|
64
|
+
m.umlx_copyStereotypesFrom!(ms)
|
65
|
+
m1.umlx_copyStereotypesFrom!(ms1)
|
66
|
+
m2.umlx_copyStereotypesFrom!(ms2)
|
67
|
+
|
49
68
|
ms1.umlx_copyToAttributeProperty(m1)
|
50
69
|
ms2.umlx_copyToAttributeProperty(m2)
|
51
70
|
|
@@ -60,6 +79,7 @@ module Muml_Class
|
|
60
79
|
gen.uml_general_one.umlx_ImplementedAttributesNames(ret)
|
61
80
|
}
|
62
81
|
uml_ownedAttribute.each { |oa|
|
82
|
+
next if oa.uml_isStatic? || (oa.respond_to?(:java_isFinal?) && oa.java_isFinal?)
|
63
83
|
ret << oa.uml_name.to_s
|
64
84
|
}
|
65
85
|
return ret
|
@@ -116,12 +136,14 @@ module Muml_Class
|
|
116
136
|
impOper=umlx_ImplementedOperations
|
117
137
|
umlx_operationIShouldImplement.each { |sig,ia|
|
118
138
|
next if impOper.keys.include?(ia.umlx_signature)
|
119
|
-
|
120
|
-
|
139
|
+
c=umlx_createAndAddOperation(ia.rdf_uri+"_implem",ia.uml_name.to_s);
|
140
|
+
ia.umlx_autoImplementedBy_add(c) # used by javadoc
|
141
|
+
c.umlx_copyStereotypesFrom!(ia)
|
121
142
|
(ia.uml_ownedParameter+ia.uml_returnResult).each { |p|
|
122
143
|
cp=c.umlx_createAndAddParameter(p.rdf_uri+"_implem",p.uml_name_one)
|
123
144
|
p.umlx_copyToAttributeProperty(cp)
|
124
145
|
cp.uml_direction=p.uml_direction
|
146
|
+
cp.umlx_copyStereotypesFrom!(p)
|
125
147
|
}
|
126
148
|
# the new method is considered business Method if the original method is one
|
127
149
|
#NOTE: umlx_businessMethod? changed to umlx_businessMethod
|
@@ -173,7 +195,7 @@ end
|
|
173
195
|
module Muml_Operation
|
174
196
|
#operation this operation redefines.
|
175
197
|
rdf_safe_attr_reader_many :umlx_redefinesMethod
|
176
|
-
|
198
|
+
rdf_safe_attr_reader_many :umlx_autoImplementedBy
|
177
199
|
def umlx_signature
|
178
200
|
#todo: take parameter into account
|
179
201
|
r="#{uml_name}("
|
@@ -81,6 +81,21 @@ module Muml_Enumeration
|
|
81
81
|
return g
|
82
82
|
end
|
83
83
|
end
|
84
|
+
module Muml_Classifier
|
85
|
+
#Creates and add a new UML Enumeration.
|
86
|
+
#Return the newly created element.
|
87
|
+
#new_uri should be globaly unique.
|
88
|
+
def umlx_createAndAddEnumeration(new_uri,new_name=nil)
|
89
|
+
c=Cuml_Enumeration.new(rdf_Repository,new_uri)
|
90
|
+
#uml_nestedClassifier_add(c)
|
91
|
+
#puts "--------> #{self} #{new_name}"
|
92
|
+
c.umlx_owner=self
|
93
|
+
c.uml_name=new_name unless new_name.nil?
|
94
|
+
c.uml_visibility=::Cuml_VisibilityKind::Public
|
95
|
+
#puts "création classe #{new_name} in #{self.java_qualifiedName}"
|
96
|
+
return c
|
97
|
+
end
|
98
|
+
end
|
84
99
|
module Muml_Package
|
85
100
|
#Creates and add a new UML Enumeration.
|
86
101
|
#Return the newly created element.
|
@@ -151,7 +151,7 @@ module Muml_Classifier
|
|
151
151
|
end
|
152
152
|
end
|
153
153
|
|
154
|
-
module Muml_PrimitiveType
|
154
|
+
module Muml_DataType # and Muml_PrimitiveType and Muml_Enumeration
|
155
155
|
#protege uri for a primitive type
|
156
156
|
def prot_uri
|
157
157
|
return "#{NS_RDF_2000}rdf-schema#Literal"
|
@@ -294,20 +294,20 @@ module Muml_Property
|
|
294
294
|
|
295
295
|
write("<#{o.prot_uri}> <#{NS_RDF_2000}rdf-schema#domain> <#{e.prot_uri}> .\n");
|
296
296
|
append_comment
|
297
|
-
o.
|
298
|
-
if
|
299
|
-
write("<#{o.prot_uri}> <#{NS_RDF_2000}rdf-schema#range> <#{t.prot_uri}> .\n")
|
300
|
-
write(%{<#{o.prot_uri}> <http://protege.stanford.edu/system#range> "#{t.prot_primitive_type}" .\n})
|
301
|
-
elsif t.kind_of?(Cuml_Enumeration)
|
297
|
+
t=o.uml_type_one
|
298
|
+
if t.kind_of?(Cuml_Enumeration)
|
302
299
|
write("<#{o.prot_uri}> <#{NS_RDF_2000}rdf-schema#range> <#{NS_RDF_2000}rdf-schema#Literal> .\n")
|
303
300
|
write(%{<#{o.prot_uri}> <http://protege.stanford.edu/system#range> "symbol" .\n})
|
304
301
|
t.uml_ownedLiteral.each {|c|
|
305
302
|
write(%{<#{o.prot_uri}> <http://protege.stanford.edu/system#allowedValues> "#{c}" .\n})
|
306
303
|
}
|
304
|
+
elsif (t.kind_of?(Muml_PrimitiveType)||t.kind_of?(Muml_DataType))
|
305
|
+
write("<#{o.prot_uri}> <#{NS_RDF_2000}rdf-schema#range> <#{t.prot_uri}> .\n")
|
306
|
+
write(%{<#{o.prot_uri}> <http://protege.stanford.edu/system#range> "#{t.prot_primitive_type}" .\n})
|
307
307
|
else
|
308
308
|
write("<#{o.prot_uri}> <#{NS_RDF_2000}rdf-schema#range> <#{t.prot_uri}> .\n")
|
309
309
|
end
|
310
|
-
|
310
|
+
|
311
311
|
write("<#{o.prot_uri}> <#{NS_RDF_1999}22-rdf-syntax-ns#type> <http://protege.stanford.edu/kb#UML_SLOT> .\n")
|
312
312
|
write("<#{o.prot_uri}> <http://protege.stanford.edu/kb#UML_LABEL> \"#{o.prot_label}\".\n")
|
313
313
|
write("<#{o.prot_uri}> <#{NS_UML_CLASS}#UML_URI> \"#{UriNamespace.instance.unalias(o.rdf_uri)}\" .\n")
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Muml_Element
|
2
|
+
def umlx_addDependencies(s=Set.new)
|
3
|
+
end
|
4
|
+
end
|
5
|
+
|
6
|
+
module Mrdf_Repository
|
7
|
+
def umlx_removeNoCode!
|
8
|
+
s=Set.new
|
9
|
+
each { |k,v|
|
10
|
+
next unless v.kind_of?(Muml_Element)
|
11
|
+
next unless v.umlx_hasStereotype?('nocode')
|
12
|
+
v.umlx_addDependencies(s)
|
13
|
+
}
|
14
|
+
s.each { |v|
|
15
|
+
puts "cleaning nocode --> #{v.class} #{v}"
|
16
|
+
puts "TODO: cleaning code not finalized"
|
17
|
+
self.delete(v.rdf_uri)
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
module Muml_Package
|
22
|
+
def umlx_addDependencies(s=Set.new)
|
23
|
+
return if s.include?(self)
|
24
|
+
s.add(self)
|
25
|
+
uml_ownedMember.each { |v|
|
26
|
+
v.umlx_addDependencies(s)
|
27
|
+
}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
module Muml_Operation
|
31
|
+
def umlx_addDependencies(s=Set.new)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
module Muml_Class
|
35
|
+
def umlx_addDependencies(s=Set.new)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
module Muml_Interface
|
39
|
+
def umlx_addDependencies(s=Set.new)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
module Muml_Association
|
43
|
+
def umlx_addDependencies(s=Set.new)
|
44
|
+
end
|
45
|
+
end
|
data/lib/ontomde-uml2/owner.rb
CHANGED
@@ -25,8 +25,18 @@ module Muml_Classifier
|
|
25
25
|
end
|
26
26
|
def umlx_owner=(p)
|
27
27
|
old=umlx_owner_one
|
28
|
-
|
29
|
-
|
28
|
+
if old.nil?
|
29
|
+
#
|
30
|
+
elsif old.kind_of?(Muml_Package)
|
31
|
+
old.uml_ownedMember.delete(self)
|
32
|
+
else
|
33
|
+
old.uml_nestedClassifier.delete(self)
|
34
|
+
end
|
35
|
+
if p.kind_of?(Muml_Package)
|
36
|
+
p.uml_ownedMember_add(self)
|
37
|
+
else
|
38
|
+
p.uml_nestedClassifier_add(self)
|
39
|
+
end
|
30
40
|
ext_isReferencedBy_add(p)
|
31
41
|
end
|
32
42
|
end
|
data/lib/ontomde-uml2/uml2.rb
CHANGED
@@ -23,6 +23,35 @@ module Muml_Classifier
|
|
23
23
|
}
|
24
24
|
return s
|
25
25
|
end
|
26
|
+
|
27
|
+
# operation I own directly or indirectly via inheritance
|
28
|
+
def umlx_ownedOperationHierarchical()
|
29
|
+
ret=Set.new
|
30
|
+
umlx_classifier_generalization_indirect.each { |i|
|
31
|
+
i.uml_ownedOperation.each { |oo|
|
32
|
+
ret.add(oo)
|
33
|
+
}
|
34
|
+
}
|
35
|
+
self.uml_ownedOperation.each { |oo|
|
36
|
+
ret.add(oo)
|
37
|
+
}
|
38
|
+
return ret
|
39
|
+
end
|
40
|
+
|
41
|
+
# attribute I own directly or indirectly via inheritance
|
42
|
+
def umlx_ownedAttributeHierarchical()
|
43
|
+
ret=Set.new
|
44
|
+
umlx_classifier_generalization_indirect.each { |i|
|
45
|
+
i.uml_ownedAttribute.each { |oo|
|
46
|
+
ret.add(oo)
|
47
|
+
}
|
48
|
+
}
|
49
|
+
self.uml_ownedAttribute.each { |oo|
|
50
|
+
ret.add(oo)
|
51
|
+
}
|
52
|
+
return ret
|
53
|
+
end
|
54
|
+
|
26
55
|
end
|
27
56
|
|
28
57
|
module Muml_Namespace
|
@@ -32,6 +61,7 @@ module Muml_Namespace
|
|
32
61
|
def umlx_package
|
33
62
|
#TODO: utiliser relation inverse when available
|
34
63
|
p=umlx_owner_one
|
64
|
+
p=uml_nestedClassifier_inv_one0 if p.nil? && !self.kind_of?(Muml_Package)
|
35
65
|
return nil if p.kind_of?(Cuml_Model)
|
36
66
|
return p
|
37
67
|
end
|
@@ -62,6 +92,15 @@ module Muml_Namespace
|
|
62
92
|
def umlx_isARootNamespace?
|
63
93
|
return self.kind_of?(Muml_Model) || self.umlx_hasStereotype?("root")
|
64
94
|
end
|
95
|
+
|
96
|
+
# return root namespace for this element
|
97
|
+
def umlx_rootNamespace_one0
|
98
|
+
return self if umlx_isARootNamespace?
|
99
|
+
root=umlx_package
|
100
|
+
return nil if root.nil?
|
101
|
+
return root.umlx_rootNamespace_one0
|
102
|
+
end
|
103
|
+
|
65
104
|
# Returns the chain of namespace owning this element including this element
|
66
105
|
def umlx_hierarchy
|
67
106
|
isarn=self.umlx_isARootNamespace?
|
data/lib/ontomde-uml2/umlx.rb
CHANGED
@@ -426,6 +426,22 @@ module Muml_Namespace
|
|
426
426
|
ret
|
427
427
|
}
|
428
428
|
end
|
429
|
+
|
430
|
+
# Retrieves an interface from its qualified name.
|
431
|
+
# Class will be created if not present in model.
|
432
|
+
# Example:
|
433
|
+
# umlx_getOrCreateGeneric("java.util.Set")
|
434
|
+
def umlx_getOrCreateGeneric(qual_name,genericParams,startpoint=nil)
|
435
|
+
qual_name=%{#{qual_name}<#{genericParams}>}
|
436
|
+
return umlx_getOrCreateProc(qual_name,startpoint) { |owner,qual_name,c_name|
|
437
|
+
#TODO: duplication probable si plusieurs fois meme generic
|
438
|
+
ret=owner.umlx_createAndAddInterface(qual_name,c_name)
|
439
|
+
#ret.uml_name="#{qual_name}<#{genericParams}>"
|
440
|
+
ret.umlx_external=RDF_TRUE
|
441
|
+
ret.java_isGeneric=RDF_TRUE
|
442
|
+
ret
|
443
|
+
}
|
444
|
+
end
|
429
445
|
|
430
446
|
# Retrieves an enumeration from its qualified name.
|
431
447
|
# Class will be created if not present in model.
|
@@ -595,15 +611,24 @@ end
|
|
595
611
|
module Muml_Classifier
|
596
612
|
#returns every type assignable to this classifier
|
597
613
|
#(this includes self and any class deriving from it)
|
614
|
+
#Template parameter are filtered out
|
598
615
|
def umlx_assignableClassifier(ret=Set.new)
|
599
616
|
return ret if ret.include?(self)
|
600
617
|
ret<< self
|
601
618
|
uml_general_inv.each { |g|
|
602
619
|
g.uml_generalization_inv.each {|c|
|
620
|
+
next if c.umlx_isTemplateParameter?
|
603
621
|
c.umlx_assignableClassifier(ret)
|
604
622
|
}}
|
605
623
|
return ret
|
606
624
|
end
|
625
|
+
|
626
|
+
# heuristique.
|
627
|
+
# If element has no owner, it is a root class
|
628
|
+
# class in root package is not supported anyway.
|
629
|
+
def umlx_isTemplateParameter?
|
630
|
+
return umlx_owner_one.nil?
|
631
|
+
end
|
607
632
|
end
|
608
633
|
module Muml_Interface
|
609
634
|
#returns every type assignable to this classifier
|
data/lib/ontomde-uml2/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ontomde-uml2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Orange-labs BIZZ/CIL/SAM
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-04-08 00:00:00 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - "="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 2.0.
|
23
|
+
version: 2.0.4
|
24
24
|
version:
|
25
25
|
description: "ontoMDE-uml2 contains UML2 meta-model and helper files to manipulate a UML2 model. ontoMDE-uml2 uses ontoMDE-core which provides core fonctionalities for loading a model in RDF/RDFS format. ontoMDE-UML2 is used by ontoMDE-java which contains rules for generating java Code. ontoMDE contains primitives for converting a UML2 model into a Prot\xE9g\xE9 2000 RDF/RDFS model. UML2 classes are converted into RDFS classes to allow data instances to be created. This feature is used heavily for providing editors for creating tests data for programs. == FEATURES/PROBLEMS: * UML2 meta-model definition in RDFS format * Ruby helper methods for handling a UML2 model. * UML Stereotype handling helpers. * UML predefined enumerations handling helper. * UML model manipulations helpers (add interface implementations, transform multiple inheritance into single inheritance, ...) UML2 to Protege 2000 features: * single and incremental use. * transparent update of name changes from source to target mode. * class * abstract class * interface * enumerated types * generalization links * implementation links * property, association, composition and aggregation * single and multivalued properties * mandatory fields (cardinaly=0 or >0) * UML documentation notes export to Protege 2000 for easy reference."
|
26
26
|
email: stephanepierre.carrie -nospam- @orange-ftgroup.com
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- lib/ontomde-uml2/kb/datatypeMapping.rb
|
60
60
|
- lib/ontomde-uml2/kb/protege.rb
|
61
61
|
- lib/ontomde-uml2/multipleInheritance.rb
|
62
|
+
- lib/ontomde-uml2/nocode.rb
|
62
63
|
- lib/ontomde-uml2/nt_old_to_nt_new.sh
|
63
64
|
- lib/ontomde-uml2/owner.rb
|
64
65
|
- lib/ontomde-uml2/salvageErrors.rb
|