ontomde-java 2.0.0

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.
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,2 @@
1
+
2
+ TODO: documentation
@@ -0,0 +1,316 @@
1
+
2
+
3
+ #module Muml_Classifier
4
+ # STRUTS_APPLY_TO_PARAM="applyTo"
5
+ # STRUTS_APPLY_TO_PROP="ApplyTo"
6
+ #end
7
+
8
+ module Muml_Operation
9
+ rdf_safe_attr_reader_many :bpm_bizOperationReverse
10
+ end
11
+
12
+ module Muml_Parameter
13
+ #the method parameter
14
+ rdf_safe_attr_reader_many :bpm_sourceParameter
15
+ end
16
+
17
+
18
+ module Mrdf_Repository
19
+ def bpm_handleProcessMethods!
20
+ #return unless context[:withGenerateMethodForm]
21
+ uml_Class_all.each { |c|
22
+ next unless c.kind_of?(Muml_Class)
23
+ c.uml_ownedOperation.each {|biz|
24
+ next unless biz.kind_of?(Muml_Operation)
25
+ #next unless biz.umlx_businessMethod?
26
+
27
+ next if biz.umlx_isConstructor?
28
+ bpm_processMethods(c, biz) if biz.umlx_hasStereotype?("Process")
29
+ c.bpm_asyncMethods(biz) if biz.umlx_hasStereotype?("Async")
30
+ c.bpm_callbackMethods(biz) if biz.umlx_hasStereotype?("Callback")
31
+ }}
32
+ end
33
+
34
+
35
+ def bpm_processMethods(c, biz)
36
+
37
+ p=c.umlx_package
38
+ if p.nil?
39
+ log.error{"Model modification required !!! class #{c} is in root model element. Classes should be in a package."}
40
+ next
41
+ end
42
+ #Type de retour dans le mod�le
43
+ initialReturnParam = biz.uml_getReturnParameter
44
+ mpc=java_getClassWithQualifiedName("#{c.umlx_owner_one.java_qualifiedName}.#{biz.java_Name}")
45
+ mpc=p.umlx_createAndAddClass(biz.rdf_uri+"_proc") if mpc.nil?
46
+ mpc.umlx_businessMethod=RDF_TRUE
47
+ mpc.bpm_addAllOperationAggregateParameterClass!(biz)
48
+ code=%{ #{mpc.java_qualifiedName} proc=new #{mpc.java_qualifiedName}();}
49
+ biz.uml_ownedParameter.each { |param|
50
+ code=code+"proc.set#{param.java_NameBean}(#{param.java_Name});\n"
51
+ }
52
+
53
+ #Set the right Return Type on the Process
54
+ #If already specified in the Process definition, not overhide
55
+ #find the corresponding process
56
+ self.each { |k,p|
57
+ next if !p.kind_of?(Mbpm_process)
58
+ if "#{p.bpm_processName}" == "#{mpc.java_qualifiedName}"
59
+ # bpm_processReturnType is a string
60
+ p.bpm_processReturnType = initialReturnParam.uml_type.to_s if !initialReturnParam.nil? && p.bpm_processReturnType_one0.nil?
61
+ break
62
+ end
63
+ }
64
+
65
+ #If return set handler
66
+ code_getCallBackMethod = ""
67
+ if !initialReturnParam.nil?
68
+ c.bpm_manageAsynchronousMethods(biz)
69
+ code_getCallBackMethod = "handler"
70
+ end
71
+
72
+
73
+ #Modifiy the code of the method to manage the asynchronous
74
+ code=code+"proc.persist();proc.startAsynchronously(#{code_getCallBackMethod});\n"
75
+ biz.java_code=code
76
+
77
+ #Ajoute un champ calcule pour la visualization de la console
78
+ console=mpc.umlx_createAndAddProperty(mpc.rdf_uri+"_console","console")
79
+ console.uml_isDerived=RDF_TRUE
80
+ console.uml_type=mpc.umlx_getOrCreateDataType("URL")
81
+ mpc.java_addAccessorsFor!(console)
82
+ getter = console.java_AttributeGlobalGetter
83
+ getter[0].java_code = <<END_OF_STRING
84
+ if (this.getProcessId() != null) {
85
+ return "/ontomde-bpm-console/processimage?id=" + this.getProcessId();
86
+ } else {
87
+ return "#";
88
+ }
89
+ END_OF_STRING
90
+
91
+
92
+ # biz.uml_appliedStereotype.each {|s|
93
+ # #TODO: utiliser processImpl
94
+ # puts "add stereotype #{s} to #{mpc}::#{mpc.class}"
95
+ # mpc.uml_appliedStereotype_add(s)
96
+ # }
97
+
98
+ end
99
+
100
+
101
+ end
102
+
103
+ module Muml_Class
104
+
105
+ alias super_jpa_addStdImports! jpa_addStdImports!
106
+ def jpa_addStdImports!
107
+ super_jpa_addStdImports!
108
+
109
+ java_import_add("xmda.bpm.api.XmdaCallbackHandler")
110
+ java_import_add("xmda.bpm.api.client.EntityInstanceDescription")
111
+ java_import_add("xmda.bpm.api.client.EntityTaskDescription")
112
+ java_import_add("xmda.bpm.api.client.EntityTaskWithoutCallbackDescription")
113
+ java_import_add("xmda.bpm.api.jms.JmsCallbackHandler")
114
+ java_import_add(::DB::EntityGenericInterface)
115
+
116
+ end
117
+
118
+ #Ajoute une m�thode utilitaire pour r�cup�rer un handler correspondant � la m�thode
119
+ def bpm_callbackMethods(biz)
120
+ c=self
121
+ p=c.umlx_package
122
+ if p.nil?
123
+ log.error{"Model modification required !!! class #{c} is in root model element. Classes should be in a package."}
124
+ next
125
+ end
126
+ biz.java_annotation_add(%{@xmda.common.Callback})
127
+ type_callback=biz.bpm_callbackType
128
+
129
+ m=c.umlx_createAndAddOperation(biz.rdf_uri+"_handler","getOntomdeHandlerFor#{biz.uml_name}")#+self.java_NameBean)
130
+ m.uml_isStatic=RDF_TRUE
131
+ #m.uml_class=self
132
+ m.uml_visibility=Cuml_VisibilityKind::Public
133
+ #m.uml_isStatic=RDF_TRUE
134
+
135
+ param=m.umlx_createAndAddParameter(m.rdf_uri+"_this","_this")
136
+ i=c.umlx_getOrCreateInterface(DB::EntityInterface)
137
+ i.java_isGeneric=RDF_TRUE
138
+ param.uml_type=i
139
+ param.uml_direction=Cuml_ParameterDirectionKind::In
140
+ param.uml_upperValue=umlx_literal(1)
141
+ param.uml_lowerValue=umlx_literal(1)
142
+
143
+ rp=m.umlx_createAndAddParameter(m.rdf_uri+"_ret_param","return")
144
+ rp.uml_direction=Cuml_ParameterDirectionKind::Return
145
+ rp.uml_upperValue=umlx_literal(1)
146
+ rp.uml_lowerValue=umlx_literal(1)
147
+ i=c.umlx_getOrCreateInterface("xmda.bpm.api.XmdaCallbackHandler<#{type_callback}>")
148
+ i.java_isGeneric=RDF_TRUE
149
+ rp.uml_type=i
150
+ rp.uml_isOrdered=RDF_TRUE
151
+
152
+ m.java_annotation_add(%{@SuppressWarnings("unchecked")})
153
+
154
+ m.java_code=<<END_OF_STRING
155
+ return JmsCallbackHandler.Factory.createCallbackHandler(xmda.bpm.async.AsyncUtils.createAsyncTaskDescription(_this,"#{biz.uml_name}", new String[] {#{type_callback}.class.getName()}));
156
+ END_OF_STRING
157
+
158
+ end
159
+
160
+ def bpm_manageAsynchronousMethods(biz, not_delete_param=false)
161
+ returnParam = nil
162
+ biz.uml_returnResult.each { |p|
163
+ #pour RSM (non conformite de l'export)
164
+ next unless p.uml_direction_one.isReturn?
165
+ returnParam=p
166
+ biz.uml_returnResult.delete(p) if !not_delete_param
167
+ }
168
+ biz.uml_ownedParameter.each { |p|
169
+ next unless p.uml_direction_one.isReturn?
170
+ returnParam=p
171
+ biz.uml_ownedParameter.delete(p) if !not_delete_param
172
+ }
173
+ return if returnParam.nil?
174
+
175
+ downcaseName=biz.uml_name_one0
176
+ if downcaseName[0..0].downcase!=downcaseName[0..0]
177
+ downcaseName="#{downcaseName[0..0].downcase}#{downcaseName[1,downcaseName.length]}"
178
+ end
179
+
180
+ param=biz.umlx_createAndAddParameter(biz.rdf_uri+"_handler_param","handler")
181
+ i=self.umlx_getOrCreateInterface("xmda.bpm.api.XmdaCallbackHandler<#{returnParam.uml_type}>")
182
+ i.java_isGeneric=RDF_TRUE
183
+ param.uml_type=i
184
+ param.uml_direction=Cuml_ParameterDirectionKind::In
185
+ end
186
+
187
+
188
+ def bpm_asyncMethods(biz)
189
+ biz.java_annotation_add(%{@xmda.bpm.async.Async})
190
+ bpm_manageAsynchronousMethods(biz, true)
191
+ end
192
+
193
+ end
194
+
195
+ module Muml_Operation
196
+
197
+ def uml_getReturnParameter
198
+ fp=nil
199
+ uml_returnResult.each { |p|
200
+ #pour RSM (non conformite de l'export)
201
+ next unless p.uml_direction_one.isReturn?
202
+ fp=p
203
+ }
204
+ uml_ownedParameter.each { |p|
205
+ next unless p.uml_direction_one.isReturn?
206
+ fp=p
207
+ }
208
+ return fp
209
+ end
210
+
211
+ def bpm_returnType
212
+ fp = uml_getReturnParameter
213
+ if !fp
214
+ return "#{BPM::NullReturn}"
215
+ else
216
+ return "#{fp.uml_type}"
217
+ end
218
+ end
219
+
220
+ def bpm_callbackType
221
+ fp=nil
222
+ uml_ownedParameter.each { |p|
223
+ next if p.uml_direction_one.isReturn?
224
+ if !fp.nil?
225
+ log.error("Method #{self.uml_name} : Should not define Callback method with multiple parameters")
226
+ raise Warning.new(),"Method #{self.uml_name} : Should not define Callback method with multiple parameters"
227
+ else
228
+ fp=p
229
+ end
230
+
231
+ }
232
+ if !fp
233
+ return "#{BPM::NullReturn}"
234
+ else
235
+ return "#{fp.uml_type}"
236
+ end
237
+ end
238
+
239
+ end
240
+
241
+
242
+ module Muml_Classifier
243
+
244
+ rdf_safe_attr_reader_many :bpm_bizOperation
245
+ #
246
+ #Creates a class for every business method holding every parameters
247
+ #and
248
+ #
249
+ #
250
+
251
+ #STRUTS_RESULT_PARAM_NAME="_result"
252
+
253
+ def bpm_addAllOperationAggregateParameterClass!(biz)
254
+ mpc=self
255
+ mpc.bpm_bizOperation=biz
256
+ biz.bpm_bizOperationReverse_add(mpc)
257
+ #biz.bpm_bizForm=mpc
258
+ #mpc.uml_name="#{biz.umlx_owner_one.java_Name}#{biz.java_Name}PROC"
259
+ #method process is expected to be unique
260
+ #in namespace
261
+ mpc.uml_name="#{biz.java_Name.to_s}"
262
+
263
+ (biz.uml_ownedParameter+biz.uml_returnResult).each { |param|
264
+ next if param.uml_direction_one.isReturn?
265
+ mpcp=mpc.umlx_createAndAddProperty(param.rdf_uri+"_proc")
266
+ param.umlx_copyToAttributeProperty(mpcp)
267
+ mpcp.uml_name= param.uml_direction_one.isReturn? ? STRUTS_RESULT_PARAM_NAME : param.uml_name
268
+ }
269
+ mpc.bpm_addApplyToParameter!(biz)
270
+ mpc.bpm_addProceed!(biz)
271
+ #mpc.apaCom_addLogger!
272
+ end
273
+
274
+ def bpm_addApplyToParameter!(biz)
275
+ return
276
+ mpc=self
277
+ m,m1,m2=mpc.umlx_createAndAddAssociation(mpc.rdf_uri+"_apply",biz.umlx_owner_one)
278
+ m1.uml_name=STRUTS_APPLY_TO_PARAM
279
+ m2.uml_name="#{STRUTS_APPLY_TO_PARAM}_inv"
280
+ end
281
+
282
+ def bpm_addProceed!(biz)
283
+ return
284
+ mpc=self
285
+ cpt=mpc.umlx_createAndAddOperation(mpc.rdf_uri+"_proceed","proceed")
286
+ params=""; sep=""
287
+ hasRP=false
288
+ (biz.uml_ownedParameter+biz.uml_returnResult).each { |param|
289
+ if param.uml_direction_one.isReturn?
290
+ hasRP=true
291
+ next
292
+ end
293
+ params="#{params}#{sep}#{param.java_Name}"
294
+ sep=","
295
+ }
296
+ if(biz.uml_raisedException.empty?)
297
+ cpt.java_code=%{
298
+ #{hasRP ? "#{STRUTS_RESULT_PARAM_NAME}=" : ""} #{STRUTS_APPLY_TO_PARAM}.#{biz.java_Name}(#{params});
299
+ }
300
+ else
301
+ cpt.java_code=%{
302
+ try {
303
+ //log.error("before biz method");
304
+ //log.error("applyTo="+#{STRUTS_APPLY_TO_PARAM});
305
+ #{hasRP ? "#{STRUTS_RESULT_PARAM_NAME}=" : ""} #{STRUTS_APPLY_TO_PARAM}.#{biz.java_Name}(#{params});
306
+ //log.error("after biz method");
307
+ //log.error("result="+#{hasRP ? STRUTS_RESULT_PARAM_NAME : %{"-none-"}});
308
+ } catch(Exception e) {
309
+ //TODO: implement proper exception handling
310
+ throw new java.lang.RuntimeException(e);
311
+ }
312
+ }
313
+ end
314
+
315
+ end
316
+ end
@@ -0,0 +1,6 @@
1
+ h=File.dirname(__FILE__)
2
+
3
+ require "ontomde-uml2/kb"
4
+ require "ontomde-java"
5
+
6
+ require "ontomde-java/kbjava/rdfToJava.rb"
@@ -0,0 +1,407 @@
1
+ #This module is meant to be applied
2
+ #to a protege 2000 knowledge model
3
+ class Crdf_ProtegeDataModel < Crdf_Repository
4
+
5
+ #uml model used to generate this protege data model
6
+ #attr :umlSourceModel
7
+ attr_accessor :kbjava_umlSourceModel
8
+
9
+ #Generates a DataSet
10
+ #default generation path may be overriden by providing appropriate context.
11
+ def kbjava_generate
12
+ mtk_default_context(:dataTestClassName=>'UserData',:dataTestPackageName => 'xmda.test') {
13
+
14
+ dc=@kbjava_umlSourceModel.umlx_reserved_model.umlx_getOrCreateClass("#{context[:dataTestPackageName]}.#{context[:dataTestClassName]}")
15
+ dc.umlx_external=RDF_FALSE
16
+
17
+ #No Gui is provided for TestData (class is too big)
18
+ dc.umlx_businessMethod=RDF_FALSE
19
+
20
+ #UserData must be transient because UserData links
21
+ #eventually to many many many objects and this
22
+ #would generate has many columns in database
23
+ #and as many joins.
24
+ dc.db_isTransient=RDF_TRUE
25
+
26
+ kbjava_addData!(dc)
27
+ }
28
+ end
29
+
30
+
31
+
32
+ #writes all in one java class which will contain all of
33
+ #our test instances loaded from source protege data model.
34
+ def kbjava_addData!(umlDataClass)
35
+ #write "package #{context[:dataTestPackageName]};\n"
36
+ #write("public class #{context[:dataTestClassName]} {\n")
37
+
38
+ #mtk_protected("converter") {
39
+ umlDataClass.java_customCode= <<END
40
+ private static java.text.SimpleDateFormat dfCalendar= new java.text.SimpleDateFormat("yyyy/MM/dd",java.util.Locale.ENGLISH);
41
+ private static java.text.SimpleDateFormat dfTimestamp= new java.text.SimpleDateFormat("yyyy/MM/dd",java.util.Locale.ENGLISH);
42
+ public java.util.Date convertCalendar(final String s) {
43
+ try {
44
+ return dfCalendar.parse(s) ;
45
+ } catch (java.text.ParseException e) {
46
+ throw new java.lang.RuntimeException(e);
47
+ }
48
+ }
49
+ public java.util.Date convertTimestamp(final String s) {
50
+ try {
51
+ return dfTimestamp.parse(s) ;
52
+ } catch (java.text.ParseException e) {
53
+ throw new java.lang.RuntimeException(e);
54
+ }
55
+ }
56
+
57
+ END
58
+
59
+ #}
60
+ [true,false].each {|stepOne|
61
+ self.each { |k,c|
62
+ next unless c.kbjava_isUmlObject?
63
+ c.kbjava_writeJavaObject(@kbjava_umlSourceModel, self,umlDataClass,stepOne)
64
+ }}
65
+ #write "}"
66
+ #@kbjava_umlSourceModel.kbjava_computeCoverage
67
+ end
68
+
69
+ def kbjava_generateJavaJunit!
70
+ self.each { |k,c|
71
+ next unless c.kind_of?(Mkb_UML_TEST_DATA_SET)
72
+ uml_type=c.rdf_type.kbjava_uml_model_element(@kbjava_umlSourceModel)
73
+ p=uml_type.umlx_owner_one
74
+ p=p.umlx_getOrCreatePackage(context[:kbjava_junitSubPackage,"junitUseCase"],p)
75
+ p=p.umlx_getOrCreatePackage(uml_type.java_Name.to_s,p)
76
+
77
+ n=p.umlx_createAndAddClass("#{c.rdf_uri}_junit","junit#{c.kb_UML_DATA_SET_NAME}")
78
+
79
+ #Provide a Gui
80
+ n.umlx_businessMethod=RDF_TRUE
81
+ #puts "n=#{n.uml_name} busniess=#{n.umlx_businessMethod?}"
82
+ #n.apaCom_addLogger!
83
+ n.db_isTransient=RDF_TRUE
84
+ #n.struts_isForm=RDF_FALSE
85
+ n.umlx_external=RDF_FALSE
86
+ n.java_import='org.junit.Test'
87
+ #n.java_import_add('java.io.PrintWriter');
88
+ #n.java_import_add('java.io.StringWriter');
89
+ n.java_isATestFile=RDF_TRUE
90
+
91
+ #also avoid org.junit.* import notused warning in Eclipse
92
+ n.java_customCode="@Test\npublic void replaceWithMeaningfulTest(){}\n"
93
+
94
+ m=n.umlx_createAndAddOperation(n.rdf_uri+"merge","merge");
95
+ #TODO merge referenced items
96
+ m.java_code="return this;"
97
+ p=m.umlx_createAndAddReturnParameter(m.rdf_uri+'_ret',"return")
98
+ p.uml_type=n
99
+ m.umlx_businessMethod=RDF_FALSE
100
+
101
+
102
+ persist=n.umlx_createAndAddOperation(n.rdf_uri+"persist","persist");
103
+ persist.java_code="" # #{java_debug(%{log.debug("persisting referenced persistent elements");}\n}"
104
+ p=persist.umlx_createAndAddReturnParameter(persist.rdf_uri+'_ret',"return")
105
+ p.uml_type=n
106
+ persist.umlx_businessMethod=RDF_FALSE
107
+
108
+
109
+ #v=n.umlx_createAndAddProperty(n.rdf_uri+"__source","source");
110
+
111
+ #ds="#{context[:dataTestPackageName]}.#{context[:dataTestClassName]}"
112
+ #TODO: remove hard coded
113
+ ds="xmda.test.UserData"
114
+ #v.uml_type=n.umlx_getOrCreateClass(ds)
115
+ #v.java_code="null"
116
+
117
+ j=<<END
118
+ // using one single source object
119
+ // enables objects retrieved to be linked together.
120
+ // Objects retrieved with a new source will *not* be linked together.
121
+ #{ds} source=new #{ds}();
122
+ END
123
+ c.kb_UML_DATA.each { |d|
124
+ if d.kb_UML_INSTANCE_ALIAS.empty?
125
+ log.warn("data ignored in junit #{c} because of missing UML_INSTANCE_ALIAS")
126
+ next
127
+ end
128
+ u=d.rdf_type.kbjava_uml_model_element(@kbjava_umlSourceModel)
129
+ p=n.umlx_createAndAddProperty(n.rdf_uri+d.rdf_uri,"#{d.kb_UML_INSTANCE_ALIAS}");
130
+ p.uml_type=u
131
+ p.uml_isReadOnly=RDF_TRUE
132
+ p.java_code="null"
133
+
134
+ j="#{j}\n set#{p.java_NameBean}(source.get#{p.java_NameBean}());"
135
+ persist.java_code="#{persist.java_code.to_s} get#{p.java_NameBean}().persist();\n"
136
+ }
137
+
138
+ m=n.umlx_createAndAddOperation(n.rdf_uri+"initData","initData")
139
+ m.umlx_businessMethod=RDF_FALSE
140
+ m.java_code="#{j} return this;"
141
+ m.java_annotation_add(%{@SuppressWarnings("unused")})
142
+ p=m.umlx_createAndAddReturnParameter(m.rdf_uri+'_ret',"return")
143
+ p.uml_type=n
144
+
145
+ persist.java_code="#{persist.java_code.to_s} return this;\n"
146
+ }
147
+ end
148
+
149
+ end
150
+
151
+ class Ckb_UML_SLOT < ::Crdf_Property
152
+ end
153
+
154
+ #
155
+ class Ckb_UML_METACLASS < Crdfs_Class
156
+ def kbjava_uml_model_element(umlSourceModelParam)
157
+ r=umlSourceModelParam[::UriNamespace.instance.urialias(@kb_UML_URI.to_s)]
158
+ return r unless r.nil?
159
+
160
+ # not found but it is normal
161
+ return nil if Mrdf_Repository::SOA_URI_SET.include?(@kb_UML_URI.to_s)
162
+
163
+ puts("WARNING: uml item not found for uri=--#{@kb_UML_URI}--")
164
+ return nil
165
+ end
166
+ end
167
+
168
+ class ::Crdfs_Class
169
+
170
+ def kbjava_umlSourceModel
171
+ return rdf_Repository.kbjava_umlSourceModel
172
+ end
173
+
174
+ #uml model used to generate this protege data model
175
+ rdf_safe_attr_reader_many :kbjava_property
176
+ #rdf_safe_attr_reader_many :kbjava_initMethod
177
+ def kbjava_writeJavaObject(umlSourceModelParam, dataSource,umlDataClass,stepOne)
178
+ if rdf_type.nil?
179
+ # object was created localy (it was not loaded from file)
180
+ return
181
+ end
182
+ uml_type=self.rdf_type.kbjava_uml_model_element(umlSourceModelParam)
183
+
184
+ return if uml_type.kind_of?(Muml_UseCase)
185
+ return if uml_type.nil? # element is not mapped to an uml class (soa:soa, ...)
186
+
187
+ if stepOne
188
+ # Create attributes and every init methods (body expected)
189
+ uml_type.kb_coverage_add(self)
190
+ p=umlDataClass.umlx_createAndAddProperty(umlDataClass.rdf_uri+kbjava_varName,kbjava_varName.to_s)
191
+ p.uml_type=uml_type
192
+ p.uml_visibility= Cuml_VisibilityKind::Private
193
+ #p.java_noAccessors=RDF_TRUE
194
+ self.kbjava_property=p
195
+
196
+ #init method
197
+ #p=self.kbjava_property_one
198
+ #i=umlDataClass.umlx_createAndAddOperation(umlDataClass.rdf_uri+"init"+kbjava_varName,"init#{kbjava_varName}")
199
+ #i.uml_visibility= kbjava_isPublic? ? Cuml_VisibilityKind::Public : Cuml_VisibilityKind::Private
200
+ #r=i.umlx_createAndAddReturnParameter(i.rdf_uri+"ret","_return")
201
+ #r.uml_type=p.uml_type_one
202
+ #self.kbjava_initMethod=i
203
+
204
+ umlDataClass.java_addGlobalGetter!(p)
205
+ else
206
+ # Create init methods body
207
+ p=self.kbjava_property_one
208
+ #i=self.kbjava_initMethod_one
209
+ i=p.java_AttributeGlobalGetter_one
210
+ #write "private #{uml_type.java_qualifiedName} #{kbjava_varName}=null;\n"
211
+ #write "#{kbjava_public ? "public" : "private"} #{uml_type.java_qualifiedName} get#{kbjava_varName}() {"
212
+ #p=self.kbjava_property_one
213
+ i.java_code= <<ENDinit
214
+ if(#{p.java_Name}==null){
215
+ #{p.java_Name}= new #{uml_type.java_qualifiedName}();
216
+ #{p.uml_type_one.java_qualifiedName} elt= #{p.java_Name};
217
+ #{mtk_stss{kbjava_writeJavaObjectSetters(dataSource)}}
218
+ }
219
+ return #{p.java_Name};
220
+ ENDinit
221
+
222
+ # overide getter with init
223
+ end
224
+ end
225
+
226
+ # Returns test object variable name which will be used to store this test object.
227
+ # Return uri if test object has no name.
228
+ def kbjava_varName
229
+ return kbjava_aliasName.nil? ? uri : kbjava_aliasName
230
+ end
231
+
232
+ #
233
+ def kbjava_aliasName
234
+ s=@kb_UML_INSTANCE_ALIAS
235
+ return nil if s.nil? || s.empty?
236
+ return s.to_s
237
+ end
238
+
239
+ def kbjava_isPublic?
240
+ return !kbjava_aliasName.nil?
241
+ end
242
+
243
+ def kbjava_uml_property_values(dataSource)
244
+ ret=Hash.new
245
+ instance_variables.each {
246
+ |m|
247
+ next if ["@kbjava_property","@kb_UML_URI","@kb_UML_LABEL","@rdfs_label","@ext_isReferencedBy","@rdfs_subClassOf", "@kb_UML_INSTANCE_ALIAS","@kb_UML_REFERENCED_USE_CASE","@kb_inv_UML_REFERENCED_USE_CASE","@kb_UML_USE_CASE_ENV"].include?(m)
248
+
249
+ var = instance_variable_get(m)
250
+ rawval = self.instance_variable_get(m)
251
+
252
+ next unless rawval.kind_of?(ArrayOrSingleElement)
253
+
254
+ protprop_ident=m[1,m.length] #remove leading @
255
+ protprop_uri=getRubyNameInverse(protprop_ident)
256
+ protprop=dataSource[protprop_uri]
257
+
258
+ umluri=protprop.instance_variable_get("@kb_UML_URI").to_s
259
+ umlurialiased=::UriNamespace.instance.urialias(umluri)
260
+ umlprop=kbjava_umlSourceModel[umlurialiased]
261
+
262
+ if umlprop.nil?
263
+ log.warn { "uml prop not found for slot '#{m}' umluri='#{umluri}' umluriprop='#{umlurialiased}'" }
264
+ next
265
+ end
266
+ ret[umlprop]=rawval
267
+ }
268
+ return ret
269
+ end
270
+
271
+ def kbjava_writeJavaObjectSetters(dataSource)
272
+ kbjava_uml_property_values(dataSource).each {
273
+ |umlprop,rawval|
274
+ umlprop.kb_coverage_add(rawval)
275
+ rawval.each {|v|
276
+ kbjava_writeJavaObjectSetter(umlprop,v)
277
+ }
278
+ }
279
+ end
280
+
281
+ def kbjava_writeJavaObjectSetter(umlprop,valitem)
282
+ return if umlprop.uml_name.empty?
283
+ return unless umlprop.umlx_isNavigable?
284
+
285
+ #t=umlprop.uml_type_one.java_qualifiedName
286
+
287
+ m=DatatypeMapping.instance.getMapping(umlprop.uml_type_one)
288
+ v=m.prot_convertToJava(umlprop,valitem)
289
+ #i=m.prot_init(umlprop,valitem)
290
+
291
+ #puts "i='#{i}'"
292
+ meth=umlprop.umlx_upperValueIsOne? ? "set" : "add"
293
+ #write " #{i}/* tpl-kbjava01 */\n"
294
+ write "// read only " if umlprop.uml_isReadOnly?
295
+ write " elt.#{meth}#{umlprop.java_NameBean}(#{v});\n"
296
+ end
297
+ end
298
+
299
+ module Muml_Element
300
+ rdf_safe_attr_reader_many :kb_coverage
301
+ end
302
+ module Mrdf_Repository
303
+ def kbjava_computeCoverage
304
+ puts "COVERAGE REPORT"
305
+ puts %{class|property|hit|min hit\n}
306
+ ret=Array.new
307
+ uml_Class_all.each { |c|
308
+
309
+ next if c.uml_isAbstract?
310
+ next if c.kind_of?(Cuml_Enumeration)
311
+ next if c.uml_ownedAttribute.empty?
312
+ puts %{#{c.uml_name}|id|#{c.kb_coverage.size}|1\n}
313
+ c.uml_ownedAttribute.each {|a|
314
+ max=a.uml_type_one.kind_of?(Muml_Enumeration) ? a.uml_type_one.uml_ownedLiteral.size : "1"
315
+ puts %{#{c.uml_name}|#{a.uml_name}|#{a.kb_coverage.size}|#{max}\n}
316
+ ret<< { "class" => c.uml_name,"property"=> a.uml_name, "hit" =>a.kb_coverage.size, "minhit" => max}
317
+ }
318
+
319
+ }
320
+ puts "COVERAGE REPORT END"
321
+ return ret
322
+ end
323
+ end
324
+
325
+ module Mrdf_Resource
326
+ def kbjava_isUmlObject?
327
+ c=self
328
+ # filters out Protege meta-model element
329
+ return false if (c.kind_of?(Ckb_UML_METACLASS))||(c.kind_of?(Ckb_UML_SLOT))
330
+ # filters out rdf root elements
331
+ return false if (c.class==Crdf_Resource) || (c.class==Crdf_Property)
332
+ return true
333
+ end
334
+ end
335
+
336
+ class DatatypeMapping
337
+ def prot_init(umlprop,valitem)
338
+ return ""
339
+ end
340
+ end
341
+
342
+ class DatatypeMappingText < DatatypeMapping
343
+ # Protege string to Java code conversions
344
+ def prot_convertToJava(umlprop,valitem)
345
+ return %{"#{valitem}"}
346
+ end
347
+ end
348
+ class DatatypeMappingInteger < DatatypeMappingOrdinal
349
+ # Protege string to Java code conversions
350
+ def prot_convertToJava(umlprop,valitem)
351
+ #Remove leading 0 (octal)
352
+ return valitem.gsub(/^0*([0-9])/,'\1')
353
+ end
354
+ end
355
+ class DatatypeMappingLong < DatatypeMappingOrdinal
356
+ # Protege string to Java code conversions
357
+ def prot_convertToJava(umlprop,valitem)
358
+ #Remove leading 0 (octal)
359
+ return valitem.gsub(/^0*([0-9])/,'\1')
360
+ end
361
+ end
362
+ class DatatypeMappingFile < DatatypeMapping
363
+ # Protege string to Java code conversions
364
+ def prot_convertToJava(umlprop,valitem)
365
+ # ??
366
+ return valitem
367
+ end
368
+ end
369
+ class DatatypeMappingBoolean < DatatypeMapping
370
+ # Protege string to Java code conversions
371
+ def prot_convertToJava(umlprop,valitem)
372
+ return valitem
373
+ end
374
+ end
375
+ class DatatypeMappingTimeStamp < DatatypeMapping
376
+ # Protege string to Java code conversions
377
+ def prot_convertToJava(umlprop,valitem)
378
+ return %{convertTimestamp("#{valitem}")}
379
+ end
380
+ end
381
+ class DatatypeMappingCalendar < DatatypeMapping
382
+ # Protege string to Java code conversions
383
+ def prot_convertToJava(umlprop,valitem)
384
+ return %{convertCalendar("#{valitem}")}
385
+ end
386
+ end
387
+ class DatatypeMappingGenericClass < DatatypeMapping
388
+ # Protege string to Java code conversions
389
+ def prot_convertToJava(umlprop,valitem)
390
+ return "#{valitem.kbjava_property_one.java_AttributeGlobalGetter_one.java_Name}()"
391
+ end
392
+ def prot_init(umlprop,valitem)
393
+ return ""
394
+ #return "init#{umlprop.java_NameBean}();/* #{umlprop.class} */"
395
+ end
396
+ end
397
+ class DatatypeMappingGenericEnum < DatatypeMapping
398
+ # Protege string to Java code conversions
399
+ def prot_convertToJava(umlprop,valitem)
400
+ lit=nil
401
+ umlprop.uml_type_one.uml_ownedLiteral.each { |i|
402
+ next if i.to_s!=valitem.to_s
403
+ lit=i
404
+ }
405
+ return "#{umlprop.uml_type_one.java_qualifiedName}.#{lit.java_Name}"
406
+ end
407
+ end