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 |