ontomde-uml2-struts 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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