Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

MoScript/Use Cases/Megamodel Population Part 2

< MoScript
Revision as of 10:36, 23 December 2011 by Wolfgangklingc.gmail.com (Talk | contribs) (Registering artifacts)

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 fiels into the workspace
Registering artifacts
program megamodelPopulation

using {
  ecore : !MetaMetamodel = OclUndefined
  familiesMetamodel : !Metamodel = OclUndefined
  personsMetamodel : !Metamodel = OclUndefined
}
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.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')
        )
    );
    
    ecore <- !Model.allInstances()->any(m | m.identifier.value = 'http://www.eclipse.org/emf/2002/Ecore');
    
    -- Creates the Families metamodel element in the megamodel
  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
    )  
  );
  
    familiesMetamodel <- !Model.allInstances()->any(m | m.identifier.value = '/Families2Persons/Families.ecore');
    
    -- Registers the Families metamodel in the EMF package register
    familiesMetamodel.registerInEMFpkgReg();

  -- Creates the Families model element in the megamodel
  thisModule.register(
    thisModule.terminalmodel(
      thisModule.identifier('identifier', '/Families2Persons/sample-Families.xmi', 'GlobalModelManagement::URI'),
      thisModule.locator('locator', '/Families2Persons/sample-Families.xmi', 'GlobalModelManagement::EFSLocator'),
      familiesMetamodel
    )
  );

    personsMetamodel <- !Model.allInstances()->any(m | m.identifier.value = '/Families2Persons/Persons.ecore');
    
    -- Registers the Persons metamodel in the EMF package register
    personsMetamodel.registerInEMFpkgReg();
  
  -- Creates the Families model element in the megamodel
  thisModule.register(
    thisModule.terminalmodel(
      thisModule.identifier('identifier', '/Families2Persons/sample-Persons.xmi', 'GlobalModelManagement::URI'),
      thisModule.locator('locator', '/Families2Persons/sample-Persons.xmi', 'GlobalModelManagement::EFSLocator'),
      personsMetamodel
    )
  );
  
  -- Registers the Families2Person.atl transformations in the megamodel
  thisModule.register(
    thisModule.atlModule(
      thisModule.identifier('identifier', '/Families2Persons/Families2Persons.atl', 'GlobalModelManagement::URI'),
      thisModule.locator('locator', '/Families2Persons/Families2Persons.atl', 'GlobalModelManagement::EFSLocator')
    )
  );
} 

Back to the top