ontomde-java 2.0.0
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 +10 -0
- data/Manifest.txt +156 -0
- data/README.txt +98 -0
- data/Rakefile +21 -0
- data/bin/ontomde-java +5 -0
- data/generateRdocFile.sh +16 -0
- data/lib/ontomde-java.rb +45 -0
- data/lib/ontomde-java/crank.rb +13 -0
- data/lib/ontomde-java/crank/context.rb +384 -0
- data/lib/ontomde-java/crank/crankJpa.rb +103 -0
- data/lib/ontomde-java/crank/equals.rb +83 -0
- data/lib/ontomde-java/crank/facelets.rb +243 -0
- data/lib/ontomde-java/crank/facesconfig.rb +113 -0
- data/lib/ontomde-java/crank/helper.rb +46 -0
- data/lib/ontomde-java/crank/main.rb +51 -0
- data/lib/ontomde-java/crank/menu.rb +39 -0
- data/lib/ontomde-java/crank/menu2.rb +78 -0
- data/lib/ontomde-java/crank/validation.rb +34 -0
- data/lib/ontomde-java/ejb2.rb +3 -0
- data/lib/ontomde-java/ejb2/main-ejb2.rb +194 -0
- data/lib/ontomde-java/flex.rb +7 -0
- data/lib/ontomde-java/flex/Editor.mxml.as.rb +184 -0
- data/lib/ontomde-java/flex/Editor.mxml.rb +701 -0
- data/lib/ontomde-java/flex/ImportationAS.rb +40 -0
- data/lib/ontomde-java/flex/ValueObjectAS.rb +338 -0
- data/lib/ontomde-java/flex/fileTypes.rb +19 -0
- data/lib/ontomde-java/flex/main.rb +347 -0
- data/lib/ontomde-java/frontend/command.rb +324 -0
- data/lib/ontomde-java/frontend/command.rdoc +583 -0
- data/lib/ontomde-java/frontend/defaultOptions.rb +124 -0
- data/lib/ontomde-java/frontend/options.rb +555 -0
- data/lib/ontomde-java/frontend/steps.rb +287 -0
- data/lib/ontomde-java/java/accessorCode.rb +528 -0
- data/lib/ontomde-java/java/accessorSignature.rb +347 -0
- data/lib/ontomde-java/java/annotationOntoMDE.rb +88 -0
- data/lib/ontomde-java/java/apache.rb +34 -0
- data/lib/ontomde-java/java/build.rb +80 -0
- data/lib/ontomde-java/java/collectionMapping.rb +112 -0
- data/lib/ontomde-java/java/component.rb +446 -0
- data/lib/ontomde-java/java/contextualize.rb +43 -0
- data/lib/ontomde-java/java/enumAssignable.rb +75 -0
- data/lib/ontomde-java/java/enumCompatibilityLayer.rb +195 -0
- data/lib/ontomde-java/java/equals.rb +91 -0
- data/lib/ontomde-java/java/groovy.rb +95 -0
- data/lib/ontomde-java/java/java.rb +1329 -0
- data/lib/ontomde-java/java/java.rdoc +78 -0
- data/lib/ontomde-java/java/javaDatatypeMapping.rb +156 -0
- data/lib/ontomde-java/java/javaHelper.rb +25 -0
- data/lib/ontomde-java/java/java_todo.rdoc +3 -0
- data/lib/ontomde-java/java/javadoc.rb +254 -0
- data/lib/ontomde-java/java/meta.rb +28 -0
- data/lib/ontomde-java/java/operationAsClass.rb +144 -0
- data/lib/ontomde-java/java/security.rb +260 -0
- data/lib/ontomde-java/java/stateMachine.rb +415 -0
- data/lib/ontomde-java/java/tenant.rb +65 -0
- data/lib/ontomde-java/java/xsd.rb +1363 -0
- data/lib/ontomde-java/java/xsdCollectionMapping.rb +112 -0
- data/lib/ontomde-java/java/xsdDatatypeMapping.rb +103 -0
- data/lib/ontomde-java/jpa.rb +17 -0
- data/lib/ontomde-java/jpa/configuration.rb +176 -0
- data/lib/ontomde-java/jpa/finder.rb +102 -0
- data/lib/ontomde-java/jpa/jpa.rb +531 -0
- data/lib/ontomde-java/jpa/jpa.rdoc +20 -0
- data/lib/ontomde-java/jpa/locking.rb +18 -0
- data/lib/ontomde-java/jpa/mapping.rb +314 -0
- data/lib/ontomde-java/jpa/redefined.rb +77 -0
- data/lib/ontomde-java/jpa/simulationAutoImplement.rb +54 -0
- data/lib/ontomde-java/jpdl.rb +9 -0
- data/lib/ontomde-java/jpdl/bpm.pprj +1745 -0
- data/lib/ontomde-java/jpdl/bpm.rdf +140 -0
- data/lib/ontomde-java/jpdl/bpm.rdfs +231 -0
- data/lib/ontomde-java/jpdl/constant.rb +5 -0
- data/lib/ontomde-java/jpdl/graphic.rb +52 -0
- data/lib/ontomde-java/jpdl/jpdl.rb +281 -0
- data/lib/ontomde-java/jpdl/jpdl_deploy.rb +114 -0
- data/lib/ontomde-java/jpdl/main.rb +348 -0
- data/lib/ontomde-java/jpdl/main.rdoc +2 -0
- data/lib/ontomde-java/jpdl/processOperationToClass.rb +316 -0
- data/lib/ontomde-java/kbjava.rb +6 -0
- data/lib/ontomde-java/kbjava/rdfToJava.rb +407 -0
- data/lib/ontomde-java/struts.rb +27 -0
- data/lib/ontomde-java/struts/MessageResources.rb +359 -0
- data/lib/ontomde-java/struts/action.rb +883 -0
- data/lib/ontomde-java/struts/blob.rb +11 -0
- data/lib/ontomde-java/struts/exceptionHandling.rb +167 -0
- data/lib/ontomde-java/struts/footer.rb +128 -0
- data/lib/ontomde-java/struts/form.rb +450 -0
- data/lib/ontomde-java/struts/header.rb +37 -0
- data/lib/ontomde-java/struts/header_link.rb +39 -0
- data/lib/ontomde-java/struts/jsp_edit.rb +870 -0
- data/lib/ontomde-java/struts/jsp_edit_field.rb +1 -0
- data/lib/ontomde-java/struts/jsp_edit_js.rb +124 -0
- data/lib/ontomde-java/struts/jsp_index.rb +136 -0
- data/lib/ontomde-java/struts/localeAction.rb +641 -0
- data/lib/ontomde-java/struts/main.rb +41 -0
- data/lib/ontomde-java/struts/mappingForBean.rb +132 -0
- data/lib/ontomde-java/struts/mappingForJsp.rb +272 -0
- data/lib/ontomde-java/struts/mappingToJavaHierarchy.rb +87 -0
- data/lib/ontomde-java/struts/reloadAction.rb +33 -0
- data/lib/ontomde-java/struts/spring.rb +89 -0
- data/lib/ontomde-java/struts/struts-config.rb +232 -0
- data/lib/ontomde-java/struts/validation.rb +116 -0
- data/lib/ontomde-java/struts/validator.rb +341 -0
- data/lib/ontomde-java/struts/webXml.rb +195 -0
- data/lib/ontomde-java/struts/xmlForm.rb +308 -0
- data/lib/ontomde-java/version.rb +5 -0
- data/profiling.xls +0 -0
- data/test/.classpath +14 -0
- data/test/.project +17 -0
- data/test/.settings/org.eclipse.jdt.core.prefs +23 -0
- data/test/Rakefile +71 -0
- data/test/build.xml +34 -0
- data/test/classpath.rb +15 -0
- data/test/lib/junit-4.1.jar +0 -0
- data/test/load1.rb +3 -0
- data/test/load2.rb +3 -0
- data/test/log4j.properties +46 -0
- data/test/model/.project +11 -0
- data/test/model/BigProject.mdzip +0 -0
- data/test/model/BigProject.mdzip.nt +102866 -0
- data/test/model/ClassDiagram.EntArch.gif +0 -0
- data/test/model/ClassDiagram.emx.gif +0 -0
- data/test/model/ClassDiagram.mdzip.gif +0 -0
- data/test/model/model_ea71.bis.ea.xmi +149 -0
- data/test/model/model_ea71.ea.xmi +4470 -0
- data/test/model/model_ea71.eap +0 -0
- data/test/model/model_ea71_README.txt +8 -0
- data/test/model/multipleInheritance.emx +466 -0
- data/test/model/multipleInheritance.emx.nt +2428 -0
- data/test/model/simple1-530.ofp +0 -0
- data/test/model/simple1-includedAsReference.emx +169 -0
- data/test/model/simple1.emx +3729 -0
- data/test/model/simple1.emx.fragments.nt +81 -0
- data/test/model/simple1.emx.nt +5760 -0
- data/test/model/simple1.mdzip +0 -0
- data/test/model/simple1.mdzip.nt +11500 -0
- data/test/model/simple1.oe530.nt +1986 -0
- data/test/model/simple1.oe600.nt +1627 -0
- data/test/src/RuntimeTest.java +656 -0
- data/test/src/testsLevel1.java +174 -0
- data/test/src/testsLevel2.java +29 -0
- data/test/src/testsLevel3.java +40 -0
- data/test/test-ea7.sh +15 -0
- data/test/test-magicDraw.sh +10 -0
- data/test/test-mi.sh +9 -0
- data/test/test-oe530.sh +10 -0
- data/test/test-oe600.sh +11 -0
- data/test/test-rsm.sh +11 -0
- data/test/test_export_ea71.rb +5 -0
- data/test/test_export_oe530.rb +4 -0
- data/test/test_export_oe600.rb +4 -0
- data/test/test_export_rsm60.rb +4 -0
- data/test/trace +419 -0
- data/test/uml_test.rb +1434 -0
- data/test/uml_test.xls +0 -0
- data/test/unit_test.rb +6 -0
- metadata +224 -0
@@ -0,0 +1,65 @@
|
|
1
|
+
# Handle multi-tenant applications
|
2
|
+
|
3
|
+
module Mrdf_Repository
|
4
|
+
|
5
|
+
# default qualified name of the class used for tenant
|
6
|
+
TENANT_DEFAULT_CLASS_QUALIFIED_NAME='xmda.tenant.Tenant'
|
7
|
+
|
8
|
+
# stereotype name used to identify a tenant in model
|
9
|
+
TENANT_STEREOTYPE_NAME='tenant'
|
10
|
+
|
11
|
+
def java_getTenantClass
|
12
|
+
tenant=nil
|
13
|
+
uml_Class_all.each { |c|
|
14
|
+
next unless c.umlx_hasStereotype?(TENANT_STEREOTYPE_NAME)
|
15
|
+
unless tenant.nil?
|
16
|
+
puts 'ERROR: ****************************************************'
|
17
|
+
puts 'ERROR: multiple class found in model with stereotype tenant'
|
18
|
+
puts 'ERROR: ****************************************************'
|
19
|
+
end
|
20
|
+
tenant=c
|
21
|
+
}
|
22
|
+
return tenant
|
23
|
+
end
|
24
|
+
def java_addTenantClass!
|
25
|
+
# look in model for an existing class stereotyped "tenant"
|
26
|
+
tenant=java_getTenantClass
|
27
|
+
|
28
|
+
# fields should be provided by model
|
29
|
+
return tenant unless tenant.nil?
|
30
|
+
|
31
|
+
# no tenant class found in model. we will create one.
|
32
|
+
tenant=umlx_reserved_model.umlx_getOrCreateClass(TENANT_DEFAULT_CLASS_QUALIFIED_NAME)
|
33
|
+
f=tenant.umlx_createAndAddProperty(tenant.rdf_uri+"_tname","tenant Name")
|
34
|
+
f.uml_type=tenant.umlx_owner_one.umlx_dataType_string
|
35
|
+
tenant.umlx_external=RDF_FALSE
|
36
|
+
tenant.db_isTransient=RDF_FALSE
|
37
|
+
|
38
|
+
tenant.uml_appliedStereotype_add(tenant.umlx_getOrCreateStereotype(TENANT_STEREOTYPE_NAME))
|
39
|
+
return tenant
|
40
|
+
end
|
41
|
+
|
42
|
+
def java_addTenantFields!
|
43
|
+
tenant=java_addTenantClass!
|
44
|
+
uml_Class_all.each { |c|
|
45
|
+
next if c.kind_of?(Muml_Interface)
|
46
|
+
next unless c.uml_generalization.empty?
|
47
|
+
c.java_addTenantField!(tenant)
|
48
|
+
}
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
module Muml_Classifier
|
53
|
+
TENANT_FIELD_NAME="tenantOwner"
|
54
|
+
def java_addTenantField!(tenantClass=nil)
|
55
|
+
return unless context[:multiTenant]
|
56
|
+
tenantClass=rdf_Repository.java_getTenantClass if tenantClass.nil?
|
57
|
+
# return if tenantClass==self
|
58
|
+
#Tenant itself has a tenant field for homogenity
|
59
|
+
#
|
60
|
+
tf=umlx_createAndAddProperty("#{self.rdf_uri}_tenant",TENANT_FIELD_NAME)
|
61
|
+
tf.uml_type=tenantClass
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
|
@@ -0,0 +1,1363 @@
|
|
1
|
+
#:include: java.rdoc
|
2
|
+
#:include: xsd_todo.rdoc
|
3
|
+
|
4
|
+
require 'pathname'
|
5
|
+
|
6
|
+
module Mxsd_Schema
|
7
|
+
#model elements in file
|
8
|
+
rdf_attr :xsd_types,[::Muml_Element ]
|
9
|
+
|
10
|
+
#model element which will be used to compute file name
|
11
|
+
rdf_attr :xsd_baseName, [ ::Muml_Namespace ]
|
12
|
+
|
13
|
+
#included xsd files
|
14
|
+
rdf_attr :xsd_dependencies, [ ::Mxsd_Schema ]
|
15
|
+
|
16
|
+
#return set of types used by attributes of classes in current xsd file.
|
17
|
+
def xsd_getSetOfTypeUsedByAttributes
|
18
|
+
types=Set.new
|
19
|
+
xsd_types.each { |clazz|
|
20
|
+
clazz.uml_ownedAttribute.each { |param|
|
21
|
+
types.merge(param.uml_type)
|
22
|
+
}
|
23
|
+
}
|
24
|
+
return types
|
25
|
+
end
|
26
|
+
|
27
|
+
def xsd_writeImports
|
28
|
+
xsd_dependencies.each {|dep|
|
29
|
+
base=Pathname.new(File.dirname(self.xsd_SchemaName))
|
30
|
+
target=Pathname.new(dep.xsd_SchemaName)
|
31
|
+
write(%{ <xsd:include schemaLocation="#{target.relative_path_from(base)}"/>\n})
|
32
|
+
}
|
33
|
+
end
|
34
|
+
#compute xsd dependencies from file
|
35
|
+
def xsd_computeDependencies!(defaultXSD)
|
36
|
+
deps=Set.new
|
37
|
+
xsd_getSetOfTypeUsedByAttributes.each { |clazz|
|
38
|
+
clazz.xsd_types_inv.each {|i|
|
39
|
+
next if i==self
|
40
|
+
deps.add(i)
|
41
|
+
}
|
42
|
+
}
|
43
|
+
deps.each {|d|
|
44
|
+
xsd_dependencies_add(d)
|
45
|
+
}
|
46
|
+
return
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
XSD_HEADER=<<END
|
51
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
52
|
+
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
53
|
+
END
|
54
|
+
XSD_FOOTER=<<END
|
55
|
+
</xsd:schema>
|
56
|
+
END
|
57
|
+
|
58
|
+
def xsd_generateSchema
|
59
|
+
xsd_openOutStream {
|
60
|
+
write(XSD_HEADER)
|
61
|
+
xsd_writeImports
|
62
|
+
xsd_types.each { |clazz|
|
63
|
+
# puts "--> #{clazz}"
|
64
|
+
clazz.xsd_writeType
|
65
|
+
}
|
66
|
+
write(XSD_FOOTER)
|
67
|
+
}
|
68
|
+
end
|
69
|
+
|
70
|
+
def xsd_SchemaName
|
71
|
+
if xsd_baseName.empty?
|
72
|
+
return "global.xsd"
|
73
|
+
else
|
74
|
+
return xsd_baseName_one.xsd_SchemaName
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
#Opens xsd_SchemaName for writing
|
79
|
+
#
|
80
|
+
#Example usage:
|
81
|
+
#xsd_openOutStream {
|
82
|
+
# write ("this text goes in java file")
|
83
|
+
# }
|
84
|
+
def xsd_openOutStream(&block)
|
85
|
+
mtk_writeSession(xsd_SchemaName) {
|
86
|
+
yield
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
# #opens java file for writing with xsd_openOutStream and calls xsd_write
|
91
|
+
# def xsd_generate
|
92
|
+
# return if @xsd_already_generated
|
93
|
+
# return if xsd_ignoreMe?
|
94
|
+
#
|
95
|
+
# return unless self.umlx_owner_one.kind_of?(Muml_Package)
|
96
|
+
# @xsd_already_generated=true
|
97
|
+
#
|
98
|
+
# xsd_openOutStream {
|
99
|
+
# xsd_write
|
100
|
+
# }
|
101
|
+
# end
|
102
|
+
|
103
|
+
# # write java code for class.
|
104
|
+
# # (Uses xsd_writeClassHeader, xsd_writeClassBody)
|
105
|
+
# # NOTE
|
106
|
+
# # * also used for inner classes
|
107
|
+
# def xsd_write
|
108
|
+
# puts "&&"
|
109
|
+
# xsd_writeClassHeader {
|
110
|
+
# xsd_writeClassBody
|
111
|
+
# xsd_types.each { |clazz|
|
112
|
+
# puts "--> #{clazz}"
|
113
|
+
# clazz.xsd_write
|
114
|
+
# }
|
115
|
+
# }
|
116
|
+
# end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
class Cxsd_Schema < Crdf_Resource
|
121
|
+
include Mxsd_Schema
|
122
|
+
end
|
123
|
+
|
124
|
+
module Mrdf_Repository
|
125
|
+
|
126
|
+
# Example
|
127
|
+
# xsd_addJavaFilePathMapping(/\.example/,"src/main/example/" ])
|
128
|
+
#TODO: add helping error if jfp.nil?
|
129
|
+
def xsd_addContextJavaFilePathMapping(qualifiedNameRegexp,relativePath)
|
130
|
+
jfp=context[:javaFilePathRegexp]
|
131
|
+
jfp[qualifiedNameRegexp,relativePath]
|
132
|
+
end
|
133
|
+
|
134
|
+
def umlx_processStereotypes!
|
135
|
+
return
|
136
|
+
each { |k,c|
|
137
|
+
next unless c.kind_of?(Muml_Stereotype)
|
138
|
+
#log.debug "Registering stereotype #{c.getRubyStereotypeName}"
|
139
|
+
eval %{
|
140
|
+
module ::Muml_Stereotype_#{c.getRubyStereotypeName}
|
141
|
+
end
|
142
|
+
}
|
143
|
+
}
|
144
|
+
each {|k,c|
|
145
|
+
next unless c.kind_of?(Muml_Element)
|
146
|
+
next if c.appliedStereotype.empty?
|
147
|
+
appliedStereotype.each { |s|
|
148
|
+
c.class_eval %{
|
149
|
+
|
150
|
+
}
|
151
|
+
}
|
152
|
+
}
|
153
|
+
|
154
|
+
end
|
155
|
+
|
156
|
+
#trigger Muml_Classifier xsd_transform! for every class element
|
157
|
+
def xsd_transform!
|
158
|
+
#must copy before transformation (hash modified runtime error)
|
159
|
+
a=Array.new
|
160
|
+
each { |k,c|
|
161
|
+
next if c.kind_of?(Muml_Stereotype)
|
162
|
+
next unless c.kind_of?(Muml_Class) || c.kind_of?(Muml_Interface)||c.kind_of?(Muml_Enumeration)
|
163
|
+
a << c
|
164
|
+
}
|
165
|
+
a.each {|c|
|
166
|
+
c.xsd_transform! unless c.xsd_ignoreMe?
|
167
|
+
}
|
168
|
+
|
169
|
+
#xsd_addPersistence!
|
170
|
+
umlx_processStereotypes!
|
171
|
+
end
|
172
|
+
|
173
|
+
#Main java generator entry point.
|
174
|
+
#Triggers the generation of every Java file for the model.
|
175
|
+
def xsd_generate_all
|
176
|
+
each_value {|m|
|
177
|
+
next unless m.kind_of?(Mxsd_Schema)
|
178
|
+
# puts "!!"
|
179
|
+
m.xsd_generateSchema
|
180
|
+
}
|
181
|
+
end
|
182
|
+
|
183
|
+
#parse model and generate file objects for elements
|
184
|
+
def xsd_generateSchemaElements!
|
185
|
+
packages=Set.new
|
186
|
+
uml_Class_all.each { |c|
|
187
|
+
packages.add(c.umlx_owner_one)
|
188
|
+
}
|
189
|
+
global=Cxsd_Schema.new(self,"uri://globalXSD")
|
190
|
+
xsdFiles=Set.new
|
191
|
+
packages.each { |p|
|
192
|
+
f=Cxsd_Schema.new(self,"#{p.rdf_uri}_xsdFile")
|
193
|
+
xsdFiles.add(f)
|
194
|
+
f.xsd_baseName=p
|
195
|
+
p.uml_Class_all.each {|oe|
|
196
|
+
f.xsd_types_add(oe)
|
197
|
+
}
|
198
|
+
}
|
199
|
+
d=global.nil? ? Cxsd_Schema.new(self,"defaultXSD") : global
|
200
|
+
xsdFiles.each { |xsd|
|
201
|
+
xsd.xsd_computeDependencies!(d)
|
202
|
+
}
|
203
|
+
end
|
204
|
+
|
205
|
+
def xsd_generateXSDFiles
|
206
|
+
each_value { |v|
|
207
|
+
next unless v.kind_of?(Mxsd_Schema)
|
208
|
+
v.generateXSDFile
|
209
|
+
}
|
210
|
+
end
|
211
|
+
|
212
|
+
end
|
213
|
+
|
214
|
+
module Mxsd_Annotation
|
215
|
+
rdf_safe_attr_reader_many :xsd_annotation
|
216
|
+
def xsd_writeAnnotation
|
217
|
+
mtk_protected(Mrdf_Resource::NOREVERSE,"annotations") {
|
218
|
+
xsd_annotation.each {|a|
|
219
|
+
write(a)
|
220
|
+
write("\n")
|
221
|
+
}
|
222
|
+
write("@Override\n") if (self.kind_of?(Muml_Operation) && !umlx_redefinesMethod.empty? && !umlx_redefinesMethod_one.umlx_owner_one.kind_of?(Muml_Interface) )
|
223
|
+
}
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
module Muml_EnumerationLiteral
|
232
|
+
#List of initialisation parameter for this literal.
|
233
|
+
rdf_safe_attr_reader_many :xsd_initParameterValue
|
234
|
+
end
|
235
|
+
|
236
|
+
module Muml_Parameter
|
237
|
+
# extension metamodele
|
238
|
+
rdf_safe_attr_reader_many :uml_qualifier
|
239
|
+
#rdf_safe_attr_reader_many :umlx_qualifier
|
240
|
+
|
241
|
+
#write java parameter declaration
|
242
|
+
# (Uses xsd_propertyRoleType, xsd_Name)
|
243
|
+
# parameter is declared final if direction is in (not out, not inOut)
|
244
|
+
#Example:
|
245
|
+
#* int x
|
246
|
+
#* final int x
|
247
|
+
#* String z
|
248
|
+
def xsd_write
|
249
|
+
write("final ") if uml_direction_one.isIn? # the best we can do with java
|
250
|
+
write("#{xsd_propertyAssociationType} ")
|
251
|
+
#write(" /* #{uml_lowerValue}..#{uml_upperValue}*/ ")
|
252
|
+
write(" #{xsd_Name}") unless uml_direction_one.isReturn?
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
|
257
|
+
module Muml_Stereotype
|
258
|
+
def getRubyStereotypeName
|
259
|
+
return uml_name.to_s.tr('^a-zA-Z0-9','_')
|
260
|
+
end
|
261
|
+
|
262
|
+
#return true if java generator should totaly ignore this element.
|
263
|
+
#
|
264
|
+
#NOTE:
|
265
|
+
#* Always returns true
|
266
|
+
def xsd_ignoreMe?
|
267
|
+
return true;
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
|
272
|
+
|
273
|
+
|
274
|
+
module Muml_Model
|
275
|
+
#def xsd_generate_all
|
276
|
+
## mtk_default_context(:xsd_generateSetAttributeInitializer=>true) {
|
277
|
+
## uml_Class_all.each {|c|
|
278
|
+
## #next if c.kind_of?(Muml_Stereotype)
|
279
|
+
## next unless c.kind_of?(Muml_Class) || c.kind_of?(Muml_Interface)||c.kind_of?(Muml_Enumeration)
|
280
|
+
## # only generate if requested to do so
|
281
|
+
## # usefull for generating separtely tests dans model
|
282
|
+
## next if c.xsd_isATestFile? && !context[:includeTestFiles]
|
283
|
+
## next if (!c.xsd_isATestFile?) && context[:excludeNonTestFiles]
|
284
|
+
## c.xsd_generate
|
285
|
+
## }
|
286
|
+
## if context[:generateComponent]
|
287
|
+
## uml_Component_all.each { |c|
|
288
|
+
## c.xsd_generateType
|
289
|
+
## }
|
290
|
+
## end
|
291
|
+
## }
|
292
|
+
#end
|
293
|
+
end
|
294
|
+
|
295
|
+
#module Muml_Property
|
296
|
+
# def xsd_Name
|
297
|
+
# return uml_isStatic? ? super.upcase : super
|
298
|
+
# end
|
299
|
+
#end
|
300
|
+
|
301
|
+
module Muml_NamedElement
|
302
|
+
# true if name contains a generic.
|
303
|
+
rdf_safe_attr_reader_many :xsd_isGeneric
|
304
|
+
|
305
|
+
#JAVA_RESERVED_WORD=["abstract", "boolean", "break", "byte", "case", "catch", "char", "class", "const", "continue", "default", "do", "double", "else", "enum", "extends", "final", "finally", "float", "for", "goto", "if", "implements", "import", "instanceof", "int", "interface", "long", "native", "new", "package", "private", "protected", "public", "return", "short", "static", "strictfp", "super", "switch", "synchronized", "this", "throw", "throws", "transient", "try", "void", "volatile", "while"]
|
306
|
+
#JAVA_NUMBERS=["0","1","2","3","4","5","6","7","8","9"]
|
307
|
+
#returns a valid java symbol computed from str
|
308
|
+
#
|
309
|
+
#NOTE:
|
310
|
+
#
|
311
|
+
# display a warning an return /*TODO ...*/ if str is empty
|
312
|
+
#
|
313
|
+
#Examples:
|
314
|
+
# xsd_safeName("number") returns number
|
315
|
+
# xsd_safeName("8number") returns _number
|
316
|
+
def xsd_safeName(str)
|
317
|
+
if str.empty?
|
318
|
+
log.warn "WARNING: blank name detected for obj type #{self.class.name} identified by uri=#{uri}"
|
319
|
+
return "/*TODO: ERROR:blank name found in uml model:*/"
|
320
|
+
end
|
321
|
+
#TODO A g?rer globalement pour la gestion des g?n?riques
|
322
|
+
if xsd_isGeneric?
|
323
|
+
# a generic may contain names such as xyz<org.myname>
|
324
|
+
ret=str.to_s.tr('^a-zA-Z0-9_<?>.,',"")
|
325
|
+
else
|
326
|
+
ret=str.to_s.tr('^a-zA-Z0-9_',"")
|
327
|
+
end
|
328
|
+
ret="_"+ret if JAVA_NUMBERS.include?(ret[0,1])
|
329
|
+
ret="_"+ret if JAVA_RESERVED_WORD.include?(ret)
|
330
|
+
return ret
|
331
|
+
end
|
332
|
+
|
333
|
+
#java unique name enforcement variable
|
334
|
+
#JAVA_UNIQUE_NAME=Hash.new
|
335
|
+
|
336
|
+
#return a unique name for this element.
|
337
|
+
#Logs an error messge is uniqueness is not verified.
|
338
|
+
def xsd_uniqueName
|
339
|
+
ret=xsd_Name.to_s
|
340
|
+
k=JAVA_UNIQUE_NAME[ret]
|
341
|
+
if k.nil?
|
342
|
+
JAVA_UNIQUE_NAME[ret]=rdf_uri
|
343
|
+
elsif k!=rdf_uri
|
344
|
+
log_error_unique_name
|
345
|
+
end
|
346
|
+
return ret
|
347
|
+
end
|
348
|
+
|
349
|
+
def log_error_unique_name
|
350
|
+
#return if log_already_displayed?("#{rdf_uri}__uniqueName")
|
351
|
+
log.error {
|
352
|
+
<<END
|
353
|
+
non unique name detected
|
354
|
+
********* INVALID DATA DETECTED **********
|
355
|
+
** This software expects uml names to be globaly unique.
|
356
|
+
** The following item has been detected to be an homonym
|
357
|
+
** of a previously processed model element.
|
358
|
+
** #{mtk_object_message}
|
359
|
+
**
|
360
|
+
** Check your model and make sure names are unique.
|
361
|
+
**
|
362
|
+
** This model element is related to these other model elements:
|
363
|
+
#{mtk_related_message}
|
364
|
+
********* INVALID DATA DETECTED **********
|
365
|
+
END
|
366
|
+
}
|
367
|
+
if context[:xsd_failIfNonUniqueName]
|
368
|
+
raise Warning.new(),"unique name assertion failed"
|
369
|
+
end
|
370
|
+
|
371
|
+
end
|
372
|
+
|
373
|
+
#Returns this element uml_name after applying xsd_safeName on it.
|
374
|
+
@xsd_Name_cache=nil
|
375
|
+
def xsd_Name
|
376
|
+
return @xsd_Name_cache unless @xsd_Name_cache.nil?
|
377
|
+
s=xsd_safeName(uml_name.to_s)
|
378
|
+
b=context[:xsd_fixNameCase,true]
|
379
|
+
if !b
|
380
|
+
# do nothing
|
381
|
+
elsif kind_of?(Muml_Package) || kind_of?(Muml_Property) || kind_of?(Muml_Parameter) || kind_of?(Muml_Operation)
|
382
|
+
if s[0..0].downcase!=s[0..0]
|
383
|
+
s="#{s[0..0].downcase}#{s[1,s.length]}"
|
384
|
+
display_xsd_Name_case_error(true)
|
385
|
+
end
|
386
|
+
elsif (kind_of?(Muml_Class) || kind_of?(Muml_Interface) || kind_of?(Muml_Enumeration) ) && ! kind_of?(Muml_PrimitiveType)
|
387
|
+
if s[0..0].capitalize!=s[0..0]
|
388
|
+
s="#{s[0..0].capitalize}#{s[1,s.length]}"
|
389
|
+
display_xsd_Name_case_error(false)
|
390
|
+
end
|
391
|
+
end
|
392
|
+
@xsd_Name_cache=s
|
393
|
+
return @xsd_Name_cache
|
394
|
+
end
|
395
|
+
#DISPLAY_JAVA_NAME_CASE_ERROR=Set.new()
|
396
|
+
def display_xsd_Name_case_error(isDowncase)
|
397
|
+
return unless context[:xsd_display_case_errors,false]
|
398
|
+
#next if DISPLAY_JAVA_NAME_CASE_ERROR.include?(self)
|
399
|
+
#DISPLAY_JAVA_NAME_CASE_ERROR<< self
|
400
|
+
log.error { %{***** INVALID MODEL DETECTED *****
|
401
|
+
***** INVALID MODEL DETECTED *****
|
402
|
+
Model element name:
|
403
|
+
uml_class=#{self.class.name}
|
404
|
+
rdf_uri=#{rdf_uri}
|
405
|
+
uml_name=#{uml_name}
|
406
|
+
uml_owner=#{umlx_owner_one}
|
407
|
+
should begin with a #{isDowncase ? "downcase": "upcase"} character.
|
408
|
+
***** INVALID MODEL DETECTED *****
|
409
|
+
}}
|
410
|
+
end
|
411
|
+
|
412
|
+
|
413
|
+
#Returns this element xsd_Name after applying a simplified java bean case convention.
|
414
|
+
#http://java.sun.com/products/javabeans/docs/spec.html
|
415
|
+
#anIntAttribute --> AnIntAttribute
|
416
|
+
#aBooleanAttribute --> aBooleanAttribute
|
417
|
+
def xsd_NameBean
|
418
|
+
return xsd_toNameBean(xsd_Name.to_s)
|
419
|
+
end
|
420
|
+
def xsd_toNameBean(name)
|
421
|
+
#special case handling introduced for struts
|
422
|
+
return name if name[1,1].upcase==name[1,1]
|
423
|
+
name=String.new(name)
|
424
|
+
name[0] = name[0, 1].upcase
|
425
|
+
return name
|
426
|
+
end
|
427
|
+
|
428
|
+
#Returns this element xsd_Name after applying a simplified java bean property case convention.
|
429
|
+
def xsd_NameProperty
|
430
|
+
return xsd_Name
|
431
|
+
#return xsd_toNameProperty(xsd_Name)
|
432
|
+
end
|
433
|
+
|
434
|
+
#Converts string name to a property name and returns its value.
|
435
|
+
#
|
436
|
+
#Example:
|
437
|
+
# xsd_toNameProperty("Xyz") return "xyz"
|
438
|
+
# xsd_toNameProperty("XYZ") return "xYZ"
|
439
|
+
def xsd_toNameProperty(name)
|
440
|
+
result = String.new(name)
|
441
|
+
if !result.empty?
|
442
|
+
result[0] = result[0, 1].downcase
|
443
|
+
end
|
444
|
+
return result
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
448
|
+
module Muml_Namespace
|
449
|
+
#Returns the full java file name for this element
|
450
|
+
# (Uses: Java_FilePath and xsd_Name.)
|
451
|
+
#Example:
|
452
|
+
#* build/package1/package2/NomDeLaClasse.xsd
|
453
|
+
def xsd_SchemaName
|
454
|
+
return "#{xsd_SchemaPath}#{xsd_Name}.xsd"
|
455
|
+
end
|
456
|
+
|
457
|
+
|
458
|
+
def xsd_getContextJavaFilePath(default=nil)
|
459
|
+
n=xsd_qualifiedName.to_s
|
460
|
+
jfp=context[:javaFilePathRegexp,nil]
|
461
|
+
return default if jfp.nil?
|
462
|
+
jfp.each { |mapping|
|
463
|
+
if n =~ mapping[0]
|
464
|
+
return context[:targetDir]+"/"+mapping[1]
|
465
|
+
end
|
466
|
+
}
|
467
|
+
return default
|
468
|
+
end
|
469
|
+
# Returns the path where to generate file for this object.
|
470
|
+
#
|
471
|
+
# NOTE:
|
472
|
+
# * Root directory is taken from context[:javaDir] (cf: mtk_context)
|
473
|
+
#
|
474
|
+
# Examples (with context[:build] equals to "build/":
|
475
|
+
# * build/package1/package2
|
476
|
+
# * build/package1/package2/UneClasse.xsd
|
477
|
+
def xsd_SchemaPath
|
478
|
+
return xsd_getContextJavaFilePath(context[:javaDir])+xsd_InternalFilePath
|
479
|
+
end
|
480
|
+
|
481
|
+
# Returns the internal path where to generate file for this object.
|
482
|
+
#
|
483
|
+
# NOTE:
|
484
|
+
#
|
485
|
+
# Examples
|
486
|
+
# *package1/package2
|
487
|
+
# *package1/package2/UneClasse.xsd
|
488
|
+
def xsd_InternalFilePath
|
489
|
+
r=""
|
490
|
+
umlx_sub_hierarchy.each { |n|
|
491
|
+
r+=n.xsd_Name
|
492
|
+
r+="/"
|
493
|
+
}
|
494
|
+
return r
|
495
|
+
end
|
496
|
+
|
497
|
+
#Returns this element java qualified name
|
498
|
+
#
|
499
|
+
#Example:
|
500
|
+
# package1.package2.AClassClasse
|
501
|
+
# AClassInRootDefaultPackage
|
502
|
+
# package1.package2
|
503
|
+
def xsd_qualifiedName
|
504
|
+
r=sep=""
|
505
|
+
umlx_hierarchy.each { |n|
|
506
|
+
r+=sep
|
507
|
+
r+=n.xsd_Name
|
508
|
+
sep="."
|
509
|
+
}
|
510
|
+
return r
|
511
|
+
end
|
512
|
+
|
513
|
+
#List of namespaces to be ignored by generator.
|
514
|
+
#
|
515
|
+
#NOTE:
|
516
|
+
#* user may add its own item int the list.
|
517
|
+
#* list may contain package or class qualified names.
|
518
|
+
#
|
519
|
+
#EXAMPLE:
|
520
|
+
#* "org.xyz" will ignore every item under org.xyz
|
521
|
+
#* "org.xyz.ClassZ" will ignore only ClassZ
|
522
|
+
# JAVA_IGNORE_NAMESPACE=["java.", "javax.", "xmda.bpm.api", "ontomde.bpm", "xmda.common","org.acegi"]
|
523
|
+
|
524
|
+
#return true if java generator should totaly ignore this element.
|
525
|
+
#
|
526
|
+
#NOTE:
|
527
|
+
#* returns true if this class name is in JAVA_IGNORE_ROOT_PACKAGE_NAME
|
528
|
+
def xsd_ignoreMe?(ignoreExternal=true)
|
529
|
+
#puts "ignore=#{self.class} #{self.uml_name}"
|
530
|
+
qn=xsd_qualifiedName
|
531
|
+
return true if umlx_hasStereotype?("nocode")
|
532
|
+
return true if umlx_external? && ignoreExternal
|
533
|
+
JAVA_IGNORE_NAMESPACE.each { |ns|
|
534
|
+
return true if qn.index(ns)==0
|
535
|
+
}
|
536
|
+
return false;
|
537
|
+
end
|
538
|
+
end
|
539
|
+
|
540
|
+
module Muml_VisibilityKind
|
541
|
+
#returns java visibility modifiers (public/protected/private/package)
|
542
|
+
def xsd_visibilityModifiers
|
543
|
+
return "public " if isPublic?
|
544
|
+
return "protected " if isProtected?
|
545
|
+
return "private " if isPrivate?
|
546
|
+
return "" if isPackage?
|
547
|
+
return " !! error : unknown visibility #{uri}!! "
|
548
|
+
end
|
549
|
+
end
|
550
|
+
|
551
|
+
module Muml_UML
|
552
|
+
#write java class modifiers if needed (abstract, public, ...)
|
553
|
+
#Example: public abstract
|
554
|
+
def xsd_writeClassModifiers
|
555
|
+
#uml_visibility.each { |v|
|
556
|
+
# write(v.xsd_visibilityModifiers)
|
557
|
+
#}
|
558
|
+
write "abstract " if uml_isAbstract?
|
559
|
+
end
|
560
|
+
|
561
|
+
#write java static modifier if needed
|
562
|
+
def xsd_writeStaticModifier
|
563
|
+
write("static ") if uml_isStatic?
|
564
|
+
end
|
565
|
+
|
566
|
+
end
|
567
|
+
#module Muml_EnumerationLiteral
|
568
|
+
# def xsd_Name
|
569
|
+
# end
|
570
|
+
#end
|
571
|
+
module Muml_Enumeration
|
572
|
+
|
573
|
+
#writes java5 enum keyword and enum class name
|
574
|
+
#
|
575
|
+
#Example:
|
576
|
+
#* enum Colors
|
577
|
+
def xsd_writeMetaClassName(&block)
|
578
|
+
write(%{<xsd:simpleType name="#{xsd_qualifiedName}" >\n})
|
579
|
+
yield
|
580
|
+
write(%{</xsd:simpleType>\n})
|
581
|
+
end
|
582
|
+
|
583
|
+
#write enum body (list of litterals) using xsd_writeClassComment, xsd_writeClassModifiers, xsd_writeMetaClassName.
|
584
|
+
#
|
585
|
+
#Example:
|
586
|
+
#* { red,blue,green }
|
587
|
+
def xsd_writeType
|
588
|
+
xsd_writeMetaClassName {
|
589
|
+
xsd_writeExtends {
|
590
|
+
xsd_writeClassComment
|
591
|
+
#xsd_writeJavadoc
|
592
|
+
#xsd_writeAnnotation
|
593
|
+
xsd_writeClassModifiers
|
594
|
+
|
595
|
+
write(%{ <xsd:restriction base="xsd:string">\n})
|
596
|
+
uml_ownedLiteral.each {|c|
|
597
|
+
write(%{ <xsd:enumeration value="#{c.xsd_Name}"/>\n})
|
598
|
+
}
|
599
|
+
write(%{ </xsd:restriction>\n})
|
600
|
+
|
601
|
+
#xsd_writeDeclarationSpecificOnBegin
|
602
|
+
#skip: xsd_writeAttributes
|
603
|
+
#xsd_writeConstructors
|
604
|
+
#xsd_writeOperations
|
605
|
+
xsd_writeCustomCode
|
606
|
+
#xsd_writeDeclarationSpecificOnEnd
|
607
|
+
}
|
608
|
+
}
|
609
|
+
end
|
610
|
+
|
611
|
+
#write java implements declaration clause if needed.
|
612
|
+
#
|
613
|
+
#Example:
|
614
|
+
#* implements interface1, interface2
|
615
|
+
def xsd_writeImplements
|
616
|
+
imp=Set.new
|
617
|
+
uml_implementation.each { |g|
|
618
|
+
imp.add(g.uml_supplier_one.xsd_qualifiedName)
|
619
|
+
}
|
620
|
+
xsd_implements.each { |g|
|
621
|
+
imp.add(g)
|
622
|
+
}
|
623
|
+
|
624
|
+
sep="\n<!-- implements "
|
625
|
+
e=""
|
626
|
+
imp.sort{ |a,b| a <=> b}.each { |g|
|
627
|
+
write(sep)
|
628
|
+
write(g)
|
629
|
+
sep=","
|
630
|
+
e=" -->"
|
631
|
+
}
|
632
|
+
write(e)
|
633
|
+
end
|
634
|
+
|
635
|
+
end
|
636
|
+
|
637
|
+
module Muml_Class
|
638
|
+
|
639
|
+
#Mark this java class as serializable.
|
640
|
+
#* adds implements java.io.Serializable
|
641
|
+
#* adds serialVersionUID variable
|
642
|
+
#Example:
|
643
|
+
# private static final long serialVersionUID = 1L;
|
644
|
+
def xsd_makeSerializable!
|
645
|
+
#xsd_implements_add("java.io.Serializable");
|
646
|
+
s=umlx_getOrCreateClass("java.io.Serializable")
|
647
|
+
umlx_createAndAddImplementation(s)
|
648
|
+
|
649
|
+
p=umlx_createAndAddProperty(rdf_uri+"_serialVersionUID","serialVersionUID");
|
650
|
+
p.uml_visibility=::Cuml_VisibilityKind::Private
|
651
|
+
p.uml_isStatic=RDF_TRUE
|
652
|
+
p.xsd_isFinal=RDF_TRUE
|
653
|
+
p.xsd_isTransient=RDF_TRUE
|
654
|
+
p.uml_type=umlx_dataType_long
|
655
|
+
p.xsd_code="1L"
|
656
|
+
p.xsd_noAccessors=RDF_TRUE
|
657
|
+
end
|
658
|
+
|
659
|
+
|
660
|
+
|
661
|
+
#write java implements declaration clause if needed.
|
662
|
+
#
|
663
|
+
#Example:
|
664
|
+
#* implements interface1, interface2
|
665
|
+
def xsd_writeImplements
|
666
|
+
imp=Set.new
|
667
|
+
uml_implementation.each { |g|
|
668
|
+
imp.add(g.uml_supplier_one.xsd_qualifiedName)
|
669
|
+
}
|
670
|
+
xsd_implements.each { |g|
|
671
|
+
imp.add(g)
|
672
|
+
}
|
673
|
+
|
674
|
+
# sep=""# \n<!-- implements "
|
675
|
+
# e=""
|
676
|
+
# imp.sort{ |a,b| a <=> b}.each { |g|
|
677
|
+
# write(sep)
|
678
|
+
# write(g)
|
679
|
+
# sep=","
|
680
|
+
# e=" -->"
|
681
|
+
# }
|
682
|
+
# write(e)
|
683
|
+
end
|
684
|
+
|
685
|
+
#Adds a constructor with paramter
|
686
|
+
#
|
687
|
+
#NOTE:
|
688
|
+
#* EXPERIMENTAL
|
689
|
+
#
|
690
|
+
#TODO: associations, et filtrer attributs static
|
691
|
+
def xsd_writeConstructors
|
692
|
+
write(" public #{xsd_Name}() {\n")
|
693
|
+
write(" }\n")
|
694
|
+
#TODO: associations ??, filtrer static
|
695
|
+
if (!uml_ownedAttribute.empty?)
|
696
|
+
parameters = ""
|
697
|
+
uml_ownedAttribute.each { |o|
|
698
|
+
if o.umlx_isAttribute?
|
699
|
+
parameters << ", "
|
700
|
+
parameters << o.xsd_propertyRoleType.to_s
|
701
|
+
parameters << " "
|
702
|
+
parameters << o.xsd_NameProperty
|
703
|
+
end
|
704
|
+
}
|
705
|
+
if (!parameters.empty?)
|
706
|
+
write("\n")
|
707
|
+
parameters = parameters.slice(1, parameters.length)
|
708
|
+
write(" public #{xsd_Name}(#{parameters}) {\n")
|
709
|
+
uml_ownedAttribute.each { |o|
|
710
|
+
if o.umlx_isAttribute?
|
711
|
+
write(" set#{o.xsd_NameBean}(#{o.xsd_NameProperty});\n")
|
712
|
+
end
|
713
|
+
}
|
714
|
+
write(" }\n")
|
715
|
+
end
|
716
|
+
end
|
717
|
+
end
|
718
|
+
end
|
719
|
+
|
720
|
+
|
721
|
+
module Muml_Classifier
|
722
|
+
include Mxsd_Annotation
|
723
|
+
rdf_safe_attr_reader_many :xsd_import
|
724
|
+
rdf_safe_attr_reader_many :xsd_implements
|
725
|
+
rdf_safe_attr_reader_many :xsd_extends
|
726
|
+
rdf_safe_attr_reader_many :xsd_isATestFile
|
727
|
+
|
728
|
+
#true if this classifier is transient
|
729
|
+
rdf_safe_attr_reader_many :xsd_isTransient
|
730
|
+
rdf_safe_attr_reader_many :db_isTransient
|
731
|
+
rdf_safe_attr_reader_many :db_isDAO
|
732
|
+
|
733
|
+
|
734
|
+
|
735
|
+
|
736
|
+
#write java class keyword and class name
|
737
|
+
#
|
738
|
+
#Example:
|
739
|
+
#* classe Class1
|
740
|
+
def xsd_writeMetaClassName(&block)
|
741
|
+
write(%{ <xsd:complexType name="#{xsd_qualifiedName}">\n})
|
742
|
+
yield
|
743
|
+
write(%{ </xsd:complexType>\n})
|
744
|
+
end
|
745
|
+
|
746
|
+
|
747
|
+
# write java header.
|
748
|
+
# (Uses xsd_writePackageDeclaration, xsd_writeImports)
|
749
|
+
#Exemple:
|
750
|
+
# package pack1;
|
751
|
+
# import xyz;
|
752
|
+
def xsd_writeClassHeader(&block)
|
753
|
+
return if context[:innerClass]
|
754
|
+
#xsd_writePackageDeclaration {
|
755
|
+
write(XSD_HEADER)
|
756
|
+
xsd_writeImports
|
757
|
+
yield
|
758
|
+
write(XSD_FOOTER)
|
759
|
+
#}
|
760
|
+
end
|
761
|
+
|
762
|
+
#java custom code overide to be
|
763
|
+
#inserted in custom code section
|
764
|
+
rdf_safe_attr_reader_many :xsd_customCode
|
765
|
+
|
766
|
+
# write class body.
|
767
|
+
# (Uses xsd_writeClassComment, xsd_writeClassModifiers, xsd_writeMetaClassName, xsd_writeExtends, xsd_writeImplements, xsd_writeDeclarationSpecificOnBegin, xsd_writeAttributes, xsd_writeConstructors, xsd_writeOperations, xsd_writeDeclarationSpecificOnEnd)
|
768
|
+
def xsd_writeType
|
769
|
+
xsd_writeMetaClassName {
|
770
|
+
xsd_writeExtends {
|
771
|
+
# # xsd_writeClassComment
|
772
|
+
# xsd_writeJavadoc
|
773
|
+
# xsd_writeAnnotation
|
774
|
+
# xsd_writeClassModifiers
|
775
|
+
# xsd_writeExtends
|
776
|
+
# xsd_writeImplements # class seulement
|
777
|
+
# # write("{\n")
|
778
|
+
# xsd_writeCustomCode
|
779
|
+
#
|
780
|
+
# xsd_writeDeclarationSpecificOnBegin
|
781
|
+
xsd_writeAttributes
|
782
|
+
#write("\n\n")
|
783
|
+
#xsd_writeConstructors
|
784
|
+
# write("\n\n")
|
785
|
+
#xsd_writeOperations
|
786
|
+
xsd_writeDeclarationSpecificOnEnd
|
787
|
+
|
788
|
+
mtk_context(:innerClass=>true) {
|
789
|
+
uml_nestedClassifier.each { |c|
|
790
|
+
puts "ignored nested classifier #{c} in #{self}"
|
791
|
+
#c.xsd_writeType # !!
|
792
|
+
}
|
793
|
+
}
|
794
|
+
}
|
795
|
+
}
|
796
|
+
end
|
797
|
+
|
798
|
+
#add add a custom code zone
|
799
|
+
#that is usefull for out of model code.
|
800
|
+
def xsd_writeCustomCode
|
801
|
+
mtk_protected(Mrdf_Resource::NOREVERSE,"custom_code") {
|
802
|
+
write !xsd_customCode.empty? ? xsd_customCode : <<END
|
803
|
+
<!-- ***********************************************
|
804
|
+
This area is provided to insert special code
|
805
|
+
that cannot be handled by generator.
|
806
|
+
Please, don't use custom method to avoid
|
807
|
+
keeping source models up to date.
|
808
|
+
*********************************************** -->
|
809
|
+
END
|
810
|
+
}
|
811
|
+
end
|
812
|
+
|
813
|
+
#Does nothing.
|
814
|
+
def xsd_writeClassComment
|
815
|
+
end
|
816
|
+
|
817
|
+
#Does nothing.
|
818
|
+
def xsd_writeDeclarationSpecificOnBegin
|
819
|
+
end
|
820
|
+
|
821
|
+
#Does nothing.
|
822
|
+
def xsd_writeDeclarationSpecificOnEnd
|
823
|
+
end
|
824
|
+
|
825
|
+
#Does nothing.
|
826
|
+
def xsd_writeConstructors
|
827
|
+
end
|
828
|
+
|
829
|
+
#write java package declaration
|
830
|
+
# (Uses xsd_qualifiedName)
|
831
|
+
#
|
832
|
+
#Example:
|
833
|
+
#* package aPackage;
|
834
|
+
#* package aPackage.aPackage2;
|
835
|
+
#* //package --none--
|
836
|
+
#def xsd_writePackageDeclaration(&block)
|
837
|
+
# p = umlx_package
|
838
|
+
# if p.nil? || p.umlx_isARootNamespace?
|
839
|
+
# write("//package --none--;\n")
|
840
|
+
# else
|
841
|
+
# write("package #{p.xsd_qualifiedName};\n")
|
842
|
+
# end
|
843
|
+
# yield
|
844
|
+
#end
|
845
|
+
|
846
|
+
#write java extends instructions is necessary
|
847
|
+
# (Uses xsd_qualifiedName)
|
848
|
+
#
|
849
|
+
#Example:
|
850
|
+
# extends Class2,Class3
|
851
|
+
def xsd_writeExtends(&block)
|
852
|
+
pre=""
|
853
|
+
post=""
|
854
|
+
tab=""
|
855
|
+
uml_generalization.each { |g|
|
856
|
+
pre+=%{#{tab}<xsd:complexContent>\n#{tab} <xsd:extension base="#{g.uml_general_one.xsd_qualifiedName}">\n}
|
857
|
+
post+=%{#{tab} </xsd:extension>\n#{tab}</xsd:complexContent>\n}
|
858
|
+
tab=tab+" "
|
859
|
+
}
|
860
|
+
write(pre)
|
861
|
+
yield
|
862
|
+
write(post)
|
863
|
+
end
|
864
|
+
|
865
|
+
# if true, generator will compute depencies and add imports
|
866
|
+
# NOTE !!
|
867
|
+
# This feature was added for derived generators.
|
868
|
+
# It's use is **not** recommended for **java**.
|
869
|
+
# Problems will occur if model manipulate classes
|
870
|
+
# such as java.sql.Date and java.lang.Date simultaneously.
|
871
|
+
#JAVA_IMPORT_COMPUTED_DEPENDENCIES=false
|
872
|
+
|
873
|
+
#write import instructions
|
874
|
+
#
|
875
|
+
#NOTE:
|
876
|
+
# The generator always uses qualified names, thus imports are not used by the generator.
|
877
|
+
# Using short names leads to name clash. (different Date class, ...)
|
878
|
+
#
|
879
|
+
# Letting eclipse handle imports is a the best solution.
|
880
|
+
#
|
881
|
+
# Eclipse offers a highly convenient organize imports feature.
|
882
|
+
# Developer should generate java code squeleton and fill it with their code eventually
|
883
|
+
# using ECLIPSE organize import features.
|
884
|
+
def xsd_writeImports
|
885
|
+
xsd_dependencies.each {|dep|
|
886
|
+
puts(%{<xsd:include schemaLocation="#{dep}"/>})
|
887
|
+
|
888
|
+
}
|
889
|
+
|
890
|
+
|
891
|
+
|
892
|
+
setOfImport=Set.new
|
893
|
+
xsd_import.each { |imp|
|
894
|
+
setOfImport<< imp
|
895
|
+
}
|
896
|
+
JAVA_DEFAULT_IMPORTS.each { |c|
|
897
|
+
setOfImport<< c
|
898
|
+
}
|
899
|
+
if(JAVA_IMPORT_COMPUTED_DEPENDENCIES)
|
900
|
+
umlx_computeDirectDepencies().each { |c|
|
901
|
+
m=c.xsd_qualifiedName
|
902
|
+
#Concrete type may come from a datatype mapping definition and be either a class or a language datatype.
|
903
|
+
next unless m.index(".")
|
904
|
+
setOfImport<< m
|
905
|
+
}
|
906
|
+
end
|
907
|
+
|
908
|
+
if (setOfImport.empty?)
|
909
|
+
# adds a useless import so eclipse
|
910
|
+
# will place imports in the right area (between ontomde reverse marquers)
|
911
|
+
# when using "organize import" eclipse feature.
|
912
|
+
if umlx_owner_one.umlx_isARootNamespace?
|
913
|
+
#import of class in root package is invalid
|
914
|
+
setOfImport<<"java.lang.Object"
|
915
|
+
else
|
916
|
+
#we import something
|
917
|
+
setOfImport<< self.xsd_qualifiedName;
|
918
|
+
end
|
919
|
+
end
|
920
|
+
|
921
|
+
mtk_protected(Mrdf_Resource::NOREVERSE,"imports") {
|
922
|
+
setOfImport.sort { |a,b| a <=> b}.each {|imp|
|
923
|
+
write("<!-- import #{imp}; -->\n");
|
924
|
+
}
|
925
|
+
}
|
926
|
+
end
|
927
|
+
|
928
|
+
#default java imports
|
929
|
+
#JAVA_DEFAULT_IMPORTS=[ ];
|
930
|
+
|
931
|
+
#iterate xsd_write on operations
|
932
|
+
#def xsd_writeOperations
|
933
|
+
# #sort has been added because ownedOperation order is random
|
934
|
+
# #which is cause false change detection on versionned file
|
935
|
+
# uml_ownedOperation.sort { |a,b| a.xsd_Name.to_s <=> b.xsd_Name.to_s }.each { |o| o.xsd_write}
|
936
|
+
#end
|
937
|
+
|
938
|
+
#iterate xsd_write on attributes
|
939
|
+
#
|
940
|
+
#NOTE
|
941
|
+
#* no attribute is generated for an interface
|
942
|
+
#* getter/setter// are not handled here (see xsd_transform!).
|
943
|
+
def xsd_writeAttributes
|
944
|
+
return if kind_of?(Muml_Interface)
|
945
|
+
#sort has been added because ownedAttribute order is random
|
946
|
+
#which is cause false change detection on versionned file
|
947
|
+
write(%{ <xsd:sequence>\n})
|
948
|
+
uml_ownedAttribute.sort { |a,b| a.xsd_Name.to_s <=> b.xsd_Name.to_s }.each { |o| o.xsd_writeProperty}
|
949
|
+
write(%{ </xsd:sequence>\n})
|
950
|
+
end
|
951
|
+
end
|
952
|
+
|
953
|
+
module Muml_Stereotype_Create
|
954
|
+
def xsd_write
|
955
|
+
write("\n")
|
956
|
+
xsd_writeAnnotation
|
957
|
+
xsd_writeMethodModifiers
|
958
|
+
|
959
|
+
#write("#{uml_class_one.xsd_Name}")
|
960
|
+
write("#{uml_ownedOperation_inv_one.xsd_Name}")
|
961
|
+
|
962
|
+
xsd_writeMethodParameters
|
963
|
+
xsd_writeMethodThrows
|
964
|
+
xsd_writeMethodBody
|
965
|
+
end
|
966
|
+
end
|
967
|
+
|
968
|
+
module Muml_Operation
|
969
|
+
rdf_safe_attr_reader_many :xsd_getter_property
|
970
|
+
rdf_safe_attr_reader_many :xsd_setter_property
|
971
|
+
include Mxsd_Annotation
|
972
|
+
|
973
|
+
#Attribut pouvant contenir le code java de la methode.
|
974
|
+
#Utilise lorsque le xsd_code est calcul? automatiquement.
|
975
|
+
rdf_safe_attr_reader_many :xsd_code
|
976
|
+
|
977
|
+
#is operation synchronised
|
978
|
+
rdf_safe_attr_reader_many :xsd_isSynchronised
|
979
|
+
|
980
|
+
#write java operation skeleton.
|
981
|
+
# (Uses xsd_writeMethodModifiers, xsd_writeMethodReturnType, xsd_writeMethodParameters, xsd_writeMethodThrows, xsd_writeMethodBody)
|
982
|
+
def xsd_write
|
983
|
+
write("\n")
|
984
|
+
#xsd_writeJavadoc
|
985
|
+
xsd_writeAnnotation
|
986
|
+
xsd_writeMethodModifiers
|
987
|
+
|
988
|
+
if(umlx_isConstructor?)
|
989
|
+
write("#{umlx_class_one.xsd_Name}")
|
990
|
+
else
|
991
|
+
xsd_writeMethodReturnType
|
992
|
+
write("#{xsd_Name}")
|
993
|
+
end
|
994
|
+
xsd_writeMethodParameters
|
995
|
+
xsd_writeMethodThrows
|
996
|
+
xsd_writeMethodBody
|
997
|
+
end
|
998
|
+
|
999
|
+
#write java method modifiers.
|
1000
|
+
# (Uses xsd_writeAbstract, xsd_visibilityModifiers, xsd_writeStaticModifiers)
|
1001
|
+
# Visibility is not generated for interfaces (to make checkstyle happy)
|
1002
|
+
#Example:
|
1003
|
+
#* abstract public
|
1004
|
+
#* public static
|
1005
|
+
def xsd_writeMethodModifiers
|
1006
|
+
|
1007
|
+
|
1008
|
+
if !umlx_class_one.kind_of?(Muml_Interface)
|
1009
|
+
uml_visibility.each { |v|
|
1010
|
+
write(v.xsd_visibilityModifiers)
|
1011
|
+
}
|
1012
|
+
end
|
1013
|
+
xsd_writeStaticModifier
|
1014
|
+
xsd_writeAbstract
|
1015
|
+
write "synchronized "if xsd_isSynchronised?
|
1016
|
+
|
1017
|
+
#xsd_writeModifiers
|
1018
|
+
#abstract synchronized ...
|
1019
|
+
#TODO uml_classifier_isAbstract
|
1020
|
+
end
|
1021
|
+
|
1022
|
+
#write abstract keyword if necessary.
|
1023
|
+
def xsd_writeAbstract
|
1024
|
+
write("abstract ") if uml_isAbstract?
|
1025
|
+
end
|
1026
|
+
|
1027
|
+
#write method return type
|
1028
|
+
# (Uses xsd_writeParameterType)
|
1029
|
+
def xsd_writeMethodReturnType
|
1030
|
+
xsd_writeParameterType(umlx_returnResult_one0)
|
1031
|
+
end
|
1032
|
+
|
1033
|
+
#write java type parameter (without the name)
|
1034
|
+
#
|
1035
|
+
#Example:
|
1036
|
+
#* void
|
1037
|
+
#* int
|
1038
|
+
#* pack1.Class1
|
1039
|
+
def xsd_writeParameterType(fp)
|
1040
|
+
if (fp.nil?)
|
1041
|
+
write("void ")
|
1042
|
+
else
|
1043
|
+
fp.xsd_write
|
1044
|
+
#uml_isException (!! a ne pas confondre avec une exception)
|
1045
|
+
#uml_isOrdered
|
1046
|
+
#uml_isStream
|
1047
|
+
#uml_isUnique
|
1048
|
+
end
|
1049
|
+
end
|
1050
|
+
#Write the body of a java method.
|
1051
|
+
#
|
1052
|
+
#NOTE:
|
1053
|
+
#* The default generated operation throws a RuntimeException
|
1054
|
+
#* mtk_protected is used to allow inline java code modification (with Eclipse)
|
1055
|
+
def xsd_writeMethodBody
|
1056
|
+
if uml_isAbstract? || context[:xsd_interface]
|
1057
|
+
write(";\n")
|
1058
|
+
else
|
1059
|
+
write("{");
|
1060
|
+
mtk_protected(Mrdf_Resource::NOREVERSE) {
|
1061
|
+
if ! xsd_code_one0.nil?
|
1062
|
+
write xsd_code
|
1063
|
+
else
|
1064
|
+
xsd_writeMethodBodyNotImplemented
|
1065
|
+
end
|
1066
|
+
}
|
1067
|
+
write("}\n");
|
1068
|
+
end
|
1069
|
+
end
|
1070
|
+
|
1071
|
+
#writes default code for a method not implemented
|
1072
|
+
def xsd_writeMethodBodyNotImplemented
|
1073
|
+
write <<END
|
1074
|
+
//TODO: implement method body
|
1075
|
+
throw new java.lang.RuntimeException("[operation \\"#{xsd_Name}\\"not implemented]");
|
1076
|
+
END
|
1077
|
+
end
|
1078
|
+
|
1079
|
+
# write method throw clause.
|
1080
|
+
# (Uses xsd_qualifiedName )
|
1081
|
+
#
|
1082
|
+
# Example:
|
1083
|
+
# * throws java.lang.Exception
|
1084
|
+
def xsd_writeMethodThrows
|
1085
|
+
sep=" throws "
|
1086
|
+
|
1087
|
+
uml_raisedException.each { |exception|
|
1088
|
+
write(sep);
|
1089
|
+
write(exception.xsd_qualifiedName)
|
1090
|
+
sep=","
|
1091
|
+
}
|
1092
|
+
end
|
1093
|
+
|
1094
|
+
#write method parameters
|
1095
|
+
#
|
1096
|
+
#Example:
|
1097
|
+
#* ()
|
1098
|
+
#* (int x)
|
1099
|
+
#* (pack1.Class1 xyz, String z)
|
1100
|
+
def xsd_writeMethodParameters
|
1101
|
+
write("(")
|
1102
|
+
sep=""
|
1103
|
+
uml_ownedParameter.each { |op|
|
1104
|
+
next if op.uml_direction_one.isReturn?
|
1105
|
+
write(sep)
|
1106
|
+
sep=","
|
1107
|
+
op.xsd_write
|
1108
|
+
}
|
1109
|
+
write(")")
|
1110
|
+
end
|
1111
|
+
end
|
1112
|
+
|
1113
|
+
module Muml_Property
|
1114
|
+
include Mxsd_Annotation
|
1115
|
+
rdf_safe_attr_reader_many :xsd_AttributeGlobalSetter
|
1116
|
+
rdf_safe_attr_reader_many :xsd_AttributeGlobalGetter
|
1117
|
+
|
1118
|
+
#Attribut pouvant contenir la valeur initiale.
|
1119
|
+
#Utilise lorsque le xsd_code est calcul? automatiquement.
|
1120
|
+
rdf_safe_attr_reader_many :xsd_code
|
1121
|
+
|
1122
|
+
#Transient attribute
|
1123
|
+
rdf_safe_attr_reader_many :xsd_isTransient
|
1124
|
+
|
1125
|
+
#is persistent (in database)
|
1126
|
+
rdf_safe_attr_reader_many :db_isTransient
|
1127
|
+
|
1128
|
+
#property is final
|
1129
|
+
rdf_safe_attr_reader_many :xsd_isFinal
|
1130
|
+
|
1131
|
+
#Methode vide
|
1132
|
+
def xsd_writePropertyComment
|
1133
|
+
end
|
1134
|
+
#Methode vide
|
1135
|
+
def xsd_writeGetterComment
|
1136
|
+
end
|
1137
|
+
#Methode vide
|
1138
|
+
def xsd_writeSetterComment
|
1139
|
+
end
|
1140
|
+
|
1141
|
+
def xsd_writeMaxOccurs
|
1142
|
+
return if umlx_upperValueIsOne?
|
1143
|
+
write(%{ maxOccurs="})
|
1144
|
+
u=uml_upperValue.to_s
|
1145
|
+
if(u=="-1")
|
1146
|
+
write("unbounded")
|
1147
|
+
else
|
1148
|
+
write(u)
|
1149
|
+
end
|
1150
|
+
write(%{"})
|
1151
|
+
end
|
1152
|
+
def xsd_writeMinOccurs
|
1153
|
+
return if umlx_lowerValueIsOne?
|
1154
|
+
write(%{ minOccurs="})
|
1155
|
+
u=uml_lowerValue.to_s
|
1156
|
+
if(u=="-1")
|
1157
|
+
write("unbounded")
|
1158
|
+
else
|
1159
|
+
write(u)
|
1160
|
+
end
|
1161
|
+
write(%{"})
|
1162
|
+
|
1163
|
+
end
|
1164
|
+
#write java attribute variable
|
1165
|
+
# (Uses xsd_writePropertyComment, xsd_writePropertyModifiers ,xsd_propertyRoleType,xsd_NameProperty)
|
1166
|
+
#
|
1167
|
+
#NOTE:
|
1168
|
+
#* getter/setter/... methods are handled by model transformation
|
1169
|
+
def xsd_writeProperty
|
1170
|
+
write(%{ <xsd:element name="#{xsd_Name}" type="#{uml_type_one.xsd_qualifiedName}"})
|
1171
|
+
xsd_writeMinOccurs
|
1172
|
+
xsd_writeMaxOccurs
|
1173
|
+
write(%{/>\n})
|
1174
|
+
# return
|
1175
|
+
# if !uml_isDerived?
|
1176
|
+
# xsd_writePropertyComment
|
1177
|
+
# xsd_writeAnnotation
|
1178
|
+
# write(" ");
|
1179
|
+
# xsd_writePropertyModifiers
|
1180
|
+
# write("#{xsd_propertyAssociationType}")
|
1181
|
+
# write(" #{xsd_NameProperty}")
|
1182
|
+
#
|
1183
|
+
# if !xsd_code.empty?
|
1184
|
+
# write"= #{xsd_code}"
|
1185
|
+
# elsif(context[:xsd_generateSetAttributeInitializer])
|
1186
|
+
# if (!umlx_upperValueIsOne?) && uml_qualifier.empty? && xsd_use_Arrays?
|
1187
|
+
# write("= new ");
|
1188
|
+
# write(uml_type_one.xsd_qualifiedName)
|
1189
|
+
# write("[1]")
|
1190
|
+
# elsif (!umlx_upperValueIsOne?) && uml_qualifier.empty?
|
1191
|
+
# write("= new ");
|
1192
|
+
# write(xsd_propertyAssociationConcreteType)
|
1193
|
+
# write("()")
|
1194
|
+
# elsif umlx_upperValueIsOne? && !uml_qualifier.empty?
|
1195
|
+
# write("= new ");
|
1196
|
+
# write(xsd_propertyAssociationConcreteType)
|
1197
|
+
# write("()")
|
1198
|
+
# elsif !umlx_upperValueIsOne? && !uml_qualifier.empty?
|
1199
|
+
# #write("= new ");
|
1200
|
+
# #write(xsd_propertyAssociationConcreteType)
|
1201
|
+
# #write("()")
|
1202
|
+
# end
|
1203
|
+
# end
|
1204
|
+
# write(";\n")
|
1205
|
+
# end
|
1206
|
+
end
|
1207
|
+
|
1208
|
+
|
1209
|
+
|
1210
|
+
#write java modifiers if needed (public, static, ...)
|
1211
|
+
# (Uses xsd_visibilityModifiers, xsd_writeStaticModifier)
|
1212
|
+
# example: private static final transient long
|
1213
|
+
def xsd_writePropertyModifiers
|
1214
|
+
|
1215
|
+
uml_visibility.each { |v|
|
1216
|
+
write(v.xsd_visibilityModifiers)
|
1217
|
+
}
|
1218
|
+
xsd_writeStaticModifier
|
1219
|
+
xsd_writeFinalModifier
|
1220
|
+
xsd_writeTransient
|
1221
|
+
end
|
1222
|
+
|
1223
|
+
def xsd_writeFinalModifier
|
1224
|
+
return unless xsd_isFinal?
|
1225
|
+
write "final "
|
1226
|
+
end
|
1227
|
+
|
1228
|
+
#write java transient modifier if needed.
|
1229
|
+
def xsd_writeTransient
|
1230
|
+
return unless xsd_isTransient?
|
1231
|
+
write("transient ")
|
1232
|
+
end
|
1233
|
+
|
1234
|
+
end
|
1235
|
+
|
1236
|
+
|
1237
|
+
|
1238
|
+
module Muml_TypedElement
|
1239
|
+
rdf_safe_attr_reader_many :xsd_use_Arrays
|
1240
|
+
|
1241
|
+
#return java property type.
|
1242
|
+
# (Uses xsd_qualifiedName)
|
1243
|
+
#
|
1244
|
+
#NOTE
|
1245
|
+
#* used for UML Parameter and UML Property
|
1246
|
+
#* return "int" and a TODO comment if uml_type is undefined.
|
1247
|
+
#
|
1248
|
+
#Example:
|
1249
|
+
#* String
|
1250
|
+
#* Set<String>
|
1251
|
+
def xsd_propertyRoleConcreteType
|
1252
|
+
return xsd_getCollectionMapping.addCollectionImplem(
|
1253
|
+
uml_type.empty? ? "Integer /* TODO: FIX:undefined type in uml model */ " : uml_type_one.xsd_qualifiedName )
|
1254
|
+
end
|
1255
|
+
|
1256
|
+
def xsd_propertyRoleType
|
1257
|
+
return xsd_getCollectionMapping.addCollectionInterface(
|
1258
|
+
uml_type.empty? ? "Integer /* TODO: FIX:undefined type in uml model */ " : uml_type_one.xsd_qualifiedName )
|
1259
|
+
end
|
1260
|
+
|
1261
|
+
def xsd_propertyAssociationConcreteType
|
1262
|
+
return xsd_propertyRoleConcreteType if uml_qualifier.empty?
|
1263
|
+
j="java.util.Hashtable<"
|
1264
|
+
sep_next=""
|
1265
|
+
uml_qualifier.each { |key|
|
1266
|
+
j=j+sep_next+key.xsd_propertyRoleConcreteType
|
1267
|
+
sep_next=","
|
1268
|
+
}
|
1269
|
+
j=j+","+xsd_propertyRoleConcreteType+">"
|
1270
|
+
return j
|
1271
|
+
end
|
1272
|
+
def xsd_propertyAssociationType
|
1273
|
+
return xsd_propertyRoleType if uml_qualifier.empty?
|
1274
|
+
j="java.util.Hashtable<"
|
1275
|
+
sep_next=""
|
1276
|
+
uml_qualifier.each { |key|
|
1277
|
+
j=j+sep_next+key.xsd_propertyRoleType
|
1278
|
+
sep_next=","
|
1279
|
+
}
|
1280
|
+
j=j+","+xsd_propertyRoleType+">"
|
1281
|
+
return j
|
1282
|
+
end
|
1283
|
+
end
|
1284
|
+
|
1285
|
+
|
1286
|
+
|
1287
|
+
module Muml_DataType
|
1288
|
+
#Predefined UML datatype to Java type mapping.
|
1289
|
+
#Note: A string is used for Calendar.
|
1290
|
+
#UML_TO_JAVA_PRIMITIVE_TYPE_MAPPING={"byte"=>"byte","short"=>"short","long"=>"long","Boolean"=>"boolean","boolean"=>"boolean","int"=>"int","integer"=>"int","Integer"=>"int", "String"=>"String","string"=>"String","date"=>"java.util.Date","double"=>"double","char"=>"char","Calendar"=>"String","TimeStamp"=>"java.util.Date"}
|
1291
|
+
|
1292
|
+
# returns datatype qualified name.
|
1293
|
+
#
|
1294
|
+
# NOTE:
|
1295
|
+
# * A predefined mapping is defined UML_TO_JAVA_PRIMTIVE_TYPE_MAPPING
|
1296
|
+
# * MagicDraw handles primtive types as DataType
|
1297
|
+
# * RSM handles primtive types as PrimitiveType
|
1298
|
+
def xsd_qualifiedName
|
1299
|
+
return super if kind_of?(Muml_Enumeration)
|
1300
|
+
|
1301
|
+
return DatatypeMapping.instance.getMapping(self).xsd_getType
|
1302
|
+
|
1303
|
+
|
1304
|
+
ot=uml_name_one
|
1305
|
+
mt=::Muml_PrimitiveType::UML_TO_JAVA_PRIMITIVE_TYPE_MAPPING[ot]
|
1306
|
+
return mt unless mt.nil? || mt.to_s==""
|
1307
|
+
#avoid multiple messages
|
1308
|
+
::Muml_PrimitiveType::UML_TO_JAVA_PRIMITIVE_TYPE_MAPPING[ot]="String"
|
1309
|
+
log.error %{
|
1310
|
+
WARN: A default java mapping has been created for DataType #{ot}
|
1311
|
+
HELP:
|
1312
|
+
HELP: To declare a new mapping, create a new entry as shown bellow:
|
1313
|
+
HELP: module Muml_DataType
|
1314
|
+
HELP: UML_TO_JAVA_PRIMITIVE_TYPE_MAPPING["#{ot}"]="your target java type"
|
1315
|
+
HELP: end
|
1316
|
+
} #(not useful here) unless log_already_displayed?("#{rdf_uri}__datatype")
|
1317
|
+
return xsd_qualifiedName # retry
|
1318
|
+
end
|
1319
|
+
end
|
1320
|
+
|
1321
|
+
module Mrdf_Resource
|
1322
|
+
#return true if java generator should totaly ignore this element.
|
1323
|
+
#
|
1324
|
+
#NOTE:
|
1325
|
+
#* Default implementation returns false
|
1326
|
+
def xsd_ignoreMe?
|
1327
|
+
return false
|
1328
|
+
end
|
1329
|
+
end
|
1330
|
+
|
1331
|
+
#module Muml_ClassifierTemplateParameter
|
1332
|
+
# def umlx_hierarchy
|
1333
|
+
# return nil
|
1334
|
+
# end
|
1335
|
+
# def xsd_ignoreMe?
|
1336
|
+
# return true
|
1337
|
+
# end
|
1338
|
+
#end
|
1339
|
+
|
1340
|
+
|
1341
|
+
|
1342
|
+
|
1343
|
+
module Muml_Interface
|
1344
|
+
|
1345
|
+
#does nothing
|
1346
|
+
def xsd_writeImplements
|
1347
|
+
end
|
1348
|
+
|
1349
|
+
#write java interface keyword and interface name
|
1350
|
+
#
|
1351
|
+
#Example:
|
1352
|
+
#* interface Interface1
|
1353
|
+
# def xsd_writeMetaClassName
|
1354
|
+
# write("interface #{xsd_Name}")
|
1355
|
+
# end
|
1356
|
+
|
1357
|
+
def xsd_makeSerializable!
|
1358
|
+
#xsd_implements_add("java.io.Serializable");
|
1359
|
+
s=umlx_getOrCreateClass("java.io.Serializable")
|
1360
|
+
umlx_createAndAddGeneralization(s)
|
1361
|
+
end
|
1362
|
+
end
|
1363
|
+
|