Home » Archived » M2M (model-to-model transformation) » [ATL] called rules
[ATL] called rules [message #89471] |
Mon, 01 September 2008 04:09  |
Eclipse User |
|
|
|
Hello, I have a problem so if somebody could help me it will be very nice.
I have to do the transformation SYSML -> UML.
You can see a part of my code:
module sysml2uml; -- Module Template
create OUT : UML from IN : SYSML;
rule namedElement(type_name : String, sourceVariable : SYSML!type_name,
targetVariable : UML!type_name) {
do{
targetVariable.name <- sourceVariable.name;
targetVariable.visibility <- sourceVariable.visibility;
targetVariable.clientDependency <- sourceVariable.clientDependency;
--targetVariable.qualifiedName <- sourceVariable.qualifiedName;
--targetVariable.namespace <- sourceVariable.namespace;
}
}
rule nameSpace(type_name : String, sourceVariable : SYSML!type_name,
targetVariable : UML!type_name){
do{
targetVariable.elementImport <- sourceVariable.elementImport;
targetVariable.ownedRule <- sourceVariable.ownedRule;
targetVariable.packageImport <- sourceVariable.packageImport;
--targetVariable.importedMember <-sourceVariable.importedMember;
--targetVariable.member <- sourceVariable.member;
--targetVariable.ownedMember <- sourceVariable.ownedMember;
}
}
rule element(type_name : String, sourceVariable : SYSML!type_name,
targetVariable : UML!type_name){
do{
targetVariable.ownedComment <- sourceVariable.ownedComment;
--targetVariable.ownedElement <- sourceVariable.ownedElement;
--targetVariable.owner <- sourceVariable.owner;
}
}
rule packageableElement (type_name : String, sourceVariable :
SYSML!type_name, targetVariable : UML!type_name){
do{
targetVariable.visibility <- sourceVariable.visibility;
}
}
rule model extends package{
from package : SYSML!Model (package.oclIsTypeOf(SYSML!Model))
to paquetage : UML!Model( -- Model
viewpoint <- package.viewpoint
)
do{ -- Model -> Package
-- Package -> Namespace
thisModule.nameSpace('Model',package,paquetage);
-- Package -> PackageableElement
thisModule.packageableElement('Model',package,paquetage);
-- Namespace,PackageableElement -> NamedElement
thisModule.namedElement('Model',package,paquetage);
-- NamedElement -> Element
thisModule.element('Model',package,paquetage);
}
}
rule package{
from package : SYSML!Package
to paquetage : UML!Package ( -- Package
packageMerge <- package.packageMerge,
nestingPackage <- package.nestingPackage,
packagedElement <- package.packagedElement
--ownedComment <- package.ownedComment
--nestedPackage <- package.nestedPackage
--paquetage.ownedType <- package.ownedType
)
do {
thisModule.nameSpace('Package',package,paquetage);
-- Package -> PackageableElement
thisModule.packageableElement('Package',package,paquetage);
-- Namespace,PackageableElement -> NamedElement
thisModule.namedElement('Package',package,paquetage);
-- NamedElement -> Element
thisModule.element('Package',package,paquetage);
'salu'.toString().println();
}
}
rule comment{
from comment : SYSML!Comment
to commentaire : UML!Comment ( -- Comment
body <- comment.body,
annotatedElement <- comment.annotatedElement
)
do {
-- Comment -> Element
thisModule.element('Comment',comment,commentaire);
}
}
I enter a SYSML diagram which contains this hierarch:
- <Model> diagSysML
- <Package> diagSysML
- <Comment> Comment1
After the transformation, I obtain a UML diagram which contains this
hierarch:
- <Comment> Comment1
- <Model> diagSysML
- <Package> diagSysML
but I want to obtain the same hierarch:
- <Model> diagSysML
- <Package> diagSysML
- <Comment> Comment1
It means that the called rule element doesn't run:
rule element(type_name : String, sourceVariable : SYSML!type_name,
targetVariable : UML!type_name){
do{
targetVariable.ownedComment <- sourceVariable.ownedComment;
--targetVariable.ownedElement <- sourceVariable.ownedElement;
--targetVariable.owner <- sourceVariable.owner;
}
}
Do you know why?
Thank you very much if you help me.
Monica.
|
|
|
Re: [ATL] called rules [message #89489 is a reply to message #89471] |
Mon, 01 September 2008 07:09   |
Eclipse User |
|
|
|
Hello,
The rule runs, but you don;t store it's result in package. try something
like this:
package.ownedComment <- thisModule.element('Package',package,paquetage);
Regards,
Alfons
"Monica Clement" <monica.clement@gmail.com> schreef in bericht
news:dbec6d3c9ab3958aa5fa8f0b677da382$1@www.eclipse.org...
> Hello, I have a problem so if somebody could help me it will be very nice.
> I have to do the transformation SYSML -> UML.
>
> You can see a part of my code:
> module sysml2uml; -- Module Template
> create OUT : UML from IN : SYSML;
> rule namedElement(type_name : String, sourceVariable : SYSML!type_name,
> targetVariable : UML!type_name) {
> do{
> targetVariable.name <- sourceVariable.name;
> targetVariable.visibility <- sourceVariable.visibility;
> targetVariable.clientDependency <- sourceVariable.clientDependency;
> --targetVariable.qualifiedName <- sourceVariable.qualifiedName;
> --targetVariable.namespace <- sourceVariable.namespace;
> }
> }
>
> rule nameSpace(type_name : String, sourceVariable : SYSML!type_name,
> targetVariable : UML!type_name){
> do{
> targetVariable.elementImport <- sourceVariable.elementImport;
> targetVariable.ownedRule <- sourceVariable.ownedRule;
> targetVariable.packageImport <- sourceVariable.packageImport;
> --targetVariable.importedMember <-sourceVariable.importedMember;
> --targetVariable.member <-
> sourceVariable.member; --targetVariable.ownedMember <-
> sourceVariable.ownedMember; }
> }
>
> rule element(type_name : String, sourceVariable : SYSML!type_name,
> targetVariable : UML!type_name){
> do{
> targetVariable.ownedComment <- sourceVariable.ownedComment;
> --targetVariable.ownedElement <- sourceVariable.ownedElement;
> --targetVariable.owner <- sourceVariable.owner; }
> }
>
> rule packageableElement (type_name : String, sourceVariable :
> SYSML!type_name, targetVariable : UML!type_name){
> do{
> targetVariable.visibility <- sourceVariable.visibility;
> }
> }
>
> rule model extends package{
> from package : SYSML!Model (package.oclIsTypeOf(SYSML!Model))
> to paquetage : UML!Model( -- Model
> viewpoint <- package.viewpoint
> )
> do{ -- Model -> Package
> -- Package -> Namespace
> thisModule.nameSpace('Model',package,paquetage); -- Package ->
> PackageableElement
> thisModule.packageableElement('Model',package,paquetage); --
> Namespace,PackageableElement -> NamedElement
> thisModule.namedElement('Model',package,paquetage); -- NamedElement ->
> Element
> thisModule.element('Model',package,paquetage); }
> }
>
> rule package{
> from package : SYSML!Package to paquetage : UML!Package ( -- Package
> packageMerge <- package.packageMerge,
> nestingPackage <- package.nestingPackage,
> packagedElement <- package.packagedElement
> --ownedComment <- package.ownedComment
> --nestedPackage <- package.nestedPackage
> --paquetage.ownedType <- package.ownedType
> )
> do { thisModule.nameSpace('Package',package,paquetage); -- Package ->
> PackageableElement
> thisModule.packageableElement('Package',package,paquetage);
> -- Namespace,PackageableElement -> NamedElement
> thisModule.namedElement('Package',package,paquetage); -- NamedElement ->
> Element
> thisModule.element('Package',package,paquetage);
> 'salu'.toString().println(); }
> }
>
> rule comment{ from comment : SYSML!Comment to commentaire : UML!Comment
> ( -- Comment
> body <- comment.body, annotatedElement <-
> comment.annotatedElement
> )
> do {
> -- Comment -> Element
> thisModule.element('Comment',comment,commentaire);
> }
> } I enter a SYSML diagram which contains this hierarch:
>
> - <Model> diagSysML
> - <Package> diagSysML
> - <Comment> Comment1
> After the transformation, I obtain a UML diagram which contains this
> hierarch:
>
> - <Comment> Comment1
> - <Model> diagSysML
> - <Package> diagSysML
>
> but I want to obtain the same hierarch:
>
> - <Model> diagSysML
> - <Package> diagSysML
> - <Comment> Comment1
>
> It means that the called rule element doesn't run:
>
> rule element(type_name : String, sourceVariable : SYSML!type_name,
> targetVariable : UML!type_name){
> do{
> targetVariable.ownedComment <- sourceVariable.ownedComment;
> --targetVariable.ownedElement <- sourceVariable.ownedElement;
> --targetVariable.owner <- sourceVariable.owner; }
> }
>
> Do you know why?
>
> Thank you very much if you help me.
>
> Monica.
>
>
>
>
>
>
|
|
| |
Re: [ATL] called rules [message #89550 is a reply to message #89504] |
Mon, 01 September 2008 10:21   |
Eclipse User |
|
|
|
Monica,
I'm not 100 sure, but ATL executes transformations in two steps; one create
targetmodel elements and two create their properties. This makes it in most
cases difficult to navigate elements of the target model. I would advice you
to look for another solution. Why do you use called rules in this fashion,
can't you create normal rules fopr each model element in this case? That way
you leave the execution order to the VM, which can do this in a nice manner,
given that there are not too many conflicting imperative operation in the
transformation.
Regards,
Alfons
PS
Whats wrong with this?
-- @atlcompiler atl2006
module sysml2uml; -- Module Template
create OUT : UML from IN : SYSML;
rule package{
from package : SYSML!Package
to paquetage : UML!Package ( -- Package
packageMerge <- package.packageMerge,
nestingPackage <- package.nestingPackage,
packagedElement <- package.packagedElement
ownedComment <- package.ownedComment;
)
}
rule comment{
from comment : SYSML!Comment
to commentaire : UML!Comment ( -- Comment
body <- comment.body,
annotatedElement <- comment.annotatedElement
)
}
"Monica Clement" <monica.clement@gmail.com> schreef in bericht
news:10485d0ac30ed8a3bd31f93fc828820f$1@www.eclipse.org...
> Thank you for your response Alfons.
>
> However, I store the result :
>
> rule element(type_name : String, sourceVariable : SYSML!type_name,
> targetVariable : UML!type_name){
> do{
> targetVariable.ownedComment <- sourceVariable.ownedComment;
> --targetVariable.ownedElement <- sourceVariable.ownedElement;
> --targetVariable.owner <- sourceVariable.owner; }
> }
> My others called rules run, I have a problem only with element...
>
> Monica.
>
|
|
| | | | | |
Goto Forum:
Current Time: Thu May 08 08:38:22 EDT 2025
Powered by FUDForum. Page generated in 0.05919 seconds
|