EnAr-Fusion is a domain specific language (DSL) to compose and refine our EA domain metamodels. However, before starting to use this language, it is necessary to specify these metamodels by using a metamodeling language. In this case, we used Ecore to specify ArchiMate and ARMOR metamodels. Then, these metamodels are specified by using a common set of concepts from the metamodeling language.
This language allows in a single transformation, adapting metamodels and the composition of adapted metamodels. To accomplish this, EnAr-Fusion offers 18 operations that can act on the input metamodels and on the composite metamodel.
Considering the next two metamodels called mm1 and mm2:
mm1 mm2
We assume that the packages containing the Ecore metamodels are called exampleMM1 and exampleMM2.
Imports a metamodel. The metamodel can be imported by the next two ways:
1. From a local host. In this case, it is necessary to especify the relative or absolute full path of the file. The declaration would be as follows.
import "./models/mm1.ecore"
2. From the EnAr Project repository. In this case, it is necessary to especify just the path of the metamodel adding at the begining the keyword svn:. The declaration would be as follows
import "svn:metamodel/mm1/v1"
Allows including the name and path of the export metamodel.
export "mm3" "http://uniandes.edu.co/exampleMM3"
An EnAr-Fusion program must satisfied the following restrictions:
An EnAr-Fusion program could generate the following errors:
Considering the next two metamodels
MM1
MM2
These metamodels are in the EnAr Project repository with the paths:
And the next EnArFusion source code
import "svn:metamodel/mm1/v1" import "svn:metamodel/mm2/v1" export "mm3" "http://uniandes.edu.co/exampleMM3" newEntity N addAttribute attN1 { source = N type = EInt optional = false } newEntity M addAttribute attM1 { source = M type = EInt optional = false } setAbstractEntity exampleMM2.V mergeEntities EN { entity1 = exampleMM1.E entity2 = N } newLink M_Z { source = M target = exampleMM2.Z containment = false minCard = 1 maxCard = -1 associatedLink = Z_M } newLink X_B { source = exampleMM2.X target = exampleMM1.B containment = false minCard = 0 maxCard = -1 } splitEntity exampleMM2.X { entity X1{ Attributes { attX1 } Links { X_Y X_B } } entity X2 { Attributes { attX2 } Links { X_Y X_W } } }
Project | Version | SVN |
---|---|---|
EnAr-Fusion | 1.0 | SVN: http://minsky2.uniandes.edu.co/especiales/enar/Fusion/Fusion |