ontomde-uml2-struts 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,140 @@
1
+
2
+ module Mrdf_Model
3
+
4
+ def struts_allInOneTransform!
5
+ umlx_autoImplementProperty! if context[:withAutoImplementProperty]
6
+ umlx_autoImplementOperation! if context[:withAutoImplementOperation]
7
+ java_addEnumAssignable! if context[:withEnumAssignable]
8
+ #
9
+ #Usefull in case of Flex integration
10
+ java_addEnumCompatibilityLayerProperties! if context[:withEnumAsString]
11
+ umlx_MarkAllAsbusinessMethod!
12
+
13
+ umlx_makeCompositionNavigable!
14
+ struts_addReloadDefinitionsAction
15
+ struts_addAllOperationAggregateParameterClass!
16
+ java_transform!
17
+ db_addPersistence!
18
+ struts_addActionLocaleForm!
19
+ struts_addPerClassElement!
20
+
21
+
22
+ db_addTestImplementations! if context[:simulateNotImplementedMethods]
23
+ struts_messageCheck if context[:messageCheck]
24
+ end
25
+
26
+ def struts_viewableClassifier(ignoreAbstract=true)
27
+ ret=Array.new
28
+ uml_Class_all.each { |c|
29
+ next unless (c.kind_of?(Muml_Class) && c.umlx_isReallyAClass?) #TODO: for jdo || c.kind_of?(Muml_Interface)
30
+ next if c.java_ignoreMe?
31
+ next if c.struts_isForm?
32
+ #next if c.java_isATestFile?
33
+
34
+ #TODO: Hack for human task (bug if MPC in name)!
35
+ if context[:db_useStereotypeMarker] && !"#{c.uml_name}".include?("MPC")
36
+ next if c.db_isTransient?
37
+ end
38
+
39
+ next if c.db_isDAO?
40
+ next unless c.umlx_businessMethod?
41
+ #no struts for abstract classes
42
+ next if c.uml_isAbstract? && ignoreAbstract
43
+ ret<< c
44
+ }
45
+ return ret
46
+ end
47
+ def struts_addPerClassElement!
48
+ struts_viewableClassifier.each { |c|
49
+ c.struts_addActionForm!
50
+ }
51
+ struts_viewableClassifier.each { |c|
52
+ next if c.struts_actionForm_one0.nil?
53
+ c.struts_addAction!
54
+ }
55
+ end
56
+
57
+ def struts_allInOneGenerate
58
+ struts_generate_webxml
59
+ struts_struts_config_generate
60
+ struts_validator_generate
61
+ struts_validation_generate
62
+ struts_copyReloadDefinitionsActionClass
63
+
64
+ struts_index_generate
65
+ struts_edit_generate
66
+
67
+ java_generate
68
+ struts_messageResources_generate
69
+ #struts_servlet_generate
70
+ #umlx_getOrCreateClass("org.apache.struts.action.ActionForm")
71
+ #struts_servlet_generate
72
+
73
+ db_generateConfiguration
74
+ struts_messageResources_generate
75
+ end
76
+
77
+ def struts_installRessources
78
+ log.info "struts_installRessources disabled"
79
+ return
80
+ mtk_writeSession("#{context[:targetDir]}/.ontomde_java_res") {
81
+ write("ontomde_java_res=#{Mrdf_Model::JAVALIB_DIR.gsub(/\\/,'/')}\n")
82
+ }
83
+ return
84
+ build=context[:webContentDir]
85
+ zipdir=Mrdf_Model::JAVALIB_DIR
86
+ src1="#{zipdir}/JavaProject-WEB-INF.zip"
87
+ tg1="#{context[:webContentDir]}/WEB-INF/"
88
+ cmd1="unzip -q -n #{src1} -d #{tg1}"
89
+
90
+ tg2="#{context[:webContentDir]}"
91
+ src2="#{zipdir}/JavaProject-WebContent.zip"
92
+ cmd2="unzip -q -n #{src2} -d #{tg2}/ "
93
+
94
+ tg3="#{context[:javaDir]}"
95
+ src3="#{zipdir}/JavaProject-java.zip"
96
+ cmd3="unzip -q -n #{src3} -d #{tg3} "
97
+
98
+ tg4="#{context[:javaDir]}"
99
+ src4="#{zipdir}/rootZip.zip"
100
+ cmd4="unzip -q -n #{src4} -d #{tg4} "
101
+
102
+
103
+ if (! File.exists?(src1))
104
+ log.info("libraries not included in this distribution. You will have to download and unzip this file in the webapp directory (#{src1},#{src2},#{src3} )")
105
+ return
106
+ end
107
+
108
+
109
+ if File.exists?("#{build}/WEB-INF/lib/")
110
+ log.info "UNZIP skipped"
111
+ else
112
+ FileUtils.mkdir_p(build)
113
+ if(context[:useUnzip,false])
114
+ log.info "UNZIP !!!"
115
+ [cmd1,cmd2,cmd3].each { |cmd|
116
+ raise "****\nERROR running unzip\n#{cmd}\n*****" unless system(cmd)
117
+ }
118
+ else
119
+ #no unzip
120
+ log.info "copy #{src1} to #{tg1}"
121
+ FileUtils.cp(src1,tg1)
122
+ log.info "copy #{src2} to #{tg2}"
123
+ FileUtils.cp(src2,tg2)
124
+ log.info "copy #{src3} to #{tg3}"
125
+ FileUtils.cp(src3,tg3)
126
+ log.info "copy #{src4} to #{tg4}"
127
+ FileUtils.cp(src4,tg4)
128
+ puts("************")
129
+ puts("************")
130
+ puts("PLEASE UNZIP #{tg1}/#{File.basename(src1)}")
131
+ puts("PLEASE UNZIP #{tg2}/#{File.basename(src2)}")
132
+ puts("PLEASE UNZIP #{tg3}/#{File.basename(src3)}")
133
+ puts("PLEASE UNZIP #{tg4}/#{File.basename(src4)}")
134
+ puts("************")
135
+ puts("************")
136
+ end
137
+ end
138
+ end
139
+
140
+ end
@@ -0,0 +1,132 @@
1
+ #defines mapping between struts bean types (string,boolean,...) and strings
2
+
3
+
4
+ class JavaMapping
5
+ #returns code to be inserted in struts form copyTo
6
+ #def getFormCopyTo(field)
7
+ # # inheriting class should redefine this method
8
+ # log.error %{getFormCopyTo not implemented for #{self.class}}
9
+ # return %{/* TODO: implement ruby getFormCopyTo for #{self.class}*/}
10
+ #end
11
+ #returns code to be inserted in struts form initFrom
12
+ #def getFormInitFrom(field)
13
+ # # inheriting class should redefine this method
14
+ # log.error %{getFormInitFrom not implemented for #{self.class}}
15
+ # return %{/* TODO: implement ruby getFormInitFrom for #{self.class}*/}
16
+ #end
17
+ def getFormCopyTo(field)
18
+ return %{_to.set#{field.java_NameBean}(#{getJavaParse(%{this.get#{field.java_NameBean}()})});\n}
19
+ end
20
+ def getFormInitFrom(field)
21
+ return %{this.set#{field.java_NameBean}(#{getJavaToString(%{_from.get#{field.java_NameBean}()})});\n}
22
+ end
23
+ def getFormType(field)
24
+ return field.umlx_dataType_string
25
+ end
26
+ end
27
+
28
+
29
+ class JavaMappingText < JavaMapping
30
+ def getJavaToString(jsrc)
31
+ return jsrc
32
+ end
33
+ def getJavaParse(jsrc)
34
+ return jsrc
35
+ end
36
+ end
37
+
38
+ class JavaMappingInteger < JavaMappingOrdinal
39
+ def getJavaToString(jsrc)
40
+ return "Integer.toString(#{jsrc})"
41
+ end
42
+ def getJavaParse(jsrc)
43
+ return "Integer.parseInt(#{jsrc})"
44
+ end
45
+ end
46
+
47
+ class JavaMappingLong < JavaMappingOrdinal
48
+ def getJavaToString(jsrc)
49
+ return "Long.toString(#{jsrc})"
50
+ end
51
+ def getJavaParse(jsrc)
52
+ return "Long.parseLong(#{jsrc})"
53
+ end
54
+ end
55
+
56
+ class JavaMappingLongObject < JavaMappingOrdinal
57
+ def getJavaToString(jsrc)
58
+ # cast is to make sure we have a Long and avoid difficult debugging
59
+ return "((Long)#{jsrc}).toString()"
60
+ end
61
+ def getJavaParse(jsrc)
62
+ return "((Long)Long.parseLong(#{jsrc}))"
63
+ end
64
+ end
65
+
66
+ class JavaMappingFile < JavaMapping
67
+ def getFormCopyTo(field)
68
+ "/* not implemented #{field} */\n"
69
+ #super # TODO
70
+ # /*TPL:9004*/"
71
+ end
72
+ def getFormInitFrom(field)
73
+ "/* not implemented #{field} */\n"
74
+ #super # TODO
75
+ # /*TPL:9004*/"
76
+ end
77
+ end
78
+
79
+ class JavaMappingBoolean < JavaMapping
80
+ def getJavaToString(jsrc)
81
+ return %{((#{jsrc}) ? "true" : "false")}
82
+ end
83
+ def getJavaParse(jsrc)
84
+ return %{((#{jsrc}).compareTo("true")==0)}
85
+ end
86
+ end
87
+
88
+ class JavaMappingTimeStamp < JavaMapping
89
+ def getFormCopyTo(field)
90
+ return %{
91
+ if(get#{field.java_NameBean}().length()>0) { try {
92
+ java.util.Date local=#{::Muml_Classifier::STRUTS_TIMESTAMP_FORMATER_INSTANCE}.parse(get#{field.java_NameBean}());
93
+ java.util.Date gmt = xmda.struts.FormHelper.transformFromCurrentTZToGMT(currentTimeZone, local);
94
+ // the date is saved in the GMT timeZone
95
+ _to.set#{field.java_NameBean}(gmt);
96
+ } catch(java.text.ParseException e) { log.error(e);}/*TPL:9006b*/\n
97
+ }}
98
+ end
99
+
100
+ def getFormInitFrom(field)
101
+ return "this.set#{field.java_NameBean}(_from.get#{field.java_NameBean}()==null?null:#{::Muml_Classifier::STRUTS_TIMESTAMP_FORMATER_INSTANCE}.format(xmda.struts.FormHelper.transformFromGMTToCurrentTZ(currentTimeZone,_from.get#{field.java_NameBean}())));\n"
102
+ end
103
+ end
104
+
105
+ class JavaMappingCalendar < JavaMapping
106
+ def getFormCopyTo(field)
107
+ return "if(get#{field.java_NameBean}().length()>0){try {_to.set#{field.java_NameBean}(#{::Muml_Classifier::STRUTS_DATE_FORMATER_INSTANCE}.parse(get#{field.java_NameBean}()));\n} catch(java.text.ParseException e) {log.error(e);}}/*TPL:9006a*/\n"
108
+ end
109
+
110
+ def getFormInitFrom(field)
111
+ return "this.set#{field.java_NameBean}(_from.get#{field.java_NameBean}()==null?null:#{::Muml_Classifier::STRUTS_DATE_FORMATER_INSTANCE}.format(_from.get#{field.java_NameBean}()));\n"
112
+ end
113
+ end
114
+
115
+ class JavaMappingBLOB < JavaMapping
116
+ def getFormType(field)
117
+ return field.umlx_getOrCreateClass("org.apache.struts.upload.FormFile")
118
+ end
119
+ def getFormCopyTo(field)
120
+ return "try {_to.set#{field.java_NameBean}(get#{field.java_NameBean}().getFileData());\n} catch(java.io.FileNotFoundException e) {log.error(e);} catch(java.io.IOException e2){log.error(e2);}\n"
121
+ end
122
+
123
+ def getFormInitFrom(field)
124
+ return ""
125
+ #return "this.set#{field.java_NameBean}(_from.get#{field.java_NameBean}()==null?null:#{::Muml_Classifier::STRUTS_DATE_FORMATER_INSTANCE}.format(_from.get#{field.java_NameBean}()));\n"
126
+ end
127
+ end
128
+
129
+ class JavaMappingGRAPHVIZ < JavaMappingLargeText
130
+ end
131
+
132
+
@@ -0,0 +1,272 @@
1
+ # JSP mapping for data types, enums and classes
2
+
3
+
4
+ class JavaMapping
5
+ #returns true if this templates applies to datatype
6
+ def getJSP(datatype,field,owner)
7
+ # inheriting class should redefine this method
8
+ log.error %{getJSP not implemented for #{self.class}}
9
+ return %{<!-- TODO: implement ruby getJSP for #{self.class} --!>}
10
+ end
11
+
12
+ #adds special action for this type
13
+ def addActionFieldMethod!(field,action,form)
14
+ end
15
+
16
+ end
17
+
18
+
19
+ class JavaMappingText < JavaMapping
20
+ def getJSP(datatype,field,owner)
21
+ n=datatype.java_Name.downcase #TODO
22
+ return %{<html:text property="#{field.java_Name}" size="20%" maxlength="#{self.maxStringLength}" styleId="#{n}" #{::Muml_DataType::STRUTS_ERROR_STYLE}/>}
23
+ end
24
+ end
25
+
26
+ class JavaMappingLargeText < JavaMappingText
27
+ def getJSP(datatype,field,owner)
28
+ n=datatype.java_Name.downcase #TODO
29
+ #maxlength not supported by textarea
30
+ return %{<html:textarea property="#{field.java_Name}" styleId="#{n}" #{::Muml_DataType::STRUTS_ERROR_STYLE}/>}
31
+ end
32
+ end
33
+
34
+ class JavaMappingURL < JavaMappingText
35
+ def getJSP(datatype,field,owner)
36
+ # cf: http://www.osix.net/modules/article/?id=586
37
+ n=datatype.java_Name.downcase #TODO
38
+ return <<END
39
+ <html:text property="#{field.java_Name}" size="20%" maxlength="#{self.maxStringLength}" styleId="#{n}" #{::Muml_DataType::STRUTS_ERROR_STYLE} value="http://www.exemple.com" disabled="true"/>
40
+
41
+ <a onclick="javascript:document.getElementById('#{n}').disabled=false;document.getElementById('#{n}').value='';;">
42
+ <img src="res//orange/image/edit.gif" />
43
+ </a>&nbsp;<a onclick="javascript:window.open(document.forms[0].#{field.java_Name}.value);return false">
44
+ <img src="res//orange/image/go.gif" />
45
+ </a>
46
+ END
47
+ end
48
+ end
49
+
50
+
51
+ class JavaMappingInteger < JavaMappingOrdinal
52
+ def getJSP(datatype,field,owner)
53
+ super
54
+ end
55
+ end
56
+
57
+ class JavaMappingLong < JavaMappingOrdinal
58
+ def getJSP(datatype,field,owner)
59
+ super
60
+ end
61
+ end
62
+
63
+ class JavaMappingFile < JavaMapping
64
+ def getJSP(datatype,field,owner)
65
+ n=datatype.java_Name.downcase #TODO
66
+ return %{<html:file property="#{field.java_Name}" size="20%" maxlength="30" styleId="#{n}" #{::Muml_DataType::STRUTS_ERROR_STYLE}/>}
67
+ end
68
+ end
69
+
70
+ class JavaMappingBoolean < JavaMapping
71
+ def getJSP(datatype,field,owner)
72
+ if field.context[:jspUseXmdaTaglib]
73
+ return %{<xmda:checkbox property="#{field.java_Name}"/>\n}
74
+ else
75
+ return %{
76
+ <html:hidden property="#{field.java_Name}" />
77
+ <logic:equal value="true" property="#{field.java_Name}" name="#{STRUTS_BEAN_KEY}" >
78
+ <input type="checkbox" name="#{field.java_Name}_tmp" onClick='document.forms[0].#{field.java_Name}.value=this.checked;' checked />
79
+ </logic:equal>
80
+ <logic:notEqual value="true" property="#{field.java_Name}" name="#{STRUTS_BEAN_KEY}" >
81
+ <input type="checkbox" name="#{field.java_Name}_tmp" onClick='document.forms[0].#{field.java_Name}.value=this.checked;' />
82
+ </logic:notEqual>
83
+ }
84
+ end
85
+ end
86
+ end
87
+
88
+ class JavaMappingTimeStamp < JavaMapping
89
+ def getJSP(datatype,field,owner)
90
+ n="string"
91
+ #TODO: provide nicer html template
92
+ #xmda:dateText isCalendar defaults to "false"
93
+ return <<END
94
+ <xmda:dateText property="#{field.java_Name}" size="20%" maxlength="30" styleId="#{field.java_Name}Id" #{::Muml_DataType::STRUTS_ERROR_STYLE}/>
95
+ <script type="text/javascript">
96
+ function formatDate(cal) {
97
+ var date = cal.date;
98
+ var field = document.getElementById("#{field.java_Name}");
99
+ var locale = document.getElementById("#{field.java_Name}Locale").value;
100
+ field.value = transformToServerFormat(date, field, locale);
101
+
102
+ }
103
+ Calendar.setup(\{
104
+ inputField : "#{field.java_Name}Id", // id of the input field
105
+ localeField : "#{field.java_Name}Locale", //field containing locale (hidden)
106
+ showsTime : true,
107
+ timeFormat : "24",
108
+ onUpdate : formatDate
109
+ \});
110
+ </script>
111
+ END
112
+
113
+ end
114
+ end
115
+
116
+ class JavaMappingCalendar < JavaMapping
117
+ def getJSP(datatype,field,owner)
118
+ n="string"
119
+ #TODO: provide nicer html template
120
+ #isCalendar="true"
121
+ return <<END
122
+ <xmda:dateText isCalendar="true" property="#{field.java_Name}" size="20%" maxlength="#{self.maxStringLength}" styleId="#{field.java_Name}Id" #{::Muml_DataType::STRUTS_ERROR_STYLE}/>
123
+ <script type="text/javascript">
124
+ function formatDate(cal) {
125
+ var date = cal.date;
126
+ var field = document.getElementById("#{field.java_Name}");
127
+ var locale = document.getElementById("#{field.java_Name}Locale").value;
128
+ field.value = transformToServerFormat(date, field, locale);
129
+ }
130
+ Calendar.setup(\{
131
+ inputField : "#{field.java_Name}Id", // id of the input field
132
+ localeField : "#{field.java_Name}Locale", //field containing locale (hidden)
133
+ onUpdate : formatDate
134
+ \});
135
+ </script>
136
+ END
137
+ end
138
+ end
139
+
140
+ #Template used when no correct was found.
141
+ class JavaMappingerror # <
142
+ include Singleton
143
+ def getJSP(datatype,field,owner)
144
+ return %{<!-- TODO: fallback template used for datatype #{datatype} -->}
145
+ end
146
+ end
147
+
148
+ class JavaMappingGenericClass < JavaMapping
149
+ def getJSP(datatype,field,owner)
150
+ return "<!-- TODO:JSP #{self.class.name} -->"
151
+ end
152
+ end
153
+
154
+ class JavaMappingGenericEnum < JavaMapping
155
+ def getJSP(datatype,field,owner)
156
+ if field.context[:jspUseXmdaTaglib]
157
+ return getJSP_XmdaTagLib(datatype,field,owner)
158
+ else
159
+ return getJSP_StrutsOnly(datatype,field,owner)
160
+ end
161
+ end
162
+
163
+ def getJSP_XmdaTagLib(datatype,field,owner)
164
+ return %{
165
+ <html:select property="#{field.java_Name}" >
166
+ <xmda:i18noptionsCollection name="#{owner.java_Name}StrutsForm" property="#{field.java_Name}Sug" label="label" value="value"/>
167
+ </html:select>
168
+ }
169
+ end
170
+
171
+ def getJSP_StrutsOnly(datatype,field,owner)
172
+ return <<END
173
+ <html:select property="#{field.java_Name}" >
174
+ <logic:iterate id="_#{field.java_Name}" name="#{owner.java_Name}StrutsForm" property="#{field.java_Name}Sug" >
175
+ <option value="<bean:write name="_#{field.java_Name}" property="value" />" >
176
+ <bean:define id="_id">
177
+ <bean:write name="_#{field.java_Name}" property="label" />
178
+ </bean:define>
179
+ <%-- TODO: eviter entrelacement balises XML --%>
180
+ <bean:message key="<%= _id %>"/>
181
+ </option>
182
+ </logic:iterate>
183
+ </html:select>
184
+ <SCRIPT> <%-- TODO : supprimer javascript --%>
185
+ document.forms[0].#{field.java_Name}.value="<bean:write name="#{owner.java_Name}StrutsForm" property="#{field.java_Name}" />";
186
+ </SCRIPT>
187
+ END
188
+ end
189
+ end
190
+
191
+
192
+ class JavaMappingBLOB < JavaMapping
193
+ def getJSP(datatype,field,owner)
194
+ n=datatype.java_Name.downcase #TODO
195
+ return %{<html:file property="#{field.java_Name}" size="20%" maxlength="30" styleId="#{n}" #{::Muml_DataType::STRUTS_ERROR_STYLE}/>}
196
+ end
197
+ end
198
+ class JavaMappingIMG < JavaMappingBLOB
199
+ def getJSP(datatype,field,owner)
200
+ n=datatype.java_Name.downcase #TODO
201
+ return %{
202
+ #{super}
203
+ <br/>
204
+ <html:img action="#{owner.context[:strutsActionName]}?#{Muml_Classifier::STRUTS_DISPATCH_FIELD_NAME}=#{actionMethName(field)}" /> &nbsp;
205
+ }
206
+
207
+ end
208
+
209
+ def actionMethName(field)
210
+ return "#{field.java_Name}_img"
211
+ end
212
+
213
+
214
+ #adds special action for this type
215
+ def addActionFieldMethod!(field,action,form)
216
+ # generate method returning gif image
217
+ m=action.struts_createAndAddExecuteOperation(actionMethName(field))
218
+ m.java_code=<<END
219
+ #{action.struts_formCastJavaCode(form)}
220
+ return #{action.struts_getActionHelper.java_qualifiedName}.writeGif(mapping,response, form.getReference().get#{field.java_NameBean}());
221
+ END
222
+
223
+
224
+ end
225
+ end
226
+
227
+ class JavaMappingGRAPHVIZ < JavaMappingLargeText
228
+ def actionMethName(field)
229
+ return "#{field.java_Name}_img"
230
+ end
231
+ def actionMapMethName(field)
232
+ return "#{field.java_Name}_map"
233
+ end
234
+ def actionMapUrl(datatype,field,owner)
235
+ return "/webapp/GraphVizDemoall-submit.do?#{Muml_Classifier::STRUTS_DISPATCH_FIELD_NAME}=#{actionMapMethName(field)}#myMap"
236
+ end
237
+ def getJSP(datatype,field,owner)
238
+ s=field.uml_isReadOnly? ? "" : super(datatype,field,owner)
239
+
240
+ return %{#{s}#{s.empty? ? "" : "<br>" }<html:img action="#{owner.context[:strutsActionName]}?#{Muml_Classifier::STRUTS_DISPATCH_FIELD_NAME}=#{actionMethName(field)}" usemap="#{actionMapUrl(datatype,field,owner)}"/>}
241
+ end
242
+
243
+ #adds special action for this type
244
+ def addActionFieldMethod!(field,action,form)
245
+ m=action.struts_createAndAddExecuteOperation(actionMethName(field))
246
+ m.java_code=<<END
247
+ #{action.struts_formCastJavaCode(form)}
248
+ return #{action.struts_getActionHelper.java_qualifiedName}.writeGraphviz(mapping,response, form.getReference().get#{field.java_NameBean}());
249
+ END
250
+
251
+ # generate method returning map (clickable zones)
252
+ m2=action.struts_createAndAddExecuteOperation(actionMapMethName(field))
253
+ m2.java_code=<<END
254
+ #{action.struts_formCastJavaCode(form)}
255
+ return #{action.struts_getActionHelper.java_qualifiedName}.writeGraphvizMap(mapping,response, form.getReference().get#{field.java_NameBean}());
256
+ END
257
+ end
258
+
259
+ end
260
+ class JavaMappingEmailAddress < JavaMappingText
261
+ end
262
+
263
+ class JavaMappingPassword < JavaMappingText
264
+ def getJSP(datatype,field,owner)
265
+ n=datatype.java_Name.downcase #TODO
266
+ return %{<html:password property="#{field.java_Name}" size="20%" maxlength="#{self.maxStringLength}" styleId="#{n}" #{::Muml_DataType::STRUTS_ERROR_STYLE}/>}
267
+ end
268
+ end
269
+
270
+
271
+
272
+
@@ -0,0 +1,87 @@
1
+
2
+
3
+ module Mrdf_Model
4
+ def struts_createDataTypeHelpers!
5
+ JavaMapping.instance.getMappings.each { |m|
6
+ m.struts_generateHelper(self)
7
+ }
8
+ end
9
+ end
10
+
11
+ class JavaMapping
12
+ def java_Name
13
+ return self.class.name
14
+ end
15
+ def java_qualifiedName
16
+ return rdf_uri
17
+ end
18
+ def rdf_uri
19
+ return "xmda.datatypes.#{java_Name}"
20
+ end
21
+ def struts_generateHelper(model)
22
+ return unless self.respond_to?("getJavaType")
23
+ c=model.umlx_reserved_model.umlx_getOrCreateClass(java_qualifiedName)
24
+ return c unless c.umlx_external?
25
+ c.umlx_external=RDF_FALSE
26
+ c.db_isTransient=RDF_TRUE
27
+ c.struts_isForm=RDF_FALSE
28
+ c.umlx_businessMethod=RDF_FALSE
29
+
30
+ c.umlx_createAndAddGeneralization(self.class.superclass.instance.struts_generateHelper(model)) if self.class.superclass.respond_to?("instance")
31
+ c.java_customCode=java_helper_customCode
32
+ java_helper_addMethods!(c)
33
+ return c
34
+ end
35
+ def java_helper_customCode
36
+ return if self.class==JavaMapping
37
+ return <<END
38
+ protected #{java_Name}() {};
39
+ private static #{java_Name} instance=new #{java_Name}();
40
+ public #{java_Name} getInstance() {
41
+ return instance;
42
+ }
43
+
44
+ public #{getJavaType} parse(final String str,final #{getJavaType} nullCast ) {
45
+ #{if respond_to?(:getJavaParse)
46
+ "return #{getJavaParse("str")};"
47
+ else
48
+ %{throw new java.lang.RuntimeException("Method not implemented");}
49
+ end
50
+ }
51
+ }
52
+
53
+ public String toString(final #{getJavaType} elt) {
54
+ #{if respond_to?(:getJavaToString)
55
+ "return #{getJavaToString("elt")};"
56
+ else
57
+ %{throw new java.lang.RuntimeException("Method not implemented");}
58
+ end
59
+ }
60
+ }
61
+
62
+ END
63
+ end
64
+
65
+ def java_helper_addMethods!(c)
66
+ return
67
+ m=c.umlx_createAndAddOperation(self.rdf_uri+"_parse","parse")
68
+ r=m.umlx_createAndAddReturnParameter(m.rdf_uri+"ret")
69
+ r.uml_type=c.umlx_getOrCreateClass("java.lang.Object") #TODO
70
+
71
+ r=m.umlx_createAndAddParameter(m.rdf_uri+"tr","tr")
72
+ r.uml_type=c.umlx_dataType_string
73
+
74
+ m=c.umlx_createAndAddOperation(self.rdf_uri+"_parse","to_s")
75
+ r=m.umlx_createAndAddReturnParameter(m.rdf_uri+"ret")
76
+ r.uml_type=c.umlx_getOrCreateClass("java.lang.Object") #TODO
77
+
78
+ r=m.umlx_createAndAddParameter(m.rdf_uri+"elt","elt")
79
+ r.uml_type=c.umlx_dataType_string
80
+
81
+ end
82
+
83
+ end
84
+
85
+ class JavaMapping
86
+ end
87
+
@@ -0,0 +1,33 @@
1
+ # Helpers to add
2
+ #Reload action
3
+
4
+ module Mrdf_Model
5
+ rdf_safe_attr_reader_many :struts_reloadDefinitionsActionUri
6
+
7
+ # Calling this method will setup a struts reload action.
8
+ # This action will be accessible with a browser using the provided uri.
9
+ # Calling the action will trigger a struts configuration reload, usefull for developpment.
10
+ #
11
+ # Note:
12
+ # *This method should be called before code generation and before setup generation.
13
+ # *Action is extracted from ruby
14
+ # *Thanks to Stephane Coutant for pointing out this feature.
15
+ def struts_addReloadDefinitionsAction(uri="/admin/reload")
16
+ self.struts_reloadDefinitionsActionUri=uri
17
+ end
18
+
19
+ #internal use
20
+ #copys required java source files to project
21
+ def struts_copyReloadDefinitionsActionClass()
22
+ #return if self.struts_reloadDefinitionsActionUri.empty?
23
+ #FileUtils.cp("#{File.dirname(__FILE__)}/ReloadDefinitionsAction.java","#{context[:build]}/WEB-INF/src/java/xmda/struts/ReloadDefinitionsAction.java")
24
+ end
25
+
26
+ #internal use
27
+ #inserts required configuration item in struts configuration file.
28
+ def struts_getReloadDefinitionsActionConfig
29
+ return "<!-- no reload definition action -->" if struts_reloadDefinitionsActionUri.empty?
30
+ return %{<action path="#{struts_reloadDefinitionsActionUri}" type="org.apache.struts.tiles.actions.ReloadDefinitionsAction"/>}
31
+ end
32
+
33
+ end