ontomde-java 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +10 -0
- data/Manifest.txt +156 -0
- data/README.txt +98 -0
- data/Rakefile +21 -0
- data/bin/ontomde-java +5 -0
- data/generateRdocFile.sh +16 -0
- data/lib/ontomde-java.rb +45 -0
- data/lib/ontomde-java/crank.rb +13 -0
- data/lib/ontomde-java/crank/context.rb +384 -0
- data/lib/ontomde-java/crank/crankJpa.rb +103 -0
- data/lib/ontomde-java/crank/equals.rb +83 -0
- data/lib/ontomde-java/crank/facelets.rb +243 -0
- data/lib/ontomde-java/crank/facesconfig.rb +113 -0
- data/lib/ontomde-java/crank/helper.rb +46 -0
- data/lib/ontomde-java/crank/main.rb +51 -0
- data/lib/ontomde-java/crank/menu.rb +39 -0
- data/lib/ontomde-java/crank/menu2.rb +78 -0
- data/lib/ontomde-java/crank/validation.rb +34 -0
- data/lib/ontomde-java/ejb2.rb +3 -0
- data/lib/ontomde-java/ejb2/main-ejb2.rb +194 -0
- data/lib/ontomde-java/flex.rb +7 -0
- data/lib/ontomde-java/flex/Editor.mxml.as.rb +184 -0
- data/lib/ontomde-java/flex/Editor.mxml.rb +701 -0
- data/lib/ontomde-java/flex/ImportationAS.rb +40 -0
- data/lib/ontomde-java/flex/ValueObjectAS.rb +338 -0
- data/lib/ontomde-java/flex/fileTypes.rb +19 -0
- data/lib/ontomde-java/flex/main.rb +347 -0
- data/lib/ontomde-java/frontend/command.rb +324 -0
- data/lib/ontomde-java/frontend/command.rdoc +583 -0
- data/lib/ontomde-java/frontend/defaultOptions.rb +124 -0
- data/lib/ontomde-java/frontend/options.rb +555 -0
- data/lib/ontomde-java/frontend/steps.rb +287 -0
- data/lib/ontomde-java/java/accessorCode.rb +528 -0
- data/lib/ontomde-java/java/accessorSignature.rb +347 -0
- data/lib/ontomde-java/java/annotationOntoMDE.rb +88 -0
- data/lib/ontomde-java/java/apache.rb +34 -0
- data/lib/ontomde-java/java/build.rb +80 -0
- data/lib/ontomde-java/java/collectionMapping.rb +112 -0
- data/lib/ontomde-java/java/component.rb +446 -0
- data/lib/ontomde-java/java/contextualize.rb +43 -0
- data/lib/ontomde-java/java/enumAssignable.rb +75 -0
- data/lib/ontomde-java/java/enumCompatibilityLayer.rb +195 -0
- data/lib/ontomde-java/java/equals.rb +91 -0
- data/lib/ontomde-java/java/groovy.rb +95 -0
- data/lib/ontomde-java/java/java.rb +1329 -0
- data/lib/ontomde-java/java/java.rdoc +78 -0
- data/lib/ontomde-java/java/javaDatatypeMapping.rb +156 -0
- data/lib/ontomde-java/java/javaHelper.rb +25 -0
- data/lib/ontomde-java/java/java_todo.rdoc +3 -0
- data/lib/ontomde-java/java/javadoc.rb +254 -0
- data/lib/ontomde-java/java/meta.rb +28 -0
- data/lib/ontomde-java/java/operationAsClass.rb +144 -0
- data/lib/ontomde-java/java/security.rb +260 -0
- data/lib/ontomde-java/java/stateMachine.rb +415 -0
- data/lib/ontomde-java/java/tenant.rb +65 -0
- data/lib/ontomde-java/java/xsd.rb +1363 -0
- data/lib/ontomde-java/java/xsdCollectionMapping.rb +112 -0
- data/lib/ontomde-java/java/xsdDatatypeMapping.rb +103 -0
- data/lib/ontomde-java/jpa.rb +17 -0
- data/lib/ontomde-java/jpa/configuration.rb +176 -0
- data/lib/ontomde-java/jpa/finder.rb +102 -0
- data/lib/ontomde-java/jpa/jpa.rb +531 -0
- data/lib/ontomde-java/jpa/jpa.rdoc +20 -0
- data/lib/ontomde-java/jpa/locking.rb +18 -0
- data/lib/ontomde-java/jpa/mapping.rb +314 -0
- data/lib/ontomde-java/jpa/redefined.rb +77 -0
- data/lib/ontomde-java/jpa/simulationAutoImplement.rb +54 -0
- data/lib/ontomde-java/jpdl.rb +9 -0
- data/lib/ontomde-java/jpdl/bpm.pprj +1745 -0
- data/lib/ontomde-java/jpdl/bpm.rdf +140 -0
- data/lib/ontomde-java/jpdl/bpm.rdfs +231 -0
- data/lib/ontomde-java/jpdl/constant.rb +5 -0
- data/lib/ontomde-java/jpdl/graphic.rb +52 -0
- data/lib/ontomde-java/jpdl/jpdl.rb +281 -0
- data/lib/ontomde-java/jpdl/jpdl_deploy.rb +114 -0
- data/lib/ontomde-java/jpdl/main.rb +348 -0
- data/lib/ontomde-java/jpdl/main.rdoc +2 -0
- data/lib/ontomde-java/jpdl/processOperationToClass.rb +316 -0
- data/lib/ontomde-java/kbjava.rb +6 -0
- data/lib/ontomde-java/kbjava/rdfToJava.rb +407 -0
- data/lib/ontomde-java/struts.rb +27 -0
- data/lib/ontomde-java/struts/MessageResources.rb +359 -0
- data/lib/ontomde-java/struts/action.rb +883 -0
- data/lib/ontomde-java/struts/blob.rb +11 -0
- data/lib/ontomde-java/struts/exceptionHandling.rb +167 -0
- data/lib/ontomde-java/struts/footer.rb +128 -0
- data/lib/ontomde-java/struts/form.rb +450 -0
- data/lib/ontomde-java/struts/header.rb +37 -0
- data/lib/ontomde-java/struts/header_link.rb +39 -0
- data/lib/ontomde-java/struts/jsp_edit.rb +870 -0
- data/lib/ontomde-java/struts/jsp_edit_field.rb +1 -0
- data/lib/ontomde-java/struts/jsp_edit_js.rb +124 -0
- data/lib/ontomde-java/struts/jsp_index.rb +136 -0
- data/lib/ontomde-java/struts/localeAction.rb +641 -0
- data/lib/ontomde-java/struts/main.rb +41 -0
- data/lib/ontomde-java/struts/mappingForBean.rb +132 -0
- data/lib/ontomde-java/struts/mappingForJsp.rb +272 -0
- data/lib/ontomde-java/struts/mappingToJavaHierarchy.rb +87 -0
- data/lib/ontomde-java/struts/reloadAction.rb +33 -0
- data/lib/ontomde-java/struts/spring.rb +89 -0
- data/lib/ontomde-java/struts/struts-config.rb +232 -0
- data/lib/ontomde-java/struts/validation.rb +116 -0
- data/lib/ontomde-java/struts/validator.rb +341 -0
- data/lib/ontomde-java/struts/webXml.rb +195 -0
- data/lib/ontomde-java/struts/xmlForm.rb +308 -0
- data/lib/ontomde-java/version.rb +5 -0
- data/profiling.xls +0 -0
- data/test/.classpath +14 -0
- data/test/.project +17 -0
- data/test/.settings/org.eclipse.jdt.core.prefs +23 -0
- data/test/Rakefile +71 -0
- data/test/build.xml +34 -0
- data/test/classpath.rb +15 -0
- data/test/lib/junit-4.1.jar +0 -0
- data/test/load1.rb +3 -0
- data/test/load2.rb +3 -0
- data/test/log4j.properties +46 -0
- data/test/model/.project +11 -0
- data/test/model/BigProject.mdzip +0 -0
- data/test/model/BigProject.mdzip.nt +102866 -0
- 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 +149 -0
- data/test/model/model_ea71.ea.xmi +4470 -0
- data/test/model/model_ea71.eap +0 -0
- data/test/model/model_ea71_README.txt +8 -0
- data/test/model/multipleInheritance.emx +466 -0
- data/test/model/multipleInheritance.emx.nt +2428 -0
- data/test/model/simple1-530.ofp +0 -0
- data/test/model/simple1-includedAsReference.emx +169 -0
- data/test/model/simple1.emx +3729 -0
- data/test/model/simple1.emx.fragments.nt +81 -0
- data/test/model/simple1.emx.nt +5760 -0
- data/test/model/simple1.mdzip +0 -0
- data/test/model/simple1.mdzip.nt +11500 -0
- data/test/model/simple1.oe530.nt +1986 -0
- data/test/model/simple1.oe600.nt +1627 -0
- data/test/src/RuntimeTest.java +656 -0
- data/test/src/testsLevel1.java +174 -0
- data/test/src/testsLevel2.java +29 -0
- data/test/src/testsLevel3.java +40 -0
- data/test/test-ea7.sh +15 -0
- data/test/test-magicDraw.sh +10 -0
- data/test/test-mi.sh +9 -0
- data/test/test-oe530.sh +10 -0
- data/test/test-oe600.sh +11 -0
- data/test/test-rsm.sh +11 -0
- data/test/test_export_ea71.rb +5 -0
- data/test/test_export_oe530.rb +4 -0
- data/test/test_export_oe600.rb +4 -0
- data/test/test_export_rsm60.rb +4 -0
- data/test/trace +419 -0
- data/test/uml_test.rb +1434 -0
- data/test/uml_test.xls +0 -0
- data/test/unit_test.rb +6 -0
- metadata +224 -0
@@ -0,0 +1,531 @@
|
|
1
|
+
#Depending on whether you annotate fields or methods, the access type used by Hibernate will be field or property.
|
2
|
+
#The EJB3 spec requires that you declare annotations on the element type that will be accessed, i.e. the getter method if you use property access, the field if you use field access.
|
3
|
+
#Mixing EJB3 annotations in both fields and methods should be avoided. Hibernate will guess the access type from the position of @Id or @EmbeddedId.
|
4
|
+
#
|
5
|
+
#NOT SUPPORTED:
|
6
|
+
#* Qualifiers are not supported.
|
7
|
+
#* multi-valued attributes (JPA limitation)
|
8
|
+
#* Clashing variables with different types in same type hierarchy.
|
9
|
+
#X and Y classes derives from Z. X has attribute c of type int and Y has attribute c of type String.
|
10
|
+
|
11
|
+
module DB
|
12
|
+
EntityManager="javax.persistence.EntityManager"
|
13
|
+
EntityManagerFactory="javax.persistence.EntityManagerFactory"
|
14
|
+
EntityGenericInterface="xmda.jpa.XmdaEntity"
|
15
|
+
EntityInterface="#{EntityGenericInterface}<Long>"
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
module Muml_Classifier
|
20
|
+
#Class is meant to be a Data Access Object
|
21
|
+
rdf_safe_attr_reader_many :db_isDAO
|
22
|
+
#rdf_safe_attr_reader_many :db_isTransient
|
23
|
+
|
24
|
+
#This DAO class is associated to this persistent class
|
25
|
+
rdf_safe_attr_reader_many :java_persistentClass
|
26
|
+
|
27
|
+
#This peristent class is associated to this DAO class.
|
28
|
+
rdf_safe_attr_reader_many :java_DAOClass
|
29
|
+
end
|
30
|
+
module Mrdf_Repository
|
31
|
+
def db_addPersistence!
|
32
|
+
jpa_addPersistence!
|
33
|
+
end
|
34
|
+
def db_Class_persistent
|
35
|
+
ret=Set.new
|
36
|
+
uml_Class_all.each { |c|
|
37
|
+
next if c.kind_of?(Muml_Interface) || c.kind_of?(Muml_Enumeration)
|
38
|
+
next unless c.kind_of?(Muml_Class)
|
39
|
+
if c.umlx_hasStereotype?('DTO')
|
40
|
+
c.db_isTransient=RDF_TRUE
|
41
|
+
elsif context[:db_useStereotypeMarker,false]
|
42
|
+
c.db_isTransient=((c.umlx_hasStereotype?(context[:db_persistentStereotype,'Persistent'])) ? RDF_FALSE : RDF_TRUE)
|
43
|
+
end
|
44
|
+
next if c.db_isTransient?
|
45
|
+
if c.umlx_package.nil?
|
46
|
+
log.error("no package for #{c}::#{c.class.name} #{c.rdf_uri}. Skipping addPersistence!")
|
47
|
+
next
|
48
|
+
end
|
49
|
+
ret<< c
|
50
|
+
}
|
51
|
+
return ret
|
52
|
+
end
|
53
|
+
def jpa_addPersistence!
|
54
|
+
#jpa_copyInterfaceAttributesToClass!
|
55
|
+
uml_Class_all.each { |c|
|
56
|
+
next unless c.kind_of?(Muml_Interface) || c.kind_of?(Muml_Enumeration)
|
57
|
+
c.db_isTransient=RDF_TRUE
|
58
|
+
}
|
59
|
+
db_Class_persistent.each { |c|
|
60
|
+
c.jpa_addPersistence!()
|
61
|
+
c.jpa_addPersistenceId!
|
62
|
+
c.jpa_addOptimisticLockingVar!
|
63
|
+
}
|
64
|
+
uml_Class_all.each { |i|
|
65
|
+
i.jpa_processDTO
|
66
|
+
#TODO ???
|
67
|
+
next unless i.kind_of?(Muml_Interface)
|
68
|
+
i.jpa_addPersistenceId!
|
69
|
+
#c.jpa_addOptimisticLockingVar!
|
70
|
+
}
|
71
|
+
|
72
|
+
|
73
|
+
end
|
74
|
+
def jpa_copyInterfaceAttributesToClass!
|
75
|
+
uml_Class_all.each { |c|
|
76
|
+
next unless c.kind_of?(Muml_Interface)
|
77
|
+
puts "found interface #{c}"
|
78
|
+
c.uml_ownedAttribute.each { |a|
|
79
|
+
puts "found attribute #{a.uml_name}"
|
80
|
+
}
|
81
|
+
}
|
82
|
+
end
|
83
|
+
def db_addDAO!
|
84
|
+
db_Class_persistent.each { |c|
|
85
|
+
c.jpa_addDAO!
|
86
|
+
}
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
module Muml_Stereotype
|
91
|
+
#nop
|
92
|
+
def jpa_addPersistence!
|
93
|
+
#nop
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
module DAO
|
100
|
+
def jpa_addPersistenceContext!
|
101
|
+
end
|
102
|
+
def jpa_addPersist!
|
103
|
+
c=umlx_createAndAddOperation(rdf_uri+"_persist","persist")
|
104
|
+
c.java_code="getEntityManager().persist(this);"
|
105
|
+
end
|
106
|
+
def jpa_addMerge!
|
107
|
+
c=umlx_createAndAddOperation(rdf_uri+"_merge","merge")
|
108
|
+
c.java_code="return (#{self.java_qualifiedName})getEntityManager().merge(this);"
|
109
|
+
r=c.umlx_createAndAddReturnParameter("#{c.rdf_uri}_ret")
|
110
|
+
r.uml_type=self
|
111
|
+
end
|
112
|
+
|
113
|
+
def jpa_addRemove!
|
114
|
+
c=umlx_createAndAddOperation(rdf_uri+"_remove","remove")
|
115
|
+
c.java_code="getEntityManager().remove(this);"
|
116
|
+
end
|
117
|
+
def jpa_addDAO!
|
118
|
+
return if db_isDAO?
|
119
|
+
return if java_ignoreMe?
|
120
|
+
|
121
|
+
if !context[:db_autonomousDAO,false]
|
122
|
+
self.java_DAOClass=self
|
123
|
+
self.java_persistentClass=self
|
124
|
+
else
|
125
|
+
|
126
|
+
#log.debug { "adding dao for #{self}" }
|
127
|
+
p=umlx_package
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
|
132
|
+
#p=self
|
133
|
+
p=p.umlx_getOrCreatePackage(context[:dbDAOsubPackage,"dao"],p)
|
134
|
+
c=p.umlx_createAndAddClass(rdf_uri+"_dao")
|
135
|
+
c.db_isDAO=RDF_TRUE
|
136
|
+
c.db_isTransient=RDF_TRUE
|
137
|
+
self.java_DAOClass=c
|
138
|
+
c.java_persistentClass=self
|
139
|
+
c.uml_name=uml_name_one+"Dao"
|
140
|
+
|
141
|
+
#log.debug { "DAO added: #{c.uml_name} in #{c.umlx_package.uml_name}"}
|
142
|
+
java_DAOClass_one.jpa_addEntityManager!()
|
143
|
+
java_DAOClass_one.jpa_addStdImports!
|
144
|
+
#jpa_addGetDao!()
|
145
|
+
end
|
146
|
+
jpa_addPersist!
|
147
|
+
jpa_addMerge!
|
148
|
+
jpa_addRemove!
|
149
|
+
jpa_addFindByPrimaryKey!(java_DAOClass_one)
|
150
|
+
jpa_addFindAll!(java_DAOClass_one)
|
151
|
+
end
|
152
|
+
def jpa_addGetDao!()
|
153
|
+
return if uml_isAbstract?
|
154
|
+
umlx_classifier_generalization_indirect.each {|c|
|
155
|
+
return unless c.uml_isAbstract?
|
156
|
+
}
|
157
|
+
m=umlx_createAndAddOperation(rdf_uri+"_getdao")
|
158
|
+
m.uml_name="dao"
|
159
|
+
m.uml_class=self
|
160
|
+
m.uml_visibility=Cuml_VisibilityKind::Public
|
161
|
+
m.uml_isStatic=RDF_TRUE
|
162
|
+
#m.db_isTransient=RDF_TRUE
|
163
|
+
|
164
|
+
#em=m.umlx_createAndAddParameter(m.rdf_uri+"_entityManager","entityManager")
|
165
|
+
#em.uml_type=umlx_getOrCreateClass(DB::EntityManager)
|
166
|
+
#em.uml_direction=Cuml_ParameterDirectionKind::In
|
167
|
+
#em.uml_upperValue=umlx_literal(1)
|
168
|
+
#em.uml_lowerValue=umlx_literal(1)
|
169
|
+
|
170
|
+
rp=m.umlx_createAndAddParameter(m.rdf_uri+"_ret_param","return")
|
171
|
+
rp.uml_direction=Cuml_ParameterDirectionKind::Return
|
172
|
+
rp.uml_upperValue=umlx_literal(1)
|
173
|
+
rp.uml_lowerValue=umlx_literal(1)
|
174
|
+
rp.uml_type=java_DAOClass_one
|
175
|
+
m.java_code="return new #{java_DAOClass_one.java_qualifiedName}();"
|
176
|
+
return m
|
177
|
+
end
|
178
|
+
end
|
179
|
+
module Mrdf_Repository
|
180
|
+
def db_findNameUsingDB_URI_ALIAS(k)
|
181
|
+
n="-- key not found for #{k}--"
|
182
|
+
if self[k].nil?
|
183
|
+
# an uri present in old file no longer exists
|
184
|
+
::Muml_Class::DB_URI_ALIAS.each {|key,v|
|
185
|
+
n=key if v==k
|
186
|
+
}
|
187
|
+
else
|
188
|
+
n=self[k].java_qualifiedName
|
189
|
+
end
|
190
|
+
return n
|
191
|
+
end
|
192
|
+
|
193
|
+
def db_saveDB_DISCRIMINATOR
|
194
|
+
return unless context[:dbTypeDiscriminator]==:int
|
195
|
+
mtk_writeSession("#{context[:dbDiscriminatorCacheRelFile]}") {
|
196
|
+
write <<END
|
197
|
+
# saved discriminator numbers
|
198
|
+
# This file is read and rewritten by generator
|
199
|
+
def declarePredefinedDiscrimators()
|
200
|
+
# first parameter is java qualified class name
|
201
|
+
# second parameter is the identifier used in database
|
202
|
+
# when different java type are stored in a
|
203
|
+
# single table and need to be differenciated.
|
204
|
+
END
|
205
|
+
::Muml_Class::DB_DISCRIMINATOR.sort{|a,b| a[1]<=>b[1]}.each { |k|
|
206
|
+
n=db_findNameUsingDB_URI_ALIAS(k[0])
|
207
|
+
write(%{ db_disc("#{n}",#{k[1]})\n})
|
208
|
+
}
|
209
|
+
write("end\n")
|
210
|
+
write <<END
|
211
|
+
# ###########################
|
212
|
+
# END OF USER MODIFIABLE ZONE
|
213
|
+
# ###########################
|
214
|
+
|
215
|
+
|
216
|
+
|
217
|
+
# Conversion to model URI
|
218
|
+
def db_disc(k,v)
|
219
|
+
::Muml_Class::DB_DISCRIMINATOR[::Muml_Class::DB_URI_ALIAS[k]]=v
|
220
|
+
end
|
221
|
+
::Muml_Class::DB_URI_ALIAS.merge!({
|
222
|
+
END
|
223
|
+
::Muml_Class::DB_DISCRIMINATOR.sort{|a,b| a[0]<=>b[0]}.each { |k|
|
224
|
+
n=db_findNameUsingDB_URI_ALIAS(k[0])
|
225
|
+
write(" %{#{n}} => %{#{k[0]}} ,\n")
|
226
|
+
}
|
227
|
+
write("})\n")
|
228
|
+
write <<END
|
229
|
+
declarePredefinedDiscrimators();
|
230
|
+
#free ressources
|
231
|
+
def declarePredefinedDiscrimators()
|
232
|
+
end
|
233
|
+
END
|
234
|
+
}
|
235
|
+
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
module Muml_Class
|
240
|
+
|
241
|
+
JPA_TX_BEGIN=""
|
242
|
+
JPA_TX_COMMIT=""
|
243
|
+
#JPA_TX_BEGIN="javax.persistence.EntityTransaction tx=xmda.jpa.TestEnv.getEntityManager().getTransaction();\ntx.begin(); try {"
|
244
|
+
#JPA_TX_COMMIT="tx.commit(); } catch (RuntimeException e) {log.error(e);if(tx.isActive()){ tx.rollback();}throw(e);}"
|
245
|
+
|
246
|
+
#returns java_code enclosed in begin/commit with catch cleanup
|
247
|
+
def db_tx(java_code)
|
248
|
+
jpa_tx(java_code)
|
249
|
+
end
|
250
|
+
#returns java_code enclosed in begin/commit with catch cleanup
|
251
|
+
def jpa_tx(java_code)
|
252
|
+
return "#{JPA_TX_BEGIN}#{java_code}#{JPA_TX_COMMIT}"
|
253
|
+
end
|
254
|
+
|
255
|
+
JAVA_NOT_PERSISTENT_NAMESPACE=["java","javax"]
|
256
|
+
include DAO
|
257
|
+
def jpa_addPersistOperation!
|
258
|
+
end
|
259
|
+
|
260
|
+
DB_Context="xmda.jpa.DbContext"
|
261
|
+
def jpa_addEntityManager!
|
262
|
+
|
263
|
+
gem=umlx_createAndAddOperation(rdf_uri+"getEntityManager","getEntityManager")
|
264
|
+
gem.uml_isStatic=RDF_TRUE
|
265
|
+
ret=gem.umlx_createAndAddReturnParameter(DB_Context+"_ret")
|
266
|
+
ret.uml_upperValue=umlx_literal(1)
|
267
|
+
ret.uml_lowerValue=umlx_literal(0)
|
268
|
+
ret.uml_type=umlx_getOrCreateClass(DB::EntityManager)
|
269
|
+
gem.java_code="return #{DB_Context}.getEntityManager();"
|
270
|
+
|
271
|
+
end
|
272
|
+
|
273
|
+
# xMDA does *not* generate generic DAO type remove method.
|
274
|
+
# object should be removed using their composite object
|
275
|
+
def jpa_addRemoveOperation!
|
276
|
+
# Possible implementation
|
277
|
+
# get container
|
278
|
+
# call remove method
|
279
|
+
end
|
280
|
+
|
281
|
+
def jpa_addRefreshOperation!
|
282
|
+
end
|
283
|
+
|
284
|
+
|
285
|
+
|
286
|
+
|
287
|
+
def jpa_deriveFromPersistent?
|
288
|
+
uml_generalization.each { |c|
|
289
|
+
return true if c.uml_general_one.jpa_isPersistent?
|
290
|
+
}
|
291
|
+
return false
|
292
|
+
end
|
293
|
+
def jpa_isPersistent?
|
294
|
+
#an external class is supposed to be not persistent
|
295
|
+
#if umlx_external?
|
296
|
+
# return false
|
297
|
+
#end
|
298
|
+
return false if db_isTransient? || db_isDAO?
|
299
|
+
return true if jpa_deriveFromPersistent?
|
300
|
+
#return false unless uml_generalization.empty?
|
301
|
+
return jpa_carryPersistence?
|
302
|
+
end
|
303
|
+
def jpa_carryPersistence?
|
304
|
+
qn=java_qualifiedName
|
305
|
+
JAVA_NOT_PERSISTENT_NAMESPACE.each { |ns|
|
306
|
+
return false if qn.index(ns)==0
|
307
|
+
}
|
308
|
+
#external is supposed not to carry persistence
|
309
|
+
#return false if umlx_external?
|
310
|
+
return true;
|
311
|
+
end
|
312
|
+
|
313
|
+
def jpa_hasPersistenceId?
|
314
|
+
return false if jpa_deriveFromPersistent?
|
315
|
+
return false unless jpa_carryPersistence?
|
316
|
+
return true
|
317
|
+
end
|
318
|
+
def log_error_db_tableName_too_long(tableName)
|
319
|
+
return if log_already_displayed?("#{rdf_uri}__tableName")
|
320
|
+
log.error {
|
321
|
+
<<END
|
322
|
+
********* SGBD TABLE NAME TOO LONG **********
|
323
|
+
** This software has detected a table name exceeding 63 character
|
324
|
+
** ( tableName(#{tableName.length})="#{tableName}" )
|
325
|
+
**
|
326
|
+
** This table name is related to element:
|
327
|
+
** #{mtk_object_message}
|
328
|
+
**
|
329
|
+
** Default Table name can be overidden using method call:
|
330
|
+
** db_addTableNameOverride("#{tableName}","MYSHORTTABLENAME")
|
331
|
+
**
|
332
|
+
** This model element is related to these other model elements:
|
333
|
+
#{mtk_related_message}********* SGBD TABLE NAME TOO LONG **********
|
334
|
+
END
|
335
|
+
}
|
336
|
+
end
|
337
|
+
|
338
|
+
#Maximum allowed length for a sgbd table name
|
339
|
+
#cf:
|
340
|
+
# Mysql: http://dev.mysql.com/doc/refman/5.0/en/identifiers.html
|
341
|
+
DB_MAX_TABLE_NAME_LENGTH=64
|
342
|
+
|
343
|
+
#table name override
|
344
|
+
DB_TABLE_NAME_OVERRIDE=Hash.new
|
345
|
+
|
346
|
+
#Table name for this element
|
347
|
+
def db_tableName
|
348
|
+
r=java_uniqueName
|
349
|
+
if r.length<=DB_MAX_TABLE_NAME_LENGTH
|
350
|
+
#ok. nothing to do
|
351
|
+
elsif ! DB_TABLE_NAME_OVERRIDE[r].nil?
|
352
|
+
#no check performed on overriden name
|
353
|
+
r=DB_TABLE_NAME_OVERRIDE[r]
|
354
|
+
elsif context[:silentlyTruncateTableName,false]
|
355
|
+
log.debug { "silently truncating table name #{r}" }
|
356
|
+
r=r[0,DB_MAX_TABLE_NAME_LENGTH]
|
357
|
+
else
|
358
|
+
log_error_db_tableName_too_long(r)
|
359
|
+
end
|
360
|
+
return r
|
361
|
+
end
|
362
|
+
|
363
|
+
DB_URI_ALIAS=Hash.new
|
364
|
+
DB_DISCRIMINATOR=Hash.new
|
365
|
+
def jpa_addPersistence!
|
366
|
+
#jpa_addDAO!
|
367
|
+
|
368
|
+
#Ajout l'interface XmdaEntity
|
369
|
+
ent=umlx_getOrCreateInterface(DB::EntityInterface)
|
370
|
+
ent.java_isGeneric=RDF_TRUE
|
371
|
+
umlx_createAndAddImplementation(ent)
|
372
|
+
|
373
|
+
jpa_addEntityManager! # required for query, persist,...
|
374
|
+
uml_ownedOperation.each { |o|
|
375
|
+
o.jpa_addPersistence!
|
376
|
+
}
|
377
|
+
java_makeSerializable!
|
378
|
+
java_annotation_add("@Entity")
|
379
|
+
java_import_add("javax.persistence.Entity")
|
380
|
+
java_uniqueName # this call enforces uniqueness
|
381
|
+
if jpa_hasPersistenceId?
|
382
|
+
java_annotation_add("@Table (name=\"#{db_tableName}\")")
|
383
|
+
java_import_add("javax.persistence.Table")
|
384
|
+
end
|
385
|
+
|
386
|
+
if context[:dbTypeDiscriminator]==:int
|
387
|
+
k=rdf_uri.to_s
|
388
|
+
disc=DB_DISCRIMINATOR[k]
|
389
|
+
if disc.nil?
|
390
|
+
disc=0
|
391
|
+
DB_DISCRIMINATOR.each { |kx,v|
|
392
|
+
disc=v+1 if disc<=v
|
393
|
+
}
|
394
|
+
DB_DISCRIMINATOR[k]=disc
|
395
|
+
end
|
396
|
+
#TODO: generate only when necessary
|
397
|
+
java_annotation_add(%{@DiscriminatorColumn(discriminatorType = DiscriminatorType.INTEGER)})
|
398
|
+
java_import_add("javax.persistence.DiscriminatorColumn")
|
399
|
+
java_import_add("javax.persistence.DiscriminatorType")
|
400
|
+
java_annotation_add(%{@DiscriminatorValue(value = "#{disc}" )})
|
401
|
+
java_import_add("javax.persistence.DiscriminatorValue")
|
402
|
+
end
|
403
|
+
jpa_addStdImports!
|
404
|
+
end
|
405
|
+
|
406
|
+
def jpa_addStdImports!
|
407
|
+
#java_import_add("java.util.ArrayList")
|
408
|
+
#java_import_add("java.util.Set")
|
409
|
+
#java_import_add("java.util.List")
|
410
|
+
#java_import_add("javax.persistence.*")
|
411
|
+
# java_import_add("javax.persistence.Entity")
|
412
|
+
# java_import_add("javax.persistence.Table")
|
413
|
+
# java_import_add("javax.persistence.DiscriminatorColumn")
|
414
|
+
# java_import_add("javax.persistence.DiscriminatorValue")
|
415
|
+
# java_import_add("javax.persistence.DiscriminatorType")
|
416
|
+
# java_import_add("javax.persistence.Version")
|
417
|
+
# java_import_add("javax.persistence.Basic")
|
418
|
+
# java_import_add("javax.persistence.Column")
|
419
|
+
# java_import_add("javax.persistence.Lob")
|
420
|
+
# java_import_add("javax.persistence.Id")
|
421
|
+
# java_import_add("javax.persistence.GeneratedValue")
|
422
|
+
# java_import_add("javax.persistence.JoinTable")
|
423
|
+
# java_import_add("javax.persistence.OneToMany")
|
424
|
+
# java_import_add("javax.persistence.ManyToOne")
|
425
|
+
# java_import_add("javax.persistence.ManyToMany")
|
426
|
+
# java_import_add("javax.persistence.Temporal")
|
427
|
+
# java_import_add("javax.persistence.CascadeType")
|
428
|
+
# java_import_add("javax.persistence.FetchType")
|
429
|
+
# #java_import_add("javax.persistence.OneToOne")
|
430
|
+
# java_import_add("javax.persistence.JoinColumn")
|
431
|
+
# java_import_add("javax.persistence.TemporalType")
|
432
|
+
|
433
|
+
|
434
|
+
|
435
|
+
#com.francetelecom.rd.cil.commons.common.CommonException
|
436
|
+
#com.francetelecom.rd.cil.commons.model.IdentifiedObject
|
437
|
+
##{java_packageQualifiedName}.vo.#{java_Name}Value
|
438
|
+
##{java_packageQualifiedName}.vo.*
|
439
|
+
end
|
440
|
+
def jpa_addPersistenceIdAnnnotation!(p)
|
441
|
+
p.java_annotation_add("@Id")
|
442
|
+
java_import_add("javax.persistence.Id")
|
443
|
+
p.java_annotation_add("@GeneratedValue")
|
444
|
+
java_import_add("javax.persistence.GeneratedValue")
|
445
|
+
end
|
446
|
+
|
447
|
+
end
|
448
|
+
module Muml_Classifier
|
449
|
+
|
450
|
+
def jpa_processDTO
|
451
|
+
return unless self.umlx_hasStereotype?('DTO')
|
452
|
+
|
453
|
+
puts "DTO Found : #{java_Name}"
|
454
|
+
|
455
|
+
# Add a method to<UML_Name> to the main class linked to the DTO by a dependency
|
456
|
+
self.uml_clientDependency.each{|dep|
|
457
|
+
next unless dep.kind_of?(Cuml_Dependency)
|
458
|
+
relatedObject = dep.uml_supplier_one
|
459
|
+
|
460
|
+
relatedObject.java_import_add(self.java_qualifiedName)
|
461
|
+
relatedObject.java_import_add("org.apache.commons.beanutils.PropertyUtils")
|
462
|
+
me=relatedObject.umlx_createAndAddOperation(self.rdf_uri+"_to#{self.java_Name}")
|
463
|
+
me.uml_name="to#{self.java_Name}"
|
464
|
+
me.uml_visibility=Cuml_VisibilityKind::Public
|
465
|
+
rme=me.umlx_createAndAddReturnParameter("#{me.rdf_uri}_ret")
|
466
|
+
rme.uml_type=self
|
467
|
+
me.java_code = <<CODE
|
468
|
+
#{self.java_Name} dto = new #{self.java_Name}();
|
469
|
+
try {
|
470
|
+
PropertyUtils.copyProperties(dto, this);
|
471
|
+
} catch (Exception e) {
|
472
|
+
throw new RuntimeException(e);
|
473
|
+
}
|
474
|
+
return dto;
|
475
|
+
CODE
|
476
|
+
|
477
|
+
}
|
478
|
+
|
479
|
+
end
|
480
|
+
|
481
|
+
def jpa_addPersistenceId!
|
482
|
+
#return unless uml_generalization.empty?
|
483
|
+
return unless context[:db_useOptimisticLocking,true]
|
484
|
+
return unless jpa_hasPersistenceId?
|
485
|
+
|
486
|
+
p=umlx_createAndAddProperty(rdf_uri+"_auto_id","id")
|
487
|
+
jpa_addPersistenceIdAnnnotation!(p)
|
488
|
+
#p.uml_type=umlx_dataType_long
|
489
|
+
p.uml_type=umlx_getOrCreateDataType("Long")
|
490
|
+
p.uml_visibility=::Cuml_VisibilityKind::Private
|
491
|
+
java_addAccessorsFor!(p)
|
492
|
+
|
493
|
+
#TODO Surcharge le getter : A enlever une fois avoir corrig� incompatibilit� avec couche Struts
|
494
|
+
gettter = p.java_AttributeGlobalGetter
|
495
|
+
#removed ? : operator to make checkstyle happy.
|
496
|
+
gettter[0].java_code = %{if(#{p.java_Name} == null) { return Long.valueOf(0);} else {return #{p.java_Name};}}
|
497
|
+
|
498
|
+
stereo = umlx_package.umlx_createAndAddStereotype(rdf_uri+"Equals", "EqualsValue")
|
499
|
+
p.uml_appliedStereotype = stereo
|
500
|
+
|
501
|
+
end
|
502
|
+
end
|
503
|
+
module Muml_Property
|
504
|
+
def jpa_isPersistent?
|
505
|
+
return false if uml_isDerived?
|
506
|
+
return true
|
507
|
+
end
|
508
|
+
end
|
509
|
+
module Muml_Interface
|
510
|
+
#JPA does not support persistent interface
|
511
|
+
def jpa_isPersistent?
|
512
|
+
return false
|
513
|
+
end
|
514
|
+
def jpa_hasPersistenceId?
|
515
|
+
uml_ownedAttribute.each { |a|
|
516
|
+
next unless a.umlx_isComposite?
|
517
|
+
next if a.uml_type_one.db_isTransient?
|
518
|
+
return true ;
|
519
|
+
}
|
520
|
+
return false
|
521
|
+
end
|
522
|
+
def jpa_addPersistenceIdAnnnotation!(p)
|
523
|
+
#nop
|
524
|
+
end
|
525
|
+
end
|
526
|
+
|
527
|
+
#adds a directive for replacing default table name orgname by overridenname
|
528
|
+
def db_addTableNameOverride(orgname,overridenname)
|
529
|
+
::Muml_Class::DB_TABLE_NAME_OVERRIDE[orgname.to_s]=overridenname.to_s
|
530
|
+
end
|
531
|
+
|