Select Git revision
BddSyncIntegrationWithoutOrder.scala
BddSyncIntegrationWithoutOrder.scala 7.87 KiB
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 util.control.Breaks._
object BddSyncIntegrationWithoutOrder extends IIntegrationCompartment {
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 = {
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]])
})
}
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 portTT: sync.tt.Port = null
var cellis: Set[sync.tt.Cell] = Set.empty
breakable {
//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()))
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()}"
})