diff --git a/solutions/RSync/src/main/scala/creation/CreationTTSync.scala b/solutions/RSync/src/main/scala/creation/CreationTTSync.scala new file mode 100644 index 0000000000000000000000000000000000000000..7e79af7e12972cf721020a8a0feb5e17365e1258 --- /dev/null +++ b/solutions/RSync/src/main/scala/creation/CreationTTSync.scala @@ -0,0 +1,80 @@ +package creation + +import sync.tt.Row +import sync.tt.Port +import sync.tt.InputPort +import sync.tt.TruthTable +import org.eclipse.emf.ecore.EObject +import sync.tt.LocatedElement +import sync.tt.OutputPort +import sync.tt.Cell + +/** + * This file is automatically generated from the code generator + * for the role-based model management framework. + */ +class CreationTTSync extends ICreationTT { + + var mapping: Map[EObject, Object] = Map.empty + + override def createLocatedElement(location: String, id: EObject): Unit = { + mapping += (id -> new LocatedElement(location)) + } + + override def createInputPort(name: String, location: String, id: EObject): Unit = { + mapping += (id -> new InputPort(name, Set.empty, null, location)) + } + + override def createOutputPort(name: String, location: String, id: EObject): Unit = { + mapping += (id -> new OutputPort(name, Set.empty, null, location)) + } + + override def createTruthTable(name: String, location: String, id: EObject): Unit = { + mapping += (id -> new TruthTable(name, Set.empty, Set.empty, location)) + } + + override def createRow(location: String, id: EObject): Unit = { + mapping += (id -> new Row(Set.empty, null, location)) + } + + override def createCell(value: Boolean, location: String, id: EObject): Unit = { + mapping += (id -> new Cell(value, null, null, location)) + } + + override def createTruthTableRowsRow(s: EObject, t: EObject): Unit = { + val s1 = mapping.get(s).get.asInstanceOf[TruthTable] + val t1 = mapping.get(t).get.asInstanceOf[Row] + s1.addRows(t1) + t1.setOwner(s1) + } + + override def createTruthTablePortsPort(s: EObject, t: EObject): Unit = { + val s1 = mapping.get(s).get.asInstanceOf[TruthTable] + val t1 = mapping.get(t).get.asInstanceOf[Port] + s1.addPorts(t1) + t1.setOwner(s1) + } + + override def createRowCellsCell(s: EObject, t: EObject): Unit = { + val s1 = mapping.get(s).get.asInstanceOf[Row] + val t1 = mapping.get(t).get.asInstanceOf[Cell] + s1.addCells(t1) + t1.setOwner(s1) + } + + override def createCellPortPort(s: EObject, t: EObject): Unit = { + val s1 = mapping.get(s).get.asInstanceOf[Cell] + val t1 = mapping.get(t).get.asInstanceOf[Port] + s1.setPort(t1) + t1.addCells(s1) + } + + override def toString(): String = { + "CreationTTSync:" + } + +} + + + + \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/creation/ICreationTT.scala b/solutions/RSync/src/main/scala/creation/ICreationTT.scala new file mode 100644 index 0000000000000000000000000000000000000000..cb7d8c27c5c5979dfd01b12625e0ca7d1a266aaf --- /dev/null +++ b/solutions/RSync/src/main/scala/creation/ICreationTT.scala @@ -0,0 +1,39 @@ +package creation + +import org.eclipse.emf.ecore.EObject + +/** + * This file is automatically generated from the code generator + * for the role-based model management framework. + */ +trait ICreationTT { + + def createTruthTable(name: String, location: String, id: EObject): Unit + + def createLocatedElement(location: String, id: EObject): Unit + + def createCell(value: Boolean, location: String, id: EObject): Unit + + def createOutputPort(name: String, location: String, id: EObject): Unit + + def createInputPort(name: String, location: String, id: EObject): Unit + + def createRow(location: String, id: EObject): Unit + + def createTruthTableRowsRow(s: EObject, t: EObject): Unit + + def createTruthTablePortsPort(s: EObject, t: EObject): Unit + + def createCellPortPort(s: EObject, t: EObject): Unit + + def createRowCellsCell(s: EObject, t: EObject): Unit + + override def toString(): String = { + "ICreationTT:" + } + +} + + + + \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/creation/LoaderTT.scala b/solutions/RSync/src/main/scala/creation/LoaderTT.scala new file mode 100644 index 0000000000000000000000000000000000000000..c4ca5d6150ef38446b8600e6394bd07dd724974a --- /dev/null +++ b/solutions/RSync/src/main/scala/creation/LoaderTT.scala @@ -0,0 +1,92 @@ +package creation + +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl +import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl +import org.eclipse.emf.ecore.resource.Resource +import org.eclipse.emf.ecore.EObject +import org.eclipse.emf.common.util.URI +import scala.collection.JavaConverters._ +import ttc2019.metamodels.tt.TruthTable +import ttc2019.metamodels.tt.InputPort +import ttc2019.metamodels.create.LoadEObject + +/** + * This file is automatically generated from the code generator + * for the role-based model management framework. + */ +class LoaderTT { + + def loadEcore(pathMeta: String, pathInstance: String): EObject = { + require(null != pathMeta && pathMeta.nonEmpty && null != pathInstance && pathInstance.nonEmpty) + val resourceSet = new ResourceSetImpl() + resourceSet.getResourceFactoryRegistry.getExtensionToFactoryMap.put(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMIResourceFactoryImpl()) + val ressourceMeta = resourceSet.getResource(URI.createFileURI(pathMeta), true) + val packageMeta = ressourceMeta.getContents().get(0) + require(null != ressourceMeta) + require(!ressourceMeta.getContents.isEmpty) + resourceSet.getPackageRegistry().put("https://www.transformation-tool-contest.eu/2019/tt", packageMeta); + val ressourceModel = resourceSet.getResource(URI.createURI(pathInstance), true); + return ressourceModel.getContents().get(0) + } + + def createTTInstance(obj: EObject, creator: ICreationTT): Unit = { + createObj(obj, creator) + obj.eAllContents().asScala.foreach(o => { + createObj(o, creator) + }) + createRef(obj, creator) + obj.eAllContents().asScala.foreach(o => { + createRef(o, creator) + }) + } + + private def createObj(obj: EObject, creator: ICreationTT): Unit = { + var objName = obj.eClass.getName + var locatedString: String = null + var locatedElement = obj.eGet(obj.eClass().getEStructuralFeature("location")) + if (locatedElement != null) { + locatedString = locatedElement.toString() + } + objName match { + case "InputPort" => creator.createInputPort(obj.eGet(obj.eClass().getEStructuralFeature("name")).toString(), locatedString, obj) + case "OutputPort" => creator.createOutputPort(obj.eGet(obj.eClass().getEStructuralFeature("name")).toString(), locatedString, obj) + case "TruthTable" => creator.createTruthTable(obj.eGet(obj.eClass().getEStructuralFeature("name")).toString(), locatedString, obj) + case "Row" => creator.createRow(locatedString, obj) + case "Cell" => creator.createCell(obj.eGet(obj.eClass().getEStructuralFeature("value")).asInstanceOf[Boolean], locatedString, obj) + case "LocatedElement" => creator.createLocatedElement(locatedString, obj) + case _ => + } + } + + private def createRef(o1: EObject, creator: ICreationTT): Unit = { + o1.eClass().getEAllReferences.forEach(sf => { + val sfName = sf.getName + if (sfName == "owner" || sfName == "port") { + val o2 = o1.eGet(sf).asInstanceOf[EObject] + val o1Name = o1.eClass().getName + val o2Name = o2.eClass().getName + if (o1Name.contains("Row") && sfName == "owner" && o2Name.contains("TruthTable")) { + creator.createTruthTableRowsRow(o2, o1) + } + if (o1Name.contains("Port") && sfName == "owner" && o2Name.contains("TruthTable")) { + creator.createTruthTablePortsPort(o2, o1) + } + if (o1Name.contains("Cell") && sfName == "owner" && o2Name.contains("Row")) { + creator.createRowCellsCell(o2, o1) + } + if (o1Name.contains("Cell") && sfName == "port" && o2Name.contains("Port")) { + creator.createCellPortPort(o1, o2) + } + } + }) + } + + override def toString(): String = { + "LoaderTT:" + } + +} + + + + \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/SynchronizationCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/ConsistencyManagement.scala similarity index 70% rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/core/SynchronizationCompartment.scala rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/core/ConsistencyManagement.scala index bd5886a849df8b2eb41a3a3e1842b13ac7d024b3..ee95fcf55561c2d283e47ce22986ea96045cf829 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/SynchronizationCompartment.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/ConsistencyManagement.scala @@ -9,19 +9,19 @@ import org.rosi_project.model_management.sync._ import org.rosi_project.model_management.sync.roles._ import org.rosi_project.model_management.sync.compartments._ -object SynchronizationCompartment extends ISynchronizationCompartment { +object ConsistencyManagement extends ISynchronizationCompartment { - def createRoleManager(): IRoleManager = new RoleManager() + def createRoleManager(): ISyncManagerRole = new SyncManager() private var activeConstructionCompartment: IConstructionCompartment = null //object private var activeDestructionCompartment: IDestructionCompartment = null //object - private var activeSyncCompartmentInstances = Set.empty[ISyncCompartment] //classes - private var activeExtensionCompartments = Set.empty[IExtenstionCompartment] //objects + private var activeModificationCompartmentInstances = Set.empty[IModificationCompartment] //classes + private var activeExtensionCompartments = Set.empty[IExtensionCompartment] //objects - private var availableExtensionCompartments: List[IExtenstionCompartment] = List[IExtenstionCompartment]() + private var availableExtensionCompartments: List[IExtensionCompartment] = List[IExtensionCompartment]() private var availableConstructionCompartments: List[IConstructionCompartment] = List[IConstructionCompartment]() private var availableDestructionCompartments: List[IDestructionCompartment] = List[IDestructionCompartment]() - private var availableSyncCompartments: List[ISyncCompartment] = List[ISyncCompartment]() + private var availableModificationCompartments: List[IModificationCompartment] = List[IModificationCompartment]() changeConstructionRule(SuppressingConstructionCompartment) changeDestructionRule(GeneralDestructor) @@ -30,17 +30,17 @@ object SynchronizationCompartment extends ISynchronizationCompartment { def getDestructionRule(): IDestructionCompartment = activeDestructionCompartment - def getSyncRules(): Set[ISyncCompartment] = activeSyncCompartmentInstances + def getModificationRules(): Set[IModificationCompartment] = activeModificationCompartmentInstances - def getExtensions(): Set[IExtenstionCompartment] = activeExtensionCompartments + def getExtensions(): Set[IExtensionCompartment] = activeExtensionCompartments def getAvailableConstructionRule(): List[IConstructionCompartment] = availableConstructionCompartments def getAvailableDestructionRule(): List[IDestructionCompartment] = availableDestructionCompartments - def getAvailableSyncRules(): List[ISyncCompartment] = availableSyncCompartments + def getAvailableModificationRules(): List[IModificationCompartment] = availableModificationCompartments - def getAvailableExtensions(): List[IExtenstionCompartment] = availableExtensionCompartments + def getAvailableExtensions(): List[IExtensionCompartment] = availableExtensionCompartments /** * Method for Debug Output. @@ -61,9 +61,9 @@ object SynchronizationCompartment extends ISynchronizationCompartment { println("") val nodes = this.allPlayers nodes.foreach { - case n: ISyncRole => - val role: ISyncRole = n.asInstanceOf[ISyncRole] - val compart: ISyncCompartment = role.getOuterCompartment + case n: IModificationRole => + val role: IModificationRole = n.asInstanceOf[IModificationRole] + val compart: IModificationCompartment = role.getOuterCompartment println("Output N: " + n + " Player: " + n.player + " Comp: " + compart + " RN: " + compart.getRuleName) case _ => } @@ -84,7 +84,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment { println("") } - def registerConstructionCompartment(compartment: IConstructionCompartment): Unit = { + def registerConstructionRule(compartment: IConstructionCompartment): Unit = { if (compartment == null) return if (!availableConstructionCompartments.contains(compartment)) { @@ -93,7 +93,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment { } } - def registerDestructionCompartment(compartment: IDestructionCompartment): Unit = { + def registerDestructionRule(compartment: IDestructionCompartment): Unit = { if (compartment == null) return if (!availableDestructionCompartments.contains(compartment)) { @@ -102,15 +102,15 @@ object SynchronizationCompartment extends ISynchronizationCompartment { } } - def registerSyncRule(compartment: ISyncCompartment): Unit = { + def registerModificationRule(compartment: IModificationCompartment): Unit = { if (compartment == null) return - if (!availableSyncCompartments.contains(compartment)) { - availableSyncCompartments = availableSyncCompartments :+ compartment + if (!availableModificationCompartments.contains(compartment)) { + availableModificationCompartments = availableModificationCompartments :+ compartment } } - def registerExtensionCompartment(compartment: IExtenstionCompartment): Unit = { + def registerExtension(compartment: IExtensionCompartment): Unit = { if (compartment == null) return if (!availableExtensionCompartments.contains(compartment)) { @@ -119,14 +119,14 @@ object SynchronizationCompartment extends ISynchronizationCompartment { } } - def activateExtensionCompartment(compartment: IExtenstionCompartment): Unit = { + def activateExtension(compartment: IExtensionCompartment): Unit = { if (compartment == null) return activeExtensionCompartments += compartment - registerExtensionCompartment(compartment) + registerExtension(compartment) } - def deactivateExtensionCompartment(compartment: IExtenstionCompartment): Unit = { + def deactivateExtension(compartment: IExtensionCompartment): Unit = { if (compartment == null) return activeExtensionCompartments -= compartment @@ -140,7 +140,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment { return } activeConstructionCompartment = construct - registerConstructionCompartment(construct) + registerConstructionRule(construct) } /** @@ -153,21 +153,21 @@ object SynchronizationCompartment extends ISynchronizationCompartment { } if (activeDestructionCompartment == null) { activeDestructionCompartment = destruct - registerDestructionCompartment(destruct) + registerDestructionRule(destruct) return } //debugCompleteRoleGraphOutput() var nodes = this.allPlayers; //get all nodes //delete all destruction roles nodes.foreach { n => - if (n.isInstanceOf[IDestructor]) + if (n.isInstanceOf[IDestructionRole]) n.remove() } //debugCompleteRoleGraphOutput() //add all new ones nodes = this.allPlayers nodes.foreach { - case n: IRoleManager => + case n: ISyncManagerRole => //add new role here val player = n.player if (player.isRight) { @@ -180,23 +180,23 @@ object SynchronizationCompartment extends ISynchronizationCompartment { //debugCompleteRoleGraphOutput() activeDestructionCompartment = destruct - registerDestructionCompartment(destruct) + registerDestructionRule(destruct) } /** - * Integration of a new Model with an integration compartment. + * Transformation of a new Model with an transformation compartment. */ - def integrateNewModel(integrationRule: IIntegrationCompartment): Unit = { - this combine integrationRule + def transformModel(transformationRule: ITransformationCompartment): Unit = { + this combine transformationRule val nodes = this.allPlayers nodes.foreach { case player: PlayerSync => - val role = integrationRule.getIntegratorForClassName(player) + val role = transformationRule.getTransformation(player) //println("RM: " + n + " Role: " + role) if (role != null) { player play role underConstruction = true; - (+player).integrate(player) + (+player).transform(player) underConstruction = false; role.remove() } @@ -204,33 +204,33 @@ object SynchronizationCompartment extends ISynchronizationCompartment { } nodes.foreach { case player: PlayerSync => - val role = integrationRule.getRelationalIntegratorsForClassName(player) + val role = transformationRule.getRelationTransformation(player) //println("RM: " + n + " Role: " + role) if (role != null) { player play role underConstruction = true; - (+player).integrate(player) + (+player).transform(player) underConstruction = false; role.remove() } case _ => } - integrationRule.finalEditFunction() + transformationRule.finishFunction() } /** * Add a new synchronization rule to the synchronization process. */ - def addSynchronizationRule(newRule: ISyncCompartment): Unit = { + def addModificationRule(newRule: IModificationCompartment): Unit = { if (newRule == null) { return } //if the rule is in the list stop - activeSyncCompartmentInstances.foreach { s => + activeModificationCompartmentInstances.foreach { s => if (s.getRuleName == newRule.getRuleName) return } - activeSyncCompartmentInstances += newRule + activeModificationCompartmentInstances += newRule var running = true var nodes = Seq[AnyRef]() @@ -240,7 +240,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment { running = false nodes = this.allPlayers; //get all nodes nodes.foreach { - case n: RoleManager => + case n: ISyncManagerRole => //proof if the role manager does not play this rule var proof = true val player = n.player @@ -249,8 +249,8 @@ object SynchronizationCompartment extends ISynchronizationCompartment { val relatedRoles = n.roles() //println(realPlayer + "-----" + relatedRoles) relatedRoles.foreach { - case syncRole: ISyncRole => - val syncComp: ISyncCompartment = syncRole.getOuterCompartment + case syncRole: IModificationRole => + val syncComp: IModificationCompartment = syncRole.getOuterCompartment if (syncComp.getRuleName == newRule.getRuleName || !newRule.isFirstIntegration(realPlayer)) proof = false case _ => @@ -260,7 +260,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment { if (proof) { //add new role to the player //the new compartment - val newComp: ISyncCompartment = newRule.getNewInstance + val newComp: IModificationCompartment = newRule.getNewInstance val newRole = newComp.getNextIntegrationRole(realPlayer) //println("**" + newComp + " " + newRole + " " + n + " " + realPlayer) if (newRole != null) @@ -293,25 +293,25 @@ object SynchronizationCompartment extends ISynchronizationCompartment { } } - registerSyncRule(newRule) + registerModificationRule(newRule) //debugPlayerRolesOutput() //debugSyncRoleGraphOutput() } - def hasSynchronizationRule(ruleName: String): Boolean = { - activeSyncCompartmentInstances.map(_.getRuleName).contains(ruleName) + def hasModificationRule(ruleName: String): Boolean = { + activeModificationCompartmentInstances.map(_.getRuleName).contains(ruleName) } /** * Delete all rules with this name. */ - def deleteRule(ruleName: String): Unit = { + def deleteModificationRule(ruleName: String): Unit = { val nodes = this.allPlayers //get all nodes nodes.foreach { - case n: ISyncRole => - val role: ISyncRole = n.asInstanceOf[ISyncRole] - val compart: ISyncCompartment = role.getOuterCompartment - //println("Destruct1: " + n.isInstanceOf[ISyncRole] + " N: " + n + " Player: " + n.player + " Comp: " + compart + " RN: " + compart.getRuleName() + " From: " + from) + case n: IModificationRole => + val role: IModificationRole = n.asInstanceOf[IModificationRole] + val compart: IModificationCompartment = role.getOuterCompartment + //println("Destruct1: " + n.isInstanceOf[IModificationRole] + " N: " + n + " Player: " + n.player + " Comp: " + compart + " RN: " + compart.getRuleName() + " From: " + from) if (compart.getRuleName == ruleName) { compart.clearSyncer() n.remove() @@ -322,9 +322,9 @@ object SynchronizationCompartment extends ISynchronizationCompartment { // rule names should be unique (in theory) // but we're better save than sorry - val ruleCompartments = activeSyncCompartmentInstances.filter(_.getRuleName == ruleName) + val ruleCompartments = activeModificationCompartmentInstances.filter(_.getRuleName == ruleName) for (comp <- ruleCompartments) { - activeSyncCompartmentInstances -= comp + activeModificationCompartmentInstances -= comp } //debugCompleteRoleGraphOutput() @@ -333,7 +333,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment { /** * Change rule with this name to new rule. */ - def changeRuleFromTo(from: String, to: ISyncCompartment): Unit = { + def changeModificationRule(from: String, to: IModificationCompartment): Unit = { var running = true var nodes = Seq[AnyRef]() while (running) { @@ -341,16 +341,16 @@ object SynchronizationCompartment extends ISynchronizationCompartment { running = false nodes = this.allPlayers //get all nodes nodes.foreach { - case role: ISyncRole => - val compart: ISyncCompartment = role.getOuterCompartment - //println("Destruct1: " + n.isInstanceOf[ISyncRole] + " N: " + n + " Player: " + n.player + " Comp: " + compart + " RN: " + compart.getRuleName() + " From: " + from) + case role: IModificationRole => + val compart: IModificationCompartment = role.getOuterCompartment + //println("Destruct1: " + n.isInstanceOf[IModificationRole] + " N: " + n + " Player: " + n.player + " Comp: " + compart + " RN: " + compart.getRuleName() + " From: " + from) if (compart.getRuleName == from) { //exchange this with a new compartment - val newComp: ISyncCompartment = to.getNewInstance + val newComp: IModificationCompartment = to.getNewInstance compart.getSyncer.foreach { r => val manager = (+r).getManager() if (manager.isRight) { - val realManager: RoleManager = manager.right.get(0).right.get + val realManager: ISyncManagerRole = manager.right.get(0).right.get val player = r.player if (player.isRight) { val realPlayer = player.right.get @@ -375,19 +375,19 @@ object SynchronizationCompartment extends ISynchronizationCompartment { // rule names should be unique (in theory) // but we're better save than sorry - val oldRuleCompartments = activeSyncCompartmentInstances.filter(_.getRuleName == from) + val oldRuleCompartments = activeModificationCompartmentInstances.filter(_.getRuleName == from) for (comp <- oldRuleCompartments) { - activeSyncCompartmentInstances -= comp + activeModificationCompartmentInstances -= comp } - activeSyncCompartmentInstances += to + activeModificationCompartmentInstances += to - registerSyncRule(to) + registerModificationRule(to) //debugSyncRoleGraphOutput() } - class RoleManager() extends IRoleManager { + class SyncManager() extends ISyncManagerRole { - def getRelatedClassFromName(name: String): PlayerSync = { + def getRelatedObject(name: String): PlayerSync = { getRelatedManager.foreach(rm => { val realPlayer = rm.player.right.get //TODO: look on more superclasses @@ -452,7 +452,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment { } /** - * Create a relation between two IRoleManager and RoleManager of other PlayerSync instances. + * Create a relation between two ISyncManagerRole and RoleManager of other PlayerSync instances. */ def makePlayerSyncRelated(playerSync: PlayerSync): Unit = { +playerSync makeRelated (this) diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/PlayerSync.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/PlayerSync.scala index 2f0cbbef6e916ef942ea7cea173d42973f396013..e9119dd3cb43bcbc2ddfe251f01c68481291e80d 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/PlayerSync.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/PlayerSync.scala @@ -12,12 +12,12 @@ trait PlayerSync extends MultiCompartment { def buildClass(): Unit = { //println("Create New Class") - if (!SynchronizationCompartment.isUnderConstruction()) { - SynchronizationCompartment combine this - val mani = SynchronizationCompartment.createRoleManager() + if (!ConsistencyManagement.isUnderConstruction()) { + ConsistencyManagement combine this + val mani = ConsistencyManagement.createRoleManager() this play mani mani.manage(this) - //this play SynchronizationCompartment.createRoleManager() + //this play ConsistencyManagement.createRoleManager() //+this manage this } } diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/RsumCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/RsumManagement.scala similarity index 89% rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/core/RsumCompartment.scala rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/core/RsumManagement.scala index b0835796ce78a1fa3e968481793b6fc52ac93c18..a62ae3dd0dc3aad335969647328a2ac733e1961a 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/RsumCompartment.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/core/RsumManagement.scala @@ -7,7 +7,7 @@ import org.rosi_project.model_management.sum.roles._ import org.rosi_project.model_management.sum.join._ import org.rosi_project.model_management.sum.compartments.IRelationCompartment -object RsumCompartment extends MultiCompartment { +object RsumManagement extends MultiCompartment { //all active extensions private var activeExtensions = ListBuffer[IExtensionCompartment]() @@ -34,8 +34,8 @@ object RsumCompartment extends MultiCompartment { } joinInfos += joinInfo - val bases = RsumCompartment.getNaturals().filter(joinInfo.isInstanceBaseModel(_)) - val others = RsumCompartment.getNaturals().filter(joinInfo.isInstanceOtherModel(_)) + val bases = getNaturals().filter(joinInfo.isInstanceBaseModel(_)) + val others = getNaturals().filter(joinInfo.isInstanceOtherModel(_)) //b can only match with one o TODO: uses last one if more than one matches //TODO: also iterate over joins to allow deep joins bases.foreach(b => { @@ -83,8 +83,8 @@ object RsumCompartment extends MultiCompartment { def addViewTypeInfo(view: IViewTypeInfo): IViewTypeInfo = { //look if there is a view with this name - viewInfos.filter(_.getViewName() == view.getViewName()).foreach(v => { - println("View with name " + v.getViewName() + " is already known!") + viewInfos.filter(_.getViewName == view.getViewName).foreach(v => { + println("View with name " + v.getViewName + " is already known!") return v }) viewInfos = viewInfos :+ view @@ -94,7 +94,7 @@ object RsumCompartment extends MultiCompartment { def createActiveViewFromName(name: String): IViewCompartment = { //look if there is a view with this name - viewInfos.filter(_.getViewName() == name).foreach( + viewInfos.filter(_.getViewName == name).foreach( v => return this.createView(v)) println("View with name %s is not known!", name) return null @@ -118,7 +118,7 @@ object RsumCompartment extends MultiCompartment { private[model_management] def addActiveView(view: IViewCompartment): IViewCompartment = { //look if the view is registered - if (viewInfos.filter(_.getViewName() == view.getViewName()).isEmpty) { + if (viewInfos.filter(_.getViewName == view.getViewName()).isEmpty) { return null } //look if their exists a view with the same name @@ -178,17 +178,17 @@ object RsumCompartment extends MultiCompartment { var newJoin: IJoinCompartment = null if (joinInfo.isInstanceBaseModel(obj)) { //can be a new base instance, should not be possible that is is connect with one that is already connected - RsumCompartment.getNaturals().filter(n => joinInfo.isInstanceOtherModel(n) && joinInfo.matchTwoObjects(obj, n) && !joinInfo.containsObject(n)).foreach(other = _) + getNaturals().filter(n => joinInfo.isInstanceOtherModel(n) && joinInfo.matchTwoObjects(obj, n) && !joinInfo.containsObject(n)).foreach(other = _) if (other != null || joinInfo.getJoinType() == RsumJoinType.outer) { newJoin = joinInfo.getNewInstance(obj, other) } } else { if (joinInfo.getJoinType() == RsumJoinType.outer) { //search alle join instances from this join for a base model without connection that mathes to this obj - RsumCompartment.getJoins().filter(j => j.hasEmptyOther() && j.getJoinInfo().isInstanceOtherModel(obj) && j.getJoinInfo().matchTwoObjects(j.baseObj, obj)).foreach(_.addOther(obj)) + getJoins().filter(j => j.hasEmptyOther() && j.getJoinInfo().isInstanceOtherModel(obj) && j.getJoinInfo().matchTwoObjects(j.baseObj, obj)).foreach(_.addOther(obj)) } else { //if its no outer join search for all naturals if one match that is currently not in the join - RsumCompartment.getNaturals().filter(n => joinInfo.isInstanceBaseModel(n) && joinInfo.matchTwoObjects(n, obj) && !joinInfo.containsObject(n)).foreach(other = _) + getNaturals().filter(n => joinInfo.isInstanceBaseModel(n) && joinInfo.matchTwoObjects(n, obj) && !joinInfo.containsObject(n)).foreach(other = _) if (other != null) { newJoin = joinInfo.getNewInstance(other, obj) } @@ -213,7 +213,7 @@ object RsumCompartment extends MultiCompartment { incommingPlayer match { case r: IRelationCompartment => r.initialize() - RsumCompartment.this combine r + RsumManagement.this combine r //add to list with relations relations = relations :+ r case j: IJoinCompartment => @@ -237,7 +237,6 @@ object RsumCompartment extends MultiCompartment { val playerObj = this.player.right.get ModelElementLists.removeElement(playerObj) - val roles = playerObj.roles() //iterate over all roles and call remove methods //remove methods from the rule also remove the role from the graph diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IExtensionCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IExtensionCompartment.scala index 99197114e85985096c8f054bad5b0703cd56ecb0..f844540866c10411db0512102c22c8d6c00766d9 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IExtensionCompartment.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IExtensionCompartment.scala @@ -3,7 +3,7 @@ package org.rosi_project.model_management.sum import scroll.internal.Compartment import scala.collection.mutable.ListBuffer import org.rosi_project.model_management.sum.roles.IExtensionRole -import org.rosi_project.model_management.core.RsumCompartment +import org.rosi_project.model_management.core.RsumManagement trait IExtensionCompartment extends Compartment { @@ -29,7 +29,7 @@ trait IExtensionCompartment extends Compartment { * Get a new extension role for the object. Adds automatically the play relation. */ private[model_management] def getExtensionRole(classname: Object) : IExtensionRole = { - if (!RsumCompartment.isActiveExtension(this)) { + if (!RsumManagement.isActiveExtension(this)) { return null } diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewCompartment.scala index 84c3746c1cefa1ba6cf7468338ecca4f5f26a21e..6c7104f3d40a5d41508f171257347f391f9a60ad 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewCompartment.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewCompartment.scala @@ -3,8 +3,8 @@ package org.rosi_project.model_management.sum import scroll.internal.Compartment import scala.collection.mutable.ListBuffer import scala.collection.mutable.Set -import org.rosi_project.model_management.core.RsumCompartment -import org.rosi_project.model_management.core.RsumCompartment.RsumManager +import org.rosi_project.model_management.core.RsumManagement +import org.rosi_project.model_management.core.RsumManagement.RsumManager import org.rosi_project.model_management.sum.compartments.IRelationCompartment import org.rosi_project.model_management.sum.roles.IViewRole import org.rosi_project.model_management.sum.join.IJoinCompartment @@ -30,6 +30,10 @@ trait IViewCompartment extends Compartment { }) result } + + def getPlayerFromViewRole(viewRole: Object) = { + viewRole.player.right.get + } /** * Get all elements with the specific simple name. @@ -61,7 +65,7 @@ trait IViewCompartment extends Compartment { * Get a new view role for the object. Adds automatically the play relation. */ private[model_management] def getViewRole(classname: Object): IViewRole = { - if (!RsumCompartment.isActiveView(this)) { + if (!RsumManagement.isActiveView(this)) { return null } @@ -150,7 +154,10 @@ trait IViewCompartment extends Compartment { def containsRole(role: AViewRole): Boolean = naturalRoles.contains(role) - def getViewName(): String + /** + * Return on default the simple name of the class. + */ + def getViewName(): String = this.getClass.getSimpleName private[model_management] def deleteAllRoles(): Unit = { naturalRoles.foreach { r => @@ -170,7 +177,7 @@ trait IViewCompartment extends Compartment { private def initElement(element: Object, relational: Boolean, role: AViewRole): Unit = { //proof if the actual view is in - if (!RsumCompartment.isActiveView(this)) { + if (!RsumManagement.isActiveView(this)) { return } if (relational) @@ -187,7 +194,7 @@ trait IViewCompartment extends Compartment { } } - private def isActive(): Boolean = RsumCompartment.isActiveView(this) + private def isActive(): Boolean = RsumManagement.isActiveView(this) abstract class AViewRole extends IViewRole { diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewTypeInfo.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewTypeInfo.scala index 0539b46c189c20bbd4f9c112c3a37c989b87f2d3..699d73b0566c709ca4dde8e1b4e95a39ec7189ec 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewTypeInfo.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/IViewTypeInfo.scala @@ -1,17 +1,20 @@ package org.rosi_project.model_management.sum import org.rosi_project.model_management.sum.join.IJoinInfo -import org.rosi_project.model_management.core.RsumCompartment +import org.rosi_project.model_management.core.RsumManagement trait IViewTypeInfo { - def getViewName(): String + /** + * Return on default the simple name of the class. + */ + def getViewName: String = this.getClass.getSimpleName protected def getNewViewTypeInstance(): IViewCompartment = { - RsumCompartment.addViewTypeInfo(this) - var view = RsumCompartment.getActiveViewFromName(this.getViewName()) + RsumManagement.addViewTypeInfo(this) + var view = RsumManagement.getActiveViewFromName(this.getViewName) if (view == null) { - return RsumCompartment.addActiveView(this.getNewInstance()) + return RsumManagement.addActiveView(this.getNewInstance()) } else { return view diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/compartments/IRelationCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/compartments/IRelationCompartment.scala index 4af7d9cf596504156178eeac736c6f807fedfee2..4151412bdd0ef8f16701c88adcddfc1f33a46f31 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/compartments/IRelationCompartment.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/compartments/IRelationCompartment.scala @@ -16,6 +16,10 @@ trait IRelationCompartment extends PlayerSync { def getSource(): ISource = source + def getSourceIns(): Object + + def getTargetIns(): Object + def initialize(): Unit = { if (source == null && target == null) internalInitialize() diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/join/IJoinCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/join/IJoinCompartment.scala index 821db0aeb63427ebdd662bd6f13f56958eaad7cf..f80d4e00edfb5f0ecba8ac6db7698460da71d648 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/join/IJoinCompartment.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/join/IJoinCompartment.scala @@ -2,8 +2,8 @@ package org.rosi_project.model_management.sum.join import scroll.internal.Compartment import org.rosi_project.model_management.sum.roles.IRsumRole -import org.rosi_project.model_management.core.RsumCompartment.RsumManager -import org.rosi_project.model_management.core.RsumCompartment +import org.rosi_project.model_management.core.RsumManagement.RsumManager +import org.rosi_project.model_management.core.RsumManagement trait IJoinCompartment extends Compartment { var baseObj: Object = null @@ -83,22 +83,22 @@ trait IJoinCompartment extends Compartment { } protected def initialize(base: Object, other: Object): Unit = { - RsumCompartment.combine(this) + RsumManagement.combine(this) var rsumManager: RsumManager = null if (base != null) { getJoinInfo.addObject(base) baseObj = base + base play baseRole rsumManager = new RsumManager() base play rsumManager - base play baseRole rsumManager.manageRsum(base) } if (other != null) { getJoinInfo.addObject(other) otherObj = other + other play otherRole rsumManager = new RsumManager() other play rsumManager - other play otherRole rsumManager.manageRsum(other) } } diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/AQuery.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/AQuery.scala deleted file mode 100644 index 580fbbb9f9bf46c8a316dcc33b58ed47601819a1..0000000000000000000000000000000000000000 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/AQuery.scala +++ /dev/null @@ -1,97 +0,0 @@ -package org.rosi_project.model_management.sum.query - -import scroll.internal.Compartment - -/** - * Describes the abstract query compartment with the roles that each query must implement. - */ -abstract class AQuery(val name: String) extends Compartment { - - def deleteQueryResults(): Unit - def deleteQueryObjects(): Unit - - /** - * Add a query role to the underlying object. - */ - def addQueryRole(obj: Object): AQuery#QueryObject - - /** - * Remove a query role from the query. - */ - def removeQueryRole(role: AQuery#QueryObject): Unit - - /** - * Proof if the query has a correct form. - * Not more than one connection island. - */ - def isQueryCorrect(): Boolean - - /** - * Running the query and getting a set of sets of result objects. - */ - def runQuery(): Set[Set[Object]] - - /** - * Abstract query object to create the query from example. - */ - abstract class QueryObject() { - - /** - * Label to identify a query object. - */ - var label: String = "" - - /** - * Describes is necessary to be in the results or to be not. - */ - var negated: Boolean = false - - /** - * Important to describe if a transitive closure should be created. - */ - var transitive: Boolean = false - - /** - * Describes how often a connection must exists. - */ - var multi: Int = 1 - - /** - * Describes if the elements should be returned in the results or not. - */ - var returned: Boolean = true - - private var attributeFilters: Set[AttributeFilter] = Set.empty - - /** - * Create and add an attribute filter object to a query object. - */ - def addAttributeFilter(attributeName: String, value: String, bigger: CheckingOption.Value): Boolean = { - if (attributeName == null || attributeName == "" || - bigger == null || value == null || value == "") { - return false - } - attributeFilters += new AttributeFilter(attributeName, value, bigger) - return true - } - - def getAttributeFilters(): Set[AttributeFilter] = attributeFilters - - def overallConnectionUnit(): Int - - override def toString(): String = "QO: " + label - } - - /** - * Abstract query results that each element which matches the query gets. - */ - abstract class QueryResult(val matchedQueryObject: QueryObject) { - - override def toString(): String = "QR: (" + this.player.right.get.toString() + " " + matchedQueryObject + ")" - } - - /** - * Should collect information about the attributes a query element must have - */ - class AttributeFilter(val attributeName: String, val value: String, val checking: CheckingOption.Value) {} -} \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/CheckingOption.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/CheckingOption.scala deleted file mode 100644 index 9d6ceffdbde34775bfb192b2607c44e582d23b77..0000000000000000000000000000000000000000 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/CheckingOption.scala +++ /dev/null @@ -1,5 +0,0 @@ -package org.rosi_project.model_management.sum.query - -object CheckingOption extends Enumeration { - val equalsCheck, biggerThan, smallerThan = Value -} \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/IQueryViewCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/IQueryViewCompartment.scala deleted file mode 100644 index 462693e2d5ad7b0d5cfb71ac15647523fed0130c..0000000000000000000000000000000000000000 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/IQueryViewCompartment.scala +++ /dev/null @@ -1,138 +0,0 @@ -package org.rosi_project.model_management.sum.query - -import scroll.internal.Compartment -import scala.collection.mutable.ListBuffer -import scala.collection.mutable.Set -import org.rosi_project.model_management.core.RsumCompartment -import org.rosi_project.model_management.sum.compartments.IRelationCompartment - -trait IQueryViewCompartment extends Compartment { - - private var name: String = "" - private var query: Query = null - - RsumCompartment.combine(this) - - protected def init(n: String): Unit = { - name = n - query = new Query(n) - } - - private var naturalRoles = Set[AQueryViewRole]() - private var relationalRoles = Set[AQueryViewRole]() - - def getName(): String = name - - def getQuery(): Query = query - - /** - * Get a map with the simple names of all elements - * and the connected elements in the view. - */ - def getMapOfElements(): Map[String, Set[AQueryViewRole]] = { - var result: Map[String, Set[AQueryViewRole]] = Map.empty - naturalRoles.foreach(n => { - if (result.contains(n.getClass.getSimpleName)) { - result(n.getClass.getSimpleName) += n - } else { - result = result + (n.getClass.getSimpleName -> Set(n)) - } - }) - result - } - - /** - * Get all elements with the specific simple name. - */ - def getElementsWithClassName(s: String): Set[AQueryViewRole] = { - var result: Set[AQueryViewRole] = Set.empty - naturalRoles.foreach(n => { - if (n.getClass.getSimpleName == s) { - result += n - } - }) - result - } - - /** - * Get all elements with the same type from the view. - */ - def getElementsWithExample[A <: AQueryViewRole](a: A): Set[A] = { - var result: Set[A] = Set.empty - naturalRoles.foreach(n => { - if (n.getClass.getName == a.getClass.getName) { - result += n.asInstanceOf[A] - } - }) - result - } - - protected def getRoleFromList(classname: Object): AQueryViewRole = { - relationalRoles.foreach { r => - if (+r == +classname) { - return r - } - } - naturalRoles.foreach { r => - if (+r == +classname) { - return r - } - } - return null - } - - def printViewRoles(): Unit = { - println("-------------------------------------------------------------------") - println("QueryView: " + name + " #Roles: " + naturalRoles.size) - naturalRoles.foreach { r => - var player = r.player.right.get - var playerRoles = player.roles() - println("* Player: " + player + " - Role: " + r + " - Size: " + playerRoles.size) - } - relationalRoles.foreach { r => - var player = r.player.right.get - var playerRoles = player.roles() - println("# Player: " + player + " - Role: " + r + " - Size: " + playerRoles.size) - } - println("-------------------------------------------------------------------") - } - - def getAllViewElements(): Set[AQueryViewRole] = naturalRoles - - def containsRole(role: AQueryViewRole): Boolean = naturalRoles.contains(role) - - abstract class AQueryViewRole { - - protected var connected: AQuery#QueryObject = null - - initializeElement() - - protected def isRelational(): Boolean - - protected def getCreationObject(): Object - - def getQueryObject: AQuery#QueryObject = connected - - private def initializeElement(): Unit = { - val obj = getCreationObject - if (isRelational) { - relationalRoles += this - val rel = obj.asInstanceOf[IRelationCompartment] - RsumCompartment.combine(rel) - rel.internalInitialize() - } else { - naturalRoles += this - } - connected = query.addQueryRole(obj) - obj play this - } - - protected def deleteElement(): Unit = { - if (isRelational) { - +this deleteCompartment() - } - this.remove() - query.removeQueryRole(connected) - } - } -} \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/Query.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/Query.scala deleted file mode 100644 index 060531618e337f28318e49d8477e3573e18596ac..0000000000000000000000000000000000000000 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/Query.scala +++ /dev/null @@ -1,576 +0,0 @@ -package org.rosi_project.model_management.sum.query - -import scroll.internal.Compartment -import org.rosi_project.model_management.core.RsumCompartment -import org.rosi_project.model_management.sum.compartments.IRelationCompartment -import org.rosi_project.model_management.sum.roles.IRelationRole - -/** - * Special query implementation for the query interface that works on the RSUM. - */ -class Query(_name: String) extends AQuery(_name) { - - RsumCompartment.combine(this) - - private var queryRelRoles: Set[QueryRelObject] = Set.empty - private var queryNatRoles: Set[QueryNatObject] = Set.empty - - private var queryRelResults: Set[QueryRelResult] = Set.empty - private var queryNatResults: Set[QueryNatResult] = Set.empty - - private def getQueryNatRole(obj: Object): QueryNatObject = { - //queryNatRoles.filter(+_ == +obj).foreach(return _) - queryNatRoles.foreach(q => { - if (+obj == +q) { - return q - } - }) - return null - } - - private def getQueryRelRole(obj: Object): QueryRelObject = { - //queryRelRoles.filter(+_ == +obj).foreach(return _) - queryRelRoles.foreach(q => { - if (+obj == +q) { - return q - } - }) - return null - } - - private def getNatResultRole(player: Object, queryObject: QueryNatObject): QueryNatResult = { - //queryNatResults.filter(r => r.connectedQueryObject == queryObject && +player == +r).foreach(return _) - queryNatResults.foreach(r => { - if (r.connectedQueryObject == queryObject && +player == +r) { - return r - } - }) - return null - } - - def deleteQueryResults(): Unit = { - queryRelResults.foreach(_.remove()) - queryRelResults = Set.empty - queryNatResults.foreach(_.remove()) - queryNatResults = Set.empty - } - - def deleteQueryObjects(): Unit = { - queryRelRoles.foreach(_.remove()) - queryRelRoles = Set.empty - queryNatRoles.foreach(_.remove()) - queryNatRoles = Set.empty - } - - def isQueryCorrect(): Boolean = { - //check if the query is correct and does not contain more close islands - queryRelRoles.foreach(qo => { - return qo.overallConnectionUnit() == (queryRelRoles.size + queryNatRoles.size) - }) - queryNatRoles.foreach(qo => { - return qo.overallConnectionUnit() == (queryRelRoles.size + queryNatRoles.size) - }) - return true - } - - def removeQueryRole(role: AQuery#QueryObject): Unit = { - if (role.isInstanceOf[QueryNatObject]) { - queryNatRoles -= role.asInstanceOf[QueryNatObject] - } - if (role.isInstanceOf[QueryRelObject]) { - queryRelRoles -= role.asInstanceOf[QueryRelObject] - } - } - - def addQueryRole(obj: Object): AQuery#QueryObject = { - val relResult = getQueryRelRole(obj) - if (relResult != null) return relResult - val natResult = getQueryNatRole(obj) - if (natResult != null) return natResult - //get player - val playerObj = obj.player.getOrElse(obj) - //difference between relation and natural - if (playerObj.isInstanceOf[IRelationCompartment]) { - val refComp = playerObj.asInstanceOf[IRelationCompartment] - this.combine(refComp) - val sourceRole: QueryNatObject = getQueryNatRole(refComp.getSource()) - val targetRole: QueryNatObject = getQueryNatRole(refComp.getTarget()) - if (sourceRole == null || targetRole == null) { - println("--- Error: Relational compartment can only be added if source and target are added before") - return null - } - val newRole = new QueryRelObject(sourceRole, targetRole) - queryRelRoles += newRole - playerObj play newRole - return newRole - } else { - val newRole = new QueryNatObject() - queryNatRoles += newRole - playerObj play newRole - return newRole - } - } - - def runQuery(): Set[Set[Object]] = { - //delete at the end - var forDeletionQueryResults: Set[QueryNatResult] = Set.empty - //immediate values - var deleteNatResults: Set[QueryNatResult] = Set.empty - var doSomething = true - //output value - var result: Set[Set[Object]] = Set.empty - - //###add query results to all elements that can be results because of connection properties - //...iterate over non negated query relations and add result roles if necessary - queryRelRoles.filter(!_.isNegated()).foreach(queryRel => { - val playerQueryRel: IRelationCompartment = queryRel.player.right.get.asInstanceOf[IRelationCompartment] - RsumCompartment.getRelations().foreach(rsumRel => { - if (playerQueryRel.getClass.isInstance(rsumRel)) { - //search if their are existing results if not create new ones - val rsumNatSource: Object = rsumRel.getSource().player.right.get - val rsumNatTarget: Object = rsumRel.getTarget().player.right.get - var queryNatResultSource: QueryNatResult = getNatResultRole(rsumNatSource, queryRel.source) - if (queryNatResultSource == null) { - queryNatResultSource = new QueryNatResult(queryRel.source) - rsumNatSource play queryNatResultSource - queryNatResults += queryNatResultSource - } - var queryNatResultTarget: QueryNatResult = getNatResultRole(rsumNatTarget, queryRel.target) - if (queryNatResultTarget == null) { - queryNatResultTarget = new QueryNatResult(queryRel.target) - rsumNatTarget play queryNatResultTarget - queryNatResults += queryNatResultTarget - } - //connect them in a new relation result - val queryRelResult: QueryRelResult = new QueryRelResult(queryRel, queryNatResultSource, queryNatResultTarget, false) - rsumRel play queryRelResult - queryRelResults += queryRelResult - - //if transitive add new relation to separate list to add them at the end - if (queryRel.isTransitive) { - //set only source new because target must be old one, transitive query means always target same - queryNatResultSource = getNatResultRole(rsumNatSource, queryRel.target) - if (queryNatResultSource == null) { - queryNatResultSource = new QueryNatResult(queryRel.target) - rsumNatSource play queryNatResultSource - queryNatResults += queryNatResultSource - } - val transitiveQueryRelResult: QueryRelResult = new QueryRelResult(queryRel, queryNatResultSource, queryNatResultTarget, true) - rsumRel play transitiveQueryRelResult - queryRelResults += transitiveQueryRelResult - } - } - }) - }) - - //...iterate over negated related roles and search all opposite naturals that do not implement this rel - queryRelRoles.filter(_.isNegated()).foreach(queryRel => { - val playerQueryRel: IRelationCompartment = queryRel.player.right.get.asInstanceOf[IRelationCompartment] - var playerQueryNat: Object = null - if (queryRel.source.negated) { - playerQueryNat = playerQueryRel.getSource.player.right.get - } else { - playerQueryNat = playerQueryRel.getTarget.player.right.get - } - //source or target negated, search for negated class - RsumCompartment.getNaturals().foreach(rsumNat => { - if (playerQueryNat.getClass.isInstance(rsumNat)) - { - var goodElement: Boolean = true; - //filtered roles of the natural type - var roles: Set[IRelationRole] = Set.empty - if (queryRel.source.negated) { - roles = rsumNat.roles().filter(_.isInstanceOf[IRelationCompartment#ITarget]).toSet.asInstanceOf[Set[IRelationRole]] - } else { - roles = rsumNat.roles().filter(_.isInstanceOf[IRelationCompartment#ISource]).toSet.asInstanceOf[Set[IRelationRole]] - } - //if we find a role that works than we can not add this natural to the results - roles.foreach(r => { - val outerRelComp = r.getOuterCompartment() - //println("COMP: " + outerRelComp + " " + playerQueryRel + " " + playerQueryRel.getClass.isInstance(outerRelComp)) - if (playerQueryRel.getClass.isInstance(outerRelComp)) { - //we can not use this element - goodElement = false - } - }) - //if we do not find a compatible element in this natural role we can add it - if (goodElement) { - var queryNatRole: QueryNatObject = null - if (queryRel.source.negated) { - queryNatRole = queryRel.target - } else { - queryNatRole = queryRel.source - } - var queryNatResult: QueryNatResult = getNatResultRole(rsumNat, queryNatRole) - if (queryNatResult == null) { - queryNatResult = new QueryNatResult(queryNatRole) - rsumNat play queryNatResult - queryNatResults += queryNatResult - } - if (queryRel.source.negated) { - queryNatResult.increaseTargetNegated() - } else { - queryNatResult.increaseSourceNegated() - } - } - } - }) - }) - - //...iterate over all query naturals without a connection and add result roles if necessary - queryNatRoles.filter(_.connectionSize == 0).foreach(queryNat => { - //connected one are visited in the part before - val playerQueryNat: Object = queryNat.player.right.get - RsumCompartment.getNaturals().foreach(rsumNat => { - if (playerQueryNat.isInstanceOf[QueryHelper]) { - if (playerQueryNat.equals(rsumNat)) { - var queryNatResult: QueryNatResult = getNatResultRole(rsumNat, queryNat) - if (queryNatResult == null) { - queryNatResult = new QueryNatResult(queryNat) - rsumNat play queryNatResult - queryNatResults += queryNatResult - } - } - } else { - if (playerQueryNat.getClass.isInstance(rsumNat)) { - var queryNatResult: QueryNatResult = getNatResultRole(rsumNat, queryNat) - if (queryNatResult == null) { - queryNatResult = new QueryNatResult(queryNat) - rsumNat play queryNatResult - queryNatResults += queryNatResult - } - } - } - }) - }) - - //###proof correctness of results - //...proof attribute correctness once - queryNatResults.filter(!_.proofAttributes).foreach(deleteNatResults += _) - //delete them - deleteNatResults.foreach(queryResultNat => { - queryNatResults -= queryResultNat - forDeletionQueryResults += queryResultNat - queryResultNat.removeConnections() - }) - - //...proof the correctness of the query results and delete non correct ones - while (doSomething) { - deleteNatResults = Set.empty - //proof the connection correctness - queryNatResults.filter(!_.proofConnections).foreach(deleteNatResults += _) - - //do as long as everything is correct - doSomething = !deleteNatResults.isEmpty - //delete them - deleteNatResults.foreach(queryResultNat => { - queryNatResults -= queryResultNat - forDeletionQueryResults += queryResultNat - queryResultNat.removeConnections() - }) - } - - //###make good outputs from the current query results - //...only correct elements should now play result roles and are in the list - var combinedResult: Set[QueryCombinedResult] = queryRelResults.filter(!_.transitive).map(_.createCombinedResult()) - - //...combine the result elements to good output units - doSomething = true - while (doSomething) { - doSomething = false - combinedResult.foreach(combined => { - queryRelResults.foreach(rel => { - if (rel.source == combined.target && !combined.contains(rel.target)) { - //add in the back - combined.addBack(rel.target) - doSomething = true - } else { - if (rel.target == combined.source && !combined.contains(rel.source)) { - //add in the front - combined.addFront(rel.source) - doSomething = true - } - } - }) - }) - //delete duplicated elements - combinedResult = combinedResult.groupBy(_.getBetween).map(_._2.head).toSet - //combinedResult.distinct - } - - //create only results with tuples - /*queryRelResults.foreach(rel => { - var rSet: Set[Object] = Set.empty - if (rel.source.connectedQueryObject.returned) { - rSet += rel.source.player.right.get - } - if (rel.target.connectedQueryObject.returned) { - rSet += rel.target.player.right.get - } - result += rSet - })*/ - - //...bring the output format to the reals one - combinedResult.foreach(combined => { - var rSet: Set[Object] = Set.empty - combined.getBetween.foreach(queryNat => { - if (queryNat.connectedQueryObject.returned) { - rSet += queryNat.player.right.get - } - }) - result += rSet - }) - - //...add also single results - queryNatResults.foreach(queryResultNat => { - if (!queryResultNat.isConnected() && queryResultNat.connectedQueryObject.returned) { - result += Set(queryResultNat.player.right.get) - } - }) - - //...delete now really all not needed result roles - forDeletionQueryResults.foreach(_.remove()) - - return result - } - - override def toString(): String = name + ": " + isQueryCorrect + " Rs: " + queryNatRoles + " " + queryRelRoles - - /** - * Query object specialized for naturals in the RSUM. - */ - class QueryNatObject() extends QueryObject() { - private var sourceRelations: Set[QueryRelObject] = Set.empty - private var targetRelations: Set[QueryRelObject] = Set.empty - - def addSourceRelation(rel: QueryRelObject): Unit = { - sourceRelations += rel - } - - def removeSourceRelation(rel: QueryRelObject): Unit = { - sourceRelations -= rel - } - - def getSourceRelationsSize(): Int = sourceRelations.filter(!_.isNegated()).map(_.multiTarget).sum //sum up multi value not use size - def getNegatedSourceRelationsSize(): Int = sourceRelations.filter(_.isNegated()).size - - def addTargetRelation(rel: QueryRelObject): Unit = { - targetRelations += rel - } - - def removeTargetRelation(rel: QueryRelObject): Unit = { - targetRelations -= rel - } - - def getTargetRelationsSize(): Int = targetRelations.filter(!_.isNegated()).map(_.multiSource).sum - def getNegatedTargetRelationsSize(): Int = targetRelations.filter(_.isNegated()).size - - def connectionSize(): Int = targetRelations.size + sourceRelations.size - - def overallConnectionUnit(): Int = { - var visitedRel: Set[QueryRelObject] = Set.empty - var visitedNat: Set[QueryNatObject] = Set(this) - var unVisitedRel: Set[QueryRelObject] = targetRelations ++ sourceRelations - var unVisitedNat: Set[QueryNatObject] = Set.empty - while (!unVisitedRel.isEmpty || !unVisitedNat.isEmpty) { - //run over all unvisited relations - unVisitedRel.foreach(rel => { - if (!visitedNat.contains(rel.source)) - unVisitedNat += rel.source - if (!visitedNat.contains(rel.target)) - unVisitedNat += rel.target - }) - visitedRel ++= unVisitedRel - unVisitedRel = Set.empty - //run over all unvisited naturals - unVisitedNat.foreach(nat => { - nat.sourceRelations.filter(!visitedRel.contains(_)).foreach(unVisitedRel += _) - nat.targetRelations.filter(!visitedRel.contains(_)).foreach(unVisitedRel += _) - }) - visitedNat ++= unVisitedNat - unVisitedNat = Set.empty - } - return visitedRel.size + visitedNat.size - } - - override def toString: String = "QON: " + label + " C: " + connectionSize - } - - /** - * Query object specialized for relational compartments in the RSUM. - */ - class QueryRelObject(val source: QueryNatObject, val target: QueryNatObject) extends QueryObject() { - - def isNegated(): Boolean = source.negated || target.negated - def isTransitive(): Boolean = target.transitive - def multiTarget(): Int = target.multi - def multiSource(): Int = source.multi - - source.addSourceRelation(this) - target.addTargetRelation(this) - - def overallConnectionUnit(): Int = source.overallConnectionUnit() - - override def toString: String = "QOR: " + source.label + "-" + target.label - } - - /** - * Query result roles for natural query roles. - */ - class QueryNatResult(val connectedQueryObject: QueryNatObject) extends QueryResult(connectedQueryObject) { - private var sourceRelations: Set[QueryRelResult] = Set.empty - private var targetRelations: Set[QueryRelResult] = Set.empty - - private var negatedSources: Int = 0 - private var negatedTargets: Int = 0 - - def increaseSourceNegated(): Unit = { negatedSources += 1 } - def decreaseSourceNegated(): Unit = { negatedSources -= 1 } - - def increaseTargetNegated(): Unit = { negatedTargets += 1 } - def decreaseTargetNegated(): Unit = { negatedTargets -= 1 } - - /** - * Proof if the player has all the necessary attributes with its values. - */ - def proofAttributes(): Boolean = { - val player: Object = this.player.right.get - var returnValue = true - connectedQueryObject.getAttributeFilters.foreach(a => { - try { - //player.getClass.getMethods.foreach(f => println(f.toString)) - //println(player.getClass.getMethod("name").getReturnType) //getName - val met = player.getClass.getMethod(a.attributeName) - val result: String = met.invoke(player).asInstanceOf[String] - a.checking match { - case CheckingOption.equalsCheck => if (result != a.value) returnValue = false - case CheckingOption.biggerThan => if (result <= a.value) returnValue = false - case CheckingOption.smallerThan => if (result >= a.value) returnValue = false - case _ => - } - } catch { - case _: Throwable => { - println("!!! No attribute with this name!!!") - return false - } - } - }) - return returnValue - } - - /** - * Proof if the number of connections is equals to the related query object. - */ - def proofConnections(): Boolean = { - //TODO: proof also the number of types and not only the numbers - //println("S: " + _connectedQueryObject.getSourceRelationsSize() + " T: " + _connectedQueryObject.getTargetRelationsSize() + " NS: " + _connectedQueryObject.getNegatedSourceRelationsSize() + " NT: " + _connectedQueryObject.getNegatedTargetRelationsSize() + " Con: " + _connectedQueryObject) - //println("S: " + getSourceRelationsSize() + " T: " + getTargetRelationsSize() + " NS: " + negatedSources + " NT: " + negatedTargets + " This: " + this) - if (getSourceRelationsSize >= connectedQueryObject.getSourceRelationsSize() - && getTargetRelationsSize >= connectedQueryObject.getTargetRelationsSize() - && negatedSources >= connectedQueryObject.getNegatedSourceRelationsSize() - && negatedTargets >= connectedQueryObject.getNegatedTargetRelationsSize()) { - return true - } - return false - } - - def addSourceRelation(rel: QueryRelResult): Unit = { - sourceRelations += rel - } - - def removeSourceRelation(rel: QueryRelResult): Unit = { - sourceRelations -= rel - } - - def getSourceRelationsSize(): Int = sourceRelations.size - - def addTargetRelation(rel: QueryRelResult): Unit = { - targetRelations += rel - } - - def removeTargetRelation(rel: QueryRelResult): Unit = { - targetRelations -= rel - } - - def getTargetRelationsSize(): Int = targetRelations.size - - def isConnected(): Boolean = (targetRelations.size + sourceRelations.size) > 0 - - def removeConnections(): Unit = { - sourceRelations.foreach(rel => { - rel.target.removeTargetRelation(rel) - queryRelResults -= rel - rel.remove() - }) - targetRelations.foreach(rel => { - rel.source.removeSourceRelation(rel) - queryRelResults -= rel - rel.remove() - }) - sourceRelations = Set.empty - targetRelations = Set.empty - negatedSources = 0 - negatedTargets = 0 - } - } - - /** - * Query result roles for relation query roles. - */ - class QueryRelResult(val connectedQueryObject: QueryRelObject, val source: QueryNatResult, val target: QueryNatResult, val transitive: Boolean) extends QueryResult(connectedQueryObject) { - //only add this relation to the connect results if it is not transitive - if (!transitive) { - source.addSourceRelation(this) - target.addTargetRelation(this) - } - - /** - * Create a new combined result which is a copy of this one. - */ - def createCombinedResult(): QueryCombinedResult = new QueryCombinedResult(source, target) - } - - /** - * Helper class to connect the results to a chain. - */ - class QueryCombinedResult(var source: QueryNatResult, var target: QueryNatResult) { - - //list of all query results that are connected - private var between: Seq[QueryNatResult] = Seq(source, target) - - def getBetween(): Seq[QueryNatResult] = between - - def addFront(newIn: QueryNatResult): Unit = { - between = newIn +: between - source = newIn - } - - def addBack(newIn: QueryNatResult): Unit = { - between = between :+ newIn - target = newIn - } - - def contains(result: QueryNatResult): Boolean = ( between.contains(result) ) - - private def getSize(): Int = between.size - - protected def canEqual(other: Any): Boolean = other.isInstanceOf[QueryCombinedResult] - - override def equals(other: Any): Boolean = other match { - case that: QueryCombinedResult => { - if (that canEqual this) { - between.foreach(b => { - if (!that.contains(b)) - return false - }) - return that.getSize == this.getSize() - } else { - return false - } - } - case _ => return false - } - - override def toString(): String = "QCR: (" + between + ")" - } -} \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/QueryHelper.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/QueryHelper.scala deleted file mode 100644 index 496be488f8cdb4f49d0f80379621ff42d2a5f11f..0000000000000000000000000000000000000000 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sum/query/QueryHelper.scala +++ /dev/null @@ -1,5 +0,0 @@ -package org.rosi_project.model_management.sum.query - -trait QueryHelper { - -} \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IConstructionCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IConstructionCompartment.scala index 9fd3371b4dd9d92a12b6bf21bd05a8131488757f..83d652ed499a2b2554920f4e10579438c89ac2f2 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IConstructionCompartment.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IConstructionCompartment.scala @@ -4,7 +4,8 @@ import scroll.internal.Compartment import org.rosi_project.model_management.core._ import org.rosi_project.model_management.sync.helper.ConstructionContainer -import org.rosi_project.model_management.sync.roles.IConstructor +import org.rosi_project.model_management.sync.roles.IConstructionRole +import org.rosi_project.model_management.sync.roles.ISyncManagerRole /** * Interface for each construction rule. @@ -14,14 +15,17 @@ trait IConstructionCompartment extends Compartment { /** * Return a role instance that handles the construction process for the object. */ - def getConstructorForClassName(classname: Object): IConstructor + def getConstructorForClassName(classname: Object): IConstructionRole - def getRuleName: String + /** + * Return on default the simple name of the class. + */ + def getRuleName: String = this.getClass.getSimpleName private def addExtensionRoles(containers: Set[ConstructionContainer]): Unit = { containers.foreach { cc => if (cc.isConstructed) { - SynchronizationCompartment.getExtensions().foreach { e => + ConsistencyManagement.getExtensions().foreach { e => var role = e.getExtensionForClassName(cc.getPlayerInstance()) if (role != null) { cc.getManagerInstance() play role @@ -32,7 +36,7 @@ trait IConstructionCompartment extends Compartment { } private def notifyExtensionRoles(containers: Set[ConstructionContainer]): Unit = { - if (!SynchronizationCompartment.getExtensions().isEmpty) { + if (!ConsistencyManagement.getExtensions().isEmpty) { containers.foreach { cc => if (cc.isConstructed) { var playerInstance = cc.getPlayerInstance() @@ -59,7 +63,7 @@ trait IConstructionCompartment extends Compartment { protected def addDeleteRoles(containers: Set[ConstructionContainer]): Unit = { containers.foreach { cc => if (cc.isConstructed) { - cc.getManagerInstance() play SynchronizationCompartment.getDestructionRule().getDestructorForClassName(cc.getPlayerInstance()) + cc.getManagerInstance() play ConsistencyManagement.getDestructionRule().getDestructorForClassName(cc.getPlayerInstance()) } } } @@ -76,12 +80,12 @@ trait IConstructionCompartment extends Compartment { } /** - * Combine the SynchronizationCompartment with all Players from the ConstructionContainers. + * Combine the ConsistencyManagement with all Players from the ConstructionContainers. */ protected def synchronizeCompartments(containers: Set[ConstructionContainer]): Unit = { containers.foreach { cc => if (cc.isConstructed() && !cc.isStartElement()) { - SynchronizationCompartment combine cc.getPlayerInstance + ConsistencyManagement combine cc.getPlayerInstance } } } @@ -90,8 +94,8 @@ trait IConstructionCompartment extends Compartment { * Create the Synchronization mechanisms for the elements in the ConstructionContainers. */ protected def bindSynchronizationRules(containers: Set[ConstructionContainer]): Unit = { - SynchronizationCompartment.getSyncRules().foreach { s => - var sync: ISyncCompartment = null + ConsistencyManagement.getModificationRules().foreach { s => + var sync: IModificationCompartment = null //Proof all container for integration containers.foreach { cc => if (s.isNextIntegration(cc.getPlayerInstance)) { @@ -104,7 +108,7 @@ trait IConstructionCompartment extends Compartment { } } if (sync != null) - SynchronizationCompartment combine sync + ConsistencyManagement combine sync } } @@ -118,6 +122,20 @@ trait IConstructionCompartment extends Compartment { } protected def makeCompleteConstructionProcess(containers: Set[ConstructionContainer]): Unit = { + + containers.foreach { cc => + if (cc.isConstructed && !cc.isStartElement) { + cc.setManagerInstance(ConsistencyManagement.createRoleManager()) + } else { + val manager: ISyncManagerRole = +(cc.getPlayerInstance()) getManager () + if (manager != null) { + cc.setManagerInstance(manager) + } else { + cc.setManagerInstance(ConsistencyManagement.createRoleManager()) + } + } + } + //first synchronize new compartments //var t1 = System.nanoTime() this.synchronizeCompartments(containers) diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IDestructionCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IDestructionCompartment.scala index 4034957981624c1ca7c25538e458ffb2d26cfa97..82b13aa113b2744fd100b8b554b2a56370194406 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IDestructionCompartment.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IDestructionCompartment.scala @@ -1,6 +1,6 @@ package org.rosi_project.model_management.sync -import org.rosi_project.model_management.sync.roles.IDestructor +import org.rosi_project.model_management.sync.roles.IDestructionRole import scroll.internal.Compartment /** @@ -11,8 +11,11 @@ trait IDestructionCompartment extends Compartment { /** * Return a role instance that handles the destruction process for the object. */ - def getDestructorForClassName(classname: Object) : IDestructor + def getDestructorForClassName(classname: Object) : IDestructionRole - def getRuleName: String + /** + * Return on default the simple name of the class. + */ + def getRuleName: String = this.getClass.getSimpleName } diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IExtensionCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IExtensionCompartment.scala new file mode 100644 index 0000000000000000000000000000000000000000..ba94eb59b79f9206ce5f6a0a13b6bdece176c4bf --- /dev/null +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IExtensionCompartment.scala @@ -0,0 +1,20 @@ +package org.rosi_project.model_management.sync + +import org.rosi_project.model_management.sync.roles.IExtensionRole +import scroll.internal.Compartment + +/** + * Interface for each extension rule. + */ +trait IExtensionCompartment extends Compartment { + + /** + * Return a role instance that handles the extension process for the object. + */ + def getExtensionForClassName(classname: Object) : IExtensionRole + + /** + * Return on default the simple name of the class. + */ + def getExtensionName() : String = this.getClass.getSimpleName +} \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IExtenstionCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IExtenstionCompartment.scala deleted file mode 100644 index ffa94fa6e36d2ebf305cf2d9eee928a56d2667b8..0000000000000000000000000000000000000000 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IExtenstionCompartment.scala +++ /dev/null @@ -1,20 +0,0 @@ -package org.rosi_project.model_management.sync - -import org.rosi_project.model_management.sync.roles.IExtension -import scroll.internal.Compartment - -/** - * Interface for each extension rule. - */ -trait IExtenstionCompartment extends Compartment { - - /** - * Return a role instance that handles the extension process for the object. - */ - def getExtensionForClassName(classname: Object) : IExtension - - /** - * Return a unique name that describes this extension. - */ - def getExtensionName() : String -} \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISyncCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IModificationCompartment.scala similarity index 64% rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISyncCompartment.scala rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IModificationCompartment.scala index 4b50e08618dcc668fb9c5f44e45c05ef1e7a02c4..8dac5b2bd4b62a9eaa660d62be7923ffaaf0353f 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISyncCompartment.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IModificationCompartment.scala @@ -1,6 +1,6 @@ package org.rosi_project.model_management.sync -import org.rosi_project.model_management.sync.roles.ISyncRole +import org.rosi_project.model_management.sync.roles.IModificationRole import scroll.internal.Compartment import scala.collection.immutable.Set @@ -8,7 +8,7 @@ import scala.collection.immutable.Set /** * Interface for each synchronization rule. */ -trait ISyncCompartment extends Compartment { +trait IModificationCompartment extends Compartment { /** * Variable to proof if he is actual in a sync process. @@ -17,19 +17,19 @@ trait ISyncCompartment extends Compartment { /** * All sync roles of this synchronization rule. */ - private var syncer: Set[ISyncRole] = Set.empty + private var syncer: Set[IModificationRole] = Set.empty /** * Get roles for all integration classes. */ - protected def getNextRole(classname: Object) : ISyncRole = { + protected def getNextRole(classname: Object) : IModificationRole = { getFirstRole(classname) } /** * Get roles for integration classes. Should give less roles than getNextRole. */ - protected def getFirstRole(classname: Object) : ISyncRole + protected def getFirstRole(classname: Object) : IModificationRole def containsSyncer(value: Object): Boolean = { syncer.foreach { s => @@ -41,14 +41,14 @@ trait ISyncCompartment extends Compartment { return false } - def addSyncer(sync: ISyncRole): Unit = { + def addSyncer(sync: IModificationRole): Unit = { syncer += sync } /** * Get the list of all sync roles. */ - def getSyncer(): Set[ISyncRole] = syncer + def getSyncer(): Set[IModificationRole] = syncer /** * Clear the list of all sync roles. @@ -60,8 +60,8 @@ trait ISyncCompartment extends Compartment { /** * Get roles for integration classes. Should give less roles than getNextRole. */ - def getFirstIntegrationRole(classname: Object) : ISyncRole = { - val role: ISyncRole = this.getFirstRole(classname) + def getFirstIntegrationRole(classname: Object) : IModificationRole = { + val role: IModificationRole = this.getFirstRole(classname) if (role != null) this.addSyncer(role) role @@ -70,8 +70,8 @@ trait ISyncCompartment extends Compartment { /** * Get all roles for integration classes. */ - def getNextIntegrationRole(classname: Object) : ISyncRole = { - val role: ISyncRole = this.getNextRole(classname) + def getNextIntegrationRole(classname: Object) : IModificationRole = { + val role: IModificationRole = this.getNextRole(classname) if (role != null) this.addSyncer(role) role @@ -92,10 +92,10 @@ trait ISyncCompartment extends Compartment { /** * Create a new instance of this class. */ - def getNewInstance: ISyncCompartment + def getNewInstance: IModificationCompartment /** - * Get the name of this rule. - */ - def getRuleName: String + * Return on default the simple name of the class. + */ + def getRuleName: String = this.getClass.getSimpleName } diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISynchronizationCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISynchronizationCompartment.scala index 367abacef32a54bb1a13688529a628f6f81a8dad..7423231d638f45400223ca9e8f44a43c811025f7 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISynchronizationCompartment.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ISynchronizationCompartment.scala @@ -1,6 +1,6 @@ package org.rosi_project.model_management.sync -import org.rosi_project.model_management.sync.roles.IRoleManager +import org.rosi_project.model_management.sync.roles.ISyncManagerRole import scroll.internal.MultiCompartment /** @@ -18,5 +18,5 @@ trait ISynchronizationCompartment extends MultiCompartment { /** * Get a new RoleManager instance. */ - def createRoleManager(): IRoleManager + def createRoleManager(): ISyncManagerRole } diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IIntegrationCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ITransformationCompartment.scala similarity index 57% rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IIntegrationCompartment.scala rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ITransformationCompartment.scala index 6ab5927310221b277d402980651b563829795b52..5d2b054ac0e16922481a89890a7a153177c6b33a 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/IIntegrationCompartment.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/ITransformationCompartment.scala @@ -1,50 +1,59 @@ package org.rosi_project.model_management.sync import scroll.internal.Compartment -import org.rosi_project.model_management.sync.roles.ISyncRole -import org.rosi_project.model_management.sync.roles.IIntegrator -import org.rosi_project.model_management.sync.helper.IntegrationContainer +import org.rosi_project.model_management.sync.roles.IModificationRole +import org.rosi_project.model_management.sync.roles.ITransformationRole +import org.rosi_project.model_management.sync.helper.TransformationContainer import org.rosi_project.model_management.core._ -import org.rosi_project.model_management.sync.roles.IRoleManager +import org.rosi_project.model_management.sync.roles.ISyncManagerRole /** - * Interface for each integration rule. + * Interface for each transformation rule. */ -trait IIntegrationCompartment extends Compartment { +trait ITransformationCompartment extends Compartment { /** - * Return a role instance that handles the integration process for a new model to this instance. + * Return a role instance that handles the transformation process for a new model to this instance. */ - def getIntegratorForClassName(classname: Object): IIntegrator + def getTransformation(classname: Object): ITransformationRole /** - * Return a role instance that handles the integration process for a new relational compartment. + * Return a role instance that handles the transformation process for a new relational compartment. */ - def getRelationalIntegratorsForClassName(classname: Object): IIntegrator + def getRelationTransformation(classname: Object): ITransformationRole = null + + /** + * Return a role instance that handles the transformation process for a new model to this instance. + * Can only be called in this transformation acts as sub transformation. + */ + protected def getSubTransformation(classname: Object): ITransformationRole = null - def finalEditFunction(): Unit + /** + * Function to create special connection add the end of the transformation. + */ + def finishFunction(): Unit - protected def connectTargetElementWithSourceElementes(target: PlayerSync, sourceList: Set[PlayerSync]): Unit = { - var containers: Set[IntegrationContainer] = Set.empty + protected def connectTargetElementWithSourceElements(target: PlayerSync, sourceList: Set[PlayerSync]): Unit = { + var containers: Set[TransformationContainer] = Set.empty //Create Containers sourceList.foreach(e => { - containers += new IntegrationContainer(target, e) + containers += new TransformationContainer(target, e) }) //Finish Creation makeCompleteIntegrationProcess(containers) } - protected def connectTargetElementWithSourceElemente(target: PlayerSync, source: PlayerSync): Unit = { - var containers: Set[IntegrationContainer] = Set.empty + protected def connectTargetElementWithSourceElement(target: PlayerSync, source: PlayerSync): Unit = { + var containers: Set[TransformationContainer] = Set.empty //Create Container - containers += new IntegrationContainer(target, source) + containers += new TransformationContainer(target, source) //Finish Creation makeCompleteIntegrationProcess(containers) } - private def addExtensionRoles(containers: Set[IntegrationContainer]): Unit = { + private def addExtensionRoles(containers: Set[TransformationContainer]): Unit = { containers.filter(_.newManagerConnection).foreach { cc => - SynchronizationCompartment.getExtensions().foreach { e => + ConsistencyManagement.getExtensions().foreach { e => var role = e.getExtensionForClassName(cc.getNewPlayerInstance()) if (role != null) { cc.getNewManagerInstance() play role @@ -53,8 +62,8 @@ trait IIntegrationCompartment extends Compartment { } } - private def notifyExtensionRoles(containers: Set[IntegrationContainer]): Unit = { - if (!SynchronizationCompartment.getExtensions().isEmpty) { + private def notifyExtensionRoles(containers: Set[TransformationContainer]): Unit = { + if (!ConsistencyManagement.getExtensions().isEmpty) { containers.filter(_.newManagerConnection).foreach { cc => var playerInstance = cc.getNewPlayerInstance() +playerInstance insertNotification () @@ -65,34 +74,34 @@ trait IIntegrationCompartment extends Compartment { /** * Add Manager roles to all constructed elements. */ - private def addManagerRoles(containers: Set[IntegrationContainer]): Unit = { + private def addManagerRoles(containers: Set[TransformationContainer]): Unit = { containers.filter(_.newManagerConnection).foreach { cc => cc.getNewPlayerInstance() play cc.getNewManagerInstance() } } /** - * Add the delete roles for the elements in the IntegrationContainer. + * Add the delete roles for the elements in the TransformationContainer. */ - private def addDeleteRoles(containers: Set[IntegrationContainer]): Unit = { + private def addDeleteRoles(containers: Set[TransformationContainer]): Unit = { containers.filter(_.newManagerConnection).foreach { cc => - cc.getNewManagerInstance() play SynchronizationCompartment.getDestructionRule().getDestructorForClassName(cc.getNewPlayerInstance()) + cc.getNewManagerInstance() play ConsistencyManagement.getDestructionRule().getDestructorForClassName(cc.getNewPlayerInstance()) } } /** - * Add the related RoleManagers for the elements in the IntegrationContainer. + * Add the related RoleManagers for the elements in the TransformationContainer. */ - private def addRelatedRoleManager(containers: Set[IntegrationContainer]): Unit = { + private def addRelatedRoleManager(containers: Set[TransformationContainer]): Unit = { containers.foreach { cc => val oldPlayer = cc.getOldPlayerInstance() if (cc.simpleRelatedManagerConnection) { - val manager: IRoleManager = +oldPlayer getManager () + val manager: ISyncManagerRole = +oldPlayer getManager () if (manager != null) { manager.makeRelated(cc.getNewManagerInstance()) } } else { - val allManager: Set[IRoleManager] = +oldPlayer getAllManager () + val allManager: Set[ISyncManagerRole] = +oldPlayer getAllManager () if (allManager != null) { allManager.foreach { r => r.makeRelated(cc.getNewManagerInstance()) @@ -103,29 +112,29 @@ trait IIntegrationCompartment extends Compartment { } /** - * Combine the SynchronizationCompartment with all Players from the IntegrationContainer. + * Combine the ConsistencyManagement with all Players from the TransformationContainer. */ - private def synchronizeCompartments(containers: Set[IntegrationContainer]): Unit = { + private def synchronizeCompartments(containers: Set[TransformationContainer]): Unit = { containers.filter(_.newManagerConnection).foreach { cc => - SynchronizationCompartment combine cc.getNewPlayerInstance() + ConsistencyManagement combine cc.getNewPlayerInstance() } } /** - * Create the Synchronization mechanisms for the elements in the IntegrationContainer. + * Create the Synchronization mechanisms for the elements in the TransformationContainer. */ - private def bindSynchronizationRules(containers: Set[IntegrationContainer]): Unit = { + private def bindSynchronizationRules(containers: Set[TransformationContainer]): Unit = { containers.filter(_.newManagerConnection).foreach { cc => val oldPlayer = cc.getOldPlayerInstance() - val allManager: Set[IRoleManager] = +oldPlayer getAllManager () + val allManager: Set[ISyncManagerRole] = +oldPlayer getAllManager () if (allManager != null) { allManager.foreach { rm => val roles = rm.roles() //println("Player: " + rm.player + "Roles: " + roles) roles.foreach { r => - if (r.isInstanceOf[ISyncRole]) { - val syncRole: ISyncRole = r.asInstanceOf[ISyncRole] - val syncComp: ISyncCompartment = syncRole.getOuterCompartment + if (r.isInstanceOf[IModificationRole]) { + val syncRole: IModificationRole = r.asInstanceOf[IModificationRole] + val syncComp: IModificationCompartment = syncRole.getOuterCompartment //println("+~~~Sync: " + syncRole + " " + syncComp) if (!syncComp.containsSyncer(cc.getNewPlayerInstance()) && syncComp.isFirstIntegration(r.player.right.get)) { val newRole = syncComp.getNextIntegrationRole(cc.getNewPlayerInstance()) @@ -150,9 +159,9 @@ trait IIntegrationCompartment extends Compartment { } /** - * Fill the test lists with all Players from the IntegrationContainer. + * Fill the test lists with all Players from the TransformationContainer. */ - private def fillTestLists(containers: Set[IntegrationContainer]): Unit = { + private def fillTestLists(containers: Set[TransformationContainer]): Unit = { containers.filter(_.newManagerConnection).foreach { cc => ModelElementLists.addElement(cc.getNewPlayerInstance()) } @@ -161,7 +170,7 @@ trait IIntegrationCompartment extends Compartment { /** * Do the integration process automatically. */ - protected def makeCompleteIntegrationProcess(containers: Set[IntegrationContainer]): Unit = { + private def makeCompleteIntegrationProcess(containers: Set[TransformationContainer]): Unit = { containers.foreach(cc => { if (cc.getNewManagerInstance() == null) { val newPlayer = cc.getNewPlayerInstance() @@ -171,7 +180,7 @@ trait IIntegrationCompartment extends Compartment { cc.newManagerInstance = manager.right.get } else { cc.newManagerConnection = true - cc.newManagerInstance = SynchronizationCompartment.createRoleManager() + cc.newManagerInstance = ConsistencyManagement.createRoleManager() } } }) diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/GeneralDestructor.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/GeneralDestructor.scala index b9a0db9ee0ea770967801e613c4cdf0afd018d15..5dff5726233ee79120fc1d40048d20a34288d340 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/GeneralDestructor.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/GeneralDestructor.scala @@ -2,7 +2,7 @@ package org.rosi_project.model_management.sync.compartments import org.rosi_project.model_management.core.PlayerSync import org.rosi_project.model_management.sync.IDestructionCompartment -import org.rosi_project.model_management.sync.roles.{ IDestructor, IRoleManager } +import org.rosi_project.model_management.sync.roles.{ IDestructionRole, ISyncManagerRole } import scala.collection.mutable.ListBuffer import org.rosi_project.model_management.core.ModelElementLists @@ -12,11 +12,9 @@ import org.rosi_project.model_management.core.ModelElementLists */ object GeneralDestructor extends IDestructionCompartment { - override def getDestructorForClassName(classname: Object): IDestructor = new DeleteRole - - override def getRuleName: String = "GeneralDestructor" + override def getDestructorForClassName(classname: Object): IDestructionRole = new DeleteRole - class DeleteRole() extends IDestructor { + class DeleteRole() extends IDestructionRole { def deleteRoleFunction(): Unit = { //remove this manager from all related ones @@ -39,11 +37,11 @@ object GeneralDestructor extends IDestructionCompartment { } } - class DeleteRoleAndConnections() extends IDestructor { + class DeleteRoleAndConnections() extends IDestructionRole { def deleteRoleFunction(): Unit = { //get the list of related manager - var relatedManagers: Set[IRoleManager] = (+this).getRelatedManager() + var relatedManagers: Set[ISyncManagerRole] = (+this).getRelatedManager() //clear all lists from the related managers (+this).clearListsOfRelatedManager() diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/ModelElementsListGCExtension.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/ModelElementsListGCExtension.scala index 1bba7d49201855d065369e2bf1d2fbc3433e16ba..c185f9135c3f63896c9060c7f59affaf5cc74728 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/ModelElementsListGCExtension.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/ModelElementsListGCExtension.scala @@ -1,8 +1,8 @@ package org.rosi_project.model_management.sync.compartments import org.rosi_project.model_management.core.ModelElementLists -import org.rosi_project.model_management.sync.IExtenstionCompartment -import org.rosi_project.model_management.sync.roles.IExtension +import org.rosi_project.model_management.sync.IExtensionCompartment +import org.rosi_project.model_management.sync.roles.IExtensionRole import scroll.internal.errors.SCROLLErrors.TypeError /** Extension to delete instances which are removed from the synchronization context from the @@ -11,21 +11,16 @@ import scroll.internal.errors.SCROLLErrors.TypeError * * @author Rico Bergmann */ -object ModelElementsListGCExtension extends IExtenstionCompartment { +object ModelElementsListGCExtension extends IExtensionCompartment { /** * Return a role instance that handles the extension process for the object. */ - override def getExtensionForClassName(classname: Object): IExtension = new GarbageCollector - - /** - * Return a unique name that describes this extension. - */ - override def getExtensionName(): String = "ModelElementsList GarbageCollector" + override def getExtensionForClassName(classname: Object): IExtensionRole = new GarbageCollector /** The actual extension. */ - class GarbageCollector extends IExtension { + class GarbageCollector extends IExtensionRole { /** * Function to react on insertion behavior. diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/SuppressingConstructionCompartment.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/SuppressingConstructionCompartment.scala index 987002f50668715d97792f84bc04a3a80b65d562..992227b7c8d8ac0875dd55ddf662241172c911f1 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/SuppressingConstructionCompartment.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/compartments/SuppressingConstructionCompartment.scala @@ -1,8 +1,8 @@ package org.rosi_project.model_management.sync.compartments -import org.rosi_project.model_management.core.{PlayerSync, SynchronizationCompartment} +import org.rosi_project.model_management.core.PlayerSync import org.rosi_project.model_management.sync.IConstructionCompartment -import org.rosi_project.model_management.sync.roles.{IConstructor, IRoleManager} +import org.rosi_project.model_management.sync.roles.{IConstructionRole, ISyncManagerRole} /** An [[IConstructionCompartment]] which will not create any related instances in other models * @@ -10,18 +10,16 @@ import org.rosi_project.model_management.sync.roles.{IConstructor, IRoleManager} */ object SuppressingConstructionCompartment extends IConstructionCompartment { - override def getConstructorForClassName(classname: Object): IConstructor = new Suppressor - - override def getRuleName: String = "SuppressingConstructionCompartment" + override def getConstructorForClassName(classname: Object): IConstructionRole = new Suppressor /** The constructor will only create the necessary `plays` relationships with the synchronization * services */ - class Suppressor extends IConstructor { + class Suppressor extends IConstructionRole { - override def construct(comp: PlayerSync, man: IRoleManager): Unit = { + override def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = { // just set up the player - createContainerElement(start=true, con=true, comp, man) + createContainerElement(start=true, con=true, comp) makeCompleteConstructionProcess(containers) } diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/ConstructionContainer.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/ConstructionContainer.scala index 55ebd19993d5e750b7fd730c1d5588c1761b9e0f..df111912e46a61bd2c1802176f2552808ec0a397 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/ConstructionContainer.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/ConstructionContainer.scala @@ -1,12 +1,19 @@ package org.rosi_project.model_management.sync.helper -import org.rosi_project.model_management.sync.roles.IRoleManager +import org.rosi_project.model_management.sync.roles.ISyncManagerRole import org.rosi_project.model_management.core.PlayerSync /** * Helper class for all construction processes to manage standard work loads. */ -class ConstructionContainer(val startElement: Boolean, val constructed: Boolean, val player: PlayerSync, val manager: IRoleManager) { +class ConstructionContainer(val startElement: Boolean, val constructed: Boolean, val player: PlayerSync) { + + var m: ISyncManagerRole = null + + def setManagerInstance(manager: ISyncManagerRole): Unit = { + m = manager + } + /** * Returns true if it is the start construction element. */ @@ -25,5 +32,5 @@ class ConstructionContainer(val startElement: Boolean, val constructed: Boolean, /** * Get the RoleManager instance of this element */ - def getManagerInstance(): IRoleManager = manager + def getManagerInstance(): ISyncManagerRole = m } diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/IntegrationContainer.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/TransformationContainer.scala similarity index 68% rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/IntegrationContainer.scala rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/TransformationContainer.scala index 3237c18ee625f81f5ad8a830871bb5ab3a82c484..18b68a5d0fee3e007b23c90f079347c5f1c61b95 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/IntegrationContainer.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/helper/TransformationContainer.scala @@ -1,16 +1,16 @@ package org.rosi_project.model_management.sync.helper -import org.rosi_project.model_management.sync.roles.IRoleManager +import org.rosi_project.model_management.sync.roles.ISyncManagerRole import org.rosi_project.model_management.core.PlayerSync /** * Helper class for all integration processes to manage standard work loads. */ -class IntegrationContainer (val newPlayerInstance: PlayerSync, val oldPlayerInstance: PlayerSync) { +class TransformationContainer (val newPlayerInstance: PlayerSync, val oldPlayerInstance: PlayerSync) { var simpleRelatedManagerConnection: Boolean = true var newManagerConnection: Boolean = true - var newManagerInstance: IRoleManager = null + var newManagerInstance: ISyncManagerRole = null /** * Get the new PlayerSync instance of this element. @@ -20,7 +20,7 @@ class IntegrationContainer (val newPlayerInstance: PlayerSync, val oldPlayerInst /** * Get the new RoleManager instance of this element */ - def getNewManagerInstance(): IRoleManager = newManagerInstance + def getNewManagerInstance(): ISyncManagerRole = newManagerInstance /** * Get the old PlayerSync instance of this element. diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IConstructor.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IConstructionRole.scala similarity index 71% rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IConstructor.scala rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IConstructionRole.scala index dcfacf14b08c5ab1ef88f8fea30729b9f2a0c615..59bd351c20611e874a3b062e231e39ce057c2f75 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IConstructor.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IConstructionRole.scala @@ -6,7 +6,7 @@ import org.rosi_project.model_management.sync.helper.ConstructionContainer /** * Interface for the constructor roles. */ -trait IConstructor { +trait IConstructionRole { /** * Container list for the construction process. @@ -16,14 +16,13 @@ trait IConstructor { /** * Create a container element with the incoming configuration. */ - protected def createContainerElement(start: Boolean, con: Boolean, play: PlayerSync, man: IRoleManager): Unit = { - if (play == null) - return - containers += new ConstructionContainer(start, con, play, man) + protected def createContainerElement(start: Boolean, con: Boolean, play: PlayerSync): Unit = { + require(play != null) + containers += new ConstructionContainer(start, con, play) } /** * General construction function for external call. */ - def construct(comp: PlayerSync, man: IRoleManager): Unit + def construct(comp: PlayerSync, man: ISyncManagerRole): Unit } diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IDestructor.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IDestructionRole.scala similarity index 89% rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IDestructor.scala rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IDestructionRole.scala index dd979c8b6567c578921d73cd4c48b6ea2e30ed8b..5384e167eed3df32e8d753682d3a4aa5db6d7eb1 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IDestructor.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IDestructionRole.scala @@ -3,7 +3,7 @@ package org.rosi_project.model_management.sync.roles /** * Interface for the destructor roles. */ -trait IDestructor { +trait IDestructionRole { /** * General destruction function for external call. diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IExtension.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IExtensionRole.scala similarity index 94% rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IExtension.scala rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IExtensionRole.scala index 95363b572821c77015eeeb2b259dd02b23e461ac..a3fdf614a4d5f039b7cf35fc9367341be0380cf3 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IExtension.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IExtensionRole.scala @@ -3,7 +3,7 @@ package org.rosi_project.model_management.sync.roles /** * Interface for the extension roles. */ -trait IExtension { +trait IExtensionRole { /** * Function to react on insertion behavior. diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/ISyncRole.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IModificationRole.scala similarity index 57% rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/ISyncRole.scala rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IModificationRole.scala index 7682043b230fb2bf9cb26f0efa101bc95d89e71f..ef69e7f4272ee6e14369af0558e38238f8f2ecb4 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/ISyncRole.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IModificationRole.scala @@ -1,14 +1,14 @@ package org.rosi_project.model_management.sync.roles -import org.rosi_project.model_management.sync.ISyncCompartment +import org.rosi_project.model_management.sync.IModificationCompartment /** * Interface for the synchronization roles. */ -trait ISyncRole { +trait IModificationRole { /** * Function to get the synchronization compartment from a role instance. */ - def getOuterCompartment: ISyncCompartment + def getOuterCompartment: IModificationCompartment } diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IRoleManager.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/ISyncManagerRole.scala similarity index 71% rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IRoleManager.scala rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/ISyncManagerRole.scala index fa466ee7c73b030fbd9dbfaea7e58b53c49518d6..371be286b620a2abbdabc3a55df8c4cd49d114d0 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IRoleManager.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/ISyncManagerRole.scala @@ -7,14 +7,14 @@ import scala.collection.mutable.ListBuffer /** * Interface for the manager roles. */ -trait IRoleManager { +trait ISyncManagerRole { - private var relatedManager: Set[IRoleManager] = Set.empty + private var relatedManager: Set[ISyncManagerRole] = Set.empty /** * Add a related manager to the list. */ - def addRelatedManager(related: IRoleManager): Unit = { + def addRelatedManager(related: ISyncManagerRole): Unit = { if (related == null || related.equals(this)) return relatedManager += related @@ -23,22 +23,22 @@ trait IRoleManager { /** * Get the list of related managers. */ - def getRelatedManager(): Set[IRoleManager] = relatedManager + def getRelatedManager(): Set[ISyncManagerRole] = relatedManager /** * Get this manager. */ - def getManager(): IRoleManager = this + def getManager(): ISyncManagerRole = this /** * Get this manager plus related manager. */ - def getAllManager(): Set[IRoleManager] = relatedManager + this + def getAllManager(): Set[ISyncManagerRole] = relatedManager + this /** * Remove a related manager from the list. */ - def removeRelatedManager(related: IRoleManager): Unit = { + def removeRelatedManager(related: ISyncManagerRole): Unit = { if (related != null) relatedManager -= related } @@ -69,9 +69,9 @@ trait IRoleManager { } /** - * Create a relation between two IRoleManager instances. + * Create a relation between two ISyncManagerRole instances. */ - def makeRelated(relate: IRoleManager): Unit = { + def makeRelated(relate: ISyncManagerRole): Unit = { this.addRelatedManager(relate) relate.addRelatedManager(this) } @@ -89,10 +89,10 @@ trait IRoleManager { /** * Get related PlayerSync with the specific name. */ - def getRelatedClassFromName(name: String): PlayerSync + def getRelatedObject(name: String): PlayerSync /** - * Create a relation between two IRoleManager and RoleManager of other PlayerSync instances. + * Create a relation between two ISyncManagerRole and RoleManager of other PlayerSync instances. */ def makePlayerSyncRelated(playerSync: PlayerSync): Unit diff --git a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IIntegrator.scala b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/ITransformationRole.scala similarity index 60% rename from solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IIntegrator.scala rename to solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/ITransformationRole.scala index 33336c02a0847116fa16386734b58c23364ff44e..5114cb8aab39df3f44af49ab09926fca6ad69e88 100644 --- a/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/IIntegrator.scala +++ b/solutions/RSync/src/main/scala/org/rosi_project/model_management/sync/roles/ITransformationRole.scala @@ -1,18 +1,17 @@ package org.rosi_project.model_management.sync.roles -import org.rosi_project.model_management.sync.helper.IntegrationContainer +import org.rosi_project.model_management.sync.helper.TransformationContainer import org.rosi_project.model_management.core.PlayerSync -import org.rosi_project.model_management.core.SynchronizationCompartment /** * Interface for the integration roles. */ -trait IIntegrator { +trait ITransformationRole { /** * Container list for the integration process. */ - protected var containers: Set[IntegrationContainer] = Set.empty + protected var containers: Set[TransformationContainer] = Set.empty /** * Create a container element with the incoming configuration. @@ -20,11 +19,11 @@ trait IIntegrator { protected def createContainerElement(newPlayer: PlayerSync, oldPlayer: PlayerSync): Unit = { if (newPlayer == null || oldPlayer == null) return - containers += new IntegrationContainer(newPlayer, oldPlayer) + containers += new TransformationContainer(newPlayer, oldPlayer) } /** * General integration function for external call. */ - def integrate(comp: PlayerSync) : PlayerSync + def transform(comp: PlayerSync) : PlayerSync } \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/ttc2019/CompleteTTCProcess.scala b/solutions/RSync/src/main/scala/ttc2019/CompleteTTCProcess.scala index 7d99c74c9b6b22876630d00e9e9ea03727997281..f013c14813e4c91717ff200e7095214b268b27cd 100644 --- a/solutions/RSync/src/main/scala/ttc2019/CompleteTTCProcess.scala +++ b/solutions/RSync/src/main/scala/ttc2019/CompleteTTCProcess.scala @@ -1,12 +1,14 @@ package ttc2019 -import org.rosi_project.model_management.core.SynchronizationCompartment -import org.rosi_project.model_management.core.RsumCompartment import org.rosi_project.model_management.core.ModelElementLists -import org.rosi_project.model_management.sync.IIntegrationCompartment import ttc2019.worksync._ import ttc2019.metamodels.create.Launcher import sync.tt._ +import org.rosi_project.model_management.core.ConsistencyManagement +import org.rosi_project.model_management.core.RsumManagement +import creation.ICreationTT +import org.rosi_project.model_management.sync.ITransformationCompartment +import creation.CreationTTSync /** * The `CompleteTTCProcess` executes the entire transformation workflow. Its methods are inspired @@ -14,10 +16,10 @@ import sync.tt._ */ object CompleteTTCProcess extends App { - SynchronizationCompartment combine RsumCompartment + ConsistencyManagement combine RsumManagement - var ctts: ICreateTruthTable = _ - var integrate: IIntegrationCompartment = _ + var ctts: ICreationTT = _ + var integrate: ITransformationCompartment = _ var writeOut: IWriteOutputModel = _ var loader: TTCLoader = _ var validator: Launcher = _ @@ -36,20 +38,20 @@ object CompleteTTCProcess extends App { sync = processConfig.processMode == ProcessMode.SYNC loader = new TTCLoader validator = new Launcher - ctts = new CreateTruthTableSync() + ctts = new CreationTTSync() if (sync) { - SynchronizationCompartment.changeConstructionRule(TTandBDTandBDDSyncConstruction) - SynchronizationCompartment.addSynchronizationRule(new SyncHeadNamesSync) - SynchronizationCompartment.addSynchronizationRule(new SyncPortNamesSync) - SynchronizationCompartment.addSynchronizationRule(new SyncChangesTruthTableSync) - SynchronizationCompartment.addSynchronizationRule(new SyncChangesCellSync) + ConsistencyManagement.changeConstructionRule(TtBdtBddConstruction) + ConsistencyManagement.addModificationRule(new SyncNames) + ConsistencyManagement.addModificationRule(new SyncPortNames) + ConsistencyManagement.addModificationRule(new SyncTruthTableModifications) + ConsistencyManagement.addModificationRule(new SyncCellModifications) writeOut = WriteSyncBdtOutput } else { if (bdt) { - integrate = if (processConfig.processMode == ProcessMode.BDT) BdtSyncIntegration else BdtSyncIntegrationWithoutOrder + integrate = if (processConfig.processMode == ProcessMode.BDT) BdtTransformation else BdtTransformationPortOrder writeOut = WriteSyncBdtOutput } else { - integrate = if (processConfig.processMode == ProcessMode.BDD) BddSyncIntegration else BddSyncIntegrationWithoutOrder + integrate = if (processConfig.processMode == ProcessMode.BDD) BddTransformation else BddTransformationPortOrder writeOut = WriteSyncBddOutput } } @@ -67,7 +69,7 @@ object CompleteTTCProcess extends App { */ def run(): Unit = { if (!sync) { - SynchronizationCompartment.integrateNewModel(integrate) + ConsistencyManagement.transformModel(integrate) } } @@ -148,6 +150,10 @@ object CompleteTTCProcess extends App { override def main(args: Array[String]): Unit = { val processConfig = TTCProcessConfiguration(ttFileName = "TT.ttmodel", bddFileName = "Generated.bddmodel", processMode = ProcessMode.SYNC) + //val processConfig = TTCProcessConfiguration(ttFileName = "TT.ttmodel", bddFileName = "Generated.bddmodel", processMode = ProcessMode.BDT) + //val processConfig = TTCProcessConfiguration(ttFileName = "TT.ttmodel", bddFileName = "Generated.bddmodel", processMode = ProcessMode.BDTU) + //val processConfig = TTCProcessConfiguration(ttFileName = "TT.ttmodel", bddFileName = "Generated.bddmodel", processMode = ProcessMode.BDD) + //val processConfig = TTCProcessConfiguration(ttFileName = "TT.ttmodel", bddFileName = "Generated.bddmodel", processMode = ProcessMode.BDDU) executeEntireProcess(processConfig) showSyncFunctionalityByExample() } diff --git a/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableDirectSync.scala b/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableDirectSync.scala deleted file mode 100644 index f5f33619ef1e54301f7e07a6658fb350782c1d9b..0000000000000000000000000000000000000000 --- a/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableDirectSync.scala +++ /dev/null @@ -1,63 +0,0 @@ -package ttc2019 - -import sync.tt._ -import org.eclipse.emf.ecore.EObject - -/** - * Create the instances of the truth table in Scala. - * - * @author Christopher Werner - */ -class CreateTruthTableDirectSync extends ICreateTruthTable { - - var truthttable: TruthTable = null - var rows: java.util.Map[EObject, Row] = new java.util.HashMap() - var cells: java.util.Map[EObject, Cell] = new java.util.HashMap() - var ports: java.util.Map[EObject, Port] = new java.util.HashMap() - - def createTruthTable(name: String, id: EObject): Unit = { - truthttable = new TruthTable(name, Set.empty, Set.empty, null) - } - - def createInputPort(name: String, id: EObject): Unit = { - ports.put(id, new InputPort(name, Set.empty, null, null)) - } - - def createOutputPort(name: String, id: EObject): Unit = { - ports.put(id, new OutputPort(name, Set.empty, null, null)) - } - - def createRow(id: EObject): Unit = { - rows.put(id, new Row(Set.empty, null, null)) - } - - def createCell(value: Boolean, id: EObject): Unit = { - cells.put(id, new Cell(value, null, null, null)) - } - - def createTruthTableRowsRow(tt: EObject, row: EObject): Unit = { - val r = rows.get(row) - truthttable.addRows(r) - r.setOwner(truthttable) - } - - def createTruthTablePortsPort(tt: EObject, port: EObject): Unit = { - val p = ports.get(port) - truthttable.addPorts(p) - p.setOwner(truthttable) - } - - def createRowCellsCell(row: EObject, cell: EObject): Unit = { - val c = cells.get(cell) - val r = rows.get(row) - c.setOwner(r) - r.addCells(c) - } - - def createCellPortPort(cell: EObject, port: EObject): Unit = { - val c = cells.get(cell) - val p = ports.get(port) - c.setPort(p) - p.addCells(c) - } -} \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableSync.scala b/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableSync.scala deleted file mode 100644 index 73c11cef68aab86a88dc256d7917fad7201c519c..0000000000000000000000000000000000000000 --- a/solutions/RSync/src/main/scala/ttc2019/CreateTruthTableSync.scala +++ /dev/null @@ -1,61 +0,0 @@ -package ttc2019 - -import _root_.sync.tt._ -import org.eclipse.emf.ecore.EObject - -class CreateTruthTableSync extends ICreateTruthTable { - - var mapping: Map[EObject, Object] = Map.empty - - def createTruthTable(name: String, id: EObject): Unit = { - mapping += (id -> new TruthTable(name, Set.empty, Set.empty, null)) - } - - def createInputPort(name: String, id: EObject): Unit = { - mapping += (id -> new InputPort(name, Set.empty, null, null)) - } - - def createOutputPort(name: String, id: EObject): Unit = { - mapping += (id -> new OutputPort(name, Set.empty, null, null)) - } - - def createRow(id: EObject): Unit = { - mapping += (id -> new Row(Set.empty, null, null)) - } - - def createCell(value: Boolean, id: EObject): Unit = { - mapping += (id -> new Cell(value, null, null, null)) - } - - def createTruthTableRowsRow(tt: EObject, row: EObject): Unit = { - //println("addRow") - val t = mapping.get(tt).get.asInstanceOf[TruthTable] - val r = mapping.get(row).get.asInstanceOf[Row] - t.addRows(r) - r.setOwner(t) - } - - def createTruthTablePortsPort(tt: EObject, port: EObject): Unit = { - //println("addPort") - val t = mapping.get(tt).get.asInstanceOf[TruthTable] - val p = mapping.get(port).get.asInstanceOf[Port] - t.addPorts(p) - p.setOwner(t) - } - - def createRowCellsCell(row: EObject, cell: EObject): Unit = { - //println("addCellInRow") - val c = mapping.get(cell).get.asInstanceOf[Cell] - val r = mapping.get(row).get.asInstanceOf[Row] - c.setOwner(r) - r.addCells(c) - } - - def createCellPortPort(cell: EObject, port: EObject): Unit = { - //println("addCellInPort") - val c = mapping.get(cell).get.asInstanceOf[Cell] - val p = mapping.get(port).get.asInstanceOf[Port] - c.setPort(p) - p.addCells(c) - } -} \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/ttc2019/ICreateTruthTable.scala b/solutions/RSync/src/main/scala/ttc2019/ICreateTruthTable.scala deleted file mode 100644 index c81b99267db43fc60c76cb05417025c03730ede0..0000000000000000000000000000000000000000 --- a/solutions/RSync/src/main/scala/ttc2019/ICreateTruthTable.scala +++ /dev/null @@ -1,27 +0,0 @@ -package ttc2019 - -import org.eclipse.emf.ecore.EObject - -/** - * Interface for creating a truth Table. - */ -trait ICreateTruthTable { - - def createTruthTable(name: String, id: EObject): Unit - - def createInputPort(name: String, id: EObject): Unit - - def createOutputPort(name: String, id: EObject): Unit - - def createRow(id: EObject): Unit - - def createCell(value: Boolean, id: EObject): Unit - - def createTruthTableRowsRow(tt: EObject, row: EObject): Unit - - def createTruthTablePortsPort(tt: EObject, port: EObject): Unit - - def createRowCellsCell(row: EObject, cell: EObject): Unit - - def createCellPortPort(cell: EObject, port: EObject): Unit -} \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala b/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala index b9c67a894887c2edb382c789abfa4ece35a66a33..7d83c6f69a6f6b0c296574484de27d13cf1b17c4 100644 --- a/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala +++ b/solutions/RSync/src/main/scala/ttc2019/TTCLoader.scala @@ -12,6 +12,7 @@ import java.io.File import org.eclipse.emf.ecore.EStructuralFeature import ttc2019.metamodels.create._ import ttc2019.metamodels.tt._ +import creation.ICreationTT /** * Simple service to load an ECORE meta and instance model from a file. @@ -62,77 +63,27 @@ class TTCLoader { return ressourceModel.getContents().get(0) } - - private def createObj(obj: EObject, ctts: ICreateTruthTable): Unit = { - var objName = obj.eClass.getName - - //println(objName) - objName match { - case "TruthTable" => ctts.createTruthTable(obj.eGet(obj.eClass().getEStructuralFeature("name")).toString(), obj) - case "InputPort" => ctts.createInputPort(obj.eGet(obj.eClass().getEStructuralFeature("name")).toString(), obj) - case "OutputPort" => ctts.createOutputPort(obj.eGet(obj.eClass().getEStructuralFeature("name")).toString(), obj) - case "Row" => ctts.createRow(obj) - case "Cell" => ctts.createCell(obj.eGet(obj.eClass().getEStructuralFeature("value")).asInstanceOf[Boolean], obj) - case _ => - } - } - - private def createReferences(o1: EObject, ctts: ICreateTruthTable): Unit = { - o1.eClass().getEAllReferences.forEach(sf => { - if (sf.getName == "port" || sf.getName == "owner") { - val o2 = o1.eGet(sf).asInstanceOf[EObject] - //println("++ " + o1.eClass().getName + " " + sf.getName + " " + o2.eClass().getName) - if (o1.eClass().getName == "Cell" && sf.getName == "port" && o2.eClass().getName.contains("Port")) { - ctts.createCellPortPort(o1, o2) - } else if (o1.eClass().getName == "Cell" && sf.getName == "owner" && o2.eClass().getName == "Row") { - ctts.createRowCellsCell(o2, o1) - } else if (o1.eClass().getName.contains("Port") && sf.getName == "owner" && o2.eClass().getName == "TruthTable") { - ctts.createTruthTablePortsPort(o2, o1) - } else if (o1.eClass().getName == "Row" && sf.getName == "owner" && o2.eClass().getName == "TruthTable") { - ctts.createTruthTableRowsRow(o2, o1) - } - } - }) - } - - /** - * Create the input TruthTable instance from the *.ttmodel file. - */ - def createTruthTableInstance(obj: EObject, ctts: ICreateTruthTable): Unit = { - createObj(obj, ctts) - obj.eAllContents().asScala.foreach(o => { - createObj(o, ctts) - }) - - //add values for instances - createReferences(obj, ctts) - obj.eAllContents().asScala.foreach(o1 => { - createReferences(o1, ctts) - }) - } - def createTruthTableRSYNCInstance(tt: TruthTable, ctts: ICreateTruthTable): Unit = { - ctts.createTruthTable(tt.getName, tt) + def createTruthTableRSYNCInstance(tt: TruthTable, ctts: ICreationTT): Unit = { + ctts.createTruthTable(tt.getName, null, tt) tt.getPorts.forEach(p => { if (p.isInstanceOf[InputPort]) { - ctts.createInputPort(p.getName, p) + ctts.createInputPort(p.getName, null, p) } else { - ctts.createOutputPort(p.getName, p) + ctts.createOutputPort(p.getName, null, p) } ctts.createTruthTablePortsPort(tt, p) }) tt.getRows.forEach(r => { - ctts.createRow(r) + ctts.createRow(null, r) r.getCells.forEach(c => { - //print("(" + c.getPort.getName + "|" + (if (c.isValue()) "1" else "0") + ") ") - ctts.createCell(c.isValue(), c) + ctts.createCell(c.isValue(), null, c) ctts.createCellPortPort(c, c.getPort) ctts.createRowCellsCell(r, c) }) ctts.createTruthTableRowsRow(tt, r) - //println("") }) } diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/BddSyncIntegration.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/BddTransformation.scala similarity index 77% rename from solutions/RSync/src/main/scala/ttc2019/worksync/BddSyncIntegration.scala rename to solutions/RSync/src/main/scala/ttc2019/worksync/BddTransformation.scala index dcd8bfe349954d2f5ebd39a0b88b9dee7cb9f0eb..5358e7823ecc6a53c40bc409f64742d73ef18ac9 100644 --- a/solutions/RSync/src/main/scala/ttc2019/worksync/BddSyncIntegration.scala +++ b/solutions/RSync/src/main/scala/ttc2019/worksync/BddTransformation.scala @@ -1,37 +1,22 @@ package ttc2019.worksync import org.rosi_project.model_management.core.PlayerSync -import org.rosi_project.model_management.core.SynchronizationCompartment -import org.rosi_project.model_management.sync.IIntegrationCompartment -import org.rosi_project.model_management.sync.roles.IIntegrator -import org.rosi_project.model_management.sync.roles.IRoleManager +import org.rosi_project.model_management.sync.ITransformationCompartment +import org.rosi_project.model_management.sync.roles.ITransformationRole +import org.rosi_project.model_management.sync.roles.ISyncManagerRole -import org.rosi_project.model_management.sync.helper.IntegrationContainer -import scala.collection.mutable.ListBuffer -import org.rosi_project.model_management.core.ModelElementLists - -object BddSyncIntegration extends IIntegrationCompartment { +object BddTransformation extends ITransformationCompartment { private var leafNodes: Map[Set[String], sync.bddg.Leaf] = Map.empty private var createdBdds: Set[sync.bddg.BDD] = Set.empty - def printManager(): Unit = { - ModelElementLists.getElementsFromType("sync.bddg.Leaf").asInstanceOf[List[sync.bddg.Leaf]].foreach(obj => { - +obj printAllManager () - }) - } - - def getRelationalIntegratorsForClassName(classname: Object): IIntegrator = { - return null - } - - def getIntegratorForClassName(classname: Object): IIntegrator = { + def getTransformation(classname: Object): ITransformationRole = { if (classname.isInstanceOf[sync.tt.TruthTable]) return new TruthTableConstruct() return null } - def getNextIntegratorForClassName(classname: Object): IIntegrator = { + override def getSubTransformation(classname: Object): ITransformationRole = { if (classname.isInstanceOf[sync.tt.OutputPort]) return new OutputPortConstruct() if (classname.isInstanceOf[sync.tt.InputPort]) @@ -39,11 +24,11 @@ object BddSyncIntegration extends IIntegrationCompartment { return null } - def finalEditFunction(): Unit = { + def finishFunction(): Unit = { var ttNode: sync.tt.TruthTable = null createdBdds.foreach(bddNode => { - val oppBDD: PlayerSync = +bddNode getRelatedClassFromName ("TruthTable") + val oppBDD: PlayerSync = +bddNode getRelatedObject ("TruthTable") if (oppBDD != null) { ttNode = oppBDD.asInstanceOf[sync.tt.TruthTable] } @@ -51,10 +36,8 @@ object BddSyncIntegration extends IIntegrationCompartment { val tree = createOutputLookSubtree(bddNode, ttNode, rows, Set.empty) bddNode.setRoot(tree) - connectTargetElementWithSourceElementes(tree, rows.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(tree, rows.asInstanceOf[Set[PlayerSync]]) }) - - //printManager() } def createOutputLookSubtree(bdd: sync.bddg.BDD, truthTable: sync.tt.TruthTable, rows: Set[sync.tt.Row], finishPorts: Set[sync.tt.Port]): sync.bddg.Tree = { @@ -99,8 +82,9 @@ object BddSyncIntegration extends IIntegrationCompartment { } }) + //println("Used Port: " + portTT) var portBDD: sync.bddg.InputPort = null - val oppo: PlayerSync = +portTT getRelatedClassFromName ("InputPort") + val oppo: PlayerSync = +portTT getRelatedObject ("InputPort") if (oppo != null) { portBDD = oppo.asInstanceOf[sync.bddg.InputPort] } @@ -112,6 +96,7 @@ object BddSyncIntegration extends IIntegrationCompartment { val rowsOne = cellis.filter(_.getValue()).map(_.getOwner()) val rowsZero = cellis.filter(!_.getValue()).map(_.getOwner()) + //println("Rows (1) " + rowsOne.size + " (2) " + rowsZero.size) var treeZero: sync.bddg.Tree = null var treeOne: sync.bddg.Tree = null @@ -133,12 +118,12 @@ object BddSyncIntegration extends IIntegrationCompartment { treeOne.addOwnerSubtreeForOne(subtree) subtree.setTreeForOne(treeOne) //connect to rows - connectTargetElementWithSourceElementes(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]]) treeZero.addOwnerSubtreeForZero(subtree) subtree.setTreeForZero(treeZero) //connect to rows - connectTargetElementWithSourceElementes(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]]) subtree } @@ -163,8 +148,9 @@ object BddSyncIntegration extends IIntegrationCompartment { } } }) + //println("Used Port: " + portTT) var portBDD: sync.bddg.InputPort = null - val oppo: PlayerSync = +portTT getRelatedClassFromName ("InputPort") + val oppo: PlayerSync = +portTT getRelatedObject ("InputPort") if (oppo != null) { portBDD = oppo.asInstanceOf[sync.bddg.InputPort] } @@ -176,6 +162,7 @@ object BddSyncIntegration extends IIntegrationCompartment { val rowsOne = cellis.filter(_.getValue()).map(_.getOwner()) val rowsZero = cellis.filter(!_.getValue()).map(_.getOwner()) + //println("Rows (1) " + rowsOne.size + " (2) " + rowsZero.size) var treeZero: sync.bddg.Tree = null var treeOne: sync.bddg.Tree = null @@ -196,12 +183,12 @@ object BddSyncIntegration extends IIntegrationCompartment { treeOne.addOwnerSubtreeForOne(subtree) subtree.setTreeForOne(treeOne) //connect to rows - connectTargetElementWithSourceElementes(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]]) treeZero.addOwnerSubtreeForZero(subtree) subtree.setTreeForZero(treeZero) //connect to rows - connectTargetElementWithSourceElementes(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]]) subtree } @@ -225,7 +212,7 @@ object BddSyncIntegration extends IIntegrationCompartment { assignment.setOwner(leaf) leaf.addAssignments(assignment) - val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("OutputPort") + val ttport: PlayerSync = +(cellout.getPort()) getRelatedObject ("OutputPort") if (ttport != null) { val o_port = ttport.asInstanceOf[sync.bddg.OutputPort] o_port.addAssignments(assignment) @@ -239,14 +226,14 @@ object BddSyncIntegration extends IIntegrationCompartment { val cellList = rows.map(_.getCells().filter(_.getPort().getName() == a.getPort().getName()).head) //connect them - connectTargetElementWithSourceElementes(a, cellList.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(a, cellList.asInstanceOf[Set[PlayerSync]]) }) leaf } - class OutputPortConstruct() extends IIntegrator { + class OutputPortConstruct() extends ITransformationRole { - def integrate(comp: PlayerSync): PlayerSync = { + def transform(comp: PlayerSync): PlayerSync = { //Step 1: Get construction values val name: String = +this getName () @@ -254,15 +241,15 @@ object BddSyncIntegration extends IIntegrationCompartment { val o_port = new sync.bddg.OutputPort(Set.empty, name, null) //Step 3: Make Connection - connectTargetElementWithSourceElemente(o_port, comp) + connectTargetElementWithSourceElement(o_port, comp) o_port } } - class InputPortConstruct() extends IIntegrator { + class InputPortConstruct() extends ITransformationRole { - def integrate(comp: PlayerSync): PlayerSync = { + def transform(comp: PlayerSync): PlayerSync = { //Step 1: Get construction values val name: String = +this getName () @@ -270,15 +257,15 @@ object BddSyncIntegration extends IIntegrationCompartment { val i_port = new sync.bddg.InputPort(Set.empty, name, null) //Step 3: Make Connection - connectTargetElementWithSourceElemente(i_port, comp) + connectTargetElementWithSourceElement(i_port, comp) i_port } } - class TruthTableConstruct() extends IIntegrator { + class TruthTableConstruct() extends ITransformationRole { - def integrate(comp: PlayerSync): PlayerSync = { + def transform(comp: PlayerSync): PlayerSync = { //Step 1: Get construction values val name: String = +this getName () val ports: Set[sync.tt.Port] = +this getPorts () @@ -287,15 +274,15 @@ object BddSyncIntegration extends IIntegrationCompartment { val bdd = new sync.bddg.BDD(name, Set.empty, null, Set.empty) //Step 3: Make Connection - connectTargetElementWithSourceElemente(bdd, comp) + connectTargetElementWithSourceElement(bdd, comp) ports.foreach(p => { - val integrator = getNextIntegratorForClassName(p) - val manager: IRoleManager = +p getManager () + val subRule = getSubTransformation(p) + val manager: ISyncManagerRole = +p getManager () if (manager != null) { - manager play integrator - val obj = integrator.integrate(p).asInstanceOf[sync.bddg.Port] - integrator.remove() + manager play subRule + val obj = subRule.transform(p).asInstanceOf[sync.bddg.Port] + subRule.remove() obj.setOwner(bdd) bdd.addPorts(obj) } diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/BddSyncIntegrationWithoutOrder.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/BddTransformationPortOrder.scala similarity index 74% rename from solutions/RSync/src/main/scala/ttc2019/worksync/BddSyncIntegrationWithoutOrder.scala rename to solutions/RSync/src/main/scala/ttc2019/worksync/BddTransformationPortOrder.scala index 39a916e931202ca47ac15342a8475d111c6faa14..59b8612d7215248253c09ce1caff636155791956 100644 --- a/solutions/RSync/src/main/scala/ttc2019/worksync/BddSyncIntegrationWithoutOrder.scala +++ b/solutions/RSync/src/main/scala/ttc2019/worksync/BddTransformationPortOrder.scala @@ -1,32 +1,24 @@ package ttc2019.worksync import org.rosi_project.model_management.core.PlayerSync -import org.rosi_project.model_management.core.SynchronizationCompartment -import org.rosi_project.model_management.sync.IIntegrationCompartment -import org.rosi_project.model_management.sync.roles.IIntegrator -import org.rosi_project.model_management.sync.roles.IRoleManager - -import org.rosi_project.model_management.sync.helper.IntegrationContainer -import scala.collection.mutable.ListBuffer -import org.rosi_project.model_management.core.ModelElementLists +import org.rosi_project.model_management.sync.ITransformationCompartment +import org.rosi_project.model_management.sync.roles.ITransformationRole +import org.rosi_project.model_management.sync.roles.ISyncManagerRole + import util.control.Breaks._ -object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment { +object BddTransformationPortOrder extends ITransformationCompartment { private var leafNodes: Map[Set[String], sync.bddg.Leaf] = Map.empty private var createdBdds: Set[sync.bddg.BDD] = Set.empty - def getRelationalIntegratorsForClassName(classname: Object): IIntegrator = { - return null - } - - def getIntegratorForClassName(classname: Object): IIntegrator = { + def getTransformation(classname: Object): ITransformationRole = { if (classname.isInstanceOf[sync.tt.TruthTable]) return new TruthTableConstruct() return null } - def getNextIntegratorForClassName(classname: Object): IIntegrator = { + override def getSubTransformation(classname: Object): ITransformationRole = { if (classname.isInstanceOf[sync.tt.OutputPort]) return new OutputPortConstruct() if (classname.isInstanceOf[sync.tt.InputPort]) @@ -34,11 +26,11 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment { return null } - def finalEditFunction(): Unit = { + def finishFunction(): Unit = { var ttNode: sync.tt.TruthTable = null createdBdds.foreach(bddNode => { - val oppBDD: PlayerSync = +bddNode getRelatedClassFromName ("TruthTable") + val oppBDD: PlayerSync = +bddNode getRelatedObject ("TruthTable") if (oppBDD != null) { ttNode = oppBDD.asInstanceOf[sync.tt.TruthTable] } @@ -46,7 +38,7 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment { val tree = createOutputLookSubtree(bddNode, ttNode, rows, Set.empty) bddNode.setRoot(tree) - connectTargetElementWithSourceElementes(tree, rows.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(tree, rows.asInstanceOf[Set[PlayerSync]]) }) } @@ -85,8 +77,9 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment { }) } + //println("Used Port: " + portTT) var portBDD: sync.bddg.InputPort = null - val oppo: PlayerSync = +portTT getRelatedClassFromName ("InputPort") + val oppo: PlayerSync = +portTT getRelatedObject ("InputPort") if (oppo != null) { portBDD = oppo.asInstanceOf[sync.bddg.InputPort] } @@ -119,12 +112,12 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment { treeOne.addOwnerSubtreeForOne(subtree) subtree.setTreeForOne(treeOne) //connect to rows - connectTargetElementWithSourceElementes(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]]) treeZero.addOwnerSubtreeForZero(subtree) subtree.setTreeForZero(treeZero) //connect to rows - connectTargetElementWithSourceElementes(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]]) subtree } @@ -148,7 +141,7 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment { assignment.setOwner(leaf) leaf.addAssignments(assignment) - val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("OutputPort") + val ttport: PlayerSync = +(cellout.getPort()) getRelatedObject ("OutputPort") if (ttport != null) { val o_port = ttport.asInstanceOf[sync.bddg.OutputPort] o_port.addAssignments(assignment) @@ -162,14 +155,14 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment { val cellList = rows.map(_.getCells().filter(_.getPort().getName() == a.getPort().getName()).head) //connect them - connectTargetElementWithSourceElementes(a, cellList.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(a, cellList.asInstanceOf[Set[PlayerSync]]) }) leaf } - class OutputPortConstruct() extends IIntegrator { + class OutputPortConstruct() extends ITransformationRole { - def integrate(comp: PlayerSync): PlayerSync = { + def transform(comp: PlayerSync): PlayerSync = { //Step 1: Get construction values val name: String = +this getName () @@ -177,15 +170,15 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment { val o_port = new sync.bddg.OutputPort(Set.empty, name, null) //Step 3: Make Connection - connectTargetElementWithSourceElemente(o_port, comp) + connectTargetElementWithSourceElement(o_port, comp) o_port } } - class InputPortConstruct() extends IIntegrator { + class InputPortConstruct() extends ITransformationRole { - def integrate(comp: PlayerSync): PlayerSync = { + def transform(comp: PlayerSync): PlayerSync = { //Step 1: Get construction values val name: String = +this getName () @@ -193,15 +186,15 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment { val i_port = new sync.bddg.InputPort(Set.empty, name, null) //Step 3: Make Connection - connectTargetElementWithSourceElemente(i_port, comp) + connectTargetElementWithSourceElement(i_port, comp) i_port } } - class TruthTableConstruct() extends IIntegrator { + class TruthTableConstruct() extends ITransformationRole { - def integrate(comp: PlayerSync): PlayerSync = { + def transform(comp: PlayerSync): PlayerSync = { //Step 1: Get construction values val name: String = +this getName () val ports: Set[sync.tt.Port] = +this getPorts () @@ -210,15 +203,15 @@ object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment { val bdd = new sync.bddg.BDD(name, Set.empty, null, Set.empty) //Step 3: Make Connection - connectTargetElementWithSourceElemente(bdd, comp) + connectTargetElementWithSourceElement(bdd, comp) ports.foreach(p => { - val integrator = getNextIntegratorForClassName(p) - val manager: IRoleManager = +p getManager () + val subRule = getSubTransformation(p) + val manager: ISyncManagerRole = +p getManager () if (manager != null) { - manager play integrator - val obj = integrator.integrate(p).asInstanceOf[sync.bddg.Port] - integrator.remove() + manager play subRule + val obj = subRule.transform(p).asInstanceOf[sync.bddg.Port] + subRule.remove() obj.setOwner(bdd) bdd.addPorts(obj) } diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtAndBddSyncIntegration.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/BdtAndBddSyncIntegration.scala deleted file mode 100644 index a49943b099eabc7925b8fc37961cfa31b594dfad..0000000000000000000000000000000000000000 --- a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtAndBddSyncIntegration.scala +++ /dev/null @@ -1,262 +0,0 @@ -package ttc2019.worksync - -import org.rosi_project.model_management.core.PlayerSync -import org.rosi_project.model_management.core.SynchronizationCompartment -import org.rosi_project.model_management.sync.IIntegrationCompartment -import org.rosi_project.model_management.sync.roles.IIntegrator -import org.rosi_project.model_management.sync.roles.IRoleManager - -import org.rosi_project.model_management.sync.helper.IntegrationContainer -import scala.collection.mutable.ListBuffer -import org.rosi_project.model_management.core.ModelElementLists - -object BdtAndBddSyncIntegration extends IIntegrationCompartment { - - //private var createdObjects: Set[PlayerSync] = Set.empty - private var leafNodes: Map[Set[String], sync.bddg.Leaf] = Map.empty - private var createdBdds: Set[sync.bddg.BDD] = Set.empty - private var createdBdts: Set[sync.bdd.BDD] = Set.empty - - def printManager(): Unit = { - ModelElementLists.getElementsFromType("sync.bddg.Leaf").asInstanceOf[List[sync.bddg.Leaf]].foreach(obj => { - +obj printAllManager () - }) - ModelElementLists.getElementsFromType("sync.bdd.Leaf").asInstanceOf[List[sync.bdd.Leaf]].foreach(obj => { - +obj printAllManager () - }) - } - - def getRelationalIntegratorsForClassName(classname: Object): IIntegrator = { - return null - } - - def getIntegratorForClassName(classname: Object): IIntegrator = { - if (classname.isInstanceOf[sync.tt.TruthTable]) - return new TruthTableConstruct() - return null - } - - def getNextIntegratorForClassName(classname: Object): IIntegrator = { - if (classname.isInstanceOf[sync.tt.OutputPort]) - return new OutputPortConstruct() - if (classname.isInstanceOf[sync.tt.InputPort]) - return new InputPortConstruct() - return null - } - - def finalEditFunction(): Unit = { - var ttNode: sync.tt.TruthTable = null - - createdBdds.foreach(bddNode => { - val oppBDD: PlayerSync = +bddNode getRelatedClassFromName ("TruthTable") - if (oppBDD != null) { - ttNode = oppBDD.asInstanceOf[sync.tt.TruthTable] - } - val rows = ttNode.getRows() - - val tree = createOutputLookSubtree(bddNode, ttNode, rows, Set.empty) - bddNode.setRoot(tree) - connectTargetElementWithSourceElementes(tree, rows.asInstanceOf[Set[PlayerSync]]) - }) - - //printManager() - } - - def createOutputLookSubtree(bdd: sync.bddg.BDD, truthTable: sync.tt.TruthTable, rows: Set[sync.tt.Row], finishPorts: Set[sync.tt.Port]): sync.bddg.Tree = { - var numberTrue = -1 - var numberFalse = -1 - var max = 0 - var portTT: sync.tt.Port = null - var cellis: Set[sync.tt.Cell] = Set.empty - - //find next inputport for subtree - truthTable.getPorts().filter(p => p.isInstanceOf[sync.tt.InputPort] && !finishPorts.contains(p)).foreach(ttip => { - val newCells = ttip.getCells().filter(c => rows.contains(c.getOwner())) - //println("Looking Port: " + ttip.getName() + " S: " + newCells.size) - if (newCells.size >= max) { - var setTrue: Set[Set[String]] = Set.empty - var setFalse: Set[Set[String]] = Set.empty - newCells.foreach(cell => { - if (cell.getValue()) { - var setPortValue: Set[String] = Set.empty - cell.getOwner().getCells().filter(_.getPort().isInstanceOf[sync.tt.OutputPort]).foreach(ocell => { - setPortValue += s"${ocell.getPort().getName()} ${ocell.getValue()}" - }) - setTrue += setPortValue - } else { - var setPortValue: Set[String] = Set.empty - cell.getOwner().getCells().filter(_.getPort().isInstanceOf[sync.tt.OutputPort]).foreach(ocell => { - setPortValue += s"${ocell.getPort().getName()} ${ocell.getValue()}" - }) - setFalse += setPortValue - } - }) - val p1 = setTrue.size - val p2 = setFalse.size - if (p1 + p2 < numberFalse + numberTrue && p1 > 0 && p2 > 0 || numberTrue < 0) { - numberTrue = p1 - numberFalse = p2 - cellis = newCells - portTT = ttip - max = newCells.size - } - //println("############################## " + newCells.size + " || T: " + p1 + " F: " + p2) - } - }) - - //println("Used Port: " + portTT) - var portBDD: sync.bddg.InputPort = null - val oppo: PlayerSync = +portTT getRelatedClassFromName ("InputPort") - if (oppo != null) { - portBDD = oppo.asInstanceOf[sync.bddg.InputPort] - } - - val newPorts = finishPorts + portTT - val subtree = new sync.bddg.Subtree(null, null, portBDD, Set.empty, Set.empty, bdd) - bdd.addTrees(subtree) - portBDD.addSubtrees(subtree) - - val rowsOne = cellis.filter(_.getValue()).map(_.getOwner()) - val rowsZero = cellis.filter(!_.getValue()).map(_.getOwner()) - - var treeZero: sync.bddg.Tree = null - var treeOne: sync.bddg.Tree = null - if (numberFalse == 1) { - //create leaf from rows - treeZero = createLeafFromRows(bdd, rowsZero) - } else { - //create new subtree from rows - treeZero = createOutputLookSubtree(bdd, truthTable, rowsZero, newPorts) - } - if (numberTrue == 1) { - //create leaf from rows - treeOne = createLeafFromRows(bdd, rowsOne) - } else { - //create new subtree from rows - treeOne = createOutputLookSubtree(bdd, truthTable, rowsOne, newPorts) - } - - treeOne.addOwnerSubtreeForOne(subtree) - subtree.setTreeForOne(treeOne) - //connect to rows - connectTargetElementWithSourceElementes(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]]) - - treeZero.addOwnerSubtreeForZero(subtree) - subtree.setTreeForZero(treeZero) - //connect to rows - connectTargetElementWithSourceElementes(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]]) - - subtree - } - - def createLeafFromRows(bdd: sync.bddg.BDD, rows: Set[sync.tt.Row]): sync.bddg.Leaf = { - val mapping = rows.head.getCells().filter(c => c.getPort().isInstanceOf[sync.tt.OutputPort]).map(c => s"${c.getPort().getName()} ${c.getValue()}") - - val mapped = leafNodes.get(mapping) - var leaf: sync.bddg.Leaf = null - - if (!mapped.isEmpty) { - leaf = mapped.get - } else { - leaf = new sync.bddg.Leaf(Set.empty, Set.empty, Set.empty, bdd) - bdd.addTrees(leaf) - leafNodes += (mapping -> leaf) - - rows.head.getCells().filter(c => c.getPort().isInstanceOf[sync.tt.OutputPort]).foreach(cellout => { - //Create new assignment and search all cells for it - val assignment = new sync.bddg.Assignment(cellout.getValue(), null, null) - assignment.setOwner(leaf) - leaf.addAssignments(assignment) - - val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("OutputPort") - if (ttport != null) { - val o_port = ttport.asInstanceOf[sync.bddg.OutputPort] - o_port.addAssignments(assignment) - assignment.setPort(o_port) - } - }) - } - - //connect assignments to cells - leaf.getAssignments().foreach(a => { - val cellList = rows.map(_.getCells().filter(_.getPort().getName() == a.getPort().getName()).head) - - //connect them - connectTargetElementWithSourceElementes(a, cellList.asInstanceOf[Set[PlayerSync]]) - }) - leaf - } - - class OutputPortConstruct() extends IIntegrator { - - def integrate(comp: PlayerSync): PlayerSync = { - //Step 1: Get construction values - val name: String = +this getName () - - //Step 2: Create the object in the other models - val oD_port = new sync.bddg.OutputPort(Set.empty, name, null) - val oT_port = new sync.bdd.OutputPort(Set.empty, name, null) - - //Step 3: Make Connection - connectTargetElementWithSourceElemente(oD_port, comp) - connectTargetElementWithSourceElemente(oT_port, comp) - connectTargetElementWithSourceElemente(oD_port, oT_port) - - oD_port - } - } - - class InputPortConstruct() extends IIntegrator { - - def integrate(comp: PlayerSync): PlayerSync = { - //Step 1: Get construction values - val name: String = +this getName () - - //Step 2: Create the object in the other models - val iD_port = new sync.bddg.InputPort(Set.empty, name, null) - val iT_port = new sync.bdd.InputPort(Set.empty, name, null) - - //Step 3: Make Connection - connectTargetElementWithSourceElemente(iD_port, comp) - connectTargetElementWithSourceElemente(iT_port, comp) - connectTargetElementWithSourceElemente(iD_port, iT_port) - - iD_port - } - } - - class TruthTableConstruct() extends IIntegrator { - - def integrate(comp: PlayerSync): PlayerSync = { - //Step 1: Get construction values - val name: String = +this getName () - val ports: Set[sync.tt.Port] = +this getPorts () - - //Step 2: Create the object in the other models - val bdd = new sync.bddg.BDD(name, Set.empty, null, Set.empty) - val bdt = new sync.bdd.BDD(name, null, Set.empty) - - //Step 3: Make Connection - connectTargetElementWithSourceElemente(bdt, comp) - connectTargetElementWithSourceElemente(bdd, comp) - connectTargetElementWithSourceElemente(bdd, bdt) - - ports.foreach(p => { - val integrator = getNextIntegratorForClassName(p) - val manager: IRoleManager = +p getManager () - if (manager != null) { - manager play integrator - val obj = integrator.integrate(p).asInstanceOf[sync.bddg.Port] - integrator.remove() - obj.setOwner(bdd) - bdd.addPorts(obj) - } - }) - - createdBdds += bdd - - bdd - } - } - -} \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegration.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/BdtTransformation.scala similarity index 72% rename from solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegration.scala rename to solutions/RSync/src/main/scala/ttc2019/worksync/BdtTransformation.scala index 1f7ad2b6c5e289c8cb236cb39d6151be9e103f0a..44f86c5bcb6567ff5acd2a8e04e2051e48a420e8 100644 --- a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegration.scala +++ b/solutions/RSync/src/main/scala/ttc2019/worksync/BdtTransformation.scala @@ -1,30 +1,21 @@ package ttc2019.worksync import org.rosi_project.model_management.core.PlayerSync -import org.rosi_project.model_management.core.SynchronizationCompartment -import org.rosi_project.model_management.sync.IIntegrationCompartment -import org.rosi_project.model_management.sync.roles.IIntegrator -import org.rosi_project.model_management.sync.roles.IRoleManager +import org.rosi_project.model_management.sync.ITransformationCompartment +import org.rosi_project.model_management.sync.roles.ITransformationRole +import org.rosi_project.model_management.sync.roles.ISyncManagerRole -import org.rosi_project.model_management.sync.helper.IntegrationContainer -import scala.collection.mutable.ListBuffer -import org.rosi_project.model_management.core.ModelElementLists - -object BdtSyncIntegration extends IIntegrationCompartment { +object BdtTransformation extends ITransformationCompartment { private var createdBdds: Set[sync.bdd.BDD] = Set.empty - def getRelationalIntegratorsForClassName(classname: Object): IIntegrator = { - return null - } - - def getIntegratorForClassName(classname: Object): IIntegrator = { + def getTransformation(classname: Object): ITransformationRole = { if (classname.isInstanceOf[sync.tt.TruthTable]) return new TruthTableConstruct() return null } - def getNextIntegratorForClassName(classname: Object): IIntegrator = { + override def getSubTransformation(classname: Object): ITransformationRole = { if (classname.isInstanceOf[sync.tt.OutputPort]) return new OutputPortConstruct() if (classname.isInstanceOf[sync.tt.InputPort]) @@ -32,11 +23,11 @@ object BdtSyncIntegration extends IIntegrationCompartment { return null } - def finalEditFunction(): Unit = { + def finishFunction(): Unit = { var ttNode: sync.tt.TruthTable = null createdBdds.foreach(bddNode => { - val oppBDD: PlayerSync = +bddNode getRelatedClassFromName ("TruthTable") + val oppBDD: PlayerSync = +bddNode getRelatedObject ("TruthTable") if (oppBDD != null) { ttNode = oppBDD.asInstanceOf[sync.tt.TruthTable] } @@ -45,7 +36,7 @@ object BdtSyncIntegration extends IIntegrationCompartment { val tree = createOutputLookSubtree(bddNode, ttNode, rows, Set.empty) tree.setOwnerBDD(bddNode) bddNode.setTree(tree) - connectTargetElementWithSourceElementes(tree, rows.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(tree, rows.asInstanceOf[Set[PlayerSync]]) }) } @@ -90,8 +81,9 @@ object BdtSyncIntegration extends IIntegrationCompartment { } }) + //println("Used Port: " + portTT) var portBDD: sync.bdd.InputPort = null - val oppo: PlayerSync = +portTT getRelatedClassFromName ("InputPort") + val oppo: PlayerSync = +portTT getRelatedObject ("InputPort") if (oppo != null) { portBDD = oppo.asInstanceOf[sync.bdd.InputPort] } @@ -123,12 +115,12 @@ object BdtSyncIntegration extends IIntegrationCompartment { treeOne.setOwnerSubtreeForOne(subtree) subtree.setTreeForOne(treeOne) //connect to rows - connectTargetElementWithSourceElementes(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]]) treeZero.setOwnerSubtreeForZero(subtree) subtree.setTreeForZero(treeZero) //connect to rows - connectTargetElementWithSourceElementes(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]]) subtree } @@ -144,7 +136,7 @@ object BdtSyncIntegration extends IIntegrationCompartment { assignment.setOwner(leaf) leaf.addAssignments(assignment) - val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("OutputPort") + val ttport: PlayerSync = +(cellout.getPort()) getRelatedObject ("OutputPort") if (ttport != null) { val o_port = ttport.asInstanceOf[sync.bdd.OutputPort] o_port.addAssignments(assignment) @@ -152,14 +144,14 @@ object BdtSyncIntegration extends IIntegrationCompartment { } //connect them - connectTargetElementWithSourceElementes(assignment, cellList.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(assignment, cellList.asInstanceOf[Set[PlayerSync]]) }) leaf } - class OutputPortConstruct() extends IIntegrator { + class OutputPortConstruct() extends ITransformationRole { - def integrate(comp: PlayerSync): PlayerSync = { + def transform(comp: PlayerSync): PlayerSync = { //Step 1: Get construction values val name: String = +this getName () @@ -167,15 +159,15 @@ object BdtSyncIntegration extends IIntegrationCompartment { val o_port = new sync.bdd.OutputPort(Set.empty, name, null) //Step 3: Make Connection - connectTargetElementWithSourceElemente(o_port, comp) + connectTargetElementWithSourceElement(o_port, comp) o_port } } - class InputPortConstruct() extends IIntegrator { + class InputPortConstruct() extends ITransformationRole { - def integrate(comp: PlayerSync): PlayerSync = { + def transform(comp: PlayerSync): PlayerSync = { //Step 1: Get construction values val name: String = +this getName () @@ -183,15 +175,15 @@ object BdtSyncIntegration extends IIntegrationCompartment { val i_port = new sync.bdd.InputPort(Set.empty, name, null) //Step 3: Make Connection - connectTargetElementWithSourceElemente(i_port, comp) + connectTargetElementWithSourceElement(i_port, comp) i_port } } - class TruthTableConstruct() extends IIntegrator { + class TruthTableConstruct() extends ITransformationRole { - def integrate(comp: PlayerSync): PlayerSync = { + def transform(comp: PlayerSync): PlayerSync = { //Step 1: Get construction values val name: String = +this getName () val ports: Set[sync.tt.Port] = +this getPorts () @@ -200,15 +192,15 @@ object BdtSyncIntegration extends IIntegrationCompartment { val bdt = new sync.bdd.BDD(name, null, Set.empty) //Step 3: Make Connection - connectTargetElementWithSourceElemente(bdt, comp) + connectTargetElementWithSourceElement(bdt, comp) ports.foreach(p => { - val integrator = getNextIntegratorForClassName(p) - val manager: IRoleManager = +p getManager () + val subRule = getSubTransformation(p) + val manager: ISyncManagerRole = +p getManager () if (manager != null) { - manager play integrator - val obj = integrator.integrate(p).asInstanceOf[sync.bdd.Port] - integrator.remove() + manager play subRule + val obj = subRule.transform(p).asInstanceOf[sync.bdd.Port] + subRule.remove() obj.setOwner(bdt) bdt.addPorts(obj) } diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegrationWithoutOrder.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/BdtTransformationPortOrder.scala similarity index 71% rename from solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegrationWithoutOrder.scala rename to solutions/RSync/src/main/scala/ttc2019/worksync/BdtTransformationPortOrder.scala index a9558ddbf10f8bca3061aadb021b2f716c21d1d3..a1a4535ca956cff960b50d17c34412e8a1623827 100644 --- a/solutions/RSync/src/main/scala/ttc2019/worksync/BdtSyncIntegrationWithoutOrder.scala +++ b/solutions/RSync/src/main/scala/ttc2019/worksync/BdtTransformationPortOrder.scala @@ -1,31 +1,23 @@ package ttc2019.worksync import org.rosi_project.model_management.core.PlayerSync -import org.rosi_project.model_management.core.SynchronizationCompartment -import org.rosi_project.model_management.sync.IIntegrationCompartment -import org.rosi_project.model_management.sync.roles.IIntegrator -import org.rosi_project.model_management.sync.roles.IRoleManager - -import org.rosi_project.model_management.sync.helper.IntegrationContainer -import scala.collection.mutable.ListBuffer -import org.rosi_project.model_management.core.ModelElementLists +import org.rosi_project.model_management.sync.ITransformationCompartment +import org.rosi_project.model_management.sync.roles.ITransformationRole +import org.rosi_project.model_management.sync.roles.ISyncManagerRole + import util.control.Breaks._ -object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment { +object BdtTransformationPortOrder extends ITransformationCompartment { private var createdBdds: Set[sync.bdd.BDD] = Set.empty - def getRelationalIntegratorsForClassName(classname: Object): IIntegrator = { - return null - } - - def getIntegratorForClassName(classname: Object): IIntegrator = { + def getTransformation(classname: Object): ITransformationRole = { if (classname.isInstanceOf[sync.tt.TruthTable]) return new TruthTableConstruct() return null } - def getNextIntegratorForClassName(classname: Object): IIntegrator = { + override def getSubTransformation(classname: Object): ITransformationRole = { if (classname.isInstanceOf[sync.tt.OutputPort]) return new OutputPortConstruct() if (classname.isInstanceOf[sync.tt.InputPort]) @@ -33,11 +25,11 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment { return null } - def finalEditFunction(): Unit = { + def finishFunction(): Unit = { var ttNode: sync.tt.TruthTable = null createdBdds.foreach(bddNode => { - val oppBDD: PlayerSync = +bddNode getRelatedClassFromName ("TruthTable") + val oppBDD: PlayerSync = +bddNode getRelatedObject ("TruthTable") if (oppBDD != null) { ttNode = oppBDD.asInstanceOf[sync.tt.TruthTable] } @@ -46,7 +38,7 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment { val tree = createOutputLookSubtree(bddNode, ttNode, rows, Set.empty) tree.setOwnerBDD(bddNode) bddNode.setTree(tree) - connectTargetElementWithSourceElementes(tree, rows.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(tree, rows.asInstanceOf[Set[PlayerSync]]) }) } @@ -85,7 +77,7 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment { } var portBDD: sync.bdd.InputPort = null - val oppo: PlayerSync = +portTT getRelatedClassFromName ("InputPort") + val oppo: PlayerSync = +portTT getRelatedObject ("InputPort") if (oppo != null) { portBDD = oppo.asInstanceOf[sync.bdd.InputPort] } @@ -96,6 +88,7 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment { val rowsOne = cellis.filter(_.getValue()).map(_.getOwner()) val rowsZero = cellis.filter(!_.getValue()).map(_.getOwner()) + //println("Rows (1) " + rowsOne.size + " (2) " + rowsZero.size) var treeZero: sync.bdd.Tree = null var treeOne: sync.bdd.Tree = null @@ -117,12 +110,12 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment { treeOne.setOwnerSubtreeForOne(subtree) subtree.setTreeForOne(treeOne) //connect to rows - connectTargetElementWithSourceElementes(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(treeOne, rowsOne.asInstanceOf[Set[PlayerSync]]) treeZero.setOwnerSubtreeForZero(subtree) subtree.setTreeForZero(treeZero) //connect to rows - connectTargetElementWithSourceElementes(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(treeZero, rowsZero.asInstanceOf[Set[PlayerSync]]) subtree } @@ -138,7 +131,7 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment { assignment.setOwner(leaf) leaf.addAssignments(assignment) - val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("OutputPort") + val ttport: PlayerSync = +(cellout.getPort()) getRelatedObject ("OutputPort") if (ttport != null) { val o_port = ttport.asInstanceOf[sync.bdd.OutputPort] o_port.addAssignments(assignment) @@ -146,14 +139,14 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment { } //connect them - connectTargetElementWithSourceElementes(assignment, cellList.asInstanceOf[Set[PlayerSync]]) + connectTargetElementWithSourceElements(assignment, cellList.asInstanceOf[Set[PlayerSync]]) }) leaf } - class OutputPortConstruct() extends IIntegrator { + class OutputPortConstruct() extends ITransformationRole { - def integrate(comp: PlayerSync): PlayerSync = { + def transform(comp: PlayerSync): PlayerSync = { //Step 1: Get construction values val name: String = +this getName () @@ -161,15 +154,15 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment { val o_port = new sync.bdd.OutputPort(Set.empty, name, null) //Step 3: Make Connection - connectTargetElementWithSourceElemente(o_port, comp) + connectTargetElementWithSourceElement(o_port, comp) o_port } } - class InputPortConstruct() extends IIntegrator { + class InputPortConstruct() extends ITransformationRole { - def integrate(comp: PlayerSync): PlayerSync = { + def transform(comp: PlayerSync): PlayerSync = { //Step 1: Get construction values val name: String = +this getName () @@ -177,15 +170,15 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment { val i_port = new sync.bdd.InputPort(Set.empty, name, null) //Step 3: Make Connection - connectTargetElementWithSourceElemente(i_port, comp) + connectTargetElementWithSourceElement(i_port, comp) i_port } } - class TruthTableConstruct() extends IIntegrator { + class TruthTableConstruct() extends ITransformationRole { - def integrate(comp: PlayerSync): PlayerSync = { + def transform(comp: PlayerSync): PlayerSync = { //Step 1: Get construction values val name: String = +this getName () val ports: Set[sync.tt.Port] = +this getPorts () @@ -194,15 +187,15 @@ object BdtSyncIntegrationWithoutOrder extends IIntegrationCompartment { val bdt = new sync.bdd.BDD(name, null, Set.empty) //Step 3: Make Connection - connectTargetElementWithSourceElemente(bdt, comp) + connectTargetElementWithSourceElement(bdt, comp) ports.foreach(p => { - val integrator = getNextIntegratorForClassName(p) - val manager: IRoleManager = +p getManager () + val subRule = getSubTransformation(p) + val manager: ISyncManagerRole = +p getManager () if (manager != null) { - manager play integrator - val obj = integrator.integrate(p).asInstanceOf[sync.bdd.Port] - integrator.remove() + manager play subRule + val obj = subRule.transform(p).asInstanceOf[sync.bdd.Port] + subRule.remove() obj.setOwner(bdt) bdt.addPorts(obj) } diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesCellSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncCellModifications.scala similarity index 73% rename from solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesCellSync.scala rename to solutions/RSync/src/main/scala/ttc2019/worksync/SyncCellModifications.scala index 77fe3c75ee40a2b4f7f95a74b6380125f1bdaa50..d7d32ee41e7e39380edacd7cf2ae5dd92c9c57ae 100644 --- a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesCellSync.scala +++ b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncCellModifications.scala @@ -1,12 +1,12 @@ package ttc2019.worksync -import org.rosi_project.model_management.sync.ISyncCompartment -import org.rosi_project.model_management.sync.roles.ISyncRole +import org.rosi_project.model_management.sync.IModificationCompartment +import org.rosi_project.model_management.sync.roles.IModificationRole import org.rosi_project.model_management.core.PlayerSync -class SyncChangesCellSync() extends ISyncCompartment { +class SyncCellModifications() extends IModificationCompartment { - def getFirstRole(classname: Object): ISyncRole = { + def getFirstRole(classname: Object): IModificationRole = { if (classname.isInstanceOf[sync.tt.Cell]) return new Sync() return null @@ -18,13 +18,11 @@ class SyncChangesCellSync() extends ISyncCompartment { return false } - def getNewInstance(): ISyncCompartment = new SyncChangesCellSync + def getNewInstance(): IModificationCompartment = new SyncCellModifications - def getRuleName(): String = "SyncChangesCellSync" + class Sync() extends IModificationRole { - class Sync() extends ISyncRole { - - def getOuterCompartment(): ISyncCompartment = SyncChangesCellSync.this + def getOuterCompartment(): IModificationCompartment = SyncCellModifications.this /** * Rule which add ports to its root in each model. @@ -37,8 +35,8 @@ class SyncChangesCellSync() extends ISyncCompartment { //get value from cell val value: Boolean = +this getValue () //get needed ports - val opTreePort: PlayerSync = +port getRelatedClassFromName ("sync.bdd.Port") - //val opDiaPort: PlayerSync = +port getRelatedClassFromName ("sync.bddg.Port") + val opTreePort: PlayerSync = +port getRelatedObject ("sync.bdd.Port") + //val opDiaPort: PlayerSync = +port getRelatedObject ("sync.bddg.Port") //create assignments if (opTreePort != null) { val o_port = opTreePort.asInstanceOf[sync.bdd.OutputPort] diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncInputPortNamesSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncInputPortNamesSync.scala deleted file mode 100644 index ccc04f1246117c9fd0e11f9d082fd5658334fad8..0000000000000000000000000000000000000000 --- a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncInputPortNamesSync.scala +++ /dev/null @@ -1,57 +0,0 @@ -package ttc2019.worksync - -import org.rosi_project.model_management.sync.ISyncCompartment -import org.rosi_project.model_management.sync.roles.ISyncRole - -/** - * Synchronization compartment for input port names. - */ -class SyncInputPortNamesSync() extends ISyncCompartment { - - override def getNextRole(classname: Object): ISyncRole = { - if (classname.isInstanceOf[sync.bdd.InputPort] || classname.isInstanceOf[sync.bddg.InputPort] || classname.isInstanceOf[sync.tt.InputPort]) - return new Sync() - return null - } - - def getFirstRole(classname: Object): ISyncRole = { - if (classname.isInstanceOf[sync.tt.InputPort]) - return new Sync() - return null - } - - override def isNextIntegration(classname: Object): Boolean = { - if (classname.isInstanceOf[sync.bdd.InputPort] || classname.isInstanceOf[sync.bddg.InputPort] || classname.isInstanceOf[sync.tt.InputPort]) - return true - return false - } - - def isFirstIntegration(classname: Object): Boolean = { - if (classname.isInstanceOf[sync.tt.InputPort]) - return true - return false - } - - def getNewInstance(): ISyncCompartment = new SyncInputPortNamesSync - - def getRuleName(): String = "SyncInputPortNamesSync" - - class Sync() extends ISyncRole { - - def getOuterCompartment(): ISyncCompartment = SyncInputPortNamesSync.this - - def syncSetName(): Unit = { - if (!doSync) { - doSync = true; - var name: String = +this getName(); - getSyncer().foreach { a => - if (!a.equals(this)) { - (+a).setName(name); - } - } - doSync = false; - } - } - } - -} \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncHeadNamesSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncNames.scala similarity index 67% rename from solutions/RSync/src/main/scala/ttc2019/worksync/SyncHeadNamesSync.scala rename to solutions/RSync/src/main/scala/ttc2019/worksync/SyncNames.scala index a6812e97f8981efc8b86f4becad349c94b41456c..cb32fc30d8ab193a5d8e79645ba6849a8c49f228 100644 --- a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncHeadNamesSync.scala +++ b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncNames.scala @@ -1,20 +1,20 @@ package ttc2019.worksync -import org.rosi_project.model_management.sync.ISyncCompartment -import org.rosi_project.model_management.sync.roles.ISyncRole +import org.rosi_project.model_management.sync.IModificationCompartment +import org.rosi_project.model_management.sync.roles.IModificationRole /** * Synchronization compartment for full name split with space. */ -class SyncHeadNamesSync() extends ISyncCompartment { +class SyncNames() extends IModificationCompartment { - override def getNextRole(classname: Object): ISyncRole = { + override def getNextRole(classname: Object): IModificationRole = { if (classname.isInstanceOf[sync.bdd.BDD] || classname.isInstanceOf[sync.bddg.BDD] || classname.isInstanceOf[sync.tt.TruthTable]) return new Sync() return null } - def getFirstRole(classname: Object): ISyncRole = { + def getFirstRole(classname: Object): IModificationRole = { if (classname.isInstanceOf[sync.tt.TruthTable]) return new Sync() return null @@ -32,13 +32,11 @@ class SyncHeadNamesSync() extends ISyncCompartment { return false } - def getNewInstance(): ISyncCompartment = new SyncHeadNamesSync + def getNewInstance(): IModificationCompartment = new SyncNames - def getRuleName(): String = "SyncHeadNamesSync" + class Sync() extends IModificationRole { - class Sync() extends ISyncRole { - - def getOuterCompartment(): ISyncCompartment = SyncHeadNamesSync.this + def getOuterCompartment(): IModificationCompartment = SyncNames.this def syncSetName(): Unit = { if (!doSync) { diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncOutputPortNamesSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncOutputPortNamesSync.scala deleted file mode 100644 index 2723c6dfb17f0136c4bd331e3d0163453df6281e..0000000000000000000000000000000000000000 --- a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncOutputPortNamesSync.scala +++ /dev/null @@ -1,57 +0,0 @@ -package ttc2019.worksync - -import org.rosi_project.model_management.sync.ISyncCompartment -import org.rosi_project.model_management.sync.roles.ISyncRole - -/** - * Synchronization compartment for output port names. - */ -class SyncOutputPortNamesSync() extends ISyncCompartment { - - override def getNextRole(classname: Object): ISyncRole = { - if (classname.isInstanceOf[sync.bdd.OutputPort] || classname.isInstanceOf[sync.bddg.OutputPort] || classname.isInstanceOf[sync.tt.OutputPort]) - return new Sync() - return null - } - - def getFirstRole(classname: Object): ISyncRole = { - if (classname.isInstanceOf[sync.tt.OutputPort]) - return new Sync() - return null - } - - override def isNextIntegration(classname: Object): Boolean = { - if (classname.isInstanceOf[sync.bdd.OutputPort] || classname.isInstanceOf[sync.bddg.OutputPort] || classname.isInstanceOf[sync.tt.OutputPort]) - return true - return false - } - - def isFirstIntegration(classname: Object): Boolean = { - if (classname.isInstanceOf[sync.tt.OutputPort]) - return true - return false - } - - def getNewInstance(): ISyncCompartment = new SyncOutputPortNamesSync - - def getRuleName(): String = "SyncOutputPortNamesSync" - - class Sync() extends ISyncRole { - - def getOuterCompartment(): ISyncCompartment = SyncOutputPortNamesSync.this - - def syncSetName(): Unit = { - if (!doSync) { - doSync = true; - var name: String = +this getName(); - getSyncer().foreach { a => - if (!a.equals(this)) { - (+a).setName(name); - } - } - doSync = false; - } - } - } - -} \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncPortNamesSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncPortNames.scala similarity index 66% rename from solutions/RSync/src/main/scala/ttc2019/worksync/SyncPortNamesSync.scala rename to solutions/RSync/src/main/scala/ttc2019/worksync/SyncPortNames.scala index 6599721c8a81f1433851d9f45df6f4634f7ddae5..32e81ccc5aa891d8499ee2554caa987554388dc9 100644 --- a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncPortNamesSync.scala +++ b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncPortNames.scala @@ -1,20 +1,20 @@ package ttc2019.worksync -import org.rosi_project.model_management.sync.ISyncCompartment -import org.rosi_project.model_management.sync.roles.ISyncRole +import org.rosi_project.model_management.sync.IModificationCompartment +import org.rosi_project.model_management.sync.roles.IModificationRole /** * Synchronization compartment for port names. */ -class SyncPortNamesSync extends ISyncCompartment { +class SyncPortNames extends IModificationCompartment { - override def getNextRole(classname: Object): ISyncRole = { + override def getNextRole(classname: Object): IModificationRole = { if (classname.isInstanceOf[sync.bdd.Port] || classname.isInstanceOf[sync.bddg.Port] || classname.isInstanceOf[sync.tt.Port]) return new Sync() return null } - def getFirstRole(classname: Object): ISyncRole = { + def getFirstRole(classname: Object): IModificationRole = { if (classname.isInstanceOf[sync.tt.Port]) return new Sync() return null @@ -32,13 +32,11 @@ class SyncPortNamesSync extends ISyncCompartment { return false } - def getNewInstance(): ISyncCompartment = new SyncPortNamesSync + def getNewInstance(): IModificationCompartment = new SyncPortNames - def getRuleName(): String = "SyncPortNamesSync" + class Sync() extends IModificationRole { - class Sync() extends ISyncRole { - - def getOuterCompartment(): ISyncCompartment = SyncPortNamesSync.this + def getOuterCompartment(): IModificationCompartment = SyncPortNames.this def syncSetName(): Unit = { if (!doSync) { diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesTruthTableSync.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncTruthTableModifications.scala similarity index 89% rename from solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesTruthTableSync.scala rename to solutions/RSync/src/main/scala/ttc2019/worksync/SyncTruthTableModifications.scala index 896c7cc47fc6f80454660db82476b6ea5a345993..78f6081d68a48c4414026dbabf901f3b3abdb627 100644 --- a/solutions/RSync/src/main/scala/ttc2019/worksync/SyncChangesTruthTableSync.scala +++ b/solutions/RSync/src/main/scala/ttc2019/worksync/SyncTruthTableModifications.scala @@ -1,18 +1,18 @@ package ttc2019.worksync -import org.rosi_project.model_management.sync.ISyncCompartment -import org.rosi_project.model_management.sync.roles.ISyncRole +import org.rosi_project.model_management.sync.IModificationCompartment +import org.rosi_project.model_management.sync.roles.IModificationRole import org.rosi_project.model_management.core.PlayerSync -import org.rosi_project.model_management.sync.roles.IRoleManager +import org.rosi_project.model_management.sync.roles.ISyncManagerRole /** * Synchronization compartment between truth table and BDD to react on changing (adding or removing) a row. */ -class SyncChangesTruthTableSync() extends ISyncCompartment { +class SyncTruthTableModifications() extends IModificationCompartment { private var leafNodes: Map[Set[String], sync.bddg.Leaf] = Map.empty - def getFirstRole(classname: Object): ISyncRole = { + def getFirstRole(classname: Object): IModificationRole = { if (classname.isInstanceOf[sync.tt.TruthTable]) return new Sync() return null @@ -24,13 +24,11 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { return false } - def getNewInstance(): ISyncCompartment = new SyncChangesTruthTableSync + def getNewInstance(): IModificationCompartment = new SyncTruthTableModifications - def getRuleName(): String = "SyncChangesTruthTableSync" + class Sync() extends IModificationRole { - class Sync() extends ISyncRole { - - def getOuterCompartment(): ISyncCompartment = SyncChangesTruthTableSync.this + def getOuterCompartment(): IModificationCompartment = SyncTruthTableModifications.this /** * Rule which add ports to its root in each model. @@ -41,8 +39,8 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { doSync = true; //get connected bdds & tt & ports //add the ports to the bdds or tts - val opTreeBDD: PlayerSync = +this getRelatedClassFromName ("sync.bdd.BDD") - val opTreePort: PlayerSync = +port getRelatedClassFromName ("sync.bdd.Port") + val opTreeBDD: PlayerSync = +this getRelatedObject ("sync.bdd.BDD") + val opTreePort: PlayerSync = +port getRelatedObject ("sync.bdd.Port") if (opTreeBDD != null && opTreePort != null) { val reTreeBdd = opTreeBDD.asInstanceOf[sync.bdd.BDD] val reTreePort = opTreePort.asInstanceOf[sync.bdd.Port] @@ -50,8 +48,8 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { reTreePort.setOwner(reTreeBdd) } - val opDiaBDD: PlayerSync = +this getRelatedClassFromName ("sync.bddg.BDD") - val opDiaPort: PlayerSync = +port getRelatedClassFromName ("sync.bddg.Port") + val opDiaBDD: PlayerSync = +this getRelatedObject ("sync.bddg.BDD") + val opDiaPort: PlayerSync = +port getRelatedObject ("sync.bddg.Port") if (opDiaBDD != null && opDiaPort != null) { val reDiaBdd = opDiaBDD.asInstanceOf[sync.bddg.BDD] val reDiaPort = opDiaPort.asInstanceOf[sync.bddg.Port] @@ -59,8 +57,8 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { reDiaPort.setOwner(reDiaBdd) } - val opTtBDD: PlayerSync = +this getRelatedClassFromName ("sync.tt.TruthTable") - val opTtPort: PlayerSync = +port getRelatedClassFromName ("sync.tt.Port") + val opTtBDD: PlayerSync = +this getRelatedObject ("sync.tt.TruthTable") + val opTtPort: PlayerSync = +port getRelatedObject ("sync.tt.Port") if (opTtBDD != null && opTtPort != null) { val reTtBdd = opTtBDD.asInstanceOf[sync.tt.TruthTable] val reTtPort = opTtPort.asInstanceOf[sync.tt.Port] @@ -80,12 +78,12 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { //println("In Sync Remove Row") if (!doSync) { doSync = true - val opTreLeaf: PlayerSync = +row getRelatedClassFromName ("sync.bdd.Leaf") - //val opDiaLeaf: PlayerSync = +row getRelatedClassFromName ("sync.bddg.Leaf") + val opTreLeaf: PlayerSync = +row getRelatedObject ("sync.bdd.Leaf") + //val opDiaLeaf: PlayerSync = +row getRelatedObject ("sync.bddg.Leaf") if (opTreLeaf != null) { //exists connected BDT val reTreLeaf = opTreLeaf.asInstanceOf[sync.bdd.Leaf] - val relManagerLeaf: Set[IRoleManager] = +reTreLeaf getRelatedManager () + val relManagerLeaf: Set[ISyncManagerRole] = +reTreLeaf getRelatedManager () //do something if there is only one related manager than minimize the tree if (relManagerLeaf.size == 1) { if (reTreLeaf.getOwnerBDD() != null) { @@ -148,8 +146,8 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { val row = rowPS.asInstanceOf[sync.tt.Row] if (!doSync) { doSync = true; - val opTreeBDD: PlayerSync = +this getRelatedClassFromName ("sync.bdd.BDD") - //val opDiaBDD: PlayerSync = +this getRelatedClassFromName ("sync.bddg.BDD") + val opTreeBDD: PlayerSync = +this getRelatedObject ("sync.bdd.BDD") + //val opDiaBDD: PlayerSync = +this getRelatedObject ("sync.bddg.BDD") if (opTreeBDD != null) { val reBdd = opTreeBDD.asInstanceOf[sync.bdd.BDD] addNewRowCompleteTree(reBdd, row) @@ -195,7 +193,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { //add subtrees for all missing cells with input ports row.getCells().filter(c => !portList.contains(c.getPort()) && c.getPort().isInstanceOf[sync.tt.InputPort]).foreach(c => { - val opTreePort: PlayerSync = +(c.getPort()) getRelatedClassFromName ("sync.bddg.InputPort") + val opTreePort: PlayerSync = +(c.getPort()) getRelatedObject ("sync.bddg.InputPort") if (opTreePort != null) { val inputPort = opTreePort.asInstanceOf[sync.bddg.InputPort] var subtree = new sync.bddg.Subtree(null, null, inputPort, Set.empty, Set.empty, null) @@ -238,7 +236,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { assignment.setOwner(leaf) leaf.addAssignments(assignment) - val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("OutputPort") + val ttport: PlayerSync = +(cellout.getPort()) getRelatedObject ("OutputPort") if (ttport != null) { val o_port = ttport.asInstanceOf[sync.bddg.OutputPort] o_port.addAssignments(assignment) @@ -302,12 +300,12 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { if (newTree.isInstanceOf[sync.bdd.Leaf]) { val leaf = newTree.asInstanceOf[sync.bdd.Leaf] //Search connected assignement from cell - val oppRow: PlayerSync = +leaf getRelatedClassFromName ("sync.tt.Row") + val oppRow: PlayerSync = +leaf getRelatedObject ("sync.tt.Row") if (oppRow != null) { val otherRow = oppRow.asInstanceOf[sync.tt.Row] row.getCells().filter(c => !portList.contains(c.getPort()) && c.getPort().isInstanceOf[sync.tt.InputPort]).foreach(c => { otherRow.getCells().filter(cell => cell.getPort() == c.getPort() && cell.getValue() != c.getValue()).foreach(cell => { - val opTreePort: PlayerSync = +(c.getPort()) getRelatedClassFromName ("sync.bdd.InputPort") + val opTreePort: PlayerSync = +(c.getPort()) getRelatedObject ("sync.bdd.InputPort") if (opTreePort != null) { val inputPort = opTreePort.asInstanceOf[sync.bdd.InputPort] val subtree = new sync.bdd.Subtree(null, null, inputPort, null, null, null) @@ -346,7 +344,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { } else { //add subtrees for all missing cells with input ports row.getCells().filter(c => !portList.contains(c.getPort()) && c.getPort().isInstanceOf[sync.tt.InputPort]).foreach(c => { - val opTreePort: PlayerSync = +(c.getPort()) getRelatedClassFromName ("sync.bdd.InputPort") + val opTreePort: PlayerSync = +(c.getPort()) getRelatedObject ("sync.bdd.InputPort") if (opTreePort != null) { val inputPort = opTreePort.asInstanceOf[sync.bdd.InputPort] val subtree = new sync.bdd.Subtree(null, null, inputPort, null, null, null) @@ -374,7 +372,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { val newLeaf = new sync.bdd.Leaf(Set.empty, null, null, null) row.getCells().filter(c => c.getPort().isInstanceOf[sync.tt.OutputPort]).foreach(cellout => { //Search connected assignement from cell - val oppAssign: PlayerSync = +cellout getRelatedClassFromName ("sync.bdd.Assignment") + val oppAssign: PlayerSync = +cellout getRelatedObject ("sync.bdd.Assignment") if (oppAssign != null) { val assignment = oppAssign.asInstanceOf[sync.bdd.Assignment] assignment.setOwner(newLeaf) @@ -386,7 +384,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { assignment.setOwner(leaf) leaf.addAssignments(assignment) - val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("sync.bdd.OutputPort") + val ttport: PlayerSync = +(cellout.getPort()) getRelatedObject ("sync.bdd.OutputPort") if (ttport != null) { val o_port = ttport.asInstanceOf[sync.bdd.OutputPort] o_port.addAssignments(assignment) @@ -432,7 +430,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { if (firstCount < cellValue.size) { //you must split and add new stuff //TODO problem with more than one connected row - val opRowTT: PlayerSync = +this getRelatedClassFromName ("sync.tt.Row") + val opRowTT: PlayerSync = +this getRelatedObject ("sync.tt.Row") if (opRowTT != null) { val reRowTT = opRowTT.asInstanceOf[sync.tt.Row] //compare opponent row with this row @@ -448,7 +446,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { assignment.setOwner(newLeaf) newLeaf.addAssignments(assignment) - val ttport: PlayerSync = +(cellout.getPort()) getRelatedClassFromName ("OutputPort") + val ttport: PlayerSync = +(cellout.getPort()) getRelatedObject ("OutputPort") if (ttport != null) { val o_port = ttport.asInstanceOf[sync.bdd.OutputPort] o_port.addAssignments(assignment) @@ -459,7 +457,7 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { +cellout makePlayerSyncRelated (assignment) }) - val bdtInputPort: PlayerSync = +(cO.getPort()) getRelatedClassFromName ("InputPort") + val bdtInputPort: PlayerSync = +(cO.getPort()) getRelatedObject ("InputPort") if (bdtInputPort != null) { val i_port = bdtInputPort.asInstanceOf[sync.bdd.InputPort] var subtree: sync.bdd.Subtree = null @@ -490,8 +488,8 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { }) } } else { - val rmSubtree: IRoleManager = +oldLeaf getManager () - val rmRow: IRoleManager = +row getManager () + val rmSubtree: ISyncManagerRole = +oldLeaf getManager () + val rmRow: ISyncManagerRole = +row getManager () if (rmSubtree != null && rmRow != null) { rmSubtree.makeRelated(rmRow) } @@ -507,8 +505,8 @@ class SyncChangesTruthTableSync() extends ISyncCompartment { value = c.getValue() } }) - val rmSubtree: IRoleManager = +subtree getManager () - val rmRow: IRoleManager = +row getManager () + val rmSubtree: ISyncManagerRole = +subtree getManager () + val rmRow: ISyncManagerRole = +row getManager () if (rmSubtree != null && rmRow != null) { rmSubtree.makeRelated(rmRow) } diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/TTandBDTandBDDSyncConstruction.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/TTandBDTandBDDSyncConstruction.scala deleted file mode 100644 index c1d40e911f6213a99337890dc2065e85cda0357a..0000000000000000000000000000000000000000 --- a/solutions/RSync/src/main/scala/ttc2019/worksync/TTandBDTandBDDSyncConstruction.scala +++ /dev/null @@ -1,253 +0,0 @@ -package ttc2019.worksync - -import org.rosi_project.model_management.sync.IConstructionCompartment -import org.rosi_project.model_management.sync.roles.IConstructor -import org.rosi_project.model_management.core.PlayerSync -import org.rosi_project.model_management.sync.roles.IRoleManager -import org.rosi_project.model_management.core.SynchronizationCompartment - -/** - * Construction Process for Model BDD and TT. - */ -object TTandBDTandBDDSyncConstruction extends IConstructionCompartment { - - def getConstructorForClassName(classname: Object): IConstructor = { - if (classname.isInstanceOf[sync.tt.TruthTable]) - return new TTTruthTableConstruct() - if (classname.isInstanceOf[sync.bddg.BDD]) - return new BDDBddConstruct() - if (classname.isInstanceOf[sync.bdd.BDD]) - return new BDTBddConstruct() - if (classname.isInstanceOf[sync.tt.InputPort]) - return new TTInputPortConstruct() - if (classname.isInstanceOf[sync.bddg.InputPort]) - return new BDDInputPortConstruct() - if (classname.isInstanceOf[sync.bdd.InputPort]) - return new BDTInputPortConstruct() - if (classname.isInstanceOf[sync.tt.OutputPort]) - return new TTOutputPortConstruct() - if (classname.isInstanceOf[sync.bddg.OutputPort]) - return new BDDOutputPortConstruct() - if (classname.isInstanceOf[sync.bdd.OutputPort]) - return new BDTOutputPortConstruct() - //if (classname.isInstanceOf[sync.tt.Cell]) - // return new CellConstruct() - return new Suppressor - } - - def getRuleName: String = "TTandBDTandBDDSyncConstruction" - - class TTTruthTableConstruct() extends IConstructor { - - def construct(comp: PlayerSync, man: IRoleManager): Unit = { - //Step 1: Get construction values - val name: String = +this getName() - - //Step 2: Create the object in the other models - val dBdd = new sync.bddg.BDD(name, Set.empty, null, Set.empty) - val tBdd = new sync.bdd.BDD(name, null, Set.empty) - - //Step 3: Create Containers - createContainerElement(true, true, comp, man) - createContainerElement(false, true, dBdd, SynchronizationCompartment.createRoleManager()) - createContainerElement(false, true, tBdd, SynchronizationCompartment.createRoleManager()) - - //Step 4: Finish Creation - makeCompleteConstructionProcess(containers) - } - } - - class BDDBddConstruct() extends IConstructor { - - def construct(comp: PlayerSync, man: IRoleManager): Unit = { - //Step 1: Get construction values - val name: String = +this getName() - - //Step 2: Create the object in the other models - val tt = new sync.tt.TruthTable(name, Set.empty, Set.empty, null) - val tBdd = new sync.bdd.BDD(name, null, Set.empty) - - //Step 3: Create Containers - createContainerElement(true, true, comp, man) - createContainerElement(false, true, tt, SynchronizationCompartment.createRoleManager()) - createContainerElement(false, true, tBdd, SynchronizationCompartment.createRoleManager()) - - //Step 4: Finish Creation - makeCompleteConstructionProcess(containers) - } - } - - class BDTBddConstruct() extends IConstructor { - - def construct(comp: PlayerSync, man: IRoleManager): Unit = { - //Step 1: Get construction values - val name: String = +this getName() - - //Step 2: Create the object in the other models - val dBdd = new sync.bddg.BDD(name, Set.empty, null, Set.empty) - val tt = new sync.tt.TruthTable(name, Set.empty, Set.empty, null) - - //Step 3: Create Containers - createContainerElement(true, true, comp, man) - createContainerElement(false, true, dBdd, SynchronizationCompartment.createRoleManager()) - createContainerElement(false, true, tt, SynchronizationCompartment.createRoleManager()) - - //Step 4: Finish Creation - makeCompleteConstructionProcess(containers) - } - } - - class TTInputPortConstruct() extends IConstructor { - - def construct(comp: PlayerSync, man: IRoleManager): Unit = { - //Step 1: Get construction values - val name: String = +this getName() - - //Step 2: Create the object in the other models - val dIn = new sync.bddg.InputPort(Set.empty, name, null) - val tIn = new sync.bdd.InputPort(Set.empty, name, null) - - //Step 3: Create Containers - createContainerElement(true, true, comp, man) - createContainerElement(false, true, dIn, SynchronizationCompartment.createRoleManager()) - createContainerElement(false, true, tIn, SynchronizationCompartment.createRoleManager()) - - //Step 4: Finish Creation - makeCompleteConstructionProcess(containers) - } - } - - class BDDInputPortConstruct() extends IConstructor { - - def construct(comp: PlayerSync, man: IRoleManager): Unit = { - //Step 1: Get construction values - val name: String = +this getName() - - //Step 2: Create the object in the other models - val ttIn = new sync.tt.InputPort(name, Set.empty, null, null) - val tIn = new sync.bdd.InputPort(Set.empty, name, null) - - //Step 3: Create Containers - createContainerElement(true, true, comp, man) - createContainerElement(false, true, ttIn, SynchronizationCompartment.createRoleManager()) - createContainerElement(false, true, tIn, SynchronizationCompartment.createRoleManager()) - - //Step 4: Finish Creation - makeCompleteConstructionProcess(containers) - } - } - - class BDTInputPortConstruct() extends IConstructor { - - def construct(comp: PlayerSync, man: IRoleManager): Unit = { - //Step 1: Get construction values - val name: String = +this getName() - - //Step 2: Create the object in the other models - val dIn = new sync.bddg.InputPort(Set.empty, name, null) - val ttIn = new sync.tt.InputPort(name, Set.empty, null, null) - - //Step 3: Create Containers - createContainerElement(true, true, comp, man) - createContainerElement(false, true, dIn, SynchronizationCompartment.createRoleManager()) - createContainerElement(false, true, ttIn, SynchronizationCompartment.createRoleManager()) - - //Step 4: Finish Creation - makeCompleteConstructionProcess(containers) - } - } - - class TTOutputPortConstruct() extends IConstructor { - - def construct(comp: PlayerSync, man: IRoleManager): Unit = { - //Step 1: Get construction values - val name: String = +this getName() - - //Step 2: Create the object in the other models - val dOut = new sync.bddg.OutputPort(Set.empty, name, null) - val tOut = new sync.bdd.OutputPort(Set.empty, name, null) - - //Step 3: Create Containers - createContainerElement(true, true, comp, man) - createContainerElement(false, true, dOut, SynchronizationCompartment.createRoleManager()) - createContainerElement(false, true, tOut, SynchronizationCompartment.createRoleManager()) - - //Step 4: Finish Creation - makeCompleteConstructionProcess(containers) - } - } - - class BDDOutputPortConstruct() extends IConstructor { - - def construct(comp: PlayerSync, man: IRoleManager): Unit = { - //Step 1: Get construction values - val name: String = +this getName() - - //Step 2: Create the object in the other models - val ttOut = new sync.tt.OutputPort(name, Set.empty, null, null) - val tOut = new sync.bdd.OutputPort(Set.empty, name, null) - - //Step 3: Create Containers - createContainerElement(true, true, comp, man) - createContainerElement(false, true, ttOut, SynchronizationCompartment.createRoleManager()) - createContainerElement(false, true, tOut, SynchronizationCompartment.createRoleManager()) - - //Step 4: Finish Creation - makeCompleteConstructionProcess(containers) - } - } - - class BDTOutputPortConstruct() extends IConstructor { - - def construct(comp: PlayerSync, man: IRoleManager): Unit = { - //Step 1: Get construction values - val name: String = +this getName() - - //Step 2: Create the object in the other models - val dOut = new sync.bddg.OutputPort(Set.empty, name, null) - val ttOut = new sync.tt.OutputPort(name, Set.empty, null, null) - - //Step 3: Create Containers - createContainerElement(true, true, comp, man) - createContainerElement(false, true, dOut, SynchronizationCompartment.createRoleManager()) - createContainerElement(false, true, ttOut, SynchronizationCompartment.createRoleManager()) - - //Step 4: Finish Creation - makeCompleteConstructionProcess(containers) - } - } - - /*class CellConstruct extends IConstructor { - //TODO: should only be for output cells - override def construct(comp: PlayerSync, man: IRoleManager): Unit = { - //Step 1: Get construction values - val value: Boolean = +this getValue() - - //Step 2: Create the object in the other models - val dAll = new sync.bddg.Assignment(value, null, null) - val tAll = new sync.bdd.Assignment(value, null, null) - - //Step 3: Create Containers - createContainerElement(true, true, comp, man) - createContainerElement(false, true, dAll, SynchronizationCompartment.createRoleManager()) - createContainerElement(false, true, tAll, SynchronizationCompartment.createRoleManager()) - - //Step 4: Finish Creation - makeCompleteConstructionProcess(containers) - - /*// just set up the player - createContainerElement(start=true, con=true, comp, man) - makeCompleteConstructionProcess(containers)*/ - } - }*/ - - class Suppressor extends IConstructor { - - override def construct(comp: PlayerSync, man: IRoleManager): Unit = { - // just set up the player - createContainerElement(start=true, con=true, comp, man) - makeCompleteConstructionProcess(containers) - } - } - -} \ No newline at end of file diff --git a/solutions/RSync/src/main/scala/ttc2019/worksync/TtBdtBddConstruction.scala b/solutions/RSync/src/main/scala/ttc2019/worksync/TtBdtBddConstruction.scala new file mode 100644 index 0000000000000000000000000000000000000000..c3d0f664ab93e5432f95db882f0817f37aa2b4a9 --- /dev/null +++ b/solutions/RSync/src/main/scala/ttc2019/worksync/TtBdtBddConstruction.scala @@ -0,0 +1,224 @@ +package ttc2019.worksync + +import org.rosi_project.model_management.core.PlayerSync +import org.rosi_project.model_management.sync.IConstructionCompartment +import org.rosi_project.model_management.sync.roles.IConstructionRole +import org.rosi_project.model_management.sync.roles.ISyncManagerRole + +/** + * Construction Process for Model BDD and TT. + */ +object TtBdtBddConstruction extends IConstructionCompartment { + + def getConstructorForClassName(classname: Object): IConstructionRole = { + if (classname.isInstanceOf[sync.tt.TruthTable]) + return new TTTruthTableConstruct() + if (classname.isInstanceOf[sync.bddg.BDD]) + return new BDDBddConstruct() + if (classname.isInstanceOf[sync.bdd.BDD]) + return new BDTBddConstruct() + if (classname.isInstanceOf[sync.tt.InputPort]) + return new TTInputPortConstruct() + if (classname.isInstanceOf[sync.bddg.InputPort]) + return new BDDInputPortConstruct() + if (classname.isInstanceOf[sync.bdd.InputPort]) + return new BDTInputPortConstruct() + if (classname.isInstanceOf[sync.tt.OutputPort]) + return new TTOutputPortConstruct() + if (classname.isInstanceOf[sync.bddg.OutputPort]) + return new BDDOutputPortConstruct() + if (classname.isInstanceOf[sync.bdd.OutputPort]) + return new BDTOutputPortConstruct() + return new Suppressor + } + + class TTTruthTableConstruct() extends IConstructionRole { + + def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = { + //Step 1: Get construction values + val name: String = +this getName() + + //Step 2: Create the object in the other models + val dBdd = new sync.bddg.BDD(name, Set.empty, null, Set.empty) + val tBdd = new sync.bdd.BDD(name, null, Set.empty) + + //Step 3: Create Containers + createContainerElement(true, true, comp) + createContainerElement(false, true, dBdd) + createContainerElement(false, true, tBdd) + + //Step 4: Finish Creation + makeCompleteConstructionProcess(containers) + } + } + + class BDDBddConstruct() extends IConstructionRole { + + def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = { + //Step 1: Get construction values + val name: String = +this getName() + + //Step 2: Create the object in the other models + val tt = new sync.tt.TruthTable(name, Set.empty, Set.empty, null) + val tBdd = new sync.bdd.BDD(name, null, Set.empty) + + //Step 3: Create Containers + createContainerElement(true, true, comp) + createContainerElement(false, true, tt) + createContainerElement(false, true, tBdd) + + //Step 4: Finish Creation + makeCompleteConstructionProcess(containers) + } + } + + class BDTBddConstruct() extends IConstructionRole { + + def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = { + //Step 1: Get construction values + val name: String = +this getName() + + //Step 2: Create the object in the other models + val dBdd = new sync.bddg.BDD(name, Set.empty, null, Set.empty) + val tt = new sync.tt.TruthTable(name, Set.empty, Set.empty, null) + + //Step 3: Create Containers + createContainerElement(true, true, comp) + createContainerElement(false, true, dBdd) + createContainerElement(false, true, tt) + + //Step 4: Finish Creation + makeCompleteConstructionProcess(containers) + } + } + + class TTInputPortConstruct() extends IConstructionRole { + + def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = { + //Step 1: Get construction values + val name: String = +this getName() + + //Step 2: Create the object in the other models + val dIn = new sync.bddg.InputPort(Set.empty, name, null) + val tIn = new sync.bdd.InputPort(Set.empty, name, null) + + //Step 3: Create Containers + createContainerElement(true, true, comp) + createContainerElement(false, true, dIn) + createContainerElement(false, true, tIn) + + //Step 4: Finish Creation + makeCompleteConstructionProcess(containers) + } + } + + class BDDInputPortConstruct() extends IConstructionRole { + + def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = { + //Step 1: Get construction values + val name: String = +this getName() + + //Step 2: Create the object in the other models + val ttIn = new sync.tt.InputPort(name, Set.empty, null, null) + val tIn = new sync.bdd.InputPort(Set.empty, name, null) + + //Step 3: Create Containers + createContainerElement(true, true, comp) + createContainerElement(false, true, ttIn) + createContainerElement(false, true, tIn) + + //Step 4: Finish Creation + makeCompleteConstructionProcess(containers) + } + } + + class BDTInputPortConstruct() extends IConstructionRole { + + def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = { + //Step 1: Get construction values + val name: String = +this getName() + + //Step 2: Create the object in the other models + val dIn = new sync.bddg.InputPort(Set.empty, name, null) + val ttIn = new sync.tt.InputPort(name, Set.empty, null, null) + + //Step 3: Create Containers + createContainerElement(true, true, comp) + createContainerElement(false, true, dIn) + createContainerElement(false, true, ttIn) + + //Step 4: Finish Creation + makeCompleteConstructionProcess(containers) + } + } + + class TTOutputPortConstruct() extends IConstructionRole { + + def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = { + //Step 1: Get construction values + val name: String = +this getName() + + //Step 2: Create the object in the other models + val dOut = new sync.bddg.OutputPort(Set.empty, name, null) + val tOut = new sync.bdd.OutputPort(Set.empty, name, null) + + //Step 3: Create Containers + createContainerElement(true, true, comp) + createContainerElement(false, true, dOut) + createContainerElement(false, true, tOut) + + //Step 4: Finish Creation + makeCompleteConstructionProcess(containers) + } + } + + class BDDOutputPortConstruct() extends IConstructionRole { + + def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = { + //Step 1: Get construction values + val name: String = +this getName() + + //Step 2: Create the object in the other models + val ttOut = new sync.tt.OutputPort(name, Set.empty, null, null) + val tOut = new sync.bdd.OutputPort(Set.empty, name, null) + + //Step 3: Create Containers + createContainerElement(true, true, comp) + createContainerElement(false, true, ttOut) + createContainerElement(false, true, tOut) + + //Step 4: Finish Creation + makeCompleteConstructionProcess(containers) + } + } + + class BDTOutputPortConstruct() extends IConstructionRole { + + def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = { + //Step 1: Get construction values + val name: String = +this getName() + + //Step 2: Create the object in the other models + val dOut = new sync.bddg.OutputPort(Set.empty, name, null) + val ttOut = new sync.tt.OutputPort(name, Set.empty, null, null) + + //Step 3: Create Containers + createContainerElement(true, true, comp) + createContainerElement(false, true, dOut) + createContainerElement(false, true, ttOut) + + //Step 4: Finish Creation + makeCompleteConstructionProcess(containers) + } + } + + class Suppressor extends IConstructionRole { + + override def construct(comp: PlayerSync, man: ISyncManagerRole): Unit = { + // just set up the player + createContainerElement(start=true, con=true, comp) + makeCompleteConstructionProcess(containers) + } + } + +} \ No newline at end of file