Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Archived » M2M (model-to-model transformation) » [ATL] Rule inheritance
[ATL] Rule inheritance [message #88943] Mon, 25 August 2008 16:33 Go to next message
Monica ClÃ?©ment is currently offline Monica ClÃ?©mentFriend
Messages: 14
Registered: July 2009
Junior Member
Hello, I am working about the transformation SYSML -> UML. SysML is a
metamodel based on UML. I have a question.

My code is:

abstract rule package{
from package : SYSML!Package (package.oclIsTypeOf(SYSML!Package))
to paquetage : UML!Package ( -- Package
nestedPackage <- package.nestedPackage,
packagedElement <-package.packagedElement,
--ownedType <-package.ownedType,
packageMerge <- package.packageMerge,
nestingPackage <- package.nestingPackage,
-- Package -> Namespace
elementImport <- package.elementImport,
-- importedMember<-package.importedMember,
--member <- package.member,
--ownedMember <- package.ownedMember,
ownedRule <- package.ownedRule,
packageImport <- package.packageImport,
-- NamesSpace -> NamedElement
name <- package.name,
--qualifiedName <- package.qualifiedName,
visibility <- package.visibility,
-- NamedElement -> Element
ownedComment <- package.ownedComment
--ownedElement <- package.ownedElement
--owner <- package.owner
-- Package -> PackageableElement
)
do {
if (not package.ownedType.oclIsUndefined())
paquetage.ownedType <- package.ownedType;
if (not package.ownedType.oclIsUndefined())
paquetage.nestedPackage <- package.nestedPackage;
}
}


rule model extends package{
from model : SYSML!Model (model.oclIsTypeOf(SYSML!Model))
to modele : UML!Model( -- Model
viewpoint <- model.viewpoint
)}

According to UML, the metaclass Model inherit of the metaclass Package
(Model -> Package).

In order to test my code, I insert a SysML diagram which contains a
model(m) which contains a package (p).
The transformation returns a UML diagram which contains a package (p), a
model (m) which contains a package (p).

I want the transformation returns a UML model(m) which contains a package
(p).

In fact, the same package is created 2 times... one time alone, and the
second time in the model.

How can I do in order to evoid this redundancy?


Thanks,

Monica.
Re: [ATL] Rule inheritance [message #89001 is a reply to message #88943] Tue, 26 August 2008 08:20 Go to previous messageGo to next message
William Piers is currently offline William PiersFriend
Messages: 301
Registered: July 2009
Senior Member
Hello,

Comments below :

Monica Clement a écrit :
> Hello, I am working about the transformation SYSML -> UML. SysML is a
> metamodel based on UML. I have a question.
>
> My code is:
>

Just a check: did you add the header
--@atlcompiler atl2006
on the top of the file ? According to that page :
http://wiki.eclipse.org/ATL_Language_Troubleshooter#Rule_inh eritance

> abstract rule package{
> from package : SYSML!Package (package.oclIsTypeOf(SYSML!Package))

Here, the filter will limit the use of this abstract rule to Package. So
you better have to remove it in order to extend the rule to Model.
from package : SYSML!Package

> to paquetage : UML!Package ( -- Package
> nestedPackage <- package.nestedPackage,
> packagedElement <-package.packagedElement,
> --ownedType <-package.ownedType,
> packageMerge <- package.packageMerge,
> nestingPackage <- package.nestingPackage,
> -- Package -> Namespace
> elementImport <- package.elementImport,
> -- importedMember<-package.importedMember,
> --member <- package.member,
> --ownedMember <- package.ownedMember,
> ownedRule <- package.ownedRule,
> packageImport <- package.packageImport,
> -- NamesSpace -> NamedElement
> name <- package.name,
> --qualifiedName <- package.qualifiedName,
> visibility <- package.visibility,
> -- NamedElement -> Element
> ownedComment <- package.ownedComment
> --ownedElement <- package.ownedElement
> --owner <- package.owner
> -- Package -> PackageableElement
> )
> do {
> if (not package.ownedType.oclIsUndefined())
> paquetage.ownedType <- package.ownedType;
> if (not package.ownedType.oclIsUndefined())
> paquetage.nestedPackage <- package.nestedPackage;
> }
> }
>
>
> rule model extends package{
> from model : SYSML!Model (model.oclIsTypeOf(SYSML!Model))

A limitation of rule inheritance is that input pattern variables names
have to be the same in super and sub rules. So you need to use this
notation :
from package : SYSML!Model
to modele : UML!Model( -- Model
viewpoint <- package.viewpoint
)}

Best regards,

William

> to modele : UML!Model( -- Model
> viewpoint <- model.viewpoint
> )}
>
> According to UML, the metaclass Model inherit of the metaclass Package
> (Model -> Package).
>
> In order to test my code, I insert a SysML diagram which contains a
> model(m) which contains a package (p).
> The transformation returns a UML diagram which contains a package (p), a
> model (m) which contains a package (p).
>
> I want the transformation returns a UML model(m) which contains a
> package (p).
>
> In fact, the same package is created 2 times... one time alone, and the
> second time in the model.
>
> How can I do in order to evoid this redundancy?
>
>
> Thanks,
>
> Monica.
>
Re: [ATL] Rule inheritance [message #89095 is a reply to message #89001] Tue, 26 August 2008 10:11 Go to previous messageGo to next message
Monica ClÃ?©ment is currently offline Monica ClÃ?©mentFriend
Messages: 14
Registered: July 2009
Junior Member
Thank you very much for your help William.

I corrected my code from your remarks :

-- @atlcompiler atl2006

module sysml2uml; -- Module Template
create OUT : UML from IN : SYSML;

abstract rule package{
from package : SYSML!Package
to paquetage : UML!Package ( packagedElement <- p,
name <- package.name )
-- etc...
}

rule model extends package{
from package : SYSML!Model
to modele : UML!Model( viewpoint <- package.viewpoint )
}

I obtain a document with this hierarch:

-<Model>
-<Package> diagSysML

but I expected a document with this hierach:

-<Model> diagSysML
- <Package> diagSysML

Could you please help me?

Monica.
Re: [ATL] Rule inheritance [message #89110 is a reply to message #89095] Tue, 26 August 2008 11:39 Go to previous messageGo to next message
William Piers is currently offline William PiersFriend
Messages: 301
Registered: July 2009
Senior Member
What you want to do is to merge the "to" section of the two rules, in
order to have the "packagedElement <- p" link in the "to" section of the
model rule.
As for the "from" section, merging will be effective when the variables
have the same name.

So here is a rewrite of the model rule :
rule model extends package{
from package : SYSML!Model to paquetage : UML!Model( viewpoint <-
package.viewpoint )
}

Best regards,

William

Monica Clement a écrit :
> Thank you very much for your help William.
>
> I corrected my code from your remarks :
>
> -- @atlcompiler atl2006
>
> module sysml2uml; -- Module Template
> create OUT : UML from IN : SYSML;
>
> abstract rule package{
> from package : SYSML!Package to paquetage : UML!Package (
> packagedElement <- p,
> name <- package.name )
> -- etc...
> }
>
> rule model extends package{
> from package : SYSML!Model to modele : UML!Model( viewpoint <-
> package.viewpoint )
> }
>
> I obtain a document with this hierarch:
>
> -<Model>
> -<Package> diagSysML
>
> but I expected a document with this hierach:
>
> -<Model> diagSysML
> - <Package> diagSysML
> Could you please help me?
> Monica.
>
>
>
Re: [ATL] Rule inheritance... Thanks [message #89138 is a reply to message #89110] Tue, 26 August 2008 12:19 Go to previous message
Monica ClÃ?©ment is currently offline Monica ClÃ?©mentFriend
Messages: 14
Registered: July 2009
Junior Member
Thank you very much William. It's work :

-- @atlcompiler atl2006

module sysml2uml; -- Module Template
create OUT : UML from IN : SYSML;

abstract rule package{
from package : SYSML!Package --(package.oclIsTypeOf(SYSML!Package))
to paquetage : UML!Package ( packagedElement <-package.packagedElement,
name <- package.name)
}

rule pack extends package{
from package : SYSML!Package
to paquetage : UML!Package
}

rule model extends package{
from package : SYSML!Model (package.oclIsTypeOf(SYSML!Model))
to paquetage : UML!Model(viewpoint <- package.viewpoint)
}

I obtain this hierarch:

-<Model> diagSysml
-<Package> diagSysml


Monica.
Previous Topic:Can I do a helper that return a enumeration?
Next Topic:[ATL] refining and abstract metaclass
Goto Forum:
  


Current Time: Mon May 06 17:19:52 GMT 2024

Powered by FUDForum. Page generated in 0.03877 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top