ontomde-java 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (157) hide show
  1. data/History.txt +10 -0
  2. data/Manifest.txt +156 -0
  3. data/README.txt +98 -0
  4. data/Rakefile +21 -0
  5. data/bin/ontomde-java +5 -0
  6. data/generateRdocFile.sh +16 -0
  7. data/lib/ontomde-java.rb +45 -0
  8. data/lib/ontomde-java/crank.rb +13 -0
  9. data/lib/ontomde-java/crank/context.rb +384 -0
  10. data/lib/ontomde-java/crank/crankJpa.rb +103 -0
  11. data/lib/ontomde-java/crank/equals.rb +83 -0
  12. data/lib/ontomde-java/crank/facelets.rb +243 -0
  13. data/lib/ontomde-java/crank/facesconfig.rb +113 -0
  14. data/lib/ontomde-java/crank/helper.rb +46 -0
  15. data/lib/ontomde-java/crank/main.rb +51 -0
  16. data/lib/ontomde-java/crank/menu.rb +39 -0
  17. data/lib/ontomde-java/crank/menu2.rb +78 -0
  18. data/lib/ontomde-java/crank/validation.rb +34 -0
  19. data/lib/ontomde-java/ejb2.rb +3 -0
  20. data/lib/ontomde-java/ejb2/main-ejb2.rb +194 -0
  21. data/lib/ontomde-java/flex.rb +7 -0
  22. data/lib/ontomde-java/flex/Editor.mxml.as.rb +184 -0
  23. data/lib/ontomde-java/flex/Editor.mxml.rb +701 -0
  24. data/lib/ontomde-java/flex/ImportationAS.rb +40 -0
  25. data/lib/ontomde-java/flex/ValueObjectAS.rb +338 -0
  26. data/lib/ontomde-java/flex/fileTypes.rb +19 -0
  27. data/lib/ontomde-java/flex/main.rb +347 -0
  28. data/lib/ontomde-java/frontend/command.rb +324 -0
  29. data/lib/ontomde-java/frontend/command.rdoc +583 -0
  30. data/lib/ontomde-java/frontend/defaultOptions.rb +124 -0
  31. data/lib/ontomde-java/frontend/options.rb +555 -0
  32. data/lib/ontomde-java/frontend/steps.rb +287 -0
  33. data/lib/ontomde-java/java/accessorCode.rb +528 -0
  34. data/lib/ontomde-java/java/accessorSignature.rb +347 -0
  35. data/lib/ontomde-java/java/annotationOntoMDE.rb +88 -0
  36. data/lib/ontomde-java/java/apache.rb +34 -0
  37. data/lib/ontomde-java/java/build.rb +80 -0
  38. data/lib/ontomde-java/java/collectionMapping.rb +112 -0
  39. data/lib/ontomde-java/java/component.rb +446 -0
  40. data/lib/ontomde-java/java/contextualize.rb +43 -0
  41. data/lib/ontomde-java/java/enumAssignable.rb +75 -0
  42. data/lib/ontomde-java/java/enumCompatibilityLayer.rb +195 -0
  43. data/lib/ontomde-java/java/equals.rb +91 -0
  44. data/lib/ontomde-java/java/groovy.rb +95 -0
  45. data/lib/ontomde-java/java/java.rb +1329 -0
  46. data/lib/ontomde-java/java/java.rdoc +78 -0
  47. data/lib/ontomde-java/java/javaDatatypeMapping.rb +156 -0
  48. data/lib/ontomde-java/java/javaHelper.rb +25 -0
  49. data/lib/ontomde-java/java/java_todo.rdoc +3 -0
  50. data/lib/ontomde-java/java/javadoc.rb +254 -0
  51. data/lib/ontomde-java/java/meta.rb +28 -0
  52. data/lib/ontomde-java/java/operationAsClass.rb +144 -0
  53. data/lib/ontomde-java/java/security.rb +260 -0
  54. data/lib/ontomde-java/java/stateMachine.rb +415 -0
  55. data/lib/ontomde-java/java/tenant.rb +65 -0
  56. data/lib/ontomde-java/java/xsd.rb +1363 -0
  57. data/lib/ontomde-java/java/xsdCollectionMapping.rb +112 -0
  58. data/lib/ontomde-java/java/xsdDatatypeMapping.rb +103 -0
  59. data/lib/ontomde-java/jpa.rb +17 -0
  60. data/lib/ontomde-java/jpa/configuration.rb +176 -0
  61. data/lib/ontomde-java/jpa/finder.rb +102 -0
  62. data/lib/ontomde-java/jpa/jpa.rb +531 -0
  63. data/lib/ontomde-java/jpa/jpa.rdoc +20 -0
  64. data/lib/ontomde-java/jpa/locking.rb +18 -0
  65. data/lib/ontomde-java/jpa/mapping.rb +314 -0
  66. data/lib/ontomde-java/jpa/redefined.rb +77 -0
  67. data/lib/ontomde-java/jpa/simulationAutoImplement.rb +54 -0
  68. data/lib/ontomde-java/jpdl.rb +9 -0
  69. data/lib/ontomde-java/jpdl/bpm.pprj +1745 -0
  70. data/lib/ontomde-java/jpdl/bpm.rdf +140 -0
  71. data/lib/ontomde-java/jpdl/bpm.rdfs +231 -0
  72. data/lib/ontomde-java/jpdl/constant.rb +5 -0
  73. data/lib/ontomde-java/jpdl/graphic.rb +52 -0
  74. data/lib/ontomde-java/jpdl/jpdl.rb +281 -0
  75. data/lib/ontomde-java/jpdl/jpdl_deploy.rb +114 -0
  76. data/lib/ontomde-java/jpdl/main.rb +348 -0
  77. data/lib/ontomde-java/jpdl/main.rdoc +2 -0
  78. data/lib/ontomde-java/jpdl/processOperationToClass.rb +316 -0
  79. data/lib/ontomde-java/kbjava.rb +6 -0
  80. data/lib/ontomde-java/kbjava/rdfToJava.rb +407 -0
  81. data/lib/ontomde-java/struts.rb +27 -0
  82. data/lib/ontomde-java/struts/MessageResources.rb +359 -0
  83. data/lib/ontomde-java/struts/action.rb +883 -0
  84. data/lib/ontomde-java/struts/blob.rb +11 -0
  85. data/lib/ontomde-java/struts/exceptionHandling.rb +167 -0
  86. data/lib/ontomde-java/struts/footer.rb +128 -0
  87. data/lib/ontomde-java/struts/form.rb +450 -0
  88. data/lib/ontomde-java/struts/header.rb +37 -0
  89. data/lib/ontomde-java/struts/header_link.rb +39 -0
  90. data/lib/ontomde-java/struts/jsp_edit.rb +870 -0
  91. data/lib/ontomde-java/struts/jsp_edit_field.rb +1 -0
  92. data/lib/ontomde-java/struts/jsp_edit_js.rb +124 -0
  93. data/lib/ontomde-java/struts/jsp_index.rb +136 -0
  94. data/lib/ontomde-java/struts/localeAction.rb +641 -0
  95. data/lib/ontomde-java/struts/main.rb +41 -0
  96. data/lib/ontomde-java/struts/mappingForBean.rb +132 -0
  97. data/lib/ontomde-java/struts/mappingForJsp.rb +272 -0
  98. data/lib/ontomde-java/struts/mappingToJavaHierarchy.rb +87 -0
  99. data/lib/ontomde-java/struts/reloadAction.rb +33 -0
  100. data/lib/ontomde-java/struts/spring.rb +89 -0
  101. data/lib/ontomde-java/struts/struts-config.rb +232 -0
  102. data/lib/ontomde-java/struts/validation.rb +116 -0
  103. data/lib/ontomde-java/struts/validator.rb +341 -0
  104. data/lib/ontomde-java/struts/webXml.rb +195 -0
  105. data/lib/ontomde-java/struts/xmlForm.rb +308 -0
  106. data/lib/ontomde-java/version.rb +5 -0
  107. data/profiling.xls +0 -0
  108. data/test/.classpath +14 -0
  109. data/test/.project +17 -0
  110. data/test/.settings/org.eclipse.jdt.core.prefs +23 -0
  111. data/test/Rakefile +71 -0
  112. data/test/build.xml +34 -0
  113. data/test/classpath.rb +15 -0
  114. data/test/lib/junit-4.1.jar +0 -0
  115. data/test/load1.rb +3 -0
  116. data/test/load2.rb +3 -0
  117. data/test/log4j.properties +46 -0
  118. data/test/model/.project +11 -0
  119. data/test/model/BigProject.mdzip +0 -0
  120. data/test/model/BigProject.mdzip.nt +102866 -0
  121. data/test/model/ClassDiagram.EntArch.gif +0 -0
  122. data/test/model/ClassDiagram.emx.gif +0 -0
  123. data/test/model/ClassDiagram.mdzip.gif +0 -0
  124. data/test/model/model_ea71.bis.ea.xmi +149 -0
  125. data/test/model/model_ea71.ea.xmi +4470 -0
  126. data/test/model/model_ea71.eap +0 -0
  127. data/test/model/model_ea71_README.txt +8 -0
  128. data/test/model/multipleInheritance.emx +466 -0
  129. data/test/model/multipleInheritance.emx.nt +2428 -0
  130. data/test/model/simple1-530.ofp +0 -0
  131. data/test/model/simple1-includedAsReference.emx +169 -0
  132. data/test/model/simple1.emx +3729 -0
  133. data/test/model/simple1.emx.fragments.nt +81 -0
  134. data/test/model/simple1.emx.nt +5760 -0
  135. data/test/model/simple1.mdzip +0 -0
  136. data/test/model/simple1.mdzip.nt +11500 -0
  137. data/test/model/simple1.oe530.nt +1986 -0
  138. data/test/model/simple1.oe600.nt +1627 -0
  139. data/test/src/RuntimeTest.java +656 -0
  140. data/test/src/testsLevel1.java +174 -0
  141. data/test/src/testsLevel2.java +29 -0
  142. data/test/src/testsLevel3.java +40 -0
  143. data/test/test-ea7.sh +15 -0
  144. data/test/test-magicDraw.sh +10 -0
  145. data/test/test-mi.sh +9 -0
  146. data/test/test-oe530.sh +10 -0
  147. data/test/test-oe600.sh +11 -0
  148. data/test/test-rsm.sh +11 -0
  149. data/test/test_export_ea71.rb +5 -0
  150. data/test/test_export_oe530.rb +4 -0
  151. data/test/test_export_oe600.rb +4 -0
  152. data/test/test_export_rsm60.rb +4 -0
  153. data/test/trace +419 -0
  154. data/test/uml_test.rb +1434 -0
  155. data/test/uml_test.xls +0 -0
  156. data/test/unit_test.rb +6 -0
  157. 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
+