[ATL] Problem: Create new UML Model and apply Stereotypes [message #534503] |
Wed, 19 May 2010 11:37 |
Eclipse User |
|
|
|
Hello,
I've a new strange Problem. Now with applying UML Stereotypes. Hope that anyone can help me to find a solution.
First of all, the Example Relational2UML ( http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org .eclipse.m2m.atl/tests/org.eclipse.m2m.atl.tests/data/inputs /Relational2UML/?root=Modeling_Project&hideattic=0) works fine using the Eclipse ATL Launch Wizard.
Than I refined this example a little bit to use an other UML Profile from the ATESST2 Project (EAST-ADL2 Extension for UML see Eclipse Update Site http://www.papyrusuml.org/home/liblocal/docs/updates/papyrus -extensions to get the UML Profile).
The URI for this UML Profile is uri:http://www.papyrusuml.org/EAST-ADL2/1. You can find it in the EMF Registry after the Eclipse Plugin has been installed. Thus, you can also see it when using the Eclipse ATL Launch Wizard.
As I said, I refined the Relational2UML Example. The ATL Module looks now:
-- @nsURI UML=http://www.eclipse.org/uml2/3.0.0/UML
-- @path Relational=/org.eclipse.m2m.atl.tests/data/inputs/Relational2UML/relational.ecore
module Relational2UMLNew;
create OUT : UML from IN : Relational, PRO : UML;
-------------------------------------------------------------------------------------------
-- HELPERS --------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
helper def : stringType : UML!PrimitiveType = OclUndefined;
helper def : integerType : UML!PrimitiveType = OclUndefined;
helper def: printAllStereotypes: UML!Stereotype = UML!Stereotype.allInstances() -> debug('Stereotypes of Profile ');
helper def : getStereotype(name : String) : UML!Stereotype =
UML!Stereotype.allInstancesFrom('PRO')->select(p | p.name = name)->first();
-------------------------------------------------------------------------------------------
-- RULES ----------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
rule Database2Model {
from
d : Relational!Database
to
out : UML!Model (
name <- d.name,
packagedElement <- Sequence{d.ownedSchemas,integer,string} -> flatten()
),
integer : UML!PrimitiveType (
name <- 'Integer'
),
string : UML!PrimitiveType (
name <- 'String'
)
do {
thisModule.stringType <- string;
thisModule.integerType <- integer;
out.applyProfile(UML!Profile.allInstancesFrom('PRO')->select(p | p.name = 'EAST-ADL2')->first());
thisModule.printAllStereotypes;
}
}
rule Schema2Class {
from
s : Relational!Schema
to
out : UML!Class (
name <- s.name
--packagedElement <- s.ownedTables
)
do {
--out.applyStereotype(out.RequirementsModel);
out.getApplicableStereotypes()->debug('Applicable Stereotypes ');
out.applyStereotype(thisModule.getStereotype('Requirement'));
--out.applyStereotype(thisModule.getStereotype('RequirementsModel')->debug('Hmm '));
--out.applyStereotype(out.getApplicableStereotype('SystemModel')->debug('Testtt: '));
}
}
[First Problem:]
The ATL Launch Configuration is:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.m2m.atl.adt.launching.atlTransformation">
<stringAttribute key="ATL File Name" value="/Relational2UML/Relational2UMLNew.atl"/>
<stringAttribute key="ATL VM" value="EMF-specific VM"/>
<stringAttribute key="ATL_COMPILER" value="atl2006"/>
<booleanAttribute key="IS_REFINING" value="false"/>
<mapAttribute key="Input">
<mapEntry key="IN" value="Relational"/>
<mapEntry key="PRO" value="UML"/>
</mapAttribute>
<mapAttribute key="Libs"/>
<mapAttribute key="Model Handler">
<mapEntry key="Relational" value="EMF"/>
<mapEntry key="UML" value="EMF"/>
</mapAttribute>
<mapAttribute key="ModelType">
<mapEntry key="Relational" value="METAMODELINPUT"/>
<mapEntry key="IN" value="MODELINPUT"/>
<mapEntry key="OUT" value="MODELOUTPUT"/>
<mapEntry key="PRO" value="MODELINPUT"/>
<mapEntry key="UML" value="METAMODELOUTPUT"/>
</mapAttribute>
<mapAttribute key="Options">
<mapEntry key="supportUML2Stereotypes" value="true"/>
<mapEntry key="printExecutionTime" value="false"/>
<mapEntry key="OPTION_CLEAR" value="true"/>
<mapEntry key="OPTION_DERIVED" value="true"/>
<mapEntry key="allowInterModelReferences" value="false"/>
<mapEntry key="step" value="false"/>
</mapAttribute>
<mapAttribute key="Output">
<mapEntry key="OUT" value="UML"/>
</mapAttribute>
<mapAttribute key="Path">
<mapEntry key="IN" value="/Relational2UML/sample-Relational.xmi"/>
<mapEntry key="Relational" value="/Relational2UML/relational.ecore"/>
<mapEntry key="OUT" value="/Relational2UML/output.uml"/>
<mapEntry key="PRO" value="uri:http://www.papyrusuml.org/EAST-ADL2/1"/>
<mapEntry key="UML" value="uri:http://www.eclipse.org/uml2/3.0.0/UML"/>
</mapAttribute>
<listAttribute key="Superimpose"/>
</launchConfiguration>
You can see that the input model for the UML Profile (PRO) is referenced using "uri:http://www.papyrusuml.org/EAST-ADL2/1", that is the registered UML Profile.
The output after running the Launch Configuration is:
Stereotypes of Profile : OrderedSet {}
org.eclipse.m2m.atl.engine.emfvm.VMException: Operation not found: OUT!sample_database:UML!Model.applyProfile(org.eclipse.m2m.atl.engine.emfvm.lib.OclUndefined)
at __applyDatabase2Model(Relational2UMLNew.atl[40:6-40:102])
local variables: self=thisModule, link=org.eclipse.m2m.atl.engine.emfvm.lib.TransientLink@1ab7757, d=IN!sample_database:Relational!Database, out=OUT!sample_database:UML!Model, integer=OUT!Integer:UML!PrimitiveType, string=OUT!String:UML!PrimitiveType
at __exec__(Relational2UMLNew.atl)
local variables: self=thisModule, e=org.eclipse.m2m.atl.engine.emfvm.lib.TransientLink@1ab7757
at main(Relational2UMLNew.atl)
local variables: self=thisModule
It is interesting that "Stereotypes of Profile : OrderedSet {}" is stating an empty set (see debiug statement in ATL Module above). I assume, that the model for the UML Profile has not been loaded successfully. Thus no stereotypes can be found. Moreover the operation applyProfile fails.
Now a refined Launch Configuration...
[Second Problem:]
The Launch Configuration now looks:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.m2m.atl.adt.launching.atlTransformation">
<stringAttribute key="ATL File Name" value="/Relational2UML/Relational2UMLNew.atl"/>
<stringAttribute key="ATL VM" value="EMF-specific VM"/>
<stringAttribute key="ATL_COMPILER" value="atl2006"/>
<booleanAttribute key="IS_REFINING" value="false"/>
<mapAttribute key="Input">
<mapEntry key="IN" value="Relational"/>
<mapEntry key="PRO" value="UML"/>
</mapAttribute>
<mapAttribute key="Libs"/>
<mapAttribute key="Model Handler">
<mapEntry key="Relational" value="EMF"/>
<mapEntry key="UML" value="EMF"/>
</mapAttribute>
<mapAttribute key="ModelType">
<mapEntry key="Relational" value="METAMODELINPUT"/>
<mapEntry key="IN" value="MODELINPUT"/>
<mapEntry key="OUT" value="MODELOUTPUT"/>
<mapEntry key="PRO" value="MODELINPUT"/>
<mapEntry key="UML" value="METAMODELOUTPUT"/>
</mapAttribute>
<mapAttribute key="Options">
<mapEntry key="supportUML2Stereotypes" value="true"/>
<mapEntry key="printExecutionTime" value="false"/>
<mapEntry key="OPTION_CLEAR" value="true"/>
<mapEntry key="OPTION_DERIVED" value="true"/>
<mapEntry key="allowInterModelReferences" value="false"/>
<mapEntry key="step" value="false"/>
</mapAttribute>
<mapAttribute key="Output">
<mapEntry key="OUT" value="UML"/>
</mapAttribute>
<mapAttribute key="Path">
<mapEntry key="IN" value="/Relational2UML/sample-Relational.xmi"/>
<mapEntry key="Relational" value="/Relational2UML/relational.ecore"/>
<mapEntry key="OUT" value="/Relational2UML/output.uml"/>
<mapEntry key="PRO" value="/Relational2UML/eastadl.profile.uml"/>
<mapEntry key="UML" value="uri:http://www.eclipse.org/uml2/3.0.0/UML"/>
</mapAttribute>
<listAttribute key="Superimpose"/>
</launchConfiguration>
Instead of using the reference "uri:http://www.papyrusuml.org/EAST-ADL2/1" for the registered UML Profile, I copied the UML profile file "eastadl.profile.uml" out of the Plugin jar file into the ATL projects workspace and make a workspace reference for the Profile input model (PRO).
The output of running this configuration is:
Quote: |
Stereotypes of Profile : OrderedSet {PRO!VariationGroup:UML!Stereotype, PRO!ReuseMetaInformation:UML!Stereotype, PRO!ConfigurableContainer:UML!Stereotype, PRO!VariableElement:UML!Stereotype, PRO!Variability:UML!Stereotype,
Snip...Snap
PRO!ArchitecturalModel:UML!Stereotype, PRO!GenericConstraint:UML!Stereotype, PRO!GenericConstraintSet:UML!Stereotype, PRO!TakeRateConstraint:UML!Stereotype}
Applicable Stereotypes : Sequence {}
org.eclipse.m2m.atl.engine.emfvm.VMException
Java Stack:
org.eclipse.m2m.atl.engine.emfvm.VMException
at org.eclipse.m2m.atl.engine.emfvm.adapter.UML2ModelAdapter.fi nalizeModel(UML2ModelAdapter.java:51)
at org.eclipse.m2m.atl.engine.emfvm.lib.ExecEnv.terminated(Exec Env.java:2304)
at org.eclipse.m2m.atl.engine.emfvm.ASM.run(ASM.java:199)
at org.eclipse.m2m.atl.engine.emfvm.launch.EMFVMLauncher.launch (EMFVMLauncher.java:162)
at org.eclipse.m2m.atl.engine.emfvm.launch.EMFVMLauncher.launch (EMFVMLauncher.java:135)
at org.eclipse.m2m.atl.core.service.LauncherService.launch(Laun cherService.java:135)
at org.eclipse.m2m.atl.core.ui.launch.AtlLaunchConfigurationDel egate.launch(AtlLaunchConfigurationDelegate.java:222)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(L aunchConfiguration.java:853)
at org.eclipse.debug.internal.core.LaunchConfiguration.launch(L aunchConfiguration.java:703)
at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(D ebugUIPlugin.java:866)
at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlu gin.java:1069)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.m2m.atl.engine.emfvm.adapter.UML2ModelAdapter.ap plyDelayedInvocations(UML2ModelAdapter.java:136)
at org.eclipse.m2m.atl.engine.emfvm.adapter.UML2ModelAdapter.fi nalizeModel(UML2ModelAdapter.java:49)
... 11 more
Caused by: java.lang.IllegalArgumentException: org.eclipse.uml2.uml.internal.impl.StereotypeImpl@4bfd7f (name: Requirement, visibility: <unset>) (isLeaf: false, isAbstract: false) (isActive: false)
at org.eclipse.uml2.uml.internal.operations.ElementOperations.a pplyStereotype(ElementOperations.java:1411)
at org.eclipse.uml2.uml.internal.impl.ElementImpl.applyStereoty pe(ElementImpl.java:499)
... 17 more
|
Here, "Stereotypes of Profile :" is not an empty set. All available Stereotypes are there which is fine. Applying the profile in the ATL transformation worked fine. But now the retrieval of applicable stereotypes of the new UML element of type UML!Class (see Rule Schema2Class) doesn't work as expected: "Applicable Stereotypes : Sequence {}" is an empty set. Thus I get a "java.lang.IllegalArgumentException: org.eclipse.uml2.uml.internal.impl.StereotypeImpl" when calling applyStereotype on the UML Element of type UML!Class.
Does anyone know how to solve this problem?
Many thanks in advance, Helko
ps: I tried to come quickly to the point as possible, but it's hard to explain it ... sorry for the large content.
Please, be back to me, if you need further clarrification or input.
[Updated on: Wed, 19 May 2010 21:02] by Moderator Report message to a moderator
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.02860 seconds