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.
@@ -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
@@ -29,5 +29,6 @@ require 'ontomde-uml2/helper.rb'
29
29
  require 'ontomde-uml2/shortcut.rb'
30
30
  require 'ontomde-uml2/UMLdatatypeMapping.rb'
31
31
  require 'ontomde-uml2/component.rb'
32
+ require 'ontomde-uml2/nocode.rb'
32
33
 
33
34
 
@@ -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 initialize
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
- @maxStringLength=nil
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
- @maxStringLength=10
132
+ def initialize
133
+ super
134
+ @maxStringLength=255 # aligned with mysql default
135
+ end
130
136
 
131
- MATCHING_UML_NAME=["String","string"]
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=["LargeText"]
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=["MimeType"]
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=["integer","Integer","int"]
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=["Boolean","boolean"]
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=["TimeStamp","Date"]
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=["Calendar"]
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=["URL","URI"]
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=["Blob"]
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=["Img","Image"]
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=["Graphviz"]
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=["Password"]
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=["EmailAdress"]
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
- DatatypeMappingURL.instance #register
429
- DatatypeMappingFile.instance #register
430
- DatatypeMappingBoolean.instance #register
431
- DatatypeMappingTimeStamp.instance #register
432
- DatatypeMappingGenericClass.instance #register
433
- DatatypeMappingLong.instance #register
434
- DatatypeMappingLongObject.instance #register
435
- DatatypeMappingInteger.instance #register
436
- DatatypeMappingBLOB.instance #register
437
- DatatypeMappingIMG.instance #register
438
- DatatypeMappingGRAPHVIZ.instance #register
439
- DatatypeMappingMimeType.instance #register
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
- c=umlx_createAndAddOperation(ia.rdf_uri+"_implem",ia.uml_name);
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.uml_type.each { |t|
298
- if (t.kind_of?(Cuml_PrimitiveType))
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
@@ -25,8 +25,18 @@ module Muml_Classifier
25
25
  end
26
26
  def umlx_owner=(p)
27
27
  old=umlx_owner_one
28
- old.uml_ownedMember.delete(self) unless old.nil?
29
- p.uml_ownedMember_add(self)
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
@@ -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?
@@ -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
@@ -1,5 +1,5 @@
1
1
  module Ontomde
2
2
  module Uml2
3
- VERSION = '2.0.0'
3
+ VERSION = '2.0.4'
4
4
  end
5
5
  end
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.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: 2008-08-08 00:00:00 +02:00
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.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