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