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,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