|
|
Line 9: |
Line 9: |
| ===== Registering artifacts ===== | | ===== Registering artifacts ===== |
| | | |
− | '''program''' megamodelPopulation
| + | program megamodelPopulation |
− |
| + | |
− | '''using''' {
| + | using { |
− | ecore : !MetaMetamodel = OclUndefined | + | ecore : !MetaMetamodel = OclUndefined |
− | familiesMetamodel : !Metamodel = OclUndefined | + | familiesMetamodel : !Metamodel = OclUndefined |
− | personsMetamodel : !Metamodel = OclUndefined | + | personsMetamodel : !Metamodel = OclUndefined |
− | }
| + | } |
− |
| + | |
− | '''do'''{
| + | |
− |
| + | |
− | ''''' -- 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')
| + | |
− | )
| + | |
− | );
| + | |
− | }
| + | |
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