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
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
module Mrdf_Repository
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
def jpa_generateSpringConfigDerby
|
|
5
|
+
|
|
6
|
+
mtk_writeSession("#{context[:webResourcesDir]}/contextConfigDerby.properties") {
|
|
7
|
+
write <<END
|
|
8
|
+
|
|
9
|
+
#This file will hold environnement properties that are needed in the application.
|
|
10
|
+
|
|
11
|
+
jpa.dialect=org.springframework.orm.jpa.vendor.HibernateJpaDialect
|
|
12
|
+
persistence.unit.name=persistence-unit-test
|
|
13
|
+
database.platform=org.hibernate.dialect.DerbyDialect
|
|
14
|
+
driverClassName=org.apache.derby.jdbc.EmbeddedDriver
|
|
15
|
+
url=jdbc:derby:#{context[:dbSchemaName,'testschema-derby']};create=true
|
|
16
|
+
username=root
|
|
17
|
+
password=root
|
|
18
|
+
END
|
|
19
|
+
}
|
|
20
|
+
end
|
|
21
|
+
|
|
3
22
|
#Generates persistence configuration file
|
|
4
23
|
def db_generateConfiguration
|
|
5
24
|
jpa_generateConfiguration
|
|
@@ -8,8 +27,9 @@ module Mrdf_Repository
|
|
|
8
27
|
#Generates hibernate configuration file
|
|
9
28
|
def jpa_generateConfiguration
|
|
10
29
|
if context[:struts_useSpring]
|
|
11
|
-
mtk_writeSession("#{context[:jpaConfigDir
|
|
30
|
+
mtk_writeSession("#{context[:jpaConfigDir]}/META-INF/persistence.xml") {
|
|
12
31
|
jpa_writeConfigurationForSpring
|
|
32
|
+
jpa_generateSpringConfigDerby
|
|
13
33
|
}
|
|
14
34
|
else
|
|
15
35
|
# empty
|
|
@@ -148,8 +168,12 @@ module Mrdf_Repository
|
|
|
148
168
|
#writes jpa configuration list of persistent class
|
|
149
169
|
def jpa_writeConfigurationPersistentClasses
|
|
150
170
|
write %{<!-- begin Persistent classes declaration -->\n}
|
|
171
|
+
s=Set.new
|
|
151
172
|
uml_Class_all.each {|c|
|
|
152
173
|
next unless c.kind_of?(Muml_Class) && c.umlx_isReallyAClass?
|
|
174
|
+
s.add(c)
|
|
175
|
+
}
|
|
176
|
+
s.sort { |a,b| a.java_qualifiedName.to_s <=>b.java_qualifiedName.to_s }.each { |c|
|
|
153
177
|
c.jpa_writeConfiguration
|
|
154
178
|
}
|
|
155
179
|
#TODO: remove hack
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
module Muml_Class
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
JPA_PAGINATION_QUERY=<<END
|
|
5
|
+
if(pageSize>0) {
|
|
6
|
+
q.setFirstResult(pageNumber*pageSize);
|
|
7
|
+
q.setMaxResults(pageSize);
|
|
8
|
+
}
|
|
9
|
+
END
|
|
10
|
+
|
|
2
11
|
#adds a finder to eao
|
|
3
12
|
#self is supposed to be the bean and eao the "dao".
|
|
4
13
|
def jpa_addFindAll!(eao)
|
|
14
|
+
[false,true].each { |paginated|
|
|
5
15
|
# java_NameBean is added to avoid name clash with inheritance
|
|
6
|
-
m=eao.umlx_createAndAddOperation(rdf_uri+"_findAll","findAll")#+self.java_NameBean)
|
|
16
|
+
m=eao.umlx_createAndAddOperation(rdf_uri+"_findAll"+(paginated ? '_pag':''),"findAll")#+self.java_NameBean)
|
|
7
17
|
m.uml_isStatic=RDF_TRUE
|
|
8
18
|
#m.uml_class=self
|
|
9
19
|
m.uml_visibility=Cuml_VisibilityKind::Public
|
|
@@ -24,25 +34,25 @@ module Muml_Class
|
|
|
24
34
|
|
|
25
35
|
#m.java_code="return (#{self.java_qualifiedName})entityManager.find( #{self.java_qualifiedName}.class, #{ip.uml_name});"
|
|
26
36
|
|
|
37
|
+
if !context[:crank]
|
|
27
38
|
basicQuery=<<END
|
|
28
|
-
|
|
29
|
-
|
|
39
|
+
javax.persistence.Query q=getEntityManager().createQuery( "select Object(c) from #{java_Name} as c");
|
|
40
|
+
#{JPA_PAGINATION_QUERY if paginated}
|
|
41
|
+
return (java.util.List<#{self.java_qualifiedName}>) q.getResultList();
|
|
30
42
|
END
|
|
31
|
-
|
|
32
|
-
|
|
33
43
|
if !context[:multiTenant]
|
|
34
44
|
m.java_code=basicQuery
|
|
35
45
|
else
|
|
36
|
-
|
|
37
46
|
ip=m.umlx_createAndAddParameter(m.rdf_uri+"_tenant","tenant")
|
|
38
47
|
ip.uml_type=rdf_Repository.java_getTenantClass
|
|
39
48
|
ip.umlx_createAndAddComment(ip.rdf_uri+"comment","Restrict query to this tenant")
|
|
40
49
|
|
|
41
50
|
m.java_code=<<END
|
|
42
51
|
if(#{ip.java_Name}!=null) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
52
|
+
javax.persistence.Query q=getEntityManager().createQuery( "select Object(c) from #{java_Name} as c where c.#{TENANT_FIELD_NAME}= :tenantQP");
|
|
53
|
+
q.setParameter("tenantQP",#{ip.java_Name});
|
|
54
|
+
#{JPA_PAGINATION_QUERY if paginated}
|
|
55
|
+
return (java.util.List<#{self.java_qualifiedName}>) q.getResultList();
|
|
46
56
|
} else {
|
|
47
57
|
//TODO: disable in production code
|
|
48
58
|
System.out.println("DEBUG MODE");
|
|
@@ -50,10 +60,22 @@ if(#{ip.java_Name}!=null) {
|
|
|
50
60
|
}
|
|
51
61
|
|
|
52
62
|
END
|
|
53
|
-
|
|
63
|
+
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
else
|
|
67
|
+
paginatedParams=""
|
|
68
|
+
if paginated
|
|
69
|
+
paginatedParams="pageNumber * pageSize, pageSize"
|
|
70
|
+
end
|
|
71
|
+
basicQuery=<<END
|
|
72
|
+
return get#{self.java_Name}DAO().find(#{paginatedParams});
|
|
73
|
+
END
|
|
74
|
+
m.java_code=basicQuery
|
|
54
75
|
end
|
|
55
76
|
|
|
56
77
|
|
|
78
|
+
|
|
57
79
|
m.java_annotation_add(%{@SuppressWarnings("unchecked")})
|
|
58
80
|
|
|
59
81
|
# because A<-B is not Set<A> <- Set<B>
|
|
@@ -65,8 +87,17 @@ END
|
|
|
65
87
|
t=m.umlx_createAndAddParameter(m.rdf_uri+"_class","nullCast")
|
|
66
88
|
t.uml_type=self
|
|
67
89
|
end
|
|
68
|
-
|
|
69
|
-
|
|
90
|
+
|
|
91
|
+
if paginated
|
|
92
|
+
pageN=m.umlx_createAndAddParameter(m.rdf_uri+"_pageN","pageNumber")
|
|
93
|
+
pageN.uml_type=umlx_dataType_integer
|
|
94
|
+
|
|
95
|
+
pageS=m.umlx_createAndAddParameter(m.rdf_uri+"_pageS","pageSize")
|
|
96
|
+
pageS.uml_type=umlx_dataType_integer
|
|
97
|
+
pageS.umlx_createAndAddComment(pageS.rdf_uri+"comment","use -1 to retreive all results ")
|
|
98
|
+
end
|
|
99
|
+
}
|
|
100
|
+
return nil # m
|
|
70
101
|
end
|
|
71
102
|
def jpa_addFindByPrimaryKey!(eao)
|
|
72
103
|
m=eao.umlx_createAndAddOperation(rdf_uri+"_finderop","find")
|
|
@@ -95,7 +126,11 @@ END
|
|
|
95
126
|
rp.uml_type=self
|
|
96
127
|
#rp.uml_isOrdered=RDF_FALSE
|
|
97
128
|
|
|
98
|
-
|
|
129
|
+
if !context[:crank]
|
|
130
|
+
m.java_code="\t\treturn (#{self.java_qualifiedName})getEntityManager().find( #{self.java_qualifiedName}.class, #{ip.uml_name});"
|
|
131
|
+
else
|
|
132
|
+
m.java_code="\t\treturn get#{self.java_Name}DAO().read(#{ip.uml_name});"
|
|
133
|
+
end
|
|
99
134
|
|
|
100
135
|
return m
|
|
101
136
|
end
|
data/lib/ontomde-java/jpa/jpa.rb
CHANGED
|
@@ -12,7 +12,8 @@ module DB
|
|
|
12
12
|
EntityManager="javax.persistence.EntityManager"
|
|
13
13
|
EntityManagerFactory="javax.persistence.EntityManagerFactory"
|
|
14
14
|
EntityGenericInterface="xmda.jpa.XmdaEntity"
|
|
15
|
-
EntityInterface="#{EntityGenericInterface}<Long>"
|
|
15
|
+
# EntityInterface="#{EntityGenericInterface}<Long>"
|
|
16
|
+
EntityGenericParameter="Long"
|
|
16
17
|
end
|
|
17
18
|
|
|
18
19
|
|
|
@@ -118,17 +119,15 @@ module DAO
|
|
|
118
119
|
return if db_isDAO?
|
|
119
120
|
return if java_ignoreMe?
|
|
120
121
|
|
|
122
|
+
|
|
121
123
|
if !context[:db_autonomousDAO,false]
|
|
122
124
|
self.java_DAOClass=self
|
|
123
125
|
self.java_persistentClass=self
|
|
124
126
|
else
|
|
125
|
-
|
|
126
|
-
|
|
127
|
+
|
|
128
|
+
log.debug { "adding dao for #{self}" }
|
|
127
129
|
p=umlx_package
|
|
128
130
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
131
|
#p=self
|
|
133
132
|
p=p.umlx_getOrCreatePackage(context[:dbDAOsubPackage,"dao"],p)
|
|
134
133
|
c=p.umlx_createAndAddClass(rdf_uri+"_dao")
|
|
@@ -141,7 +140,7 @@ module DAO
|
|
|
141
140
|
#log.debug { "DAO added: #{c.uml_name} in #{c.umlx_package.uml_name}"}
|
|
142
141
|
java_DAOClass_one.jpa_addEntityManager!()
|
|
143
142
|
java_DAOClass_one.jpa_addStdImports!
|
|
144
|
-
|
|
143
|
+
# jpa_addGetDao!()
|
|
145
144
|
end
|
|
146
145
|
jpa_addPersist!
|
|
147
146
|
jpa_addMerge!
|
|
@@ -218,13 +217,21 @@ END
|
|
|
218
217
|
def db_disc(k,v)
|
|
219
218
|
::Muml_Class::DB_DISCRIMINATOR[::Muml_Class::DB_URI_ALIAS[k]]=v
|
|
220
219
|
end
|
|
220
|
+
END
|
|
221
|
+
|
|
222
|
+
[false,true].each { |exists|
|
|
223
|
+
write(!exists ? "# Saved Element From History\n" : "# Current elements\n")
|
|
224
|
+
|
|
225
|
+
write <<END
|
|
221
226
|
::Muml_Class::DB_URI_ALIAS.merge!({
|
|
222
227
|
END
|
|
223
228
|
::Muml_Class::DB_DISCRIMINATOR.sort{|a,b| a[0]<=>b[0]}.each { |k|
|
|
224
229
|
n=db_findNameUsingDB_URI_ALIAS(k[0])
|
|
225
|
-
write(" %{#{n}} => %{#{k[0]}} ,\n")
|
|
230
|
+
write(" %{#{n}} => %{#{k[0]}} ,\n") if self[k[0]].nil?!=exists
|
|
226
231
|
}
|
|
227
232
|
write("})\n")
|
|
233
|
+
}
|
|
234
|
+
|
|
228
235
|
write <<END
|
|
229
236
|
declarePredefinedDiscrimators();
|
|
230
237
|
#free ressources
|
|
@@ -266,6 +273,7 @@ module Muml_Class
|
|
|
266
273
|
ret.uml_upperValue=umlx_literal(1)
|
|
267
274
|
ret.uml_lowerValue=umlx_literal(0)
|
|
268
275
|
ret.uml_type=umlx_getOrCreateClass(DB::EntityManager)
|
|
276
|
+
|
|
269
277
|
gem.java_code="return #{DB_Context}.getEntityManager();"
|
|
270
278
|
|
|
271
279
|
end
|
|
@@ -362,12 +370,14 @@ END
|
|
|
362
370
|
|
|
363
371
|
DB_URI_ALIAS=Hash.new
|
|
364
372
|
DB_DISCRIMINATOR=Hash.new
|
|
373
|
+
|
|
374
|
+
def doOnJPAAddPersistence!
|
|
375
|
+
|
|
376
|
+
end
|
|
365
377
|
def jpa_addPersistence!
|
|
366
|
-
#jpa_addDAO!
|
|
367
|
-
|
|
378
|
+
#jpa_addDAO!
|
|
368
379
|
#Ajout l'interface XmdaEntity
|
|
369
|
-
ent=
|
|
370
|
-
ent.java_isGeneric=RDF_TRUE
|
|
380
|
+
ent=umlx_getOrCreateGeneric(DB::EntityGenericInterface,DB::EntityGenericParameter)
|
|
371
381
|
umlx_createAndAddImplementation(ent)
|
|
372
382
|
|
|
373
383
|
jpa_addEntityManager! # required for query, persist,...
|
|
@@ -401,6 +411,8 @@ END
|
|
|
401
411
|
java_import_add("javax.persistence.DiscriminatorValue")
|
|
402
412
|
end
|
|
403
413
|
jpa_addStdImports!
|
|
414
|
+
|
|
415
|
+
doOnJPAAddPersistence!()
|
|
404
416
|
end
|
|
405
417
|
|
|
406
418
|
def jpa_addStdImports!
|
|
@@ -451,7 +463,11 @@ module Muml_Classifier
|
|
|
451
463
|
return unless self.umlx_hasStereotype?('DTO')
|
|
452
464
|
|
|
453
465
|
puts "DTO Found : #{java_Name}"
|
|
454
|
-
|
|
466
|
+
|
|
467
|
+
self.java_import_add("java.io.Serializable")
|
|
468
|
+
io=umlx_getOrCreateClass("java.io.Serializable")
|
|
469
|
+
self.umlx_createAndAddImplementation(io)
|
|
470
|
+
|
|
455
471
|
# Add a method to<UML_Name> to the main class linked to the DTO by a dependency
|
|
456
472
|
self.uml_clientDependency.each{|dep|
|
|
457
473
|
next unless dep.kind_of?(Cuml_Dependency)
|
|
@@ -493,7 +509,7 @@ CODE
|
|
|
493
509
|
#TODO Surcharge le getter : A enlever une fois avoir corrig� incompatibilit� avec couche Struts
|
|
494
510
|
gettter = p.java_AttributeGlobalGetter
|
|
495
511
|
#removed ? : operator to make checkstyle happy.
|
|
496
|
-
gettter[0].java_code = %{
|
|
512
|
+
gettter[0].java_code = %{\t\treturn xmda.crud.Helper.longObjZeroForNull (#{p.java_Name});}
|
|
497
513
|
|
|
498
514
|
stereo = umlx_package.umlx_createAndAddStereotype(rdf_uri+"Equals", "EqualsValue")
|
|
499
515
|
p.uml_appliedStereotype = stereo
|
|
@@ -1,6 +1,26 @@
|
|
|
1
1
|
#
|
|
2
2
|
#
|
|
3
|
+
module Muml_NamedElement
|
|
4
|
+
# jpa/hibernates breaks at runtime if a name
|
|
5
|
+
# begining with an underscore (_) is encountered.
|
|
6
|
+
# We prepend jpa when a name starts with underscore.
|
|
7
|
+
def jpa_Name
|
|
8
|
+
n=java_Name.to_s.upcase
|
|
9
|
+
ret=n[0,1]=='_' ? 'JPA'+n : n
|
|
10
|
+
return ret
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
#add name annotation when name
|
|
14
|
+
#is different from default.
|
|
15
|
+
def jpa_addNameAnnotation
|
|
16
|
+
d=jpa_Name.to_s.upcase
|
|
17
|
+
j=java_Name.to_s.upcase
|
|
18
|
+
return d==j ? nil : %{ name = "#{d}"}
|
|
19
|
+
end
|
|
3
20
|
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
end
|
|
4
24
|
module Muml_Operation
|
|
5
25
|
#true puts annotation on getter
|
|
6
26
|
#false puts annotation on attribute
|
|
@@ -11,8 +31,8 @@ module Muml_Operation
|
|
|
11
31
|
# java_AttributeGlobalSetter
|
|
12
32
|
# java_getter_property
|
|
13
33
|
if java_getter_property.empty?
|
|
14
|
-
return if(umlx_hasStereotype?(
|
|
15
|
-
#java_annotation_add(
|
|
34
|
+
return if(umlx_hasStereotype?('Create'))
|
|
35
|
+
#java_annotation_add('@Transient')
|
|
16
36
|
return
|
|
17
37
|
end
|
|
18
38
|
|
|
@@ -20,7 +40,7 @@ module Muml_Operation
|
|
|
20
40
|
return unless p.jpa_isPersistent?
|
|
21
41
|
|
|
22
42
|
if p.uml_type_one.kind_of?(Cuml_Class) && !p.uml_type_one.jpa_isPersistent?
|
|
23
|
-
p.java_annotation_add(
|
|
43
|
+
p.java_annotation_add('/* not persistent */')
|
|
24
44
|
return
|
|
25
45
|
end
|
|
26
46
|
|
|
@@ -28,7 +48,7 @@ module Muml_Operation
|
|
|
28
48
|
p.jpa_addPersistenceTo!(self)
|
|
29
49
|
# HACK
|
|
30
50
|
p.jpa_addPersistenceTo!(p) #TODO: remove
|
|
31
|
-
#p.java_annotation_add(
|
|
51
|
+
#p.java_annotation_add('@Transient')
|
|
32
52
|
else
|
|
33
53
|
p.jpa_addPersistenceTo!(p)
|
|
34
54
|
end
|
|
@@ -39,8 +59,14 @@ module Muml_Property
|
|
|
39
59
|
def jpa_isPersistent?
|
|
40
60
|
return true
|
|
41
61
|
end
|
|
62
|
+
|
|
63
|
+
def jpa_addFetchType(ah)
|
|
64
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.FetchType')
|
|
65
|
+
return "fetch=FetchType.LAZY"
|
|
66
|
+
end
|
|
67
|
+
|
|
42
68
|
def jpa_addRelationCascadeType(isIncludeType=true)
|
|
43
|
-
umlx_owner_one.java_import_add(
|
|
69
|
+
umlx_owner_one.java_import_add('javax.persistence.CascadeType')
|
|
44
70
|
if (isIncludeType)
|
|
45
71
|
return DEFAULT_CASCADE_I
|
|
46
72
|
else
|
|
@@ -49,78 +75,77 @@ module Muml_Property
|
|
|
49
75
|
end
|
|
50
76
|
def jpa_addPersistenceUnidirOneToOne!(ah)
|
|
51
77
|
#TODO: unicity constraint
|
|
52
|
-
ah.java_annotation_add("@OneToOne(cascade=CascadeType.ALL)")
|
|
53
|
-
ah.umlx_owner_one.java_import_add(
|
|
54
|
-
ah.umlx_owner_one.java_import_add(
|
|
78
|
+
ah.java_annotation_add("@OneToOne(#{jpa_addFetchType(ah)}, cascade=CascadeType.ALL)")
|
|
79
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.OneToOne')
|
|
80
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.CascadeType')
|
|
55
81
|
#TODO: affiner cascadeType pour les delete
|
|
56
82
|
end
|
|
57
83
|
|
|
58
84
|
def jpa_addPersistenceUnidirOneToMany!(ah)
|
|
59
|
-
ah.java_annotation_add(%{@OneToMany(
|
|
60
|
-
ah.umlx_owner_one.java_import_add(
|
|
61
|
-
ah.umlx_owner_one.java_import_add("javax.persistence.FetchType")
|
|
85
|
+
ah.java_annotation_add(%{@OneToMany(#{jpa_addFetchType(ah)} #{jpa_addRelationCascadeType(true)})})
|
|
86
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.OneToMany')
|
|
62
87
|
jpa_addJoinTable(ah)
|
|
63
88
|
end
|
|
64
|
-
DEFAULT_CASCADE=
|
|
65
|
-
DEFAULT_CASCADE_I=
|
|
89
|
+
DEFAULT_CASCADE='(cascade=CascadeType.ALL)'
|
|
90
|
+
DEFAULT_CASCADE_I=',cascade=CascadeType.ALL'
|
|
66
91
|
def jpa_addPersistenceUnidirManyToOne!(ah)
|
|
67
|
-
ah.java_annotation_add("@ManyToOne #{jpa_addRelationCascadeType(
|
|
68
|
-
ah.umlx_owner_one.java_import_add(
|
|
92
|
+
ah.java_annotation_add("@ManyToOne(#{jpa_addFetchType(ah)} #{jpa_addRelationCascadeType(true)}) ")
|
|
93
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.ManyToOne')
|
|
69
94
|
jpa_addJoinColumn!(ah)
|
|
70
95
|
end
|
|
71
96
|
|
|
72
97
|
def jpa_addPersistenceUnidirManyToMany!(ah)
|
|
73
|
-
ah.java_annotation_add("@ManyToMany #{jpa_addRelationCascadeType(
|
|
74
|
-
ah.umlx_owner_one.java_import_add(
|
|
98
|
+
ah.java_annotation_add("@ManyToMany (#{jpa_addFetchType(ah)} #{jpa_addRelationCascadeType(true)})")
|
|
99
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.ManyToMany')
|
|
75
100
|
jpa_addJoinTable(ah)
|
|
76
101
|
jpa_addJoinColumn!(ah)
|
|
77
102
|
end
|
|
78
103
|
def jpa_addPersistenceBidirManyToManyMaster!(ah)
|
|
79
|
-
ah.java_annotation_add("@ManyToMany #{jpa_addRelationCascadeType(
|
|
80
|
-
ah.umlx_owner_one.java_import_add(
|
|
81
|
-
jpa_addJoinColumn!(ah)
|
|
104
|
+
ah.java_annotation_add("@ManyToMany (#{jpa_addFetchType(ah)} #{jpa_addRelationCascadeType(true)})")
|
|
105
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.ManyToMany')
|
|
106
|
+
#jpa_addJoinColumn!(ah)
|
|
82
107
|
jpa_addJoinTable(ah)
|
|
83
108
|
end
|
|
84
109
|
def jpa_addPersistenceBidirManyToManySlave!(ah)
|
|
85
|
-
ah.java_annotation_add("@ManyToMany #{jpa_addRelationCascadeType(
|
|
86
|
-
ah.umlx_owner_one.java_import_add(
|
|
87
|
-
jpa_addJoinColumn!(ah)
|
|
110
|
+
ah.java_annotation_add("@ManyToMany (#{jpa_addFetchType(ah)} #{jpa_addRelationCascadeType(true)}, mappedBy=\"#{umlx_otherEnd.java_NameProperty}\")")
|
|
111
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.ManyToMany')
|
|
112
|
+
#jpa_addJoinColumn!(ah)
|
|
88
113
|
#Do not add join column !
|
|
89
114
|
#(or you will get 2 join tables)
|
|
90
115
|
#jpa_addJoinTable(ah)
|
|
91
116
|
end
|
|
92
117
|
|
|
93
118
|
def jpa_addPersistenceBidirOneToOneMaster!(ah)
|
|
94
|
-
ah.java_annotation_add(
|
|
95
|
-
ah.umlx_owner_one.java_import_add(
|
|
119
|
+
ah.java_annotation_add("@OneToOne (#{jpa_addFetchType(ah)} #{jpa_addRelationCascadeType(true)})")
|
|
120
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.OneToOne')
|
|
96
121
|
jpa_addJoinColumn!(ah)
|
|
97
122
|
end
|
|
98
123
|
def jpa_addPersistenceBidirOneToOneSlave!(ah)
|
|
99
|
-
ah.java_annotation_add(%{@OneToOne(mappedBy="#{umlx_otherEnd.java_NameProperty}" #{jpa_addRelationCascadeType})})
|
|
100
|
-
ah.umlx_owner_one.java_import_add(
|
|
124
|
+
ah.java_annotation_add(%{@OneToOne(#{jpa_addFetchType(ah)}, mappedBy="#{umlx_otherEnd.java_NameProperty}" #{jpa_addRelationCascadeType})})
|
|
125
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.OneToOne')
|
|
101
126
|
end
|
|
102
127
|
|
|
103
128
|
def jpa_addPersistenceBidirOneToManyMaster!(ah)
|
|
104
|
-
ah.java_annotation_add(%{@OneToMany (mappedBy="#{umlx_otherEnd.java_NameProperty}"#{jpa_addRelationCascadeType})})
|
|
105
|
-
ah.umlx_owner_one.java_import_add(
|
|
129
|
+
ah.java_annotation_add(%{@OneToMany (#{jpa_addFetchType(ah)}, mappedBy="#{umlx_otherEnd.java_NameProperty}"#{jpa_addRelationCascadeType})})
|
|
130
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.OneToMany')
|
|
106
131
|
end
|
|
107
132
|
def jpa_addPersistenceBidirOneToManySlave!(ah)
|
|
108
|
-
ah.java_annotation_add(%{@OneToMany (mappedBy="#{umlx_otherEnd.java_NameProperty}"#{jpa_addRelationCascadeType})})
|
|
109
|
-
ah.umlx_owner_one.java_import_add(
|
|
133
|
+
ah.java_annotation_add(%{@OneToMany (#{jpa_addFetchType(ah)}, mappedBy="#{umlx_otherEnd.java_NameProperty}"#{jpa_addRelationCascadeType})})
|
|
134
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.OneToMany')
|
|
110
135
|
#jpa_addJoinColumn!(ah)
|
|
111
136
|
end
|
|
112
137
|
|
|
113
138
|
def jpa_addPersistenceBidirManyToOneMaster!(ah)
|
|
114
139
|
#ah.java_annotation_add(%{@ManyToOne(mappedBy="#{umlx_otherEnd.java_NameProperty}")})
|
|
115
|
-
ah.java_annotation_add(%{@ManyToOne #{jpa_addRelationCascadeType(
|
|
116
|
-
ah.umlx_owner_one.java_import_add(
|
|
140
|
+
ah.java_annotation_add(%{@ManyToOne (#{jpa_addFetchType(ah)} #{jpa_addRelationCascadeType(true)})})
|
|
141
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.ManyToOne')
|
|
117
142
|
#ah.java_annotation_add(%{@JoinColumn(name="#{java_NameProperty}_fk"})
|
|
118
143
|
jpa_addJoinColumn!(ah)
|
|
119
144
|
end
|
|
120
145
|
def jpa_addPersistenceBidirManyToOneSlave!(ah)
|
|
121
146
|
#ah.java_annotation_add(%{@ManyToOne(mappedBy="#{umlx_otherEnd.java_NameProperty}")})
|
|
122
|
-
ah.java_annotation_add(%{@ManyToOne #{jpa_addRelationCascadeType(
|
|
123
|
-
ah.umlx_owner_one.java_import_add(
|
|
147
|
+
ah.java_annotation_add(%{@ManyToOne (#{jpa_addFetchType(ah)} #{jpa_addRelationCascadeType(true)})})
|
|
148
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.ManyToOne')
|
|
124
149
|
#ah.java_annotation_add(%{@JoinColumn(name="#{java_NameProperty}_fk"})
|
|
125
150
|
jpa_addJoinColumn!(ah)
|
|
126
151
|
end
|
|
@@ -142,14 +167,14 @@ module Muml_Property
|
|
|
142
167
|
# field : A_self_id
|
|
143
168
|
#
|
|
144
169
|
def jpa_addJoinTable(ah)
|
|
145
|
-
postfix=(uml_ownedAttribute_inv_one==uml_type_one) ?
|
|
170
|
+
postfix=(uml_ownedAttribute_inv_one==uml_type_one) ? '_self' : ''
|
|
146
171
|
ah.java_annotation_add %{ @JoinTable(
|
|
147
|
-
name="#{uml_ownedAttribute_inv_one.
|
|
148
|
-
joinColumns={@JoinColumn(
|
|
149
|
-
inverseJoinColumns={@JoinColumn(name="#{uml_type_one.
|
|
172
|
+
name = "#{uml_ownedAttribute_inv_one.jpa_Name}_#{java_NameProperty}",
|
|
173
|
+
joinColumns={@JoinColumn(name = "#{uml_ownedAttribute_inv_one.jpa_Name}_id")},
|
|
174
|
+
inverseJoinColumns={@JoinColumn(name = "#{uml_type_one.jpa_Name}#{postfix}_id")}
|
|
150
175
|
)}
|
|
151
|
-
ah.umlx_owner_one.java_import_add(
|
|
152
|
-
ah.umlx_owner_one.java_import_add(
|
|
176
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.JoinTable')
|
|
177
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.JoinColumn')
|
|
153
178
|
end
|
|
154
179
|
|
|
155
180
|
# adds JPA annotation for an attribute with a cardinality 0..1 or 1
|
|
@@ -157,22 +182,28 @@ module Muml_Property
|
|
|
157
182
|
ml=DatatypeMapping.instance.getMapping(self.uml_type_one).maxStringLength
|
|
158
183
|
if ml.nil?
|
|
159
184
|
ah.java_annotation_add(%{@Basic})
|
|
160
|
-
ah.umlx_owner_one.java_import_add(
|
|
185
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.Basic')
|
|
161
186
|
else
|
|
162
187
|
ah.java_annotation_add(%{@Column(length=#{ml})})
|
|
163
|
-
ah.umlx_owner_one.java_import_add(
|
|
188
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.Column')
|
|
164
189
|
end
|
|
165
190
|
end
|
|
166
191
|
|
|
167
192
|
# adds JPA annotation for an attribute with a cardinality *
|
|
168
193
|
def jpa_addPersistenceManyAttribute!(ah)
|
|
169
|
-
|
|
170
|
-
|
|
194
|
+
if true
|
|
195
|
+
#use hibernate extensions
|
|
196
|
+
ah.java_annotation_add(%{@CollectionOfElements})
|
|
197
|
+
ah.umlx_owner_one.java_import_add('org.hibernate.annotations.CollectionOfElements')
|
|
198
|
+
else
|
|
199
|
+
ah.java_annotation_add(%{@Transient //TODO: standard JPA cannot handle this case. Hibernate extension @CollectionOfElements is required})
|
|
200
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.Transient')
|
|
201
|
+
end
|
|
171
202
|
end
|
|
172
203
|
|
|
173
204
|
def jpa_addJoinColumn!(ah)
|
|
174
|
-
ah.java_annotation_add(%{@JoinColumn(name="#{
|
|
175
|
-
ah.umlx_owner_one.java_import_add(
|
|
205
|
+
ah.java_annotation_add(%{@JoinColumn(name = "#{jpa_Name}_FK")})
|
|
206
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.JoinColumn')
|
|
176
207
|
end
|
|
177
208
|
|
|
178
209
|
#adds property persistence annotation to annotationHolder.
|
|
@@ -181,7 +212,19 @@ module Muml_Property
|
|
|
181
212
|
#* property itself self
|
|
182
213
|
#* getter for the property
|
|
183
214
|
def jpa_addPersistenceTo!(ah)
|
|
184
|
-
if
|
|
215
|
+
return if ah.uml_isDerived?
|
|
216
|
+
|
|
217
|
+
if uml_type_one.kind_of?(Muml_Interface)
|
|
218
|
+
txt= %{
|
|
219
|
+
ERROR: JPA Persistence does not support interfaces.
|
|
220
|
+
ERROR: An association must point to a class.
|
|
221
|
+
ERROR: class: #{umlx_owner_one.java_qualifiedName}
|
|
222
|
+
ERROR: attribute: #{java_Name}
|
|
223
|
+
ERROR type #{uml_type_one.java_qualifiedName}
|
|
224
|
+
}
|
|
225
|
+
log.error txt
|
|
226
|
+
raise Exception.new(txt)
|
|
227
|
+
elsif umlx_isAttribute?
|
|
185
228
|
jpa_addPersistenceToAttribute!(ah)
|
|
186
229
|
else
|
|
187
230
|
jpa_addPersistenceToAssociation!(ah)
|
|
@@ -225,7 +268,7 @@ module Muml_Property
|
|
|
225
268
|
elsif !fromOne && !toOne
|
|
226
269
|
jpa_addPersistenceUnidirManyToMany!(ah)
|
|
227
270
|
else
|
|
228
|
-
raise Warning.new(
|
|
271
|
+
raise Warning.new('Internal error')
|
|
229
272
|
end
|
|
230
273
|
end
|
|
231
274
|
def jpa_addPersistenceToAssociationBidir!(ah)
|
|
@@ -250,7 +293,7 @@ module Muml_Property
|
|
|
250
293
|
elsif !fromOne && !toOne && (!master)
|
|
251
294
|
jpa_addPersistenceBidirManyToManySlave!(ah)
|
|
252
295
|
else
|
|
253
|
-
raise Warning.new(
|
|
296
|
+
raise Warning.new('Internal error')
|
|
254
297
|
end
|
|
255
298
|
|
|
256
299
|
return
|
|
@@ -258,7 +301,7 @@ module Muml_Property
|
|
|
258
301
|
# if umlx_oneToOne?
|
|
259
302
|
# if umlx_otherEnd.nil? || !umlx_otherEnd.umlx_isNavigable?
|
|
260
303
|
# jpa_addPersistenceUnidirOneToOne!(ah)
|
|
261
|
-
# #ah.java_annotation_add(
|
|
304
|
+
# #ah.java_annotation_add('@OneToOne')
|
|
262
305
|
#
|
|
263
306
|
# elsif umlx_masterEnd?
|
|
264
307
|
# ah.java_annotation_add("@OneToOne(cascade = {CascadeType.MERGE, CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.REMOVE})")
|
|
@@ -281,30 +324,41 @@ end
|
|
|
281
324
|
|
|
282
325
|
class DatatypeMapping
|
|
283
326
|
def jpa_addTypeModificator(ah)
|
|
327
|
+
n=ah.jpa_addNameAnnotation
|
|
328
|
+
return if n.nil?
|
|
329
|
+
ah.java_annotation_add(%{@Column(#{n})})
|
|
330
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.Column')
|
|
284
331
|
#nop
|
|
285
332
|
end
|
|
286
333
|
end
|
|
287
334
|
class DatatypeMappingCalendar < DatatypeMapping
|
|
288
335
|
def jpa_addTypeModificator(ah)
|
|
289
|
-
|
|
290
|
-
ah.
|
|
291
|
-
ah.umlx_owner_one.java_import_add(
|
|
336
|
+
super
|
|
337
|
+
ah.java_annotation_add('@Temporal(TemporalType.DATE)')
|
|
338
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.Temporal')
|
|
339
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.TemporalType')
|
|
292
340
|
end
|
|
293
341
|
end
|
|
294
342
|
|
|
295
343
|
class DatatypeMappingBLOB < DatatypeMapping
|
|
296
344
|
def jpa_addTypeModificator(ah)
|
|
297
|
-
|
|
298
|
-
ah.
|
|
345
|
+
#no super
|
|
346
|
+
ah.java_annotation_add('@Lob')
|
|
347
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.Lob')
|
|
348
|
+
|
|
349
|
+
#add column name when needed
|
|
350
|
+
n=ah.jpa_addNameAnnotation
|
|
351
|
+
n=n.nil? ? '' : ",#{n}"
|
|
352
|
+
|
|
299
353
|
#mysql: MEDIUMBLOB LONGBLOB TINYBLOB BLOB
|
|
300
354
|
if ah.context[:mysql]
|
|
301
|
-
ah.java_annotation_add(%{@Column(columnDefinition="LONGBLOB")})
|
|
302
|
-
ah.umlx_owner_one.java_import_add(
|
|
355
|
+
ah.java_annotation_add(%{@Column(columnDefinition="LONGBLOB"#{n})})
|
|
356
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.Column')
|
|
303
357
|
end
|
|
304
358
|
#cf: http://db.apache.org/derby/docs/10.1/ref/rrefblob.html
|
|
305
359
|
if ah.context[:derby]
|
|
306
|
-
ah.java_annotation_add(%{@Column(columnDefinition="BLOB(4M)")})
|
|
307
|
-
ah.umlx_owner_one.java_import_add(
|
|
360
|
+
ah.java_annotation_add(%{@Column(columnDefinition="BLOB(4M)"#{n})})
|
|
361
|
+
ah.umlx_owner_one.java_import_add('javax.persistence.Column')
|
|
308
362
|
end
|
|
309
363
|
end
|
|
310
364
|
end
|