ontomde-uml2-struts 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -0
- data/Manifest.txt +31 -0
- data/README.txt +38 -0
- data/Rakefile +32 -0
- data/lib/ontomde-uml2-struts/MessageResources.rb +356 -0
- data/lib/ontomde-uml2-struts/action.rb +886 -0
- data/lib/ontomde-uml2-struts/blob.rb +11 -0
- data/lib/ontomde-uml2-struts/exceptionHandling.rb +167 -0
- data/lib/ontomde-uml2-struts/footer.rb +128 -0
- data/lib/ontomde-uml2-struts/form.rb +483 -0
- data/lib/ontomde-uml2-struts/header.rb +37 -0
- data/lib/ontomde-uml2-struts/header_link.rb +39 -0
- data/lib/ontomde-uml2-struts/jsp_edit.rb +866 -0
- data/lib/ontomde-uml2-struts/jsp_edit_field.rb +1 -0
- data/lib/ontomde-uml2-struts/jsp_edit_js.rb +124 -0
- data/lib/ontomde-uml2-struts/jsp_index.rb +131 -0
- data/lib/ontomde-uml2-struts/localeAction.rb +641 -0
- data/lib/ontomde-uml2-struts/main.rb +140 -0
- data/lib/ontomde-uml2-struts/mappingForBean.rb +132 -0
- data/lib/ontomde-uml2-struts/mappingForJsp.rb +272 -0
- data/lib/ontomde-uml2-struts/mappingToJavaHierarchy.rb +87 -0
- data/lib/ontomde-uml2-struts/reloadAction.rb +33 -0
- data/lib/ontomde-uml2-struts/spring.rb +89 -0
- data/lib/ontomde-uml2-struts/struts-config.rb +232 -0
- data/lib/ontomde-uml2-struts/validation.rb +116 -0
- data/lib/ontomde-uml2-struts/validator.rb +341 -0
- data/lib/ontomde-uml2-struts/version.rb +7 -0
- data/lib/ontomde-uml2-struts/webXml.rb +165 -0
- data/lib/ontomde-uml2-struts/xmlForm.rb +308 -0
- data/lib/ontomde-uml2-struts.rb +34 -0
- data/test/test_ontomde-uml2-struts.rb +0 -0
- metadata +112 -0
@@ -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> <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)}" />
|
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
|