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