Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » Epsilon » ETL, ::= and equivalent()
ETL, ::= and equivalent() [message #584888] Sat, 23 January 2010 20:45 Go to next message
St is currently offline StFriend
Messages: 77
Registered: July 2009
Member
Hi, I'm trying to transform an ecore model to a doctrine one.

Here is my transformation code:

rule ePackage2Model
transform i : ecore!EPackage
to o : doctrine!Model {
guard: not i.eSuperPackage.isDefined()

o.name = i.name;

var rootPackage = doctrine!doctrine::Record::Package.createInstance();
rootPackage.name = i.name;
o.packages.add( rootPackage );

for( package in i.eSubpackages )
{
rootPackage.subPackages.add( package.toDoctrinePackage( rootPackage ) );
}

}


operation ecore!EPackage toDoctrinePackage( parentPackage : doctrine!doctrine::Record::Package ) : doctrine!doctrine::Record::Package
{
var package = doctrine!doctrine::Record::Package.createInstance();
package.name = self.name;
for( eclass in self.eClassifiers )
{
package.records.add( eclass.toDoctrineRecord( package ) );
}
for( epackage in self.eSubpackages )
{
package.subPackages.add( epackage.toDoctrinePackage( package ) );
}
return package;
}

operation ecore!EClass toDoctrineRecord( package : doctrine!doctrine::Record::Package ) : doctrine!doctrine::Record::Record
{
var record = doctrine!doctrine::Record::Record.createInstance();
record.name = self.name;
//record.transformDoctrineRecordInheritance(self);

return record;
}

operation doctrine!doctrine::Record::Record transformDoctrineRecordInheritance( input: ecore!EClass ) : null
{
if( input.eSuperTypes.isDefined() and input.eSuperTypes.select(c|not c.interface).size()>0)
{
var super ::= input.eSuperTypes.select(c|not c.interface).first().equivalent();
var inheritance = doctrine!doctrine::Record::Inheritance::Inheritance.createIn stance();
inheritance.`extends` = super;
self.inheritance = inheritance;

}
}

My problem is that I try to retrieve the equivalent doctrine record of the eclass to create the inheritance element in my doctrine model.

What had I done bad ?
Thanks
Re: ETL, ::= and equivalent() [message #584904 is a reply to message #584888] Sat, 23 January 2010 21:48 Go to previous message
Dimitrios Kolovos is currently offline Dimitrios KolovosFriend
Messages: 1776
Registered: July 2009
Senior Member
Hi Stephane,

This line looks suspicious:

var super ::= input.eSuperTypes.select(c|not
c.interface).first().equivalent();

In ETL a ::= b is a shorthand for a = b.equivalent() so having both ::=
and equivalent() in the same statement is probably not what you want. If
this is not the source of your problem, could you please send me your
transformation/metamodels/sample models so that I can have a closer look?

Cheers,
Dimitris

Stéphane wrote:
> Hi, I'm trying to transform an ecore model to a doctrine one.
>
> Here is my transformation code:
>
> rule ePackage2Model
> transform i : ecore!EPackage
> to o : doctrine!Model {
> guard: not i.eSuperPackage.isDefined()
>
> o.name = i.name;
>
> var rootPackage =
> doctrine!doctrine::Record::Package.createInstance();
> rootPackage.name = i.name;
> o.packages.add( rootPackage );
>
> for( package in i.eSubpackages )
> {
> rootPackage.subPackages.add( package.toDoctrinePackage(
> rootPackage ) );
> }
>
> }
>
>
> operation ecore!EPackage toDoctrinePackage( parentPackage :
> doctrine!doctrine::Record::Package ) : doctrine!doctrine::Record::Package
> {
> var package = doctrine!doctrine::Record::Package.createInstance();
> package.name = self.name;
> for( eclass in self.eClassifiers )
> {
> package.records.add( eclass.toDoctrineRecord( package ) );
> }
> for( epackage in self.eSubpackages )
> {
> package.subPackages.add( epackage.toDoctrinePackage( package ) );
> }
> return package;
> }
>
> operation ecore!EClass toDoctrineRecord( package :
> doctrine!doctrine::Record::Package ) : doctrine!doctrine::Record::Record
> {
> var record = doctrine!doctrine::Record::Record.createInstance();
> record.name = self.name;
> //record.transformDoctrineRecordInheritance(self);
>
> return record;
> }
>
> operation doctrine!doctrine::Record::Record
> transformDoctrineRecordInheritance( input: ecore!EClass ) : null
> {
> if( input.eSuperTypes.isDefined() and
> input.eSuperTypes.select(c|not c.interface).size()>0)
> {
> var super ::= input.eSuperTypes.select(c|not
> c.interface).first().equivalent();
> var inheritance =
> doctrine!doctrine::Record::Inheritance::Inheritance.createIn stance();
> inheritance.`extends` = super;
> self.inheritance = inheritance;
>
> }
> }
>
> My problem is that I try to retrieve the equivalent doctrine record of
> the eclass to create the inheritance element in my doctrine model.
>
> What had I done bad ?
> Thanks
Previous Topic:[EUGENIA] EAttribute like EType
Next Topic:ETL, ::= and equivalent()
Goto Forum:
  


Current Time: Thu Apr 25 01:21:24 GMT 2024

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

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

Back to the top