ontomde-uml2-java 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +8 -0
- data/Manifest.txt +24 -0
- data/README.txt +98 -0
- data/Rakefile +21 -0
- data/lib/ontomde-uml2-java/accessorCode.rb +496 -0
- data/lib/ontomde-uml2-java/accessorSignature.rb +304 -0
- data/lib/ontomde-uml2-java/build.rb +80 -0
- data/lib/ontomde-uml2-java/collectionMapping.rb +98 -0
- data/lib/ontomde-uml2-java/enumAssignable.rb +67 -0
- data/lib/ontomde-uml2-java/enumCompatibilityLayer.rb +188 -0
- data/lib/ontomde-uml2-java/equals.rb +91 -0
- data/lib/ontomde-uml2-java/groovy.rb +56 -0
- data/lib/ontomde-uml2-java/java.rb +1252 -0
- data/lib/ontomde-uml2-java/java.rdoc +78 -0
- data/lib/ontomde-uml2-java/javaHelper.rb +25 -0
- data/lib/ontomde-uml2-java/javaMapping.rb +420 -0
- data/lib/ontomde-uml2-java/java_todo.rdoc +3 -0
- data/lib/ontomde-uml2-java/javadoc.rb +217 -0
- data/lib/ontomde-uml2-java/meta.rb +26 -0
- data/lib/ontomde-uml2-java/operationAsClass.rb +130 -0
- data/lib/ontomde-uml2-java/security.rb +232 -0
- data/lib/ontomde-uml2-java/version.rb +7 -0
- data/lib/ontomde-uml2-java.rb +37 -0
- data/test/test_ontomde-uml2-java.rb +0 -0
- metadata +96 -0
@@ -0,0 +1,304 @@
|
|
1
|
+
|
2
|
+
module Muml_Property
|
3
|
+
#do not generate property accessors if true
|
4
|
+
rdf_safe_attr_reader_many :java_noAccessors
|
5
|
+
rdf_safe_attr_reader_many :java_isSuggester
|
6
|
+
rdf_safe_attr_reader_many :java_createAndAddSuggester
|
7
|
+
end
|
8
|
+
|
9
|
+
module Muml_Classifier
|
10
|
+
#
|
11
|
+
#Performs a model transformation to add
|
12
|
+
#* attribute getter
|
13
|
+
#* attribute setter
|
14
|
+
#* attribute remover
|
15
|
+
#* attribute appender
|
16
|
+
#* attribute suggester
|
17
|
+
#NOTE:
|
18
|
+
#* java_transform! is skipped if context[:java_transform] is false (default=true)
|
19
|
+
|
20
|
+
def java_transform!
|
21
|
+
uml_ownedAttribute.each { |oa|
|
22
|
+
java_addAccessorsFor!(oa)
|
23
|
+
}
|
24
|
+
end
|
25
|
+
def java_addAccessors!
|
26
|
+
java_transform!
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
def java_addAccessorsFor!(oa)
|
31
|
+
#log.debug { "-------java.transform:Accessor for #{self.uml_name}.#{oa.uml_name}" }
|
32
|
+
return unless context[:java_transform,true]
|
33
|
+
return if oa.java_noAccessors?
|
34
|
+
|
35
|
+
oa.uml_visibility=Cuml_VisibilityKind::Private
|
36
|
+
|
37
|
+
#prevent multiple accessor addition.
|
38
|
+
#useful when a transformation has manually launch
|
39
|
+
#java_addAccessorFor! (ex: to set a custom getter code)
|
40
|
+
return unless oa.java_getter_property_inv.empty?
|
41
|
+
java_addGlobalGetter!(oa)
|
42
|
+
java_addGlobalSetter!(oa)
|
43
|
+
java_addQualifiedPutter!(oa)
|
44
|
+
java_addQualifiedGetter!(oa)
|
45
|
+
java_addAppender!(oa)
|
46
|
+
java_addCreateAndAppender!(oa)
|
47
|
+
java_addWithIndexAppender!(oa)
|
48
|
+
java_addAppenderQualifier!(oa)
|
49
|
+
java_addRemover!(oa)
|
50
|
+
java_addSuggester!(oa)
|
51
|
+
java_addSuggesterType!(oa)
|
52
|
+
java_addCreater!(oa)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
module Muml_Classifier
|
58
|
+
def java_createAndAddMethodFromProperty(oa,mName,withQualifier,uri_suffix="")
|
59
|
+
m=umlx_createAndAddOperation(oa.rdf_uri+"_#{mName}"+uri_suffix)
|
60
|
+
m.uml_name="#{mName}#{oa.java_NameBean}"
|
61
|
+
m.uml_class=self
|
62
|
+
m.uml_visibility=Cuml_VisibilityKind::Public
|
63
|
+
m.uml_isStatic=oa.uml_isStatic
|
64
|
+
m.java_use_Arrays=oa.java_use_Arrays
|
65
|
+
#puts "java_use_Arrays(#{oa})=#{m.java_use_Arrays}"
|
66
|
+
|
67
|
+
|
68
|
+
if withQualifier
|
69
|
+
oa.uml_qualifier.each { |qual|
|
70
|
+
ip_qual=m.umlx_createAndAddParameter(m.rdf_uri+qual.rdf_uri)
|
71
|
+
ip_qual.java_use_Arrays=oa.java_use_Arrays
|
72
|
+
qual.umlx_copyToAttributeProperty(ip_qual)
|
73
|
+
ip_qual.uml_name=qual.uml_name
|
74
|
+
ip_qual.uml_direction=Cuml_ParameterDirectionKind::In
|
75
|
+
}
|
76
|
+
oe=oa.umlx_otherEnd
|
77
|
+
if((!oe.nil?) && oe.umlx_isNavigable?)
|
78
|
+
oe.uml_qualifier.each { |qual|
|
79
|
+
ip_qual=m.umlx_createAndAddParameter(m.rdf_uri+qual.rdf_uri)
|
80
|
+
ip_qual.java_use_Arrays=oa.java_use_Arrays
|
81
|
+
qual.umlx_copyToAttributeProperty(ip_qual)
|
82
|
+
ip_qual.uml_name=qual.uml_name
|
83
|
+
ip_qual.uml_direction=Cuml_ParameterDirectionKind::In
|
84
|
+
}
|
85
|
+
end
|
86
|
+
end
|
87
|
+
return m
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
def getterParameterName(oa)
|
92
|
+
return "i#{oa.java_NameProperty}"
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
#Adds a putter for parameter oa using a model transformation. (manages addition to a hastable):
|
97
|
+
#
|
98
|
+
#NOTE:
|
99
|
+
#* This code is generated when a *qualifier* is defined in model.
|
100
|
+
#* Languages do not not handled multiple key Hastable.
|
101
|
+
#* A new operation is puttered to the UML model. The operation then generated using standard operation generator.
|
102
|
+
#* operation is only generated for multi-valued property
|
103
|
+
#*WARNING: bi-directional cannot be handled with qualifier because association key is not known.
|
104
|
+
#* a TODO note is added in the code in case model is bi-directional so developper knows something has to be done.
|
105
|
+
#
|
106
|
+
#EXAMPLE 1: (uml_upperValue==1)
|
107
|
+
# Class3 putRoleClass3(String key) {
|
108
|
+
# ...
|
109
|
+
# }
|
110
|
+
#
|
111
|
+
#EXAMPLE 2 (uml_upperValue==*):
|
112
|
+
# Set<Class3> putRoleClass3(String key) {
|
113
|
+
# ...
|
114
|
+
# }
|
115
|
+
def java_addQualifiedPutter!(oa)
|
116
|
+
return unless context[:java_addQualifiedPutter,true]
|
117
|
+
return if oa.uml_qualifier.empty?
|
118
|
+
return unless !oa.uml_isDerived?
|
119
|
+
|
120
|
+
putter=java_createAndAddMethodFromProperty(oa,"put",true)
|
121
|
+
ip=putter.umlx_createAndAddParameter(putter.rdf_uri+"_in")
|
122
|
+
ip.java_use_Arrays=oa.java_use_Arrays
|
123
|
+
oa.umlx_copyToAttributeProperty(ip)
|
124
|
+
ip.uml_name=getterParameterName(oa)
|
125
|
+
ip.uml_direction=Cuml_ParameterDirectionKind::In
|
126
|
+
oe=oa.umlx_otherEnd
|
127
|
+
putter.java_code= mtk_stss { java_writeQualifiedPutterBody(oa) }
|
128
|
+
return putter
|
129
|
+
end
|
130
|
+
|
131
|
+
#Adds a suggester for parameter oa using a model transformation.
|
132
|
+
#
|
133
|
+
#NOTE:
|
134
|
+
#* A new operation is added to the UML model. The operation then generated using standard operation generator.
|
135
|
+
#* A suggester returns a set of possible value for the parameter.
|
136
|
+
#* Suggester is not generated for datatypes (string, int, ...)
|
137
|
+
#* A default suggester is generated for enum that return every enum values
|
138
|
+
#* A default non functional suggester is generated for objects.
|
139
|
+
def java_addSuggester!(oa)
|
140
|
+
return if oa.java_isSuggester?
|
141
|
+
return if oa.uml_isReadOnly?
|
142
|
+
#log.debug { "add suggester (#{oa}) self=#{self}" }
|
143
|
+
return unless context[:java_addSuggester,true]
|
144
|
+
return if oa.uml_type_one.kind_of?(Muml_DataType) && !oa.uml_type_one.kind_of?(Muml_Enumeration)
|
145
|
+
|
146
|
+
#sug=umlx_createAndAddProperty("#{oa.rdf_uri}_sugP","#{oa.uml_name}Sug2")
|
147
|
+
#sug2.uml_type=oa.uml_type
|
148
|
+
#sug2.uml_upperValue=umlx_literal(-1)
|
149
|
+
#sug2.uml_lowerValue=umlx_literal(0)
|
150
|
+
#sug2.uml_isOrdered=RDF_TRUE
|
151
|
+
#sug2.uml_isDerived=RDF_TRUE
|
152
|
+
#sug2.java_isSuggester=RDF_TRUE
|
153
|
+
|
154
|
+
|
155
|
+
sug=java_createAndAddMethodFromProperty(oa,"sug",false)
|
156
|
+
#suggester is a defined as a bean property so it can be used with tools such as struts.
|
157
|
+
sug.uml_name="get#{oa.java_NameBean}Sug"
|
158
|
+
#java_createAndAddMethodParameterFromProperty(oa,true)
|
159
|
+
|
160
|
+
rp=sug.umlx_createAndAddParameter(sug.rdf_uri+"_p1")
|
161
|
+
#rp.java_use_Arrays=oa.java_use_Arrays
|
162
|
+
oa.umlx_copyToAttributeProperty(rp)
|
163
|
+
rp.uml_name="return"
|
164
|
+
rp.uml_direction=Cuml_ParameterDirectionKind::Return
|
165
|
+
rp.uml_upperValue=umlx_literal(-1)
|
166
|
+
rp.uml_lowerValue=umlx_literal(0)
|
167
|
+
rp.uml_isOrdered=RDF_TRUE
|
168
|
+
|
169
|
+
if(oa.uml_type_one.kind_of?(Muml_Enumeration))
|
170
|
+
sug.java_code=mtk_stss{ java_writeSuggesterBodyEnum(oa) }
|
171
|
+
else
|
172
|
+
sug.java_code=mtk_stss{ java_writeSuggesterBody(oa) }
|
173
|
+
end
|
174
|
+
return sug
|
175
|
+
end
|
176
|
+
|
177
|
+
#adds a suggester for creator.
|
178
|
+
#Returns an enum of possible types.
|
179
|
+
def java_addSuggesterType!(oa)
|
180
|
+
#log.debug { "add suggester (#{oa}) self=#{self}" }
|
181
|
+
return if oa.uml_isReadOnly?
|
182
|
+
return unless context[:withEnumAssignable]
|
183
|
+
return unless context[:java_addSuggester,true]
|
184
|
+
return if oa.uml_type_one.kind_of?(Muml_DataType) && !oa.uml_type_one.kind_of?(Muml_Enumeration)
|
185
|
+
return unless oa.umlx_isComposite?
|
186
|
+
sug=java_createAndAddMethodFromProperty(oa,"createAndAddSug",false)
|
187
|
+
#suggester is a defined as a bean property so it can be used with tools such as struts.
|
188
|
+
sug.uml_name="getCreateAndAdd#{oa.java_NameBean}Sug"
|
189
|
+
rp=sug.umlx_createAndAddParameter(sug.rdf_uri+"_p1")
|
190
|
+
#rp.java_use_Arrays=oa.java_use_Arrays
|
191
|
+
oa.umlx_copyToAttributeProperty(rp)
|
192
|
+
rp.uml_type=oa.uml_type_one.java_enumAssignableDataType
|
193
|
+
rp.uml_name="return"
|
194
|
+
rp.uml_direction=Cuml_ParameterDirectionKind::Return
|
195
|
+
rp.uml_upperValue=umlx_literal(-1)
|
196
|
+
rp.uml_lowerValue=umlx_literal(0)
|
197
|
+
rp.uml_isOrdered=RDF_TRUE
|
198
|
+
|
199
|
+
isCreateAndAdd=true
|
200
|
+
sug.java_code=mtk_stss{ java_writeSuggesterTypeBodyEnum(oa,isCreateAndAdd) }
|
201
|
+
oa.java_createAndAddSuggester=sug
|
202
|
+
return sug
|
203
|
+
end
|
204
|
+
|
205
|
+
#Adds a getter for parameter oa using a model transformation.
|
206
|
+
#
|
207
|
+
#NOTE:
|
208
|
+
#* A new operation is added to the UML model. The operation then generated using standard operation generator.
|
209
|
+
#* If property is part of a *bidirectional* association, code is generated to update automaticaly the other side of the association.
|
210
|
+
#* If property is multivalued, the operation returns a set.
|
211
|
+
def java_addGlobalGetter!(oa)
|
212
|
+
return unless context[:java_addGlobalGetter,true]
|
213
|
+
#return if oa.uml_isDerived?
|
214
|
+
#return unless oa.uml_isReadOnly?
|
215
|
+
return unless oa.java_AttributeGlobalGetter.empty?
|
216
|
+
get=java_createAndAddMethodFromProperty(oa,"get",false)
|
217
|
+
get.java_getter_property=oa
|
218
|
+
oa.java_AttributeGlobalGetter=get
|
219
|
+
|
220
|
+
rp=get.umlx_createAndAddParameter(get.rdf_uri+"_p1")
|
221
|
+
rp.java_use_Arrays=oa.java_use_Arrays
|
222
|
+
oa.umlx_copyToAttributeProperty(rp)
|
223
|
+
rp.uml_name="return"
|
224
|
+
rp.uml_direction=Cuml_ParameterDirectionKind::Return
|
225
|
+
rp.uml_qualifier=oa.uml_qualifier
|
226
|
+
get.java_code=mtk_stss {java_writeGlobalGetterBody(oa) }
|
227
|
+
return get
|
228
|
+
end
|
229
|
+
|
230
|
+
#Adds a setter for parameter oa using a model transformation.
|
231
|
+
#
|
232
|
+
#NOTE:
|
233
|
+
#* A new operation is added to the UML model. The operation then generated using standard operation generator.
|
234
|
+
#* If property is part of a *bidirectional* association, code is generated to update automaticaly the other side of the association.
|
235
|
+
#* If property is multivalued, the operation takes a set as an argument. For single value access use appender and remover.
|
236
|
+
def java_addGlobalSetter!(oa)
|
237
|
+
return unless context[:java_addGlobalSetter,true]
|
238
|
+
return unless oa.java_AttributeGlobalSetter.empty?
|
239
|
+
# a setter is generated for derived attribute as it may be implemented.
|
240
|
+
#return unless !oa.uml_isDerived?
|
241
|
+
set=java_createAndAddMethodFromProperty(oa,"set",false)
|
242
|
+
set.java_setter_property=oa
|
243
|
+
oa.java_AttributeGlobalSetter=set
|
244
|
+
|
245
|
+
ip=set.umlx_createAndAddParameter(set.rdf_uri+"_in")
|
246
|
+
ip.java_use_Arrays=oa.java_use_Arrays
|
247
|
+
oa.umlx_copyToAttributeProperty(ip)
|
248
|
+
ip.uml_name=getterParameterName(oa)
|
249
|
+
ip.uml_direction=Cuml_ParameterDirectionKind::In
|
250
|
+
ip.uml_qualifier=oa.uml_qualifier
|
251
|
+
oe=oa.umlx_otherEnd
|
252
|
+
set.java_code=mtk_stss{java_writeGlobalSetterBody(oa)}
|
253
|
+
return set
|
254
|
+
end
|
255
|
+
|
256
|
+
def java_addQualifiedGetter!(oa)
|
257
|
+
return unless context[:java_addQualifiedGetter,true]
|
258
|
+
return if oa.uml_qualifier.empty?
|
259
|
+
return unless !oa.uml_isDerived?
|
260
|
+
|
261
|
+
getter=java_createAndAddMethodFromProperty(oa,"get",true)
|
262
|
+
|
263
|
+
rp=getter.umlx_createAndAddParameter(getter.rdf_uri+"_p1")
|
264
|
+
rp.java_use_Arrays=oa.java_use_Arrays
|
265
|
+
oa.umlx_copyToAttributeProperty(rp)
|
266
|
+
rp.uml_name="return"
|
267
|
+
rp.uml_direction=Cuml_ParameterDirectionKind::Return
|
268
|
+
|
269
|
+
getter.java_code=mtk_stss{java_writeQualifiedGetterBody(oa)}
|
270
|
+
return getter
|
271
|
+
end
|
272
|
+
|
273
|
+
def java_addWithIndexAppender!(oa)
|
274
|
+
return unless context[:java_addAppender,true]
|
275
|
+
return if oa.umlx_upperValueIsOne?
|
276
|
+
#return unless oa.uml_qualifier.empty?
|
277
|
+
return unless oa.uml_isOrdered?
|
278
|
+
return if oa.java_isSuggester?
|
279
|
+
return if oa.uml_isReadOnly?
|
280
|
+
#return if oa.umlx_isComposite?
|
281
|
+
add=java_createAndAddMethodFromProperty(oa,"add",true,"wi")
|
282
|
+
|
283
|
+
ip2=Cuml_Parameter.new(rdf_model,add.rdf_uri+"_in")
|
284
|
+
ip2.uml_name="_index"
|
285
|
+
ip2.uml_direction=Cuml_ParameterDirectionKind::In
|
286
|
+
ip2.uml_upperValue=umlx_literal(1);
|
287
|
+
ip2.uml_lowerValue=umlx_literal(1);
|
288
|
+
ip2.uml_type=umlx_dataType_integer
|
289
|
+
add.uml_ownedParameter_add(ip2)
|
290
|
+
oe=oa.umlx_otherEnd
|
291
|
+
|
292
|
+
ip=Cuml_Parameter.new(rdf_model,add.rdf_uri+"_in")
|
293
|
+
ip.uml_name=getterParameterName(oa)
|
294
|
+
ip.uml_direction=Cuml_ParameterDirectionKind::In
|
295
|
+
ip.uml_upperValue=umlx_literal(1);
|
296
|
+
ip.uml_lowerValue=umlx_literal(1);
|
297
|
+
ip.uml_type=oa.uml_type
|
298
|
+
add.uml_ownedParameter_add(ip)
|
299
|
+
|
300
|
+
add.java_code = mtk_stss{java_addWithIndexAppenderBody(oa,oe,ip,ip2)}
|
301
|
+
return add
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
@@ -0,0 +1,80 @@
|
|
1
|
+
|
2
|
+
module Mrdf_Resource
|
3
|
+
#returns directory containing compiled
|
4
|
+
#java classes and other ressources in classpath.
|
5
|
+
def java_ClassRelativeDir
|
6
|
+
p="#{context[:javaDir]}"
|
7
|
+
p="#{context[:webContentRelativeDir,p]}"
|
8
|
+
p="#{p}/WEB-INF/classes"
|
9
|
+
p="#{context[:javaClassDir,p]}"
|
10
|
+
return p
|
11
|
+
end
|
12
|
+
end
|
13
|
+
module Mrdf_Model
|
14
|
+
#returns directory containing compiled
|
15
|
+
#java classes and other ressources in classpath.
|
16
|
+
def java_ClassRelativeDir
|
17
|
+
p="#{context[:javaDir]}"
|
18
|
+
p="#{context[:webContentRelativeDir,p]}"
|
19
|
+
p="#{p}/WEB-INF/classes"
|
20
|
+
p="#{context[:javaClassDir,p]}"
|
21
|
+
return p
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module Mrdf_Model
|
26
|
+
def java_generateAntBuildFile
|
27
|
+
return unless context[:generateAntBuildFile,false]
|
28
|
+
|
29
|
+
mtk_writeSession("#{context[:targetDir]}/build.xml") {
|
30
|
+
write %{
|
31
|
+
<project name="demo" default="all">
|
32
|
+
|
33
|
+
<target name="all" depends="compile,log4j" />
|
34
|
+
|
35
|
+
<target name="compile">
|
36
|
+
<mkdir dir="#{java_ClassRelativeDir}" />
|
37
|
+
<sync todir="#{java_ClassRelativeDir}">
|
38
|
+
<fileset dir="#{context[:javaRelativeDir]}">
|
39
|
+
<include name="**/*"/>
|
40
|
+
<exclude name="**/*.java"/>
|
41
|
+
</fileset>
|
42
|
+
<!-- only supported if ant >=1.7
|
43
|
+
<preserveintarget>
|
44
|
+
<include name="**/*.class"/>
|
45
|
+
</preserveintarget>
|
46
|
+
-->
|
47
|
+
</sync>
|
48
|
+
<javac srcdir="#{context[:javaRelativeDir]}" destdir="#{java_ClassRelativeDir}" debug="yes">
|
49
|
+
<classpath>
|
50
|
+
<!-- catch-all -->
|
51
|
+
<fileset dir="." includes="**/*.jar" />
|
52
|
+
</classpath>
|
53
|
+
<compilerarg value="-Xlint:deprecation"/>
|
54
|
+
<compilerarg value="-Xlint:unchecked"/>
|
55
|
+
</javac>
|
56
|
+
</target>
|
57
|
+
<target name="log4j">
|
58
|
+
<concat destfile="#{java_ClassRelativeDir}/log4j.properties">
|
59
|
+
<header filtering="no" trimleading="yes">
|
60
|
+
# ---------------------------------------
|
61
|
+
# Changes to this file will be deleted
|
62
|
+
# on next ant build because
|
63
|
+
# this file is the concatenation of
|
64
|
+
# file matching log4j*.properties
|
65
|
+
# in #{context[:javaRelativeDir]}"
|
66
|
+
# ---------------------------------------
|
67
|
+
</header>
|
68
|
+
|
69
|
+
<fileset dir="#{context[:javaRelativeDir]}" includes="log4j*.properties"/>
|
70
|
+
</concat>
|
71
|
+
</target>
|
72
|
+
<target name="clean" />
|
73
|
+
|
74
|
+
</project>
|
75
|
+
}
|
76
|
+
}
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# Java collection mapping rules for UML property and UML parameter.
|
2
|
+
|
3
|
+
module Muml_MultiplicityElement
|
4
|
+
#returns a Java_collectionMaping object containing mapping rules to java collection element (Array, List, Set, ...)
|
5
|
+
def java_getCollectionMapping
|
6
|
+
if self.umlx_upperValueIsOne?
|
7
|
+
return Java_collectionMapping_None.instance
|
8
|
+
elsif java_use_Arrays?
|
9
|
+
return Java_collectionMapping_Array.instance
|
10
|
+
elsif uml_isOrdered?
|
11
|
+
# this mapping is used wether or not isUnique
|
12
|
+
return Java_collectionMapping_List_ArrayList.instance
|
13
|
+
elsif uml_isUnique
|
14
|
+
return Java_collectionMapping_Set_HashSet.instance
|
15
|
+
else
|
16
|
+
return Java_collectionMapping_Collection_ArrayList.instance
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
class Java_collectionMapping_None
|
22
|
+
include Singleton
|
23
|
+
#return type enclosed in collection interface declaration
|
24
|
+
def addCollectionInterface(type)
|
25
|
+
return type
|
26
|
+
end
|
27
|
+
#return type enclosed in collection implementation declaration
|
28
|
+
def addCollectionImplem(type)
|
29
|
+
return type
|
30
|
+
end
|
31
|
+
end
|
32
|
+
class Java_collectionMapping_base
|
33
|
+
#return type enclosed in collection interface declaration
|
34
|
+
def addCollectionInterface(type)
|
35
|
+
return "#{getInterface}<#{type}>"
|
36
|
+
end
|
37
|
+
#return type enclosed in collection implementation declaration
|
38
|
+
def addCollectionImplem(type)
|
39
|
+
return "#{getImplem}<#{type}>"
|
40
|
+
end
|
41
|
+
#return new element type collection creator
|
42
|
+
def addNew(type)
|
43
|
+
return "new #{getImplem}<#{type}>()"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
class Java_collectionMapping_Collection_ArrayList < Java_collectionMapping_base
|
47
|
+
include Singleton
|
48
|
+
#returns interface type for this collection
|
49
|
+
def getInterface
|
50
|
+
return "Collection"
|
51
|
+
end
|
52
|
+
#returns implementation class for this collection
|
53
|
+
def getImplem
|
54
|
+
return "java.util.ArrayList"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
class Java_collectionMapping_List_ArrayList < Java_collectionMapping_base
|
59
|
+
include Singleton
|
60
|
+
#returns interface type for this collection
|
61
|
+
def getInterface
|
62
|
+
return "java.util.List"
|
63
|
+
end
|
64
|
+
#returns implementation class for this collection
|
65
|
+
def getImplem
|
66
|
+
return "java.util.ArrayList"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
class Java_collectionMapping_Set_HashSet < Java_collectionMapping_base
|
70
|
+
include Singleton
|
71
|
+
#returns interface type for this collection
|
72
|
+
def getInterface
|
73
|
+
return "java.util.Set"
|
74
|
+
end
|
75
|
+
#returns implementation class for this collection
|
76
|
+
def getImplem
|
77
|
+
return "java.util.HashSet"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
class Java_collectionMapping_Array
|
81
|
+
include Singleton
|
82
|
+
#return type enclosed in collection interface declaration
|
83
|
+
def addCollectionInterface(type)
|
84
|
+
return "#{type}[]"
|
85
|
+
end
|
86
|
+
#return type enclosed in collection implementation declaration
|
87
|
+
def addCollectionImplem(type)
|
88
|
+
return "#{type}[]"
|
89
|
+
end
|
90
|
+
#return new element type collection creator
|
91
|
+
def addNew(type)
|
92
|
+
return "new #{type}[0]"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
@@ -0,0 +1,67 @@
|
|
1
|
+
#For each model class, create an enum containing a list of assignable type.
|
2
|
+
#
|
3
|
+
module Muml_Element
|
4
|
+
JAVA_ENUM_INTERFACE_QNAME="xmda.java.JavaEnumSig"
|
5
|
+
end
|
6
|
+
|
7
|
+
|
8
|
+
module Mrdf_Model
|
9
|
+
#generates an EnumAssignable for each model element.
|
10
|
+
def java_addJavaEnumInterface!
|
11
|
+
return unless context[:java_addJavaEnumInterface]
|
12
|
+
uml_Class_all.each {|c|
|
13
|
+
next unless c.kind_of?(Muml_Enumeration)
|
14
|
+
i=c.java_getJavaEnumInterface
|
15
|
+
c.umlx_createAndAddImplementation(i)
|
16
|
+
}
|
17
|
+
end
|
18
|
+
def java_addEnumAssignable!
|
19
|
+
uml_Class_all.each {|c|
|
20
|
+
next if c.kind_of?(Muml_Enumeration)
|
21
|
+
next if c.umlx_external?
|
22
|
+
c.java_addEnumAssignable!
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module Muml_Classifier
|
28
|
+
#Enum assignbable related to this model Element
|
29
|
+
rdf_safe_attr_reader_many :java_enumAssignableDataType
|
30
|
+
|
31
|
+
|
32
|
+
#String used to replace dot in enum literals
|
33
|
+
JAVA_MAGIC_DOT_STRING='_dot_'
|
34
|
+
|
35
|
+
#add an enum assignable to this model element
|
36
|
+
def java_addEnumAssignable!
|
37
|
+
#log.debug { "java_addEnumAssignable! for #{self}::#{self.class.name}" }
|
38
|
+
p=umlx_owner_one
|
39
|
+
p=p.umlx_getOrCreatePackage(context[:enumAssignableSubPackage,"enumCreate"],p)
|
40
|
+
|
41
|
+
ret=p.umlx_createAndAddEnumeration(self.rdf_uri+"_enumAssignable","#{uml_name} Assignable")
|
42
|
+
ret.umlx_createAndAddImplementation(java_getJavaEnumInterface)
|
43
|
+
self.java_enumAssignableDataType=ret
|
44
|
+
|
45
|
+
umlx_assignableClassifier.each { |c|
|
46
|
+
next if c.uml_isAbstract?
|
47
|
+
ret.umlx_createAndAddLiteral(c.java_qualifiedName.to_s.gsub(/\./,JAVA_MAGIC_DOT_STRING));
|
48
|
+
}
|
49
|
+
|
50
|
+
return ret
|
51
|
+
end
|
52
|
+
def java_getJavaEnumInterface
|
53
|
+
ret=umlx_getOrCreateInterface(JAVA_ENUM_INTERFACE_QNAME)
|
54
|
+
if ret.uml_ownedOperation.empty?
|
55
|
+
ret.umlx_external="false"
|
56
|
+
op=ret.umlx_createAndAddOperation("#{ret.rdf_uri}_name}","name")
|
57
|
+
r=op.umlx_createAndAddReturnParameter("#{op.rdf_uri}_ret","return")
|
58
|
+
r.uml_type=umlx_dataType_string
|
59
|
+
op.umlx_businessMethod=RDF_FALSE
|
60
|
+
end
|
61
|
+
return ret
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
|