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.
- data/History.txt +11 -0
- data/Manifest.txt +1 -51
- data/lib/ontomde-java.rb +2 -0
- data/lib/ontomde-java/crank.rb +8 -8
- data/lib/ontomde-java/crank/crankJpa.rb +58 -8
- data/lib/ontomde-java/crank/main.rb +38 -21
- data/lib/ontomde-java/frontend/command.rb +7 -7
- data/lib/ontomde-java/frontend/command.rdoc +0 -583
- data/lib/ontomde-java/frontend/defaultOptions.rb +12 -7
- data/lib/ontomde-java/frontend/options.rb +19 -2
- data/lib/ontomde-java/frontend/steps.rb +36 -5
- data/lib/ontomde-java/java/accessorCode.rb +250 -94
- data/lib/ontomde-java/java/accessorSignature.rb +50 -4
- data/lib/ontomde-java/java/annotationOntoMDE.rb +38 -27
- data/lib/ontomde-java/java/component.rb +141 -68
- data/lib/ontomde-java/java/enumAssignable.rb +46 -5
- data/lib/ontomde-java/java/java.rb +111 -40
- data/lib/ontomde-java/java/javaDatatypeMapping.rb +35 -1
- data/lib/ontomde-java/java/javadoc.rb +35 -22
- data/lib/ontomde-java/java/operationAsClass.rb +13 -0
- data/lib/ontomde-java/java/security.rb +10 -2
- data/lib/ontomde-java/java/stateMachine.rb +137 -74
- data/lib/ontomde-java/java/tenant.rb +1 -0
- data/lib/ontomde-java/java/xsd.rb +1 -1
- data/lib/ontomde-java/jpa/configuration.rb +25 -1
- data/lib/ontomde-java/jpa/finder.rb +48 -13
- data/lib/ontomde-java/jpa/jpa.rb +30 -14
- data/lib/ontomde-java/jpa/mapping.rb +114 -60
- data/lib/ontomde-java/jpa/redefined.rb +21 -5
- data/lib/ontomde-java/jpa/simulationAutoImplement.rb +1 -1
- data/lib/ontomde-java/jpdl/processOperationToClass.rb +1 -2
- data/lib/ontomde-java/kbjava/rdfToJava.rb +25 -16
- data/lib/ontomde-java/struts.rb +1 -1
- data/lib/ontomde-java/struts/MessageResources.rb +15 -6
- data/lib/ontomde-java/struts/action.rb +37 -13
- data/lib/ontomde-java/struts/form.rb +97 -7
- data/lib/ontomde-java/struts/header.rb +7 -3
- data/lib/ontomde-java/struts/jsp_edit.rb +54 -24
- data/lib/ontomde-java/struts/jsp_edit_js.rb +1 -1
- data/lib/ontomde-java/struts/jsp_index.rb +6 -4
- data/lib/ontomde-java/struts/mappingForJsp.rb +11 -7
- data/lib/ontomde-java/struts/mappingToJavaHierarchy.rb +16 -2
- data/lib/ontomde-java/version.rb +1 -1
- data/lib/ontomde-java/vmware/vso.rb +329 -0
- data/test/test_export_ea7_1_829.rb +5 -0
- data/test/test_export_ea7_1_833.rb +5 -0
- data/test/test_export_ea7_5_843.rb +5 -0
- data/test/test_export_magicDraw.rb +4 -0
- data/test/test_export_oe530.rb +1 -1
- data/test/test_export_oe600.rb +1 -1
- data/test/test_export_rsm60.rb +1 -1
- data/test/{uml_test.rb → test_export_unitTests.rb} +6 -1
- metadata +9 -56
- data/generateRdocFile.sh +0 -16
- data/profiling.xls +0 -0
- data/test/.classpath +0 -14
- data/test/.project +0 -17
- data/test/.settings/org.eclipse.jdt.core.prefs +0 -23
- data/test/Rakefile +0 -71
- data/test/build.xml +0 -34
- data/test/classpath.rb +0 -15
- data/test/lib/junit-4.1.jar +0 -0
- data/test/load1.rb +0 -3
- data/test/load2.rb +0 -3
- data/test/log4j.properties +0 -46
- data/test/model/.project +0 -11
- data/test/model/BigProject.mdzip +0 -0
- data/test/model/BigProject.mdzip.nt +0 -102866
- data/test/model/ClassDiagram.EntArch.gif +0 -0
- data/test/model/ClassDiagram.emx.gif +0 -0
- data/test/model/ClassDiagram.mdzip.gif +0 -0
- data/test/model/model_ea71.bis.ea.xmi +0 -149
- data/test/model/model_ea71.ea.xmi +0 -4470
- data/test/model/model_ea71.eap +0 -0
- data/test/model/model_ea71_README.txt +0 -8
- data/test/model/multipleInheritance.emx +0 -466
- data/test/model/multipleInheritance.emx.nt +0 -2428
- data/test/model/simple1-530.ofp +0 -0
- data/test/model/simple1-includedAsReference.emx +0 -169
- data/test/model/simple1.emx +0 -3729
- data/test/model/simple1.emx.fragments.nt +0 -81
- data/test/model/simple1.emx.nt +0 -5760
- data/test/model/simple1.mdzip +0 -0
- data/test/model/simple1.mdzip.nt +0 -11500
- data/test/model/simple1.oe530.nt +0 -1986
- data/test/model/simple1.oe600.nt +0 -1627
- data/test/src/RuntimeTest.java +0 -656
- data/test/src/testsLevel1.java +0 -174
- data/test/src/testsLevel2.java +0 -29
- data/test/src/testsLevel3.java +0 -40
- data/test/test-ea7.sh +0 -15
- data/test/test-magicDraw.sh +0 -10
- data/test/test-mi.sh +0 -9
- data/test/test-oe530.sh +0 -10
- data/test/test-oe600.sh +0 -11
- data/test/test-rsm.sh +0 -11
- data/test/test_export_ea71.rb +0 -5
- data/test/trace +0 -419
- data/test/uml_test.xls +0 -0
- 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
|
|
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
|
-
*
|
|
36
|
-
*
|
|
34
|
+
/**
|
|
35
|
+
* Erase and replace this section with OntoMDE generated code.<br>
|
|
36
|
+
*
|
|
37
37
|
*/
|
|
38
38
|
nothing,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
*
|
|
42
|
-
*
|
|
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
|
-
|
|
47
|
-
*
|
|
48
|
-
*
|
|
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
|
-
|
|
53
|
-
*
|
|
54
|
-
*
|
|
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
|
-
|
|
59
|
-
*
|
|
60
|
-
*
|
|
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
|
-
|
|
65
|
-
*
|
|
66
|
-
*
|
|
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
|
-
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
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
|
-
|
|
130
|
-
|
|
129
|
+
#mode requested for soa
|
|
130
|
+
rdf_attr :soa_requestedMode,[::Mrdfs_Literal]
|
|
131
131
|
end
|
|
132
132
|
module Muml_Class
|
|
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
|
-
|
|
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
|
-
|
|
165
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
371
|
-
|
|
372
|
-
|
|
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
|
|
376
|
-
return dto
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
492
|
+
puts "IGNORE data filter"
|
|
420
493
|
return
|
|
421
494
|
end
|
|
422
495
|
|
|
423
|
-
|
|
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
|
+
|