Difference between revisions of "MoScript/Use Cases/Megamodel Population Part 2"

From Eclipsepedia

Jump to: navigation, search
(Registering artifacts)
(Registering artifacts)
Line 9: Line 9:
 
===== Registering artifacts  =====
 
===== Registering artifacts  =====
  
The following is the code of the megamodel population
+
The first thing we have to do is to declare the variables we are going to use along the rest of the code. We declare variables for holding the the ecore metametamodel, and the metamodels of the Families2PersonExample.
  
 
  program megamodelPopulation  
 
  program megamodelPopulation  
Line 19: Line 19:
 
  }
 
  }
  
The first thing we have to do is to declare the variables we are going to use along the rest of the code. We declare variables for holding the the ecore metametamodel, and the metamodels of the Families2PersonExample.  
+
After declaring variables we proceed to register the Ecore metametamodel in the megamodel to be able to register metamodels that conform to it.
  
 
  do{  
 
  do{  
  
  -- Removes all the identified elements form the megamodel
 
for(identifiedElement in !IdentifiedElement.allInstances()->select(ie | not (ie.identifier = OclUndefined) )) {
 
  identifiedElement.remove();
 
}
 
 
  -- Creates the Ecore metametamodel element in the megamodel
 
 
   thisModule.register(
 
   thisModule.register(
 
       thisModule.metametamodel(
 
       thisModule.metametamodel(
Line 36: Line 30:
 
       )
 
       )
 
   );
 
   );
 +
 +
Next, we query the megamodel to find the just registered metametamodel and assign it to the ecore variable
 
    
 
    
 
   ecore <- !Model.allInstances()->any(m | m.identifier.value = 'http://www.eclipse.org/emf/2002/Ecore');
 
   ecore <- !Model.allInstances()->any(m | m.identifier.value = 'http://www.eclipse.org/emf/2002/Ecore');
 
    
 
    
  -- Creates the Families metamodel element in the megamodel
+
Next we register the Families.ecore and Persons.ecore metamodels in the megamodel. Note that the third parameter of the metamodel operation is the ecore variable, which corresponds to the Ecore metametamodel.
 +
 
 
  thisModule.register(
 
  thisModule.register(
 
   thisModule.metamodel(
 
   thisModule.metamodel(

Revision as of 07:47, 26 December 2011

Megamodel Population Part 2

Continuing with the use case Megamodel Population Part 1, this use cases shows how to programmatically populate the megamodel with models, metamodels and transformations. For this purpose we are going to populate it with the content of an ATL project that can be found in the ATL Transformations Zoo

Environment Preparation
  • Download the Families to Persons source code from here
  • Unzip the project and import it into eclipse copying the files into the workspace
Registering artifacts

The first thing we have to do is to declare the variables we are going to use along the rest of the code. We declare variables for holding the the ecore metametamodel, and the metamodels of the Families2PersonExample.

program megamodelPopulation 

using { 
  ecore : !MetaMetamodel = OclUndefined
  familiesMetamodel : !Metamodel = OclUndefined
  personsMetamodel : !Metamodel = OclUndefined
}

After declaring variables we proceed to register the Ecore metametamodel in the megamodel to be able to register metamodels that conform to it.

do{ 
  thisModule.register(
      thisModule.metametamodel(
           thisModule.identifier('identifier', 'http://www.eclipse.org/emf/2002/Ecore', 'GlobalModelManagement::URI')
          ,thisModule.locator('locator', 'http://www.eclipse.org/emf/2002/Ecore', 
                                         'GlobalModelManagement::EPackagesRegistryLocator')
      )
  );

Next, we query the megamodel to find the just registered metametamodel and assign it to the ecore variable

  ecore <- !Model.allInstances()->any(m | m.identifier.value = 'http://www.eclipse.org/emf/2002/Ecore');
  

Next we register the Families.ecore and Persons.ecore metamodels in the megamodel. Note that the third parameter of the metamodel operation is the ecore variable, which corresponds to the Ecore metametamodel.

thisModule.register(
  thisModule.metamodel(
    thisModule.identifier('identifier', '/Families2Persons/Families.ecore', 'GlobalModelManagement::URI'),
    thisModule.locator('locator', '/Families2Persons/Families.ecore', 'GlobalModelManagement::EFSLocator'),
    ecore
  )  
);

-- Creates the Persons metamodel element in the megamodel
thisModule.register(
  thisModule.metamodel(
    thisModule.identifier('identifier', '/Families2Persons/Persons.ecore', 'GlobalModelManagement::URI'),
    thisModule.locator('locator', '/Families2Persons/Persons.ecore', 'GlobalModelManagement::EFSLocator'),
    ecore
  )  
);