ontomde-java 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.
Files changed (100) hide show
  1. data/History.txt +11 -0
  2. data/Manifest.txt +1 -51
  3. data/lib/ontomde-java.rb +2 -0
  4. data/lib/ontomde-java/crank.rb +8 -8
  5. data/lib/ontomde-java/crank/crankJpa.rb +58 -8
  6. data/lib/ontomde-java/crank/main.rb +38 -21
  7. data/lib/ontomde-java/frontend/command.rb +7 -7
  8. data/lib/ontomde-java/frontend/command.rdoc +0 -583
  9. data/lib/ontomde-java/frontend/defaultOptions.rb +12 -7
  10. data/lib/ontomde-java/frontend/options.rb +19 -2
  11. data/lib/ontomde-java/frontend/steps.rb +36 -5
  12. data/lib/ontomde-java/java/accessorCode.rb +250 -94
  13. data/lib/ontomde-java/java/accessorSignature.rb +50 -4
  14. data/lib/ontomde-java/java/annotationOntoMDE.rb +38 -27
  15. data/lib/ontomde-java/java/component.rb +141 -68
  16. data/lib/ontomde-java/java/enumAssignable.rb +46 -5
  17. data/lib/ontomde-java/java/java.rb +111 -40
  18. data/lib/ontomde-java/java/javaDatatypeMapping.rb +35 -1
  19. data/lib/ontomde-java/java/javadoc.rb +35 -22
  20. data/lib/ontomde-java/java/operationAsClass.rb +13 -0
  21. data/lib/ontomde-java/java/security.rb +10 -2
  22. data/lib/ontomde-java/java/stateMachine.rb +137 -74
  23. data/lib/ontomde-java/java/tenant.rb +1 -0
  24. data/lib/ontomde-java/java/xsd.rb +1 -1
  25. data/lib/ontomde-java/jpa/configuration.rb +25 -1
  26. data/lib/ontomde-java/jpa/finder.rb +48 -13
  27. data/lib/ontomde-java/jpa/jpa.rb +30 -14
  28. data/lib/ontomde-java/jpa/mapping.rb +114 -60
  29. data/lib/ontomde-java/jpa/redefined.rb +21 -5
  30. data/lib/ontomde-java/jpa/simulationAutoImplement.rb +1 -1
  31. data/lib/ontomde-java/jpdl/processOperationToClass.rb +1 -2
  32. data/lib/ontomde-java/kbjava/rdfToJava.rb +25 -16
  33. data/lib/ontomde-java/struts.rb +1 -1
  34. data/lib/ontomde-java/struts/MessageResources.rb +15 -6
  35. data/lib/ontomde-java/struts/action.rb +37 -13
  36. data/lib/ontomde-java/struts/form.rb +97 -7
  37. data/lib/ontomde-java/struts/header.rb +7 -3
  38. data/lib/ontomde-java/struts/jsp_edit.rb +54 -24
  39. data/lib/ontomde-java/struts/jsp_edit_js.rb +1 -1
  40. data/lib/ontomde-java/struts/jsp_index.rb +6 -4
  41. data/lib/ontomde-java/struts/mappingForJsp.rb +11 -7
  42. data/lib/ontomde-java/struts/mappingToJavaHierarchy.rb +16 -2
  43. data/lib/ontomde-java/version.rb +1 -1
  44. data/lib/ontomde-java/vmware/vso.rb +329 -0
  45. data/test/test_export_ea7_1_829.rb +5 -0
  46. data/test/test_export_ea7_1_833.rb +5 -0
  47. data/test/test_export_ea7_5_843.rb +5 -0
  48. data/test/test_export_magicDraw.rb +4 -0
  49. data/test/test_export_oe530.rb +1 -1
  50. data/test/test_export_oe600.rb +1 -1
  51. data/test/test_export_rsm60.rb +1 -1
  52. data/test/{uml_test.rb → test_export_unitTests.rb} +6 -1
  53. metadata +9 -56
  54. data/generateRdocFile.sh +0 -16
  55. data/profiling.xls +0 -0
  56. data/test/.classpath +0 -14
  57. data/test/.project +0 -17
  58. data/test/.settings/org.eclipse.jdt.core.prefs +0 -23
  59. data/test/Rakefile +0 -71
  60. data/test/build.xml +0 -34
  61. data/test/classpath.rb +0 -15
  62. data/test/lib/junit-4.1.jar +0 -0
  63. data/test/load1.rb +0 -3
  64. data/test/load2.rb +0 -3
  65. data/test/log4j.properties +0 -46
  66. data/test/model/.project +0 -11
  67. data/test/model/BigProject.mdzip +0 -0
  68. data/test/model/BigProject.mdzip.nt +0 -102866
  69. data/test/model/ClassDiagram.EntArch.gif +0 -0
  70. data/test/model/ClassDiagram.emx.gif +0 -0
  71. data/test/model/ClassDiagram.mdzip.gif +0 -0
  72. data/test/model/model_ea71.bis.ea.xmi +0 -149
  73. data/test/model/model_ea71.ea.xmi +0 -4470
  74. data/test/model/model_ea71.eap +0 -0
  75. data/test/model/model_ea71_README.txt +0 -8
  76. data/test/model/multipleInheritance.emx +0 -466
  77. data/test/model/multipleInheritance.emx.nt +0 -2428
  78. data/test/model/simple1-530.ofp +0 -0
  79. data/test/model/simple1-includedAsReference.emx +0 -169
  80. data/test/model/simple1.emx +0 -3729
  81. data/test/model/simple1.emx.fragments.nt +0 -81
  82. data/test/model/simple1.emx.nt +0 -5760
  83. data/test/model/simple1.mdzip +0 -0
  84. data/test/model/simple1.mdzip.nt +0 -11500
  85. data/test/model/simple1.oe530.nt +0 -1986
  86. data/test/model/simple1.oe600.nt +0 -1627
  87. data/test/src/RuntimeTest.java +0 -656
  88. data/test/src/testsLevel1.java +0 -174
  89. data/test/src/testsLevel2.java +0 -29
  90. data/test/src/testsLevel3.java +0 -40
  91. data/test/test-ea7.sh +0 -15
  92. data/test/test-magicDraw.sh +0 -10
  93. data/test/test-mi.sh +0 -9
  94. data/test/test-oe530.sh +0 -10
  95. data/test/test-oe600.sh +0 -11
  96. data/test/test-rsm.sh +0 -11
  97. data/test/test_export_ea71.rb +0 -5
  98. data/test/trace +0 -419
  99. data/test/uml_test.xls +0 -0
  100. data/test/unit_test.rb +0 -6
@@ -21,10 +21,51 @@ module Muml_Classifier
21
21
  #NOTE:
22
22
  #* java_transform! is skipped if context[:java_transform] is false (default=true)
23
23
  def java_transform!
24
+ java_addDeleter!
24
25
  uml_ownedAttribute.each { |oa|
25
26
  java_addAccessorsFor!(oa)
26
27
  }
27
28
  end
29
+
30
+
31
+ # add a deleter that support dangling links
32
+ # deleted objects are mark deleted and should be processed
33
+ # by a purging script in database.
34
+ def java_addDeleter!
35
+ return if kind_of?(Muml_Enumeration) || kind_of?(Muml_Interface) || kind_of?(Muml_Component)
36
+ return unless umlx_businessMethod?
37
+ return if db_isTransient?
38
+ m=umlx_createAndAddOperation(self.rdf_uri+"_delete")
39
+ m.uml_name="logicalDelete"
40
+ m.uml_class=self
41
+ m.uml_visibility=Cuml_VisibilityKind::Public
42
+ m.uml_isStatic=RDF_FALSE
43
+
44
+ code2=""
45
+ m.umlx_createAndAddComment(m.rdf_uri+"_comment","Mark object as being logicaly deleted.\nUse this method when object cannot be physically deleted because it might be\nreferenced by some other objects in memory or database.\nNote that referencer of this objects will have dangling links.\nObject fields are reseted.\nDepending on requirements, it may be\nnecessary to implement a database purge.")
46
+
47
+ self.uml_ownedAttribute.sort{ |a,b| a.java_Name.to_s <=> b.java_Name.to_s}.each {|a|
48
+ v=DatatypeMapping.instance.getMapping(a.uml_type_one)
49
+ c=(a.uml_isReadOnly? ) ? "// " : ""
50
+ if(a.umlx_upperValueIsOne?)
51
+ code2+=%{\t\t#{c}this.set#{a.java_NameBean}(#{v.java_getUndefinedValue});\n}
52
+ else
53
+ code2+=%{\t\t#{c}this.set#{a.java_NameBean}(null);\n}
54
+ end
55
+ }
56
+
57
+ code1=""
58
+ if self.uml_generalization.empty? || self.uml_generalization_one.uml_general_one.java_ignoreMe?(true)
59
+ p=umlx_createAndAddProperty(self.rdf_uri+"_deletable")
60
+ p.uml_type=umlx_dataType_boolean
61
+ p.uml_name="isLogicallyDeleted"
62
+ code1+="\t\tthis.set#{p.java_NameBean}(true);\n"
63
+ elsif !self.uml_generalization.empty?
64
+ code1+="\t\tsuper.logicalDelete();\n"
65
+ end
66
+ m.java_code=code1+code2
67
+
68
+ end
28
69
 
29
70
  #Adds accessors when needed for UML properties.
30
71
  #
@@ -52,6 +93,8 @@ module Muml_Classifier
52
93
  #log.debug { "-------java.transform:Accessor for #{self.uml_name}.#{oa.uml_name}" }
53
94
  return unless context[:java_transform,true]
54
95
  return if oa.java_noAccessors?
96
+ #static and final interface parameter are indeed consts
97
+ return if oa.umlx_owner_one.kind_of?(Muml_Interface) && (oa.java_isFinal?||oa.uml_isStatic?)
55
98
 
56
99
  oa.uml_visibility=Cuml_VisibilityKind::Private
57
100
 
@@ -163,6 +206,8 @@ module Muml_Classifier
163
206
  return if oa.java_isSuggester?
164
207
  return if oa.java_noSuggester?
165
208
  return if oa.uml_isReadOnly?
209
+ return if oa.umlx_owner_one.umlx_hasStereotype?('DTO')
210
+ return if oa.umlx_owner_one.kind_of?(Muml_Interface)
166
211
  #log.debug { "add suggester (#{oa}) self=#{self}" }
167
212
  return unless context[:java_addSuggester,true]
168
213
  return if oa.uml_type_one.kind_of?(Muml_DataType) && !oa.uml_type_one.kind_of?(Muml_Enumeration)
@@ -238,10 +283,10 @@ module Muml_Classifier
238
283
  # * If property is part of a *bidirectional* association, code is generated to update automaticaly the other side of the association.
239
284
  # * If property is multivalued, the operation returns a set.
240
285
  def java_addGlobalGetter!(oa)
241
- return unless context[:java_addGlobalGetter,true]
286
+ return nil unless context[:java_addGlobalGetter,true]
242
287
  #return if oa.uml_isDerived?
243
288
  #return unless oa.uml_isReadOnly?
244
- return unless oa.java_AttributeGlobalGetter.empty?
289
+ return oa.java_AttributeGlobalGetter_one unless oa.java_AttributeGlobalGetter.empty?
245
290
  get=java_createAndAddMethodFromProperty(oa,"get",false)
246
291
  get.java_getter_property=oa
247
292
  oa.java_AttributeGlobalGetter=get
@@ -266,8 +311,9 @@ module Muml_Classifier
266
311
  #Reference:
267
312
  # * #java_writeGlobalSetterBody
268
313
  def java_addGlobalSetter!(oa)
269
- return unless context[:java_addGlobalSetter,true]
270
- return unless oa.java_AttributeGlobalSetter.empty?
314
+ return nil unless context[:java_addGlobalSetter,true]
315
+ return if oa.uml_isReadOnly?
316
+ return oa.java_AttributeGlobalSetter_one unless oa.java_AttributeGlobalSetter.empty?
271
317
  # a setter is generated for derived attribute as it may be implemented.
272
318
  #return unless !oa.uml_isDerived?
273
319
  set=java_createAndAddMethodFromProperty(oa,"set",false)
@@ -31,51 +31,62 @@ module Muml_Classifier
31
31
  anno.uml_appliedStereotype_add(anno.umlx_getOrCreateStereotype("JavaAnnotation"))
32
32
  anno.java_customCode= <<ENDCODE
33
33
  public enum ZoneCode {
34
- /*
35
- * This annotation is used to instruct ontoMDE code generator that none
36
- * of the section related to this code construct must be preserve.
34
+ /**
35
+ * Erase and replace this section with OntoMDE generated code.<br>
36
+ *
37
37
  */
38
38
  nothing,
39
- /*
40
- * This annotation is used to instruct ontoMDE code generator to
41
- * preserve the import section related to this code construct, instead
42
- * of overwriting it.
39
+
40
+ /**
41
+ * Preserve imports related to this section when OntoMDE code generator is invoked.
42
+ *
43
+ * Other elements (javadoc,annotations, ...) will not be preserved unless explicitely requested.<br>
43
44
  */
44
45
  imports,
45
- /*
46
- * This annotation is used to instruct ontoMDE code generator to
47
- * preserve the javadoc section related to this code construct, instead
48
- * of overwriting it
46
+
47
+ /**
48
+ * Preserve javadoc related to this section when OntoMDE code generator is invoked.
49
+ * Other elements (imports,annotations, ...) will not be preserved unless explicitely requested.<br>
49
50
  */
50
51
  javadoc,
51
- /*
52
- * This annotation is used to instruct ontoMDE code generator to
53
- * preserve the annotation section related to this code construct,
54
- * instead of overwriting it
52
+
53
+ /**
54
+ * Preserve annotations related to this section when OntoMDE code generator is invoked.
55
+ * Other elements (imports,javadoc, ...) will not be preserved unless explicitely requested.<br>
55
56
  */
56
57
  annotations,
57
- /*
58
- * This annotation is used to instruct ontoMDE code generator to
59
- * preserve the annotation section related to all the parameter of
60
- * this code construct, instead of overwriting it.
58
+
59
+ /**
60
+ * Preserve annotations related to this method's parameters when OntoMDE code generator is invoked.
61
+ * Other elements (imports,javadoc,annotations, ...) will not be preserved unless explicitely requested.<br>
61
62
  */
62
63
  anno_param,
63
- /*
64
- * This annotation is used to instruct ontoMDE code generator to
65
- * preserve the code body section related to this code construct,
66
- * instead of overwriting it
64
+
65
+ /**
66
+ * Preserve code body related to this method when OntoMDE code generator is invoked.
67
+ * Other elements (imports,javadoc,annotations, ...) will not be preserved unless explicitely requested.<br>
68
+ */
69
+ code,
70
+
71
+ /**
72
+ * Preserve non-generated code (named custom code) included
73
+ * in this class/interface/enum when OntoMDE code generator is invoked.
74
+ * This feature allows any utility methods/attributes to be added in a class.
75
+ * Other elements (imports,javadoc,annotations, ...) will not be preserved unless explicitely requested.
67
76
  */
68
- code
77
+ custom
78
+
69
79
  }
70
80
 
71
- /*
81
+ /**
72
82
  * List of code section type that ontoMDE code will preserve on next
73
83
  * generation. If empty, no element will be preserved. In other word, if
74
- * empty, every element will be overwritten.
84
+ * empty, every element will be overwritten.<br>
85
+ *
75
86
  */
76
87
  ZoneCode[] reverse();
77
88
 
78
- /*
89
+ /**
79
90
  * URI used to identify uniquely model element related to this java
80
91
  * construct.
81
92
  */
@@ -112,67 +112,63 @@ CONFIG
112
112
  # else
113
113
  # java_annotation_add("@javax.ejb.Statefull")
114
114
  # end
115
- java_annotation_add("@javax.jws.WebService")
116
-
117
- uml_ownedOperation.each { |op|
118
- op.java_annotation_add("@javax.jws.WebMethod")
119
- op.uml_ownedParameter.each{|p|
120
- next if p.uml_direction_one==Cuml_ParameterDirectionKind::Return
121
- p.java_annotation_add("@javax.jws.WebParam(name=\"#{p.java_Name}\")")
122
- }
123
- }
124
-
125
- end
115
+ java_annotation_add("@javax.jws.WebService")
116
+
117
+ uml_ownedOperation.each { |op|
118
+ op.java_annotation_add("@javax.jws.WebMethod")
119
+ op.uml_ownedParameter.each{|p|
120
+ next if p.uml_direction_one==Cuml_ParameterDirectionKind::Return
121
+ p.java_annotation_add("@javax.jws.WebParam(name=\"#{p.java_Name}\")")
122
+ }
123
+ }
124
+
125
+ end
126
126
  end
127
127
 
128
128
  module Muml_TypedElement
129
- #mode requested for soa
130
- rdf_attr :soa_requestedMode,[::Mrdfs_Literal]
129
+ #mode requested for soa
130
+ rdf_attr :soa_requestedMode,[::Mrdfs_Literal]
131
131
  end
132
132
  module Muml_Class
133
-
134
-
135
- # create a CRUD component associated to this class
136
- # for exposing CRUD services on this object.
137
- def java_createCrudComponent!
138
-
139
- return if umlx_hasStereotype?('DTO')
140
- return if db_isDAO?
141
- return unless umlx_businessMethod?
142
-
143
- base=self
144
- p=base.umlx_owner_one
145
- p=p.umlx_getOrCreatePackage(base.context[:crudComponentPackage,"ws"],p)
146
-
147
- c=p.umlx_createAndAddComponent("#{self.rdf_uri}_crudc","#{uml_name} CRUD")
148
- #puts "component created: #{c}"
149
- #struts_addCreateAndAddActions!
150
-
151
- create=c.umlx_createAndAddOperation("#{c.rdf_uri}_create","create")
152
- ret=create.umlx_createAndAddReturnParameter("#{create.rdf_uri}")
153
- ret.uml_type=base
154
- ret.soa_requestedMode="ID"
155
-
156
- update=c.umlx_createAndAddOperation("#{c.rdf_uri}_update","update")
157
- p1=update.umlx_createAndAddParameter("#{update.rdf_uri}","updateData")
133
+
134
+
135
+ # create a CRUD component associated to this class
136
+ # for exposing CRUD services on this object.
137
+ def java_createCrudComponent!
138
+
139
+ return if umlx_hasStereotype?('DTO')
140
+ return if db_isDAO?
141
+ return unless umlx_businessMethod?
142
+
143
+ base=self
144
+ p=base.umlx_owner_one
145
+ p=p.umlx_getOrCreatePackage(base.context[:crudComponentPackage,"ws"],p)
146
+
147
+ c=p.umlx_createAndAddComponent("#{self.rdf_uri}_crudc","#{uml_name} CRUD")
148
+ #puts "component created: #{c}"
149
+ #struts_addCreateAndAddActions!
150
+
151
+ create=c.umlx_createAndAddOperation("#{c.rdf_uri}_create","create")
152
+ ret=create.umlx_createAndAddReturnParameter("#{create.rdf_uri}")
153
+ ret.uml_type=base
154
+ ret.soa_requestedMode="ID"
155
+
156
+ update=c.umlx_createAndAddOperation("#{c.rdf_uri}_update","update")
157
+ p1=update.umlx_createAndAddParameter("#{update.rdf_uri}","updateData")
158
158
  p1.uml_type=base
159
159
  p1.soa_requestedMode="FULL"
160
160
  end
161
161
  end
162
162
 
163
163
  module Mrdf_Repository
164
- def dto_generateCustomDTO()
165
- data_model=self[:dataModel]
166
- return if data_model.nil?
164
+
165
+ def dto_forceDTO_generation!(data_model)
167
166
  cdfs=Set.new
168
167
  data_model.each { |k,v|
169
168
  next unless v.kind_of?(Msoa_customDataFilter)
170
169
  cdfs.add(v)
171
170
  }
172
171
 
173
- dto_autoPopulate!
174
-
175
-
176
172
  uml_Class_all.each { |c|
177
173
  next unless c.kind_of?(Muml_Class)
178
174
  next if c.umlx_hasStereotype?('DTO')
@@ -182,15 +178,66 @@ module Mrdf_Repository
182
178
  cdfs.each { |v|
183
179
  #next unless v.kind_of?(Msoa_customDataFilter)
184
180
  #puts "v --> #{v.class}"
181
+ #force filtered class generation
185
182
  v.dto_getFilteredClass(c)
186
183
  }
187
184
  }
188
-
189
- #puts "!!!!!!!!!!!!!!!!!!!!!!!!!!! Proc "
190
-
185
+ end
186
+
187
+ # process filter rules from protege/2000
188
+ def dto_generateCustomDTO_step1()
189
+ data_model=self[:dataModel]
190
+ return if data_model.nil?
191
+
192
+ dto_autoPopulate!
193
+ dto_forceDTO_generation!(data_model)
194
+ dto_processParameterFilterRule!(data_model)
195
+ dto_processServiceParametersNoRule!(data_model)
196
+ end
197
+
198
+ # For every class stereotyped DTO, replace
199
+ # non DTO class by their DTO correspondant.
200
+ def dto_processServiceParametersNoRule!(data_model)
201
+ filter_id=dto_findFilterByName("ID")
202
+
203
+ uml_Class_all.each { |clazz|
204
+ #next unless clazz.
205
+ next unless clazz.umlx_hasStereotype?('DTO')
206
+ puts "AAAAA #{clazz.class} #{clazz}"
207
+ dto_ReplaceAllParametersByDTO!(clazz,filter_id)
208
+ }
209
+ uml_Component_all.each { |clazz|
210
+ #next unless clazz.umlx_hasStereotype?('DTO')
211
+ puts "AAAAA #{clazz.class} #{clazz}"
212
+ dto_ReplaceAllParametersByDTO!(clazz,filter_id)
213
+ }
214
+ end
215
+
216
+ def dto_ReplaceAllParametersByDTO!(clazz,filter_id)
217
+ clazz.uml_ownedOperation.each { |op|
218
+ (op.uml_returnResult+op.uml_ownedParameter).each { |param|
219
+
220
+ # element has already have been processed by a filter rule
221
+ # or it is already a DTO in source UML model
222
+ next if param.uml_type_one.db_isDAO?
223
+
224
+ nt=filter_id.dto_getFilteredClass(param.uml_type_one)
225
+ next if nt==param.uml_type_one
226
+ puts "changing type #{param.uml_type} -> #{nt} in #{clazz}/#{param}"
227
+ param.uml_type=nt
228
+ }
229
+ }
230
+ end
231
+
232
+ def dto_processParameterFilterRule!(data_model)
191
233
  s=Set.new
192
234
  data_model.each_value { |rule|
193
235
  next unless rule.kind_of?(Msoa_dataParameterFilterRule)
236
+ if rule.soa_filteredProperty.empty? || rule.soa_useDataFilter.empty?
237
+ puts "WARNING: ignored incomplete filteredProperty"
238
+ next
239
+ end
240
+ #next unless rule.kind_of?(Msoa_dataFilterRule)
194
241
  s.add(rule)
195
242
  }
196
243
  s.each{|rule|
@@ -200,15 +247,19 @@ module Mrdf_Repository
200
247
  #
201
248
  prop=rule.soa_filteredProperty_one
202
249
  prop_uml=self[prop.rdf_uri]
203
- # puts "prop_uml: #{prop_uml}:#{prop_uml.class}"
250
+ puts "prop_uml: #{prop_uml}:#{prop_uml.class}"
204
251
  filter=rule.soa_useDataFilter_one
205
252
  fc_uml=filter.dto_getFilteredClass(prop_uml.uml_type_one)
206
253
  # puts "fc_uml: #{fc_uml}:#{fc_uml.class}"
207
254
 
208
255
  # Replacing core type by filtered type
209
- # puts "#{__LINE__} changing #{prop_uml.uml_type} to #{fc_uml} in #{prop_uml}"
256
+ puts "#{__LINE__} changing #{prop_uml.uml_type} to #{fc_uml} in #{prop_uml} #{prop_uml.rdf_uri}"
210
257
  prop_uml.uml_type=fc_uml
211
258
  }
259
+ end
260
+ def dto_generateCustomDTO_step2()
261
+ data_model=self[:dataModel]
262
+ return if data_model.nil?
212
263
 
213
264
  each_value { |prop_uml|
214
265
  next unless prop_uml.kind_of?(Muml_TypedElement)
@@ -217,7 +268,7 @@ module Mrdf_Repository
217
268
  filter=dto_findFilterByName(prop_uml.soa_requestedMode.to_s)
218
269
  fc_uml=filter.dto_getFilteredClass(prop_uml.uml_type_one)
219
270
  # puts "!!!@@@!!! soa_requestedMode : #{prop_uml.soa_requestedMode} --> #{filter}"
220
- # puts "#{__LINE__} changing #{prop_uml.uml_type} to #{fc_uml}"
271
+ puts "#{__LINE__} changing #{prop_uml.uml_type} to #{fc_uml}"
221
272
  prop_uml.uml_type=fc_uml
222
273
  }
223
274
 
@@ -265,7 +316,7 @@ module Mrdf_Repository
265
316
  end
266
317
  end
267
318
 
268
- module Muml_Class
319
+ module Muml_Classifier
269
320
  rdf_attr :dto_isPopulated, [ ::Mrdfs_Literal ]
270
321
  end
271
322
 
@@ -305,7 +356,6 @@ module Msoa_dataFilter
305
356
 
306
357
 
307
358
 
308
-
309
359
  def dto_findFilterByName(filterName)
310
360
  data_model=rdf_Repository #self[:dataModel]
311
361
  data_model.each_value { |rule|
@@ -360,25 +410,48 @@ module Msoa_dataFilter
360
410
  end
361
411
 
362
412
  def dto_getFilteredClass(umlClass)
363
- #puts "dto_getFilteredClass(#{umlClass}:#{umlClass.class})"
364
-
365
- if umlClass.kind_of?(Muml_PrimitiveType) || umlClass.kind_of?(Muml_DataType)
413
+ if umlClass.kind_of?(Muml_PrimitiveType) || umlClass.kind_of?(Muml_DataType) || umlClass.java_isATestFile? || umlClass.umlx_hasStereotype?('DTO')
414
+ # umlClass is a already a DTO. No further action required.
366
415
  return umlClass
367
- #tpl=DatatypeMapping.instance.getMapping(umlClass)
368
- #return tpl.getFormType(umlClass) #Note: class instead of field
369
416
  end
370
- return umlClass if self.soa_dataFilterName.to_s=="INCLUDE"
371
- #puts "#{__LINE__} #{umlClass.class} #{umlClass.java_Name} #{umlClass.java_qualifiedName}"
372
- return umlClass if umlClass.java_qualifiedName.to_s.index("java.")==0
417
+
418
+ if self.soa_dataFilterName.to_s=="INCLUDE"
419
+ puts "!!! #{umlClass} INCLUDED"
420
+ return umlClass
421
+ end
373
422
 
423
+ return umlClass if umlClass.java_qualifiedName.to_s.index("java.")==0
424
+
425
+ # umlClass is not a DTO. We now need to compute a DTO class for it.
426
+
427
+ dto=nil
428
+ if umlClass.kind_of?(Muml_Class)
429
+ dto=umlClass.umlx_getOrCreateClass("filter."+self.soa_dataFilterName.to_s+"."+umlClass.java_qualifiedName.to_s+"_"+self.soa_dataFilterName.to_s)
430
+ else
431
+ dto=umlClass.umlx_getOrCreateInterface("filter."+self.soa_dataFilterName.to_s+"."+umlClass.java_qualifiedName.to_s+"_"+self.soa_dataFilterName.to_s)
432
+ end
374
433
 
375
- dto=umlClass.umlx_getOrCreateClass("filter."+self.soa_dataFilterName.to_s+"."+umlClass.java_qualifiedName.to_s+"_"+self.soa_dataFilterName.to_s)
376
- return dto if dto.dto_isPopulated?
434
+ dto_populateDTO(dto,umlClass) unless dto.dto_isPopulated?
435
+ return dto
436
+ end
437
+
438
+ def dto_populateDTO(dto,umlClass)
377
439
  dto.dto_isPopulated=RDF_TRUE
440
+ dto.uml_appliedStereotype_add(dto.umlx_getOrCreateStereotype("DTO"))
378
441
  dto.umlx_external=RDF_FALSE
379
442
  dto.db_isTransient=RDF_TRUE
380
443
  dto.umlx_businessMethod=RDF_FALSE
381
-
444
+
445
+ if(umlClass.kind_of?(Muml_Class))
446
+ umlClass.uml_implementation.each {|g|
447
+ clazz=dto_getFilteredClass(g.uml_supplier_one)
448
+ if clazz.nil?
449
+ puts "No filter #{self} for #{g.uml_supplier_one}. Class ignore in inheritance"
450
+ next
451
+ end
452
+ dto.umlx_createAndAddImplementation(clazz)
453
+ }
454
+ end
382
455
  #puts "dto=#{dto}"
383
456
  umlClass.uml_generalization.each {|g|
384
457
  #adds generalization from element in same mode as current.
@@ -392,7 +465,7 @@ module Msoa_dataFilter
392
465
  }
393
466
 
394
467
  umlClass.uml_ownedAttribute.each { |sourceField|
395
- # puts "p-->#{p}"
468
+ # puts "sourcField-->#{umlClass} : #{sourceField}"
396
469
  # f=dto_getFilterRule(p)
397
470
  next if sourceField.uml_isStatic?
398
471
  #next if sourceField.uml_isFinal?
@@ -407,7 +480,7 @@ module Msoa_dataFilter
407
480
 
408
481
  #return unless sourceField.umlx_businessMethod?
409
482
 
410
- #puts "adding field for #{sourceField} in dto #{dtoClass}"
483
+ puts "adding field for #{sourceField} in dto #{dtoClass} m=#{self}"
411
484
 
412
485
  filter=dto_getDataFilter(sourceField)
413
486
  # if filter.nil?
@@ -416,11 +489,11 @@ module Msoa_dataFilter
416
489
  # end
417
490
 
418
491
  if filter.soa_dataFilterName.to_s=="IGNORE"
419
- #puts "IGNORE data filter"
492
+ puts "IGNORE data filter"
420
493
  return
421
494
  end
422
495
 
423
- # puts "filter=#{filter.soa_dataFilterName}"
496
+ puts "filter=#{filter.soa_dataFilterName}"
424
497
  targetType=filter.dto_getFilteredClass(sourceField.uml_type_one)
425
498
  if targetType.nil?
426
499
  puts "nil filtered type returned for #{sourceField}"
@@ -443,4 +516,4 @@ end
443
516
 
444
517
 
445
518
 
446
-
519
+