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