Skip to content
Snippets Groups Projects
Commit 12f32c2f authored by Chrissi's avatar Chrissi
Browse files

Add config to set the names of special packages global

parent c7f9e1e9
No related branches found
No related tags found
No related merge requests found
Showing
with 114 additions and 66 deletions
<?xml version="1.0" encoding="ISO-8859-1"?>
<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="bddg" nsURI="https://www.transformation-tool-contest.eu/2019/bdd/graph"
nsPrefix="bddg">
<eClassifiers xsi:type="ecore:EClass" name="BDD">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" unique="false"
lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="ports" ordered="false"
lowerBound="1" upperBound="-1" eType="#//Port" containment="true" eOpposite="#//Port/owner"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="root" ordered="false" lowerBound="1"
eType="#//Tree"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="trees" upperBound="-1"
eType="#//Tree" containment="true" eOpposite="#//Tree/ownerBDD"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Port" abstract="true">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" unique="false"
lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="owner" ordered="false"
lowerBound="1" eType="#//BDD" eOpposite="#//BDD/ports"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="InputPort" eSuperTypes="#//Port">
<eStructuralFeatures xsi:type="ecore:EReference" name="subtrees" ordered="false"
upperBound="-1" eType="#//Subtree" eOpposite="#//Subtree/port"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="OutputPort" eSuperTypes="#//Port">
<eStructuralFeatures xsi:type="ecore:EReference" name="assignments" ordered="false"
upperBound="-1" eType="#//Assignment" eOpposite="#//Assignment/port"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Tree" abstract="true">
<eStructuralFeatures xsi:type="ecore:EReference" name="ownerBDD" ordered="false"
eType="#//BDD" eOpposite="#//BDD/trees"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="ownerSubtreeForZero" ordered="false"
upperBound="-1" eType="#//Subtree" eOpposite="#//Subtree/treeForZero"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="ownerSubtreeForOne" ordered="false"
upperBound="-1" eType="#//Subtree" eOpposite="#//Subtree/treeForOne"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Leaf" eSuperTypes="#//Tree">
<eStructuralFeatures xsi:type="ecore:EReference" name="assignments" ordered="false"
lowerBound="1" upperBound="-1" eType="#//Assignment" containment="true" eOpposite="#//Assignment/owner"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Assignment">
<eStructuralFeatures xsi:type="ecore:EAttribute" name="value" ordered="false"
unique="false" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="port" ordered="false" lowerBound="1"
eType="#//OutputPort" eOpposite="#//OutputPort/assignments"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="owner" ordered="false"
lowerBound="1" eType="#//Leaf" eOpposite="#//Leaf/assignments"/>
</eClassifiers>
<eClassifiers xsi:type="ecore:EClass" name="Subtree" eSuperTypes="#//Tree">
<eStructuralFeatures xsi:type="ecore:EReference" name="port" ordered="false" lowerBound="1"
eType="#//InputPort" eOpposite="#//InputPort/subtrees"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="treeForZero" ordered="false"
lowerBound="1" eType="#//Tree" eOpposite="#//Tree/ownerSubtreeForZero"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="treeForOne" ordered="false"
lowerBound="1" eType="#//Tree" eOpposite="#//Tree/ownerSubtreeForOne"/>
</eClassifiers>
</ecore:EPackage>
...@@ -24,7 +24,6 @@ class EcoreLoader { ...@@ -24,7 +24,6 @@ class EcoreLoader {
* @return the model described by the XML * @return the model described by the XML
*/ */
def loadEcore(path: String = "assets/ttc17.ecore"): ClassAndInstance = { def loadEcore(path: String = "assets/ttc17.ecore"): ClassAndInstance = {
// see https://github.com/max-leuthaeuser/SCROLL/blob/dd269d5620257be1ea2f2044f398c090e9755fb3/core/src/main/scala/scroll/internal/ecore/ECoreImporter.scala
require(null != path && path.nonEmpty) require(null != path && path.nonEmpty)
val resourceSet = new ResourceSetImpl() val resourceSet = new ResourceSetImpl()
...@@ -41,24 +40,6 @@ class EcoreLoader { ...@@ -41,24 +40,6 @@ class EcoreLoader {
val univEPackage = res.getContents().get(0); val univEPackage = res.getContents().get(0);
resourceSet.getPackageRegistry().put("https://www.transformation-tool-contest.eu/2019/tt", univEPackage); resourceSet.getPackageRegistry().put("https://www.transformation-tool-contest.eu/2019/tt", univEPackage);
val myModel = resourceSet.getResource(URI.createURI(path.replace(".ecore", ".ttmodel")), true); val myModel = resourceSet.getResource(URI.createURI(path.replace(".ecore", ".ttmodel")), true);
/*println(myModel.getContents())
myModel.getContents.forEach(o => {
var contents = o.eAllContents().asScala
contents.foreach(i => {
println("++")
println(i)
println(i.eContainingFeature())
println(i.eCrossReferences())
println(i.eClass())
var iners = i.eAllContents().asScala
iners.foreach(a => {
println(a)
})
})
println(o)
})
println("###########")
println(myModel.getContents().toArray(new Array[EObject](0)).toList.head)*/
return new ClassAndInstance(res.getContents.toArray(new Array[EObject](0)).toList.find(_.isInstanceOf[EPackage]).map((p: EObject) => p.asInstanceOf[EPackage]).orNull, return new ClassAndInstance(res.getContents.toArray(new Array[EObject](0)).toList.find(_.isInstanceOf[EPackage]).map((p: EObject) => p.asInstanceOf[EPackage]).orNull,
myModel.getContents().toArray(new Array[EObject](0)).toList.head) myModel.getContents().toArray(new Array[EObject](0)).toList.head)
} }
......
...@@ -43,7 +43,6 @@ class Generator(config: GeneratorConfig) { ...@@ -43,7 +43,6 @@ class Generator(config: GeneratorConfig) {
//create s models from the incoming ecore models //create s models from the incoming ecore models
var sModels: Map[SModel, ClassAndInstance] = Map.empty var sModels: Map[SModel, ClassAndInstance] = Map.empty
//var sModels: Seq[SModel] = Seq.empty
ecoreModels.foreach(ec => { ecoreModels.foreach(ec => {
sModels = sModels + ((new SModelGenerator convert (ec._2.pkg, ec._1)) -> ec._2) sModels = sModels + ((new SModelGenerator convert (ec._2.pkg, ec._1)) -> ec._2)
}) })
......
package org.rosi_project.model_sync.generator
object PackageNames {
var sourcePkgPrefix: String = "sum."
val viewPkgName: String = "view"
val viewPostName: String = "View"
val viewRolePostName: String = "Role"
val queryPkgName: String = "query"
val queryPostName: String = "Query"
val queryRolePostName: String = "Role"
val queryHelperPrefix: String = "Helper"
val joinPkgName: String = "join"
val examplePkgName: String = "example"
}
\ No newline at end of file
...@@ -4,6 +4,7 @@ import org.eclipse.emf.ecore.{EAttribute, EClass, EReference} ...@@ -4,6 +4,7 @@ import org.eclipse.emf.ecore.{EAttribute, EClass, EReference}
import org.rosi_project.model_sync.generator.acr_model._ import org.rosi_project.model_sync.generator.acr_model._
import org.rosi_project.model_sync.generator.acr_model.types.SList import org.rosi_project.model_sync.generator.acr_model.types.SList
import org.rosi_project.model_sync.generator.acr_model.types.SSet import org.rosi_project.model_sync.generator.acr_model.types.SSet
import org.rosi_project.model_sync.generator.PackageNames
/** Converter to generate instances of [[SClass]] based on [[EClass EClasses]]. /** Converter to generate instances of [[SClass]] based on [[EClass EClasses]].
* *
...@@ -20,14 +21,14 @@ class SClassConverter extends Converter[EClass, SClass] { ...@@ -20,14 +21,14 @@ class SClassConverter extends Converter[EClass, SClass] {
(source.getEAttributes: List[EAttribute]).foreach(eAttr => { (source.getEAttributes: List[EAttribute]).foreach(eAttr => {
val attrType: STypedElement = STypeRegistry val attrType: STypedElement = STypeRegistry
// check if the attribute type is already known and registered // check if the attribute type is already known and registered
.query(eAttr.getEAttributeType.getName, eAttr.getEAttributeType.getEPackage.getNsPrefix) .query(eAttr.getEAttributeType.getName, PackageNames.sourcePkgPrefix + eAttr.getEAttributeType.getEPackage.getNsPrefix)
// otherwise create a new type // otherwise create a new type
.getOrElse { .getOrElse {
val newAttr = EmfTypeTranslator val newAttr = EmfTypeTranslator
// if the type is wrapped by EMF (such as EString), use the corresponding scala type // if the type is wrapped by EMF (such as EString), use the corresponding scala type
.getSClassFromEmf(eAttr.getEAttributeType) .getSClassFromEmf(eAttr.getEAttributeType)
// otherwise create a new class (as the attribute should instance of a class rather than a type in this case) // otherwise create a new class (as the attribute should instance of a class rather than a type in this case)
.getOrElse(new SClass(eAttr.getEAttributeType.getName, eAttr.getEAttributeType.getEPackage.getNsPrefix)) .getOrElse(new SClass(eAttr.getEAttributeType.getName, PackageNames.sourcePkgPrefix + eAttr.getEAttributeType.getEPackage.getNsPrefix))
// finally save the type // finally save the type
STypeRegistry.addType(newAttr, null) STypeRegistry.addType(newAttr, null)
...@@ -41,7 +42,7 @@ class SClassConverter extends Converter[EClass, SClass] { ...@@ -41,7 +42,7 @@ class SClassConverter extends Converter[EClass, SClass] {
.foreach(eRef => { .foreach(eRef => {
val refName: String = eRef.getName //Attribute name val refName: String = eRef.getName //Attribute name
val refType: String = eRef.getEReferenceType.getName //Name of the attribute type val refType: String = eRef.getEReferenceType.getName //Name of the attribute type
val refTypePckg: String = eRef.getEReferenceType.getEPackage.getNsPrefix //Package name of the attribute type val refTypePckg: String = PackageNames.sourcePkgPrefix + eRef.getEReferenceType.getEPackage.getNsPrefix //Package name of the attribute type
val containment: Boolean = eRef.isContainment() //Containment relation or not val containment: Boolean = eRef.isContainment() //Containment relation or not
val oppositeERef: EReference = eRef.getEOpposite() //Opposite reference val oppositeERef: EReference = eRef.getEOpposite() //Opposite reference
var oppositeRef: SReference = null //Opposite reference var oppositeRef: SReference = null //Opposite reference
...@@ -95,37 +96,19 @@ class SClassConverter extends Converter[EClass, SClass] { ...@@ -95,37 +96,19 @@ class SClassConverter extends Converter[EClass, SClass] {
val eClassParents: List[EClass] = source.getESuperTypes.toArray(new Array[EClass](0)).toList val eClassParents: List[EClass] = source.getESuperTypes.toArray(new Array[EClass](0)).toList
//implemented multiple inheritance support
/*if (violatesSingleInheritance(eClassParents)) {
throw new UnconvertibleEmfException(source.getEPackage, s"For class: $source")
}*/
eClassParents.foreach { p => eClassParents.foreach { p =>
pars ::= STypeRegistry pars ::= STypeRegistry
// check if we already know the parent // check if we already know the parent
.query(p.getName, p.getEPackage.getNsPrefix) .query(p.getName, PackageNames.sourcePkgPrefix + p.getEPackage.getNsPrefix)
// otherwise we need to create and register it // otherwise we need to create and register it
.getOrElse { .getOrElse {
val parentSClass: SClass = new SClass(p.getName, p.getEPackage.getNsPrefix) val parentSClass: SClass = new SClass(p.getName, PackageNames.sourcePkgPrefix + p.getEPackage.getNsPrefix)
// register the parent (it will be visited and completely inflated later on) // register the parent (it will be visited and completely inflated later on)
STypeRegistry.addType(parentSClass, null) STypeRegistry.addType(parentSClass, null)
parentSClass parentSClass
} }
} }
/*val parent: STypedElement = eClassParents.headOption.map((p: EClass) => {
STypeRegistry
// check if we already know the parent
.queryForName(p.getName)
// otherwise we need to create and register it
.getOrElse {
val parentSClass: SClass = new SClass(p.getName, sPackage = p.getEPackage.getNsPrefix)
// register the parent (it will be visited and completely inflated later on)
STypeRegistry.addType(parentSClass)
parentSClass
}
}).orNull*/
/* `convert` may be called on two different occasions: either for a completely new type or /* `convert` may be called on two different occasions: either for a completely new type or
* for a type that was already created before when another type was being inflated by `convert`. * for a type that was already created before when another type was being inflated by `convert`.
* In the first case we need to set up all the necessary attributes of the SClass and therefore * In the first case we need to set up all the necessary attributes of the SClass and therefore
...@@ -136,7 +119,7 @@ class SClassConverter extends Converter[EClass, SClass] { ...@@ -136,7 +119,7 @@ class SClassConverter extends Converter[EClass, SClass] {
* have the type known). Therefore we will set these now. * have the type known). Therefore we will set these now.
*/ */
val currentClass: Option[STypedElement] = STypeRegistry.query(source.getName, source.getEPackage.getNsPrefix) val currentClass: Option[STypedElement] = STypeRegistry.query(source.getName, PackageNames.sourcePkgPrefix + source.getEPackage.getNsPrefix)
currentClass.map { currentClass.map {
case clazz: SClass => case clazz: SClass =>
...@@ -149,7 +132,7 @@ class SClassConverter extends Converter[EClass, SClass] { ...@@ -149,7 +132,7 @@ class SClassConverter extends Converter[EClass, SClass] {
case sType => case sType =>
sys.error(s"sType should have been a class: $sType") sys.error(s"sType should have been a class: $sType")
}.getOrElse { }.getOrElse {
val createdClass: SClass = new SClass(source.getName, source.getEPackage.getNsPrefix, source.isAbstract, source.isInterface) val createdClass: SClass = new SClass(source.getName, PackageNames.sourcePkgPrefix + source.getEPackage.getNsPrefix, source.isAbstract, source.isInterface)
createdClass.setAttributes(attrs) createdClass.setAttributes(attrs)
createdClass.setReferences(refs) createdClass.setReferences(refs)
pars.foreach(p => { pars.foreach(p => {
......
...@@ -4,6 +4,7 @@ import org.eclipse.emf.ecore.EEnum ...@@ -4,6 +4,7 @@ import org.eclipse.emf.ecore.EEnum
import org.rosi_project.model_sync.generator.acr_model.SEnum import org.rosi_project.model_sync.generator.acr_model.SEnum
import org.eclipse.emf.ecore.EEnumLiteral import org.eclipse.emf.ecore.EEnumLiteral
import org.rosi_project.model_sync.generator.acr_model.STypeRegistry import org.rosi_project.model_sync.generator.acr_model.STypeRegistry
import org.rosi_project.model_sync.generator.PackageNames
class SEnumConverter extends Converter[EEnum, SEnum] { class SEnumConverter extends Converter[EEnum, SEnum] {
...@@ -16,7 +17,7 @@ class SEnumConverter extends Converter[EEnum, SEnum] { ...@@ -16,7 +17,7 @@ class SEnumConverter extends Converter[EEnum, SEnum] {
strings += elit.getName strings += elit.getName
}) })
val createdEnum: SEnum = new SEnum(source.getName, source.getEPackage.getNsPrefix, strings) val createdEnum: SEnum = new SEnum(source.getName, PackageNames.sourcePkgPrefix + source.getEPackage.getNsPrefix, strings)
STypeRegistry.addType(createdEnum, null) STypeRegistry.addType(createdEnum, null)
createdEnum createdEnum
} }
......
...@@ -6,6 +6,7 @@ import org.rosi_project.model_sync.generator.acr_model.{SModel, SType, STypeRegi ...@@ -6,6 +6,7 @@ import org.rosi_project.model_sync.generator.acr_model.{SModel, SType, STypeRegi
import scala.collection.JavaConverters._ import scala.collection.JavaConverters._
import org.rosi_project.model_sync.generator.acr_model.SClass import org.rosi_project.model_sync.generator.acr_model.SClass
import org.eclipse.emf.ecore.EEnum import org.eclipse.emf.ecore.EEnum
import org.rosi_project.model_sync.generator.PackageNames
/** Converter to generate an [[SModel]] from ecore. /** Converter to generate an [[SModel]] from ecore.
* *
...@@ -22,7 +23,7 @@ class SModelGenerator extends Converter[EPackage, SModel] { ...@@ -22,7 +23,7 @@ class SModelGenerator extends Converter[EPackage, SModel] {
println("First run creates all classes, important for abstract and interface relations") println("First run creates all classes, important for abstract and interface relations")
contents.foreach { contents.foreach {
case ec: EClass => case ec: EClass =>
STypeRegistry.addType(new SClass(ec.getName, ec.getEPackage.getNsPrefix, ec.isAbstract, ec.isInterface), ec) STypeRegistry.addType(new SClass(ec.getName, PackageNames.sourcePkgPrefix + ec.getEPackage.getNsPrefix, ec.isAbstract, ec.isInterface), ec)
case ee: EEnum => case ee: EEnum =>
//prinltn(ee) //prinltn(ee)
model.addModelEnums(new SEnumConverter convert (ee, sourceName)) model.addModelEnums(new SEnumConverter convert (ee, sourceName))
......
...@@ -2,6 +2,7 @@ package org.rosi_project.model_sync.generator.sync ...@@ -2,6 +2,7 @@ package org.rosi_project.model_sync.generator.sync
import org.rosi_project.model_sync.generator.acr_model._ import org.rosi_project.model_sync.generator.acr_model._
import org.rosi_project.model_sync.generator.acr_model.types.PredefTypes import org.rosi_project.model_sync.generator.acr_model.types.PredefTypes
import org.rosi_project.model_sync.generator.PackageNames
class GenerateQueryHelperVisitor extends SModelVisitor { class GenerateQueryHelperVisitor extends SModelVisitor {
...@@ -10,7 +11,7 @@ class GenerateQueryHelperVisitor extends SModelVisitor { ...@@ -10,7 +11,7 @@ class GenerateQueryHelperVisitor extends SModelVisitor {
//iterate over all abstract classes or interfaces //iterate over all abstract classes or interfaces
sModel.getModelClasses.foreach(cls => { sModel.getModelClasses.foreach(cls => {
if (cls.isAbstract || cls.isInterface) { if (cls.isAbstract || cls.isInterface) {
val newClass = new SClass("Helper" + cls.getName, cls.getPackage) val newClass = new SClass(PackageNames.queryHelperPrefix + cls.getName, cls.getPackage)
newClass.addParent(cls) newClass.addParent(cls)
newClass.addParent(PredefRsumTypes.QUERY_HELPER_STYPE) newClass.addParent(PredefRsumTypes.QUERY_HELPER_STYPE)
newClass.addMethod(new SMethod( newClass.addMethod(new SMethod(
......
...@@ -10,12 +10,13 @@ import org.eclipse.emf.ecore.EStructuralFeature ...@@ -10,12 +10,13 @@ import org.eclipse.emf.ecore.EStructuralFeature
import org.eclipse.emf.common.util.EList import org.eclipse.emf.common.util.EList
import org.rosi_project.model_sync.util.EMFUtilForGenerator import org.rosi_project.model_sync.util.EMFUtilForGenerator
import java.util.List import java.util.List
import org.rosi_project.model_sync.generator.PackageNames
class InstanceCombiGenerator(val clsins: ClassAndInstance) extends SModelVisitor { class InstanceCombiGenerator(val clsins: ClassAndInstance) extends SModelVisitor {
override def visit(sModel: SModel): Unit = { override def visit(sModel: SModel): Unit = {
//println("++++++++++++++++++++++++++++++++++++++++++++++") //println("++++++++++++++++++++++++++++++++++++++++++++++")
val example = new SClass("ExampleCombiCase", "example") val example = new SClass("ExampleCombiCase", PackageNames.examplePkgName)
val contents = clsins.obj.eAllContents().asScala val contents = clsins.obj.eAllContents().asScala
var counter = 0 var counter = 0
var lines: Seq[InstanceLine] = Seq.empty var lines: Seq[InstanceLine] = Seq.empty
......
...@@ -10,6 +10,7 @@ import org.eclipse.emf.ecore.EStructuralFeature ...@@ -10,6 +10,7 @@ import org.eclipse.emf.ecore.EStructuralFeature
import org.eclipse.emf.common.util.EList import org.eclipse.emf.common.util.EList
import org.rosi_project.model_sync.util.EMFUtilForGenerator import org.rosi_project.model_sync.util.EMFUtilForGenerator
import java.util.List import java.util.List
import org.rosi_project.model_sync.generator.PackageNames
/** /**
* Service to create an instance creation object. * Service to create an instance creation object.
...@@ -20,7 +21,7 @@ class InstanceGenerator(val clsins: ClassAndInstance) extends SModelVisitor { ...@@ -20,7 +21,7 @@ class InstanceGenerator(val clsins: ClassAndInstance) extends SModelVisitor {
override def visit(sModel: SModel): Unit = { override def visit(sModel: SModel): Unit = {
//println("++++++++++++++++++++++++++++++++++++++++++++++") //println("++++++++++++++++++++++++++++++++++++++++++++++")
val example = new SClass("ExampleCase", "example") val example = new SClass("ExampleCase", PackageNames.examplePkgName)
val contents = clsins.obj.eAllContents().asScala val contents = clsins.obj.eAllContents().asScala
var counter = 0 var counter = 0
var lines: Seq[InstanceLine] = Seq.empty var lines: Seq[InstanceLine] = Seq.empty
......
...@@ -6,6 +6,7 @@ import org.rosi_project.model_sync.model_join.representation.grammar._ ...@@ -6,6 +6,7 @@ import org.rosi_project.model_sync.model_join.representation.grammar._
import scala.collection.JavaConverters._ import scala.collection.JavaConverters._
import scala.collection.convert.AsScalaConverters import scala.collection.convert.AsScalaConverters
import org.rosi_project.model_management.sum.join.RsumJoinType import org.rosi_project.model_management.sum.join.RsumJoinType
import org.rosi_project.model_sync.generator.PackageNames
class ModelJoinViewGeneratingVisitor(joinExpression: ModelJoinExpression) extends SModelVisitor { class ModelJoinViewGeneratingVisitor(joinExpression: ModelJoinExpression) extends SModelVisitor {
...@@ -24,7 +25,7 @@ class ModelJoinViewGeneratingVisitor(joinExpression: ModelJoinExpression) extend ...@@ -24,7 +25,7 @@ class ModelJoinViewGeneratingVisitor(joinExpression: ModelJoinExpression) extend
newInternalRoles = Seq.empty newInternalRoles = Seq.empty
newInternalRelationalRoles = Seq.empty newInternalRelationalRoles = Seq.empty
allImportClasses = Set.empty allImportClasses = Set.empty
viewCompartment = new SClass(joinExpression.getName() + counter, "view") viewCompartment = new SClass(joinExpression.getName() + counter, PackageNames.viewPkgName)
counter += 1 counter += 1
viewCompartment.addParent(PredefRsumTypes.IVIEW_COMPARTMENT_STYPE) viewCompartment.addParent(PredefRsumTypes.IVIEW_COMPARTMENT_STYPE)
...@@ -83,7 +84,7 @@ class ModelJoinViewGeneratingVisitor(joinExpression: ModelJoinExpression) extend ...@@ -83,7 +84,7 @@ class ModelJoinViewGeneratingVisitor(joinExpression: ModelJoinExpression) extend
}) })
} else { } else {
refClasses = refClasses :+ cls refClasses = refClasses :+ cls
internalClass = new SInnerViewNaturalClass(cls.getName + "Role", internalClass = new SInnerViewNaturalClass(cls.getName + PackageNames.viewRolePostName,
_isAbstract = cls.isAbstract, _isAbstract = cls.isAbstract,
_isInterface = cls.isInterface, _isInterface = cls.isInterface,
_externalClass = viewCompartment, _externalClass = viewCompartment,
...@@ -216,7 +217,7 @@ class ModelJoinViewGeneratingVisitor(joinExpression: ModelJoinExpression) extend ...@@ -216,7 +217,7 @@ class ModelJoinViewGeneratingVisitor(joinExpression: ModelJoinExpression) extend
//now find the right relational compartment //now find the right relational compartment
refRelationalClasses = refRelationalClasses :+ rc refRelationalClasses = refRelationalClasses :+ rc
//Iterate over all Relational compartments and create relational internal role classes //Iterate over all Relational compartments and create relational internal role classes
val internalRelClass = new SInnerViewRelationalClass(rc.getName + "Role", _externalClass = viewCompartment, val internalRelClass = new SInnerViewRelationalClass(rc.getName + PackageNames.viewRolePostName, _externalClass = viewCompartment,
sumSource = rc, viewSource = sourceRole, viewTarget = targetRole) sumSource = rc, viewSource = sourceRole, viewTarget = targetRole)
internalRelClass.setAttributes(sourceAtt ++ targetAtt) internalRelClass.setAttributes(sourceAtt ++ targetAtt)
internalRelClass.addMethod(ViewMethods.getIsRelationalMethod(true)) internalRelClass.addMethod(ViewMethods.getIsRelationalMethod(true))
......
...@@ -2,12 +2,13 @@ package org.rosi_project.model_sync.generator.sync ...@@ -2,12 +2,13 @@ package org.rosi_project.model_sync.generator.sync
import org.rosi_project.model_sync.generator.acr_model._ import org.rosi_project.model_sync.generator.acr_model._
import org.rosi_project.model_sync.generator.acr_model.types._ import org.rosi_project.model_sync.generator.acr_model.types._
import org.rosi_project.model_sync.generator.PackageNames
class QueryGeneratingVisitor extends SModelVisitor { class QueryGeneratingVisitor extends SModelVisitor {
override def visit(sModel: SModel): Unit = { override def visit(sModel: SModel): Unit = {
val viewCompartment = new SClass(sModel.getName.capitalize + "Query", "query") val viewCompartment = new SClass(sModel.getName.capitalize + PackageNames.queryPostName, PackageNames.queryPkgName)
var newInternalRoles: Seq[SInnerViewNaturalClass] = Seq.empty var newInternalRoles: Seq[SInnerViewNaturalClass] = Seq.empty
var newInternalRelationalRoles: Seq[SInnerViewRelationalClass] = Seq.empty var newInternalRelationalRoles: Seq[SInnerViewRelationalClass] = Seq.empty
viewCompartment.addParent(PredefRsumTypes.IQUERY_VIEW_COMPARTMENT_STYPE) viewCompartment.addParent(PredefRsumTypes.IQUERY_VIEW_COMPARTMENT_STYPE)
...@@ -21,8 +22,8 @@ class QueryGeneratingVisitor extends SModelVisitor { ...@@ -21,8 +22,8 @@ class QueryGeneratingVisitor extends SModelVisitor {
viewCompartment.augmentConstructor(SMethodStatement(s"""init("${viewCompartment.getName}")""", allTypes)) viewCompartment.augmentConstructor(SMethodStatement(s"""init("${viewCompartment.getName}")""", allTypes))
//Iterate over all Model classes and create natural internal role classes //Iterate over all Model classes and create natural internal role classes
sModel.getModelClasses.filter(!_.getName.startsWith("Helper")).foreach(cls => { sModel.getModelClasses.filter(!_.getName.startsWith(PackageNames.queryHelperPrefix)).foreach(cls => {
val internalClass = new SInnerViewNaturalClass(cls.getName + "Role", val internalClass = new SInnerViewNaturalClass(cls.getName + PackageNames.queryRolePostName,
_isAbstract = false, _isAbstract = false,
_isInterface = false, _isInterface = false,
_externalClass = viewCompartment, _externalClass = viewCompartment,
...@@ -54,7 +55,7 @@ class QueryGeneratingVisitor extends SModelVisitor { ...@@ -54,7 +55,7 @@ class QueryGeneratingVisitor extends SModelVisitor {
inner.addMethod(ViewMethods.getDeleteElementNaturalMethod(inner)) inner.addMethod(ViewMethods.getDeleteElementNaturalMethod(inner))
//add parents //add parents
cls.getAllParents().foreach(p => { cls.getAllParents().foreach(p => {
val existing: Option[STypedElement] = newInternalRoles.find(existing => existing.getName == p.getName + "Role") val existing: Option[STypedElement] = newInternalRoles.find(existing => existing.getName == p.getName + PackageNames.queryRolePostName)
if (!existing.isEmpty) { if (!existing.isEmpty) {
inner.addParent(existing.get) inner.addParent(existing.get)
} }
...@@ -77,7 +78,7 @@ class QueryGeneratingVisitor extends SModelVisitor { ...@@ -77,7 +78,7 @@ class QueryGeneratingVisitor extends SModelVisitor {
var targetRole: SInnerViewNaturalClass = null var targetRole: SInnerViewNaturalClass = null
r.getAttributes.foreach(attr => { r.getAttributes.foreach(attr => {
newInternalRoles.foreach(inte => { newInternalRoles.foreach(inte => {
if (inte.getName == attr.getTypeElement.getName + "Role") { if (inte.getName == attr.getTypeElement.getName + PackageNames.queryRolePostName) {
if (attr.getName == "sInstance") { if (attr.getName == "sInstance") {
sourceRole = inte sourceRole = inte
sourceAtt = new SAttribute("source", inte) sourceAtt = new SAttribute("source", inte)
...@@ -92,7 +93,7 @@ class QueryGeneratingVisitor extends SModelVisitor { ...@@ -92,7 +93,7 @@ class QueryGeneratingVisitor extends SModelVisitor {
} }
}) })
}) })
val internalClass = new SInnerViewRelationalClass(r.getName + "Role", _externalClass = viewCompartment, val internalClass = new SInnerViewRelationalClass(r.getName + PackageNames.queryRolePostName, _externalClass = viewCompartment,
sumSource = r.asInstanceOf[SRelationalCompartmentClass], viewSource = sourceRole, viewTarget = targetRole) sumSource = r.asInstanceOf[SRelationalCompartmentClass], viewSource = sourceRole, viewTarget = targetRole)
internalClass.setAttributes(sourceAtt ++ targetAtt) internalClass.setAttributes(sourceAtt ++ targetAtt)
internalClass.addMethod(ViewMethods.getIsRelationalMethod(true)) internalClass.addMethod(ViewMethods.getIsRelationalMethod(true))
......
...@@ -2,19 +2,20 @@ package org.rosi_project.model_sync.generator.sync ...@@ -2,19 +2,20 @@ package org.rosi_project.model_sync.generator.sync
import org.rosi_project.model_sync.generator.acr_model._ import org.rosi_project.model_sync.generator.acr_model._
import org.rosi_project.model_sync.generator.acr_model.types._ import org.rosi_project.model_sync.generator.acr_model.types._
import org.rosi_project.model_sync.generator.PackageNames
class ViewGeneratingVisitor extends SModelVisitor { class ViewGeneratingVisitor extends SModelVisitor {
override def visit(sModel: SModel): Unit = { override def visit(sModel: SModel): Unit = {
val viewCompartment = new SClass(sModel.getName.capitalize + "View", "view") val viewCompartment = new SClass(sModel.getName.capitalize + PackageNames.viewPostName, PackageNames.viewPkgName)
var newInternalRoles: Seq[SInnerViewNaturalClass] = Seq.empty var newInternalRoles: Seq[SInnerViewNaturalClass] = Seq.empty
var newInternalRelationalRoles: Seq[SInnerViewRelationalClass] = Seq.empty var newInternalRelationalRoles: Seq[SInnerViewRelationalClass] = Seq.empty
viewCompartment.addParent(PredefRsumTypes.IVIEW_COMPARTMENT_STYPE) viewCompartment.addParent(PredefRsumTypes.IVIEW_COMPARTMENT_STYPE)
//Iterate over all Model classes and create natural internal role classes //Iterate over all Model classes and create natural internal role classes
sModel.getModelClasses.foreach(cls => { sModel.getModelClasses.foreach(cls => {
val internalClass = new SInnerViewNaturalClass(cls.getName + "Role", val internalClass = new SInnerViewNaturalClass(cls.getName + PackageNames.viewRolePostName,
_isAbstract = cls.isAbstract, _isAbstract = cls.isAbstract,
_isInterface = cls.isInterface, _isInterface = cls.isInterface,
_externalClass = viewCompartment, _externalClass = viewCompartment,
...@@ -49,7 +50,7 @@ class ViewGeneratingVisitor extends SModelVisitor { ...@@ -49,7 +50,7 @@ class ViewGeneratingVisitor extends SModelVisitor {
inner.addMethod(ViewMethods.getDeleteElementNaturalMethod(inner)) inner.addMethod(ViewMethods.getDeleteElementNaturalMethod(inner))
//add parents //add parents
cls.getAllParents().foreach(p => { cls.getAllParents().foreach(p => {
val existing: Option[STypedElement] = newInternalRoles.find(existing => existing.getName == p.getName + "Role") val existing: Option[STypedElement] = newInternalRoles.find(existing => existing.getName == p.getName + PackageNames.viewRolePostName)
if (!existing.isEmpty) { if (!existing.isEmpty) {
inner.addParent(existing.get) inner.addParent(existing.get)
} }
...@@ -70,7 +71,7 @@ class ViewGeneratingVisitor extends SModelVisitor { ...@@ -70,7 +71,7 @@ class ViewGeneratingVisitor extends SModelVisitor {
var targetRole: SInnerViewNaturalClass = null var targetRole: SInnerViewNaturalClass = null
r.getAttributes.foreach(attr => { r.getAttributes.foreach(attr => {
newInternalRoles.foreach(inte => { newInternalRoles.foreach(inte => {
if (inte.getName == attr.getTypeElement.getName + "Role") { if (inte.getName == attr.getTypeElement.getName + PackageNames.viewRolePostName) {
if (attr.getName == "sInstance") { if (attr.getName == "sInstance") {
sourceRole = inte sourceRole = inte
sourceAtt = new SAttribute("source", inte) sourceAtt = new SAttribute("source", inte)
...@@ -85,7 +86,7 @@ class ViewGeneratingVisitor extends SModelVisitor { ...@@ -85,7 +86,7 @@ class ViewGeneratingVisitor extends SModelVisitor {
} }
}) })
}) })
val internalClass = new SInnerViewRelationalClass(r.getName + "Role", _externalClass = viewCompartment, val internalClass = new SInnerViewRelationalClass(r.getName + PackageNames.viewRolePostName, _externalClass = viewCompartment,
sumSource = r.asInstanceOf[SRelationalCompartmentClass], viewSource = sourceRole, viewTarget = targetRole) sumSource = r.asInstanceOf[SRelationalCompartmentClass], viewSource = sourceRole, viewTarget = targetRole)
internalClass.setAttributes(sourceAtt ++ targetAtt) internalClass.setAttributes(sourceAtt ++ targetAtt)
internalClass.addMethod(ViewMethods.getIsRelationalMethod(true)) internalClass.addMethod(ViewMethods.getIsRelationalMethod(true))
......
...@@ -40,7 +40,7 @@ object ApplicationTest extends App { ...@@ -40,7 +40,7 @@ object ApplicationTest extends App {
} }
def runTTC2019(cre: Creation.Value): Unit = { def runTTC2019(cre: Creation.Value): Unit = {
var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/BDD.ecore", "assets/models/TT.ecore"), false, new File("assets/models")); var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/BDD.ecore", "assets/models/BDDv2.ecore", "assets/models/TT.ecore"), false, new File("assets/models"));
config.setCreate(cre) config.setCreate(cre)
new Generator(config).run() new Generator(config).run()
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment