Skip to content
Snippets Groups Projects
Select Git revision
  • 293b3887919ad514a86b1b0664ac5d0acd83da74
  • master default protected
  • bug-collection
3 results

BddSyncIntegrationWithoutOrder.scala

Blame
  • 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()}"
                })