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
|
@@ -2,16 +2,22 @@
|
|
|
2
2
|
# return an option array field with default values
|
|
3
3
|
def getDefaultOptions(options={})
|
|
4
4
|
#options = {}
|
|
5
|
+
options[:dbSchemaName] = 'testschema'
|
|
5
6
|
options[:multiTenant] = false
|
|
6
|
-
options[:testRelativeDir]="src/test/java"
|
|
7
7
|
options[:jspUseXmdaTaglib]=true
|
|
8
8
|
options[:backTrace] = false
|
|
9
9
|
options[:selfTestAndExit] = false
|
|
10
10
|
options[:verbose]=false
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
options[:
|
|
11
|
+
|
|
12
|
+
# Path related defaults
|
|
13
|
+
options[:targetDir]='.'
|
|
14
|
+
options[:defaultRootDir ]='' # examples: domain or webapp
|
|
15
|
+
options[:testRelativeDir]='src/test/java/'
|
|
16
|
+
options[:javaRelativeDir]='src/main/java/'
|
|
17
|
+
options[:flexRelativeDir]='webapp/src/main/flex/'
|
|
14
18
|
options[:webResourcesDir]=options[:javaRelativeDir]
|
|
19
|
+
options[:webContentRelativeDir]='./WebContent/'
|
|
20
|
+
|
|
15
21
|
options[:flex]=false
|
|
16
22
|
options[:mysql]=false
|
|
17
23
|
options[:nt]=[]
|
|
@@ -30,7 +36,7 @@ def getDefaultOptions(options={})
|
|
|
30
36
|
options[:withGenerateMethodForm]=false
|
|
31
37
|
options[:makeCompositionBiNavigable]=false
|
|
32
38
|
options[:salvage]=false
|
|
33
|
-
options[:useUnzip]=false
|
|
39
|
+
#options[:useUnzip]=false
|
|
34
40
|
options[:messageCheck]=true
|
|
35
41
|
options[:struts]=false
|
|
36
42
|
options[:crank]=false
|
|
@@ -43,7 +49,6 @@ def getDefaultOptions(options={})
|
|
|
43
49
|
#options[:installRessources]=true
|
|
44
50
|
options[:target_ejbconf] = nil
|
|
45
51
|
options[:autoNewFileCreation]=true
|
|
46
|
-
options[:webContentRelativeDir]="./WebContent/"
|
|
47
52
|
options[:javaClassRelDir]=nil
|
|
48
53
|
options[:generateAntBuildFile]=false
|
|
49
54
|
options[:silentlyForceUnknownDatatypeToString]=false
|
|
@@ -104,7 +109,7 @@ def getDefaultOptions(options={})
|
|
|
104
109
|
options[:globalReverseFile]=nil
|
|
105
110
|
options[:hasGlobalReverse]=false
|
|
106
111
|
options[:dataModel]=nil
|
|
107
|
-
|
|
112
|
+
options[:vsoTargetFile]=nil
|
|
108
113
|
# options[:hib_dialect]="org.hibernate.dialect.MySQL5InnoDBDialect"
|
|
109
114
|
#
|
|
110
115
|
#
|
|
@@ -115,6 +115,12 @@ def populateSourceAndTarget(opts,options)
|
|
|
115
115
|
options[:javaRelativeDir] = v
|
|
116
116
|
end
|
|
117
117
|
|
|
118
|
+
opts.on("--defaultRootDir ROOT_DIR_NAME",": Default root dir used for package without a root dir (a package stereotyped root). (examples: webapp, domain, ...)","default: --defaultRootDir #{options[:defaultRootDir]}") do |v|
|
|
119
|
+
options[:defaultRootDir] = v
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
118
124
|
opts.on("--webResourcesDir DIRECTORY",": Relative destination directory for generated Web Resources properties, ...","relative to --targetDir","default: --webResourcesDir #{options[:webResourcesDir]}") do |v|
|
|
119
125
|
options[:webResourcesDir] = v
|
|
120
126
|
end
|
|
@@ -271,6 +277,7 @@ def populateCrank(opts,options)
|
|
|
271
277
|
opts.on("--[no-]crank","Enable crank generation.","default: --#{options[:crank]?'':'no-'}crank") do |v|
|
|
272
278
|
options[:crank] = v
|
|
273
279
|
options[:java_addJavaEnumInterface]=true
|
|
280
|
+
#options[:db_autonomousDAO] = v
|
|
274
281
|
end
|
|
275
282
|
end
|
|
276
283
|
def populateFlex(opts,options)
|
|
@@ -307,6 +314,10 @@ def populatePersistence(opts,options)
|
|
|
307
314
|
options[:ddl_mode] = v
|
|
308
315
|
end
|
|
309
316
|
|
|
317
|
+
opts.on("--dbSchemaName [SCHEMA_NAME]",": Name of the schema used in configuration files",%{default: --dbSchemaName #{options[:dbSchemaName]}}) do |v|
|
|
318
|
+
options[:dbSchemaName] = v
|
|
319
|
+
end
|
|
320
|
+
|
|
310
321
|
opts.on("-s","--[no-]simulateNotImplementedMethods",": Replace unimplemeted method with a simulation method.",%{default: --#{options[:simulateNotImplementedMethods]?"":"no-"}simulateNotImplementedMethods}) do |v|
|
|
311
322
|
options[:simulateNotImplementedMethods] = v
|
|
312
323
|
end
|
|
@@ -348,7 +359,8 @@ def populateStruts(opts,options)
|
|
|
348
359
|
options[:java_addJavaEnumInterface] = v
|
|
349
360
|
end
|
|
350
361
|
opts.on("-u","--[no-]useUnzip",": Use unzip to install resources.","default: --#{options[:useUnzip]?'':'no-'}useUnzip") do |v|
|
|
351
|
-
|
|
362
|
+
puts "#WARNING --useUnzip option deprecated. Please remove from your setup file"
|
|
363
|
+
#options[:useUnzip] = v
|
|
352
364
|
end
|
|
353
365
|
|
|
354
366
|
opts.on("-c","--[no-]message-check",": Check message ressources consistency.","default: --#{options[:messageCheck]?'':'no-'}message-check") do |v|
|
|
@@ -424,6 +436,11 @@ def populateMisc(opts,options)
|
|
|
424
436
|
opts.on("--[no-]generateDebugLauncher",": generates ruby script helper for launching ontomde-java from a ruby debugger. (netbeans, ruby, ...)",%{default: --#{options[:generateDebugLauncher]?"":"no-"}generateDebugLauncher}) do |v|
|
|
425
437
|
options[:generateDebugLauncher] = v
|
|
426
438
|
end
|
|
439
|
+
|
|
440
|
+
opts.on("--vsoTargetFile VSO_TARGET_FILE",": if sets, generate a file containing VmWare VSO file mapping for inclusion into VMO","default: -- #{options[:vsoTargetFile]}") do |v|
|
|
441
|
+
options[:vsoTargetFile] = v
|
|
442
|
+
end
|
|
443
|
+
|
|
427
444
|
end
|
|
428
445
|
|
|
429
446
|
def populateDocumentation(opts,options)
|
|
@@ -463,7 +480,7 @@ def populateDebug(opts,options)
|
|
|
463
480
|
options[:allowAutomaticCodeDeletion] = v
|
|
464
481
|
end
|
|
465
482
|
|
|
466
|
-
opts.on("-s","--[no-]
|
|
483
|
+
opts.on("-s","--[no-]dryRun",": Do a dry run without executing actions..","No file will be changed neither created on disk",%{default: --#{options[:dryRun]?"":"no-"}dryRun}) do |v|
|
|
467
484
|
options[:dryRun] = v
|
|
468
485
|
end
|
|
469
486
|
|
|
@@ -7,14 +7,17 @@
|
|
|
7
7
|
# #step_generate_struts, #step_generate_crank, #step_generate_misc, #step_generate_flex, #step_clean
|
|
8
8
|
DEFAULT_GENERATION_CHAIN=[
|
|
9
9
|
[:load , :step_load],
|
|
10
|
+
[:nocode, :step_removeNoCode],
|
|
10
11
|
[:tenant , :step_addTenant],
|
|
11
12
|
[:kb , :step_generateKb],
|
|
12
13
|
[:bpm , :step_bpm],
|
|
13
14
|
[:tests , :step_generate_tests],
|
|
15
|
+
[:dto1 , :step_generateCustomDTO_step1 ],
|
|
16
|
+
[:dto2 , :step_generateCustomDTO_step2 ],
|
|
14
17
|
[:mda1 , :step_transform10],
|
|
15
18
|
[:mda2 , :step_transform20],
|
|
19
|
+
[:vso ,:step_vso ],
|
|
16
20
|
[:initComponent, :step_initComponent],
|
|
17
|
-
[:dto , :step_generateCustomDTO ],
|
|
18
21
|
[:mda3 , :step_transform30],
|
|
19
22
|
[:mda4 , :step_transform40],
|
|
20
23
|
[:java , :step_generate_java],
|
|
@@ -95,8 +98,24 @@ def step_generateKb(model)
|
|
|
95
98
|
say "loading KB project data"
|
|
96
99
|
ignoreheader=true
|
|
97
100
|
data_model=Crdf_ProtegeDataModel.new
|
|
98
|
-
|
|
99
|
-
|
|
101
|
+
begin
|
|
102
|
+
failOnWarn=true
|
|
103
|
+
data_model.loadMetaModelFromFile(model.context[:testDataRDFS],ignoreheader,failOnWarn)
|
|
104
|
+
#data_model.loadFail_on_warn=true
|
|
105
|
+
data_model.loadModelFromFile(model.context[:testDataRDF],ignoreheader,failOnWarn)
|
|
106
|
+
rescue Exception => z
|
|
107
|
+
puts <<END
|
|
108
|
+
|
|
109
|
+
* PLEASE READ: An error occured while reading tests data.
|
|
110
|
+
* PLEASE READ: This is most likely caused by tests data out of sync
|
|
111
|
+
* PLEASE READ: with model due to a change in source model.
|
|
112
|
+
* PLEASE READ: You should open test project with Protege/2000
|
|
113
|
+
* PLEASE READ: (.pprj file associated to: #{model.context[:testDataRDFS]})
|
|
114
|
+
* PLEASE READ: remove offending data, save and rerun generation.
|
|
115
|
+
|
|
116
|
+
END
|
|
117
|
+
raise z
|
|
118
|
+
end
|
|
100
119
|
data_model.kbjava_umlSourceModel = model
|
|
101
120
|
model[:dataModel]=data_model
|
|
102
121
|
end
|
|
@@ -114,8 +133,12 @@ end
|
|
|
114
133
|
|
|
115
134
|
# generate custom DTO based on business objects
|
|
116
135
|
# and setup from protege.
|
|
117
|
-
def
|
|
118
|
-
model.
|
|
136
|
+
def step_generateCustomDTO_step1(model)
|
|
137
|
+
model.dto_generateCustomDTO_step1()
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def step_generateCustomDTO_step2(model)
|
|
141
|
+
model.dto_generateCustomDTO_step2()
|
|
119
142
|
end
|
|
120
143
|
|
|
121
144
|
# Enhance UML model
|
|
@@ -275,6 +298,10 @@ def step_generate_crank(model)
|
|
|
275
298
|
end
|
|
276
299
|
end
|
|
277
300
|
|
|
301
|
+
def step_removeNoCode(model)
|
|
302
|
+
model.umlx_removeNoCode!()
|
|
303
|
+
end
|
|
304
|
+
|
|
278
305
|
def step_initComponent(model)
|
|
279
306
|
model.java_autoGenerateCrudComponents! if model.context[:webservice]
|
|
280
307
|
model.umlx_autoCreateImplicitComponent! if model.context[:withGenerateImplicitComponent]
|
|
@@ -285,3 +312,7 @@ def step_clean(model)
|
|
|
285
312
|
mtk_deleteTempFiles
|
|
286
313
|
end
|
|
287
314
|
|
|
315
|
+
def step_vso(model)
|
|
316
|
+
model.vso_generateMapping
|
|
317
|
+
end
|
|
318
|
+
|
|
@@ -11,7 +11,7 @@ module Muml_Classifier
|
|
|
11
11
|
# (this method is often overwritten, especially by persistence module).
|
|
12
12
|
def java_writeSuggesterBody(oa)
|
|
13
13
|
#TODO: recherche du composite commun
|
|
14
|
-
write("
|
|
14
|
+
write("\t\treturn null;\n")
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
# Write code for a composition createAndAdd suggester
|
|
@@ -29,14 +29,21 @@ module Muml_Classifier
|
|
|
29
29
|
# Write code for a suggester returning enum given has parameter
|
|
30
30
|
#Note: if lowerValue is zero, null is also added (except if createAndAdd)
|
|
31
31
|
def java_writeSuggesterBodyEnumWithType(oa,enum,isCreateAndAddSuggester=false)
|
|
32
|
+
if(true)
|
|
32
33
|
write <<END
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
return xmda.crud.Helper.arrayToList#{%{PlusNull} if (oa.umlx_lowerValueIsZero? && (!isCreateAndAddSuggester))}(#{enum.java_qualifiedName}\n\t\t\t\t\t\t.values());
|
|
35
|
+
END
|
|
36
|
+
else
|
|
37
|
+
write <<END
|
|
38
|
+
ret=new java.util.ArrayList<#{enum.java_qualifiedName}>();
|
|
39
|
+
#{ (oa.umlx_lowerValueIsZero? && (!isCreateAndAddSuggester)) ? %{ret.add(null);} : %{} }
|
|
40
|
+
for (int i = java.lang.reflect.Array
|
|
41
|
+
.getLength(#{enum.java_qualifiedName}\n\t\t\t\t\t\t.values()) - 1; i >= 0; i--) {
|
|
42
|
+
ret.add(#{enum.java_qualifiedName}\n\t\t\t\t\t.values()[i]);
|
|
37
43
|
}
|
|
38
|
-
|
|
44
|
+
return ret;
|
|
39
45
|
END
|
|
46
|
+
end
|
|
40
47
|
end
|
|
41
48
|
|
|
42
49
|
# Returns an UML LiteralInteger initialized with val value.
|
|
@@ -85,20 +92,20 @@ END
|
|
|
85
92
|
#no code when derived
|
|
86
93
|
elsif oe.nil? || !oe.umlx_isNavigable?
|
|
87
94
|
set.java_code=<<END
|
|
88
|
-
|
|
95
|
+
\t\t#{java_this(oa)}#{oa.java_NameProperty}.remove(#{getterParameterName(oa)});
|
|
89
96
|
END
|
|
90
97
|
elsif oe.umlx_upperValueIsOne?
|
|
91
98
|
set.java_code=<<END
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
99
|
+
\t\t#{qualInit}
|
|
100
|
+
\tif(#{java_this(oa)}#{oa.java_NameProperty}.remove(#{getterParameterName(oa)})#{qualCheckRemove}) {
|
|
101
|
+
\t\t\t#{getterParameterName(oa)}#{qualCall}.set#{oe.java_NameBean}(null);
|
|
95
102
|
}
|
|
96
103
|
END
|
|
97
104
|
else
|
|
98
105
|
set.java_code=<<END
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
106
|
+
\t\tif(#{java_this(oa)}#{oa.java_NameProperty}.remove(#{getterParameterName(oa)})) {
|
|
107
|
+
\t\t\t#{getterParameterName(oa)}#{qualCall}.remove#{oe.java_NameBean}(this);
|
|
108
|
+
\t\t}
|
|
102
109
|
END
|
|
103
110
|
end
|
|
104
111
|
|
|
@@ -185,18 +192,22 @@ END
|
|
|
185
192
|
elsif oe.umlx_upperValueIsOne?
|
|
186
193
|
#*-1
|
|
187
194
|
add.java_code=<<END
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
195
|
+
\t\tif (#{ip.java_Name} == null) {
|
|
196
|
+
\t\t\treturn;
|
|
197
|
+
\t\t}
|
|
198
|
+
\t\tif (#{java_this(oa)}#{oa.java_NameProperty}#{qualCall}.add(#{ip.java_Name})) {
|
|
199
|
+
\t\t\t#{ip.java_Name}.set#{oe.java_NameBean}(this);
|
|
200
|
+
\t\t}
|
|
192
201
|
END
|
|
193
202
|
else
|
|
194
203
|
#*-*
|
|
195
204
|
add.java_code=<<END
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
205
|
+
\t\tif (#{ip.java_Name} == null) {
|
|
206
|
+
\t\t\treturn;
|
|
207
|
+
\t\t}
|
|
208
|
+
\t\tif (#{java_this(oa)}#{oa.java_NameProperty}#{qualCall}.add(#{ip.java_Name})) {
|
|
209
|
+
\t\t\t#{ip.java_Name}.remove#{oe.java_NameBean}(this);
|
|
210
|
+
\t\t}
|
|
200
211
|
END
|
|
201
212
|
end
|
|
202
213
|
end
|
|
@@ -217,11 +228,11 @@ END
|
|
|
217
228
|
tenantClause=""
|
|
218
229
|
if context[:multiTenant]
|
|
219
230
|
#call constructor with tenant
|
|
220
|
-
tenantClause="(#{
|
|
231
|
+
tenantClause="(get#{TENANT_FIELD_BEAN_NAME}())"
|
|
221
232
|
end
|
|
222
233
|
|
|
223
234
|
rp=Cuml_Parameter.new(rdf_Repository,get.rdf_uri+"_p1")
|
|
224
|
-
rp.uml_name="
|
|
235
|
+
rp.uml_name="\t\treturn"
|
|
225
236
|
rp.uml_direction=Cuml_ParameterDirectionKind::Return
|
|
226
237
|
rp.uml_upperValue=oa.uml_upperValue
|
|
227
238
|
rp.uml_lowerValue=oa.uml_lowerValue
|
|
@@ -240,6 +251,134 @@ END
|
|
|
240
251
|
end
|
|
241
252
|
end
|
|
242
253
|
|
|
254
|
+
def java_getCrudHelperClass!
|
|
255
|
+
helper=umlx_getOrCreateClass('xmda.crud.Helper')
|
|
256
|
+
return helper unless helper.uml_ownedOperation.empty?
|
|
257
|
+
helper.db_isTransient=RDF_TRUE
|
|
258
|
+
helper.umlx_external=RDF_FALSE
|
|
259
|
+
helper.java_customCode=<<END
|
|
260
|
+
|
|
261
|
+
public static Object createFromEnum(#{java_getJavaEnumAssignInterface.java_qualifiedName} requestedType) {
|
|
262
|
+
if (requestedType == null) {
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
Class<?> t = requestedType.getType();
|
|
267
|
+
try {
|
|
268
|
+
Class<?>[] p = new Class[0];
|
|
269
|
+
Object[]initArgs =new Object[0];
|
|
270
|
+
java.lang.reflect.Constructor<?> c=t.getConstructor(p);
|
|
271
|
+
Object ret=c.newInstance(initArgs);
|
|
272
|
+
return ret;
|
|
273
|
+
} catch (NoSuchMethodException e) {
|
|
274
|
+
e.printStackTrace();
|
|
275
|
+
throw new RuntimeException("Missing default constructor for"+t.getName(),e);
|
|
276
|
+
} catch (IllegalAccessException e) {
|
|
277
|
+
e.printStackTrace();
|
|
278
|
+
throw new RuntimeException("Illegal access Exception on "+t.getName(),e);
|
|
279
|
+
} catch (InstantiationException e) {
|
|
280
|
+
e.printStackTrace();
|
|
281
|
+
throw new RuntimeException("Instantiation exception on "+t.getName(),e);
|
|
282
|
+
} catch (java.lang.reflect.InvocationTargetException e) {
|
|
283
|
+
e.printStackTrace();
|
|
284
|
+
throw new RuntimeException("Invocation Target Exception on "+t.getName(),e);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/*
|
|
289
|
+
* Helper for compacting code in add operations
|
|
290
|
+
*/
|
|
291
|
+
@SuppressWarnings("unchecked")
|
|
292
|
+
public static <T> T[] genericUnidirAdd(final T t, T[] oldVal) {
|
|
293
|
+
T[] newArray = null;
|
|
294
|
+
if (oldVal == null) {
|
|
295
|
+
newArray = (T[]) new Object[1];
|
|
296
|
+
newArray[0] = t;
|
|
297
|
+
} else {
|
|
298
|
+
newArray = (T[]) new Object[1 + oldVal.length];
|
|
299
|
+
System.arraycopy(oldVal, 0, newArray, 0, oldVal.length);
|
|
300
|
+
newArray[oldVal.length] = t;
|
|
301
|
+
}
|
|
302
|
+
return newArray;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
public static <T> java.util.List<T> arrayToList(T[] t) {
|
|
306
|
+
java.util.List<T> ret = null;
|
|
307
|
+
if (t == null) {
|
|
308
|
+
ret=new java.util.ArrayList<T>();
|
|
309
|
+
} else {
|
|
310
|
+
ret=java.util.Arrays.asList(t);
|
|
311
|
+
//if RW: ret=new java.util.ArrayList<T>(ret);
|
|
312
|
+
}
|
|
313
|
+
return ret;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
public static <T> java.util.List<T> arrayToListPlusNull(T[] t) {
|
|
317
|
+
java.util.List<T> ret = null;
|
|
318
|
+
if (t == null) {
|
|
319
|
+
ret=new java.util.ArrayList<T>();
|
|
320
|
+
} else {
|
|
321
|
+
ret=java.util.Arrays.asList(t);
|
|
322
|
+
ret=new java.util.ArrayList<T>(ret);
|
|
323
|
+
}
|
|
324
|
+
ret.add(0,null);
|
|
325
|
+
return ret;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
public static <T> boolean genericAddIgnoreNull(java.util.Collection<T> lst,
|
|
329
|
+
T elt) {
|
|
330
|
+
if (elt != null) {
|
|
331
|
+
return lst.add(elt);
|
|
332
|
+
}
|
|
333
|
+
return false; // no change
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* replace null Long by 0 Long
|
|
338
|
+
* Method used by jpa module.
|
|
339
|
+
*/
|
|
340
|
+
public static Long longObjZeroForNull(Long id) {
|
|
341
|
+
if (id == null) {
|
|
342
|
+
return Long.valueOf(0);
|
|
343
|
+
} else {
|
|
344
|
+
return id;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/* method to be used by jpa */
|
|
349
|
+
public static<T> java.util.List<T> addMissingItems(java.util.List<T> lstInOut,java.util.Collection<T> missings) {
|
|
350
|
+
for (java.util.Iterator<T> iterator = missings.iterator(); iterator.hasNext();) {
|
|
351
|
+
T item = (T) iterator.next();
|
|
352
|
+
if (!lstInOut.contains(item)) {
|
|
353
|
+
lstInOut.add(item);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
return lstInOut;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/* returns lst if no null, or a newly created set otherwise */
|
|
360
|
+
public static <T> java.util.Set<T> emptyNewCollectionIfNull(java.util.Set<T> lst) {
|
|
361
|
+
if (lst != null) {
|
|
362
|
+
return lst;
|
|
363
|
+
} else {
|
|
364
|
+
return new java.util.HashSet<T>();
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/* returns lst if no null, or a newly created List otherwise */
|
|
369
|
+
public static <T> java.util.List<T> emptyNewCollectionIfNull(java.util.List<T> lst) {
|
|
370
|
+
if (lst != null) {
|
|
371
|
+
return lst;
|
|
372
|
+
} else {
|
|
373
|
+
return new java.util.ArrayList<T>();
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
END
|
|
378
|
+
|
|
379
|
+
return helper
|
|
380
|
+
end
|
|
381
|
+
|
|
243
382
|
#Adds a createAndAdd method for parameter oa using a model transformation.
|
|
244
383
|
#
|
|
245
384
|
#NOTE:
|
|
@@ -279,38 +418,17 @@ END
|
|
|
279
418
|
# no java code generated
|
|
280
419
|
|
|
281
420
|
#TODO: factorize in helper class
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
Class<?> t = Class.forName(qname);
|
|
290
|
-
Class<?>[] p = new Class[0];
|
|
291
|
-
Object[]initArgs =new Object[0];
|
|
292
|
-
java.lang.reflect.Constructor<?> c=t.getConstructor(p);
|
|
293
|
-
#{oa.uml_type_one.java_qualifiedName} ret=(#{oa.uml_type_one.java_qualifiedName})c.newInstance(initArgs);
|
|
294
|
-
#{%{ret.setTenantOwner(getTenantOwner());} if context[:multiTenant]}
|
|
295
|
-
#{oa.umlx_upperValueIsOne? ? "set" : "add"}#{oa.java_NameBean}(ret);
|
|
296
|
-
return ret;
|
|
297
|
-
} catch (ClassNotFoundException e) {
|
|
298
|
-
e.printStackTrace();
|
|
299
|
-
throw new RuntimeException("Missing type "+qname,e);
|
|
300
|
-
} catch (NoSuchMethodException e) {
|
|
301
|
-
e.printStackTrace();
|
|
302
|
-
throw new RuntimeException("Missing default constructor for"+qname,e);
|
|
303
|
-
} catch (IllegalAccessException e) {
|
|
304
|
-
e.printStackTrace();
|
|
305
|
-
throw new RuntimeException("Illegal access Exception on "+qname,e);
|
|
306
|
-
} catch (InstantiationException e) {
|
|
307
|
-
e.printStackTrace();
|
|
308
|
-
throw new RuntimeException("Instantiation exception on "+qname,e);
|
|
309
|
-
} catch (java.lang.reflect.InvocationTargetException e) {
|
|
310
|
-
e.printStackTrace();
|
|
311
|
-
throw new RuntimeException("Invocation Target Exception on "+qname,e);
|
|
312
|
-
}}
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
add.java_code=%{\t\t#{oa.uml_type_one.java_qualifiedName} ret = (#{oa.uml_type_one.java_qualifiedName})#{java_getCrudHelperClass!.java_qualifiedName}.createFromEnum(requestedType);#{%{
|
|
425
|
+
\t\tret.setTenantOwner(getTenantOwner());} if context[:multiTenant]}
|
|
426
|
+
\t\t#{oa.umlx_upperValueIsOne? ? "set" : "add"}#{oa.java_NameBean}(ret);
|
|
427
|
+
\t\treturn ret;}
|
|
313
428
|
end
|
|
429
|
+
|
|
430
|
+
# generate add/... using helper instead of inlining
|
|
431
|
+
USE_HELPER_FOR_ACCESSORS=true
|
|
314
432
|
|
|
315
433
|
# Adds an appender for parameter oa using a model transformation.
|
|
316
434
|
#
|
|
@@ -340,41 +458,58 @@ END
|
|
|
340
458
|
# no code generated
|
|
341
459
|
elsif (oe.nil? || !oe.umlx_isNavigable?) && !oa.java_use_Arrays?
|
|
342
460
|
add.java_code=<<END
|
|
343
|
-
|
|
344
|
-
#{java_this(oa)}#{oa.java_NameProperty}.add(#{getterParameterName(oa)});
|
|
461
|
+
\t\txmda.crud.Helper.genericAddIgnoreNull(#{java_this(oa)}#{oa.java_NameProperty},#{getterParameterName(oa)} );
|
|
345
462
|
END
|
|
463
|
+
# add.java_code=<<END
|
|
464
|
+
#\t\tif (#{getterParameterName(oa)} == null) {
|
|
465
|
+
#\t\t\treturn;
|
|
466
|
+
#\t\t}
|
|
467
|
+
#\t\t#{java_this(oa)}#{oa.java_NameProperty}.add(#{getterParameterName(oa)});
|
|
468
|
+
#END
|
|
346
469
|
elsif (oe.nil? || !oe.umlx_isNavigable?) && oa.java_use_Arrays?
|
|
347
470
|
add.java_code=<<END
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
471
|
+
\t\tif (#{getterParameterName(oa)} == null) {
|
|
472
|
+
\t\t\treturn;
|
|
473
|
+
\t\t}
|
|
474
|
+
\t\t#{oa.uml_type_one.java_qualifiedName}[] newArray = null;
|
|
475
|
+
\t\tif (#{java_this(oa)}#{oa.java_NameProperty} == null) {
|
|
476
|
+
\t\t\tnewArray = new #{oa.uml_type_one.java_qualifiedName}[1];
|
|
477
|
+
\t\t\tnewArray[0] = #{getterParameterName(oa)};
|
|
478
|
+
\t\t} else {
|
|
479
|
+
\t\t\tnewArray = new #{oa.uml_type_one.java_qualifiedName}[1+#{java_this(oa)}#{oa.java_NameProperty}.length];
|
|
480
|
+
\t\t\tSystem.arraycopy(#{java_this(oa)}#{oa.java_NameProperty}, 0, newArray,0, #{java_this(oa)}#{oa.java_NameProperty}.length);
|
|
481
|
+
\t\t\tnewArray[#{java_this(oa)}#{oa.java_NameProperty}.length] = #{getterParameterName(oa)};
|
|
482
|
+
\t\t}
|
|
483
|
+
\t\t#{java_this(oa)}#{oa.java_NameProperty} = newArray;
|
|
359
484
|
END
|
|
360
485
|
|
|
361
486
|
|
|
362
487
|
elsif oe.umlx_upperValueIsOne?
|
|
363
488
|
#*-1
|
|
364
489
|
add.java_code=<<END
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
}
|
|
490
|
+
\t\tif (xmda.crud.Helper.genericAddIgnoreNull(#{java_this(oa)}#{oa.java_NameProperty},#{getterParameterName(oa)} )) {
|
|
491
|
+
\t\t\t#{getterParameterName(oa)}.set#{oe.java_NameBean}(this);
|
|
492
|
+
\t\t}
|
|
369
493
|
END
|
|
494
|
+
|
|
495
|
+
# add.java_code= <<END
|
|
496
|
+
#\t\tif (#{getterParameterName(oa)} == null) {
|
|
497
|
+
#\t\t\treturn;
|
|
498
|
+
#\t\t}
|
|
499
|
+
#\t\tif (#{java_this(oa)}#{oa.java_NameProperty}.add(#{getterParameterName(oa)})){
|
|
500
|
+
#\t\t\t#{getterParameterName(oa)}.set#{oe.java_NameBean}(this);
|
|
501
|
+
#\t\t}
|
|
502
|
+
#END
|
|
370
503
|
else
|
|
371
504
|
#*-*
|
|
372
505
|
# second test avoids loop
|
|
373
506
|
add.java_code=<<END
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
507
|
+
\t\tif (#{getterParameterName(oa)} == null) {
|
|
508
|
+
\t\t\treturn;
|
|
509
|
+
\t\t}
|
|
510
|
+
\t\tif (#{java_this(oa)}#{oa.java_NameProperty}.add(#{getterParameterName(oa)})) {
|
|
511
|
+
\t\t\t#{getterParameterName(oa)}.add#{oe.java_NameBean}(this);
|
|
512
|
+
\t\t}
|
|
378
513
|
END
|
|
379
514
|
end
|
|
380
515
|
|
|
@@ -400,13 +535,22 @@ END
|
|
|
400
535
|
# * #java_writeEnumStringMappingGetterCode
|
|
401
536
|
# * #java_getCollectionMapping
|
|
402
537
|
def java_writeGlobalGetterBody(oa)
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
538
|
+
if oa.uml_isDerived? && oa.umlx_stringMappingForEnum.empty?
|
|
539
|
+
# provide an implementation because a getter
|
|
540
|
+
# should never throw an exception.
|
|
541
|
+
write ("\t\t//TODO: implement this derived attribute\n")
|
|
542
|
+
if oa.umlx_oneSide?
|
|
543
|
+
v=DatatypeMapping.instance.getMapping(oa.uml_type_one)
|
|
544
|
+
write ("\t\treturn #{v.java_getUndefinedValue};");
|
|
545
|
+
else
|
|
546
|
+
cm=oa.java_getCollectionMapping
|
|
547
|
+
write ("\t\treturn #{cm.addNew(oa.uml_type_one.java_qualifiedName)};");
|
|
548
|
+
end
|
|
549
|
+
elsif java_isEnumStringMapping?(oa)
|
|
406
550
|
java_writeEnumStringMappingGetterCode(oa)
|
|
407
551
|
|
|
408
552
|
elsif oa.umlx_upperValueIsOne? || !oa.uml_qualifier.empty?
|
|
409
|
-
j="
|
|
553
|
+
j="\t\treturn #{oa.java_NameProperty}"
|
|
410
554
|
sep_next=".get("
|
|
411
555
|
sep_end=""
|
|
412
556
|
#oa.uml_qualifier.each { |key|
|
|
@@ -416,14 +560,20 @@ END
|
|
|
416
560
|
#}
|
|
417
561
|
j=j+sep_end +";"
|
|
418
562
|
write j
|
|
419
|
-
|
|
563
|
+
elsif ! oa.java_use_Arrays?
|
|
420
564
|
#on ne peut pas permettre la modification de la liste en direct
|
|
421
565
|
write %{
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
566
|
+
return xmda.crud.Helper.emptyNewCollectionIfNull(#{oa.java_NameProperty});
|
|
567
|
+
}
|
|
568
|
+
else
|
|
569
|
+
# code same as above bu could not get it to work with generic Array
|
|
570
|
+
write %{
|
|
571
|
+
if(#{oa.java_NameProperty}!=null){
|
|
572
|
+
return #{oa.java_NameProperty};
|
|
573
|
+
} else {
|
|
574
|
+
return #{oa.java_getCollectionMapping.addNew(oa.uml_type_one.java_qualifiedName)};
|
|
575
|
+
}}
|
|
576
|
+
|
|
427
577
|
end
|
|
428
578
|
end
|
|
429
579
|
|
|
@@ -449,7 +599,7 @@ if(#{oa.java_NameProperty}!=null){
|
|
|
449
599
|
# other end is non navigable.
|
|
450
600
|
#begin
|
|
451
601
|
#if oa.uml_qualifier.empty?
|
|
452
|
-
write "#{java_this(oa)}#{oa.java_NameProperty}
|
|
602
|
+
write "\t\t#{java_this(oa)}#{oa.java_NameProperty} = #{getterParameterName(oa)};"
|
|
453
603
|
#else
|
|
454
604
|
# j="{ #{oa.java_NameProperty}.put("
|
|
455
605
|
# sep=""
|
|
@@ -478,19 +628,25 @@ END
|
|
|
478
628
|
elsif oa.umlx_upperValueIsOne? && (!oe.umlx_upperValueIsOne?)
|
|
479
629
|
# 1<->*
|
|
480
630
|
write <<END
|
|
481
|
-
if(#{oa.java_NameProperty}!=null && #{oa.java_NameProperty}.equals(#{getterParameterName(oa)})) {
|
|
482
|
-
|
|
631
|
+
if (#{oa.java_NameProperty} != null && #{oa.java_NameProperty}.equals(#{getterParameterName(oa)})) {
|
|
632
|
+
return;
|
|
633
|
+
}
|
|
634
|
+
#{oa.uml_type_one.java_qualifiedName} previous = #{oa.java_NameProperty};
|
|
483
635
|
|
|
484
|
-
#{oa.java_NameProperty}=null;
|
|
485
|
-
if(previous!=null) {
|
|
636
|
+
#{oa.java_NameProperty} = null;
|
|
637
|
+
if (previous != null) {
|
|
638
|
+
previous.remove#{oe.java_NameBean}(this);
|
|
639
|
+
}
|
|
486
640
|
|
|
487
|
-
#{java_this(oa)}#{oa.java_NameProperty}
|
|
488
|
-
if(#{getterParameterName(oa)}!=null) {
|
|
641
|
+
#{java_this(oa)}#{oa.java_NameProperty} = #{getterParameterName(oa)};
|
|
642
|
+
if (#{getterParameterName(oa)} != null) {
|
|
643
|
+
#{getterParameterName(oa)}.add#{oe.java_NameBean}(this);
|
|
644
|
+
}
|
|
489
645
|
END
|
|
490
646
|
else # *<->1 and *<->*
|
|
491
647
|
write <<END
|
|
492
648
|
#{oa.java_propertyAssociationType} toBeRemoved=new #{oa.java_propertyAssociationConcreteType}();
|
|
493
|
-
for(#{oa.uml_type_one.java_qualifiedName} item
|
|
649
|
+
for(#{oa.uml_type_one.java_qualifiedName} item:this.#{oa.java_NameProperty}) {
|
|
494
650
|
if(#{getterParameterName(oa)}!=null && #{getterParameterName(oa)}.contains(item)) { continue;}
|
|
495
651
|
toBeRemoved.add(item);
|
|
496
652
|
}
|
|
@@ -516,7 +672,7 @@ END
|
|
|
516
672
|
# * #java_writeEnumStringMappingSetterCode
|
|
517
673
|
# * #java_getCollectionMapping
|
|
518
674
|
def java_writeQualifiedGetterBody(oa)
|
|
519
|
-
write("
|
|
675
|
+
write("\t\treturn #{oa.java_NameProperty}.get(")
|
|
520
676
|
sep=""
|
|
521
677
|
oa.uml_qualifier.each { |key|
|
|
522
678
|
write(sep)
|