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

newest version of the RSYNC approach

+ optimization in the integration, and construction compartments
+ remove unused classes
+ add more synchronization rules
++ change port names
++ add ports to truth table
++ add row to truth table
++ remove row from truth table
parent c54d7e77
No related branches found
No related tags found
No related merge requests found
Showing
with 192 additions and 739 deletions
package org.rosi_project.example
object ExampleAml extends App {
/*val amlView = AmlanguageView.getNewView()
//Prototypes
val sucStack = amlView.createSystemUnitClass("Stack", "9")
val sucCrane = amlView.createSystemUnitClass("Crane", "10")
val sucRamp = amlView.createSystemUnitClass("Rampe", "11")
//System model
val ihPpu = amlView.createInstanceHierarchy("PPU", "1")
val ieStack1 = amlView.createInternalElement("Stack1", "2")
val ieCrane2 = amlView.createInternalElement("Crane2", "7")
val ieRamp3 = amlView.createInternalElement("Ramp3", "8")
val ieConveyor1 = amlView.createInternalElement("Conveyor1", "4")
val ieStore1 = amlView.createInternalElement("Store1", "5")
val ieSensor1 = amlView.createInternalElement("Sensor1", "6")
val attWeigth = amlView.createAttribute("50", "weigth", "3")
ihPpu.addInternalElements(ieStack1)
ihPpu.addInternalElements(ieCrane2)
ihPpu.addInternalElements(ieRamp3)
ieStack1.addInternalElements(ieConveyor1)
ieStack1.addInternalElements(ieStore1)
ieStack1.addAttributes(attWeigth)
ieStore1.addInternalElements(ieSensor1)
//connect prototyp and system model
ieStack1.setBaseSystemUnit(sucStack)
ieCrane2.setBaseSystemUnit(sucCrane)
ieRamp3.setBaseSystemUnit(sucRamp)
//amlView.printViewRoles()
//val ieSensor2 = amlView.createInternalElement("Sensor2", "12")
//ieStack1.addInternalElements(ieSensor2)
//runAllQueries()
runAllViewQueries()
def runAllViewQueries() {
//Query testing
query_1()
query_2()
query_3()
query_4()
query_5()
query_6()
query_7()
query_8()
}
def runAllQueries() {
//Query testing
query1()
query2()
query3()
query4()
query5()
query6()
query7()
query8()
}
/**
* Search for all objects that inherit from the CAEXObject.
*/
def query1(): Unit = {
//Query Objects
val q1 = new Query("Q1")
val co = new HelperCAEXObject("", "") //laufe über alle naturals im RSUM und suche, die die davon instanzen sind
//Query Roles & Settings
val r0 = q1.addQueryRole(co)
r0.label = "CO"
println(q1)
println(q1.runQuery())
}
def query1Dot1(): Unit = {
//Query Objects
val q11 = new Query("Q1.1")
val suc = new SystemUnitClass("SUC", "13")
//Query Roles & Settings
val r0 = q11.addQueryRole(suc)
r0.label = "SUC"
println(q11)
println(q11.runQuery())
}
/**
* Search for internal elements with special attribute properties.
*/
def query2(): Unit = {
//Query Objects
val q2 = new Query("Q2")
val ie = new InternalElement("", "")
val att = new Attribute("50", "weigth", "")
val ieRatt = new SystemUnitClassAttributesAttribute(ie, att)
ieRatt.internalInitialize()
//Query Roles & Settings
val r0 = q2.addQueryRole(ie)
r0.label = "IE"
val r1 = q2.addQueryRole(att)
r1.addAttributeFilter("name", "weigth", CheckingOption.equalsCheck)
r1.addAttributeFilter("value", "49", CheckingOption.biggerThan)
r1.label = "ATT"
val r2 = q2.addQueryRole(ieRatt)
println(q2)
println(q2.runQuery())
}
/**
* Searches for all childs of the "PPU" element
*/
def query3(): Unit = {
//Query Objects
val q3 = new Query("Q3")
val ih = new InstanceHierarchy("PPU","")
val ie = new InternalElement("", "")
val ihRie = new InstanceHierarchyInternalElementsInternalElement(ih, ie)
ihRie.internalInitialize()
//Query Roles & Settings
val r0 = q3.addQueryRole(ie)
r0.label = "IE"
val r1 = q3.addQueryRole(ih)
r1.addAttributeFilter("name", "PPU", CheckingOption.equalsCheck)
r1.label = "IH"
r1.returned = false
val r2 = q3.addQueryRole(ihRie)
println(q3)
println(q3.runQuery())
}
/**
* Searches all "PPU" elements with 2 deep childs.
*/
def query4(): Unit = {
//Query Objects
val q4 = new Query("Q4")
val ih = new InstanceHierarchy("PPU","") //wie kann ich auf die eigenschaften und werte prüfen
val ie1 = new InternalElement("", "")
val ie2 = new InternalElement("", "")
val ihRie = new InstanceHierarchyInternalElementsInternalElement(ih, ie1)
val ieRie = new SystemUnitClassInternalElementsInternalElement(ie1, ie2)
ihRie.internalInitialize()
ieRie.internalInitialize()
//Query Roles & Settings
val r0 = q4.addQueryRole(ie1)
r0.label = "IE1"
val r1 = q4.addQueryRole(ie2)
r1.label = "IE2"
val r2 = q4.addQueryRole(ih)
r2.addAttributeFilter("name", "PPU", CheckingOption.equalsCheck)
r2.label = "IH"
r2.returned = false
val r3 = q4.addQueryRole(ihRie)
val r4 = q4.addQueryRole(ieRie)
println(q4)
println(q4.runQuery())
}
/**
* Searches for all internal elements of the
* PPU instance hierarchy. Make transitive closure.
*/
def query5(): Unit = {
//Query Objects
val q5 = new Query("Q5")
val ih = new InstanceHierarchy("PPU","") //wie kann ich auf die eigenschaften und werte prüfen
val ie1 = new InternalElement("", "")
val ie2 = new InternalElement("", "")
val ihRie = new InstanceHierarchyInternalElementsInternalElement(ih, ie1)
val ieRie = new SystemUnitClassInternalElementsInternalElement(ie1, ie2)
ihRie.internalInitialize()
ieRie.internalInitialize()
//Query Roles & Settings
val r0 = q5.addQueryRole(ie1)
r0.label = "IE1"
val r1 = q5.addQueryRole(ie2)
r1.label = "IE2"
r1.transitive = true
val r2 = q5.addQueryRole(ih)
r2.addAttributeFilter("name", "PPU", CheckingOption.equalsCheck)
r2.label = "IH"
r2.returned = false
val r3 = q5.addQueryRole(ihRie)
val r4 = q5.addQueryRole(ieRie)
println(q5)
println(q5.runQuery())
}
/**
* Get all leave nodes.
*/
def query6(): Unit = {
//Query Objects
val q6 = new Query("Q6")
val ie1 = new InternalElement("", "")
val ie2 = new InternalElement("", "")
val ieRie = new SystemUnitClassInternalElementsInternalElement(ie1, ie2)
ieRie.internalInitialize()
//Query Roles & Settings
val r0 = q6.addQueryRole(ie1)
r0.label = "IE1"
val r1 = q6.addQueryRole(ie2)
r1.label = "IE2"
r1.negated = true
val r2 = q6.addQueryRole(ieRie)
println(q6)
println(q6.runQuery())
}
/**
* Selects all internal elements that refer
* to a system unit class (SUC) named “Stack”.
*/
def query7(): Unit = {
//Query Objects
val q7 = new Query("Q7")
val suc = new SystemUnitClass("Stack", "")
val ie = new InternalElement("", "")
val ieRsuc = new InternalElementBaseSystemUnitSystemUnitClass(ie, suc)
ieRsuc.internalInitialize()
//Query Roles & Settings
val r0 = q7.addQueryRole(ie)
r0.label = "IE"
val r1 = q7.addQueryRole(suc)
r1.addAttributeFilter("name", "Stack", CheckingOption.equalsCheck)
r1.label = "SUC"
r1.returned = false
val r2 = q7.addQueryRole(ieRsuc)
println(q7)
println(q7.runQuery())
}
/**
* Searches for all internal elements,
* which have more than two internal element as direct child
*/
def query8(): Unit = {
//Query Objects
val q8 = new Query("Q8")
val ie1 = new InternalElement("", "")
val ie2 = new InternalElement("", "")
val ieRie = new SystemUnitClassInternalElementsInternalElement(ie1, ie2)
ieRie.internalInitialize()
//Query Roles & Settings
val r0 = q8.addQueryRole(ie1)
r0.label = "IE1"
val r1 = q8.addQueryRole(ie2)
r1.label = "IE2"
r1.multi = 3 //means >= 3
val r2 = q8.addQueryRole(ieRie)
println(q8)
println(q8.runQuery())
}
def query_1(): Unit = {
//Query Objects
val q = new AmlanguageQuery
val co = q.createCAEXObject()
//Settings
co.getQueryObject.label = "CO"
println(q.getQuery())
println(q.getQuery().runQuery())
}
def query_2(): Unit = {
//Query Objects
val q = new AmlanguageQuery
val ie = q.createInternalElement()
val att = q.createAttribute()
ie.addAttributes(att)
//Settings
ie.getQueryObject.label = "IE"
att.getQueryObject.label = "ATT"
att.setValueView("49", CheckingOption.biggerThan)
att.setNameView("weigth", CheckingOption.equalsCheck)
//att.getQueryObject().addAttributeFilter("name", "weigth", CheckingOption.equalsCheck)
//att.getQueryObject().addAttributeFilter("value", "49", CheckingOption.biggerThan)
println(q.getQuery())
println(q.getQuery().runQuery())
}
def query_3(): Unit = {
//Query Objects
val q = new AmlanguageQuery
val ih = q.createInstanceHierarchy()
val ie = q.createInternalElement()
ih.addInternalElements(ie)
//Settings
ie.getQueryObject.label = "IE"
ih.getQueryObject.label = "IH"
ih.setNameView("PPU", CheckingOption.equalsCheck)
//ih.getQueryObject().addAttributeFilter("name", "PPU", CheckingOption.equalsCheck)
ih.getQueryObject.returned = false
println(q.getQuery())
println(q.getQuery().runQuery())
}
def query_4(): Unit = {
//Query Objects
val q = new AmlanguageQuery
val ih = q.createInstanceHierarchy()
val ie1 = q.createInternalElement()
val ie2 = q.createInternalElement()
ih.addInternalElements(ie1)
ie1.addInternalElements(ie2)
//Settings
ie1.getQueryObject.label = "IE1"
ie2.getQueryObject.label = "IE2"
ih.getQueryObject.label = "IH"
ih.setNameView("PPU", CheckingOption.equalsCheck)
//ih.getQueryObject().addAttributeFilter("name", "PPU", CheckingOption.equalsCheck)
ih.getQueryObject.returned = false
println(q.getQuery())
println(q.getQuery().runQuery())
}
def query_5(): Unit = {
//Query Objects
val q = new AmlanguageQuery
val ih = q.createInstanceHierarchy()
val ie1 = q.createInternalElement()
val ie2 = q.createInternalElement()
ih.addInternalElements(ie1)
ie1.addInternalElements(ie2)
//Settings
ie1.getQueryObject.label = "IE1"
ie2.getQueryObject.label = "IE2"
ie2.getQueryObject.transitive = true
ih.getQueryObject.label = "IH"
ih.setNameView("PPU", CheckingOption.equalsCheck)
//ih.getQueryObject().addAttributeFilter("name", "PPU", CheckingOption.equalsCheck)
ih.getQueryObject.returned = false
println(q.getQuery())
println(q.getQuery().runQuery())
}
def query_6(): Unit = {
//Query Objects
val q = new AmlanguageQuery
val ie1 = q.createInternalElement()
val ie2 = q.createInternalElement()
ie1.addInternalElements(ie2)
//Settings
ie1.getQueryObject.label = "IE1"
ie2.getQueryObject.label = "IE2"
ie2.getQueryObject.negated = true
println(q.getQuery())
println(q.getQuery().runQuery())
}
def query_7(): Unit = {
//Query Objects
val q = new AmlanguageQuery
val suc = q.createSystemUnitClass()
val ie = q.createInternalElement()
ie.setBaseSystemUnit(suc)
//Settings
ie.getQueryObject.label = "IE"
suc.getQueryObject.label = "SUC"
suc.setNameView("Stack", CheckingOption.equalsCheck)
//suc.getQueryObject().addAttributeFilter("name", "Stack", CheckingOption.equalsCheck)
suc.getQueryObject.returned = false
println(q.getQuery())
println(q.getQuery().runQuery())
}
def query_8(): Unit = {
//Query Objects
val q = new AmlanguageQuery
val ie1 = q.createInternalElement()
val ie2 = q.createInternalElement()
ie1.addInternalElements(ie2)
//Settings
ie1.getQueryObject.label = "IE1"
ie2.getQueryObject.label = "IE2"
ie2.getQueryObject.multi = 3 //means >= 3
println(q.getQuery())
println(q.getQuery().runQuery())
}*/
}
\ No newline at end of file
package org.rosi_project.example
object ExampleRSUM extends App {
/*var generatedView: LibraryView = LibraryView.getNewView()
var libi = generatedView.createLibrary("City Library")
generatedView.printViewRoles()
println(libi.getNameView())
println("%%%%%%%%%%%%%%%%%%%%%% Add views to lists %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
//RsumCompartment.addViewTypeInfo(CompleteView)
//RsumCompartment.addViewTypeInfo(EmployeesManagerView)
//RsumCompartment.addViewTypeInfo(LibrariesEmployeesView)
println("%%%%%%%%%%%%%%%%%%%%%% Create a view with all data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
var view: CompleteView = CompleteView.getNewView()
println("%%%%%%%%%%%%%%%%%%%%%% Create elements in the view %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
var libRole = view.createLibrary("City Library")
var empRole = view.createEmployee("Bill", "Smith", 45000)
var manRole = view.createEmployee("Bob", "Jones", 60000)
libRole.addEmployee(empRole)
empRole.setManager(manRole)
println(libRole.getNameView())
view.printViewRoles()
var list = view.getAllViewElements
println("Test1 " + view.getElementsWithClassName("LibraryRole"))
println("Test2 " + view.getElementsWithExample(empRole))
println("Test3 " + view.getMapOfElements())
//view.printViewRoles()
println("%%%%%%%%%%%%%%%%%%%%%% Activate other views %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
var view2: EmployeesManagerView = EmployeesManagerView.getNewView()
var view3: LibrariesEmployeesView = LibrariesEmployeesView.getNewView()
view.printViewRoles()
view2.printViewRoles()
view3.printViewRoles()
println("%%%%%%%%%%%%%%%%%%%%%% Create a new relation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
libRole.addEmployee(manRole)
println("%%%%%%%%%%%%%%%%%%%%%% Change the name of an employee in a view %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
empRole.setFirstNameView("Max")
view.printViewRoles()
view2.printViewRoles()
view3.printViewRoles()
//println("%%%%%%%%%%%%%%%%%%%%%% Print status %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
//RsumCompartment.printStatus()
println("%%%%%%%%%%%%%%%%%%%%%% Remove an employee %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
//libRole.deleteElement()
empRole.deleteElement()
//manRole.deleteElement()
//hasMan.deleteElement()
//hasEmp2.deleteElement()
//println("%%%%%%%%%%%%%%%%%%%%%% Print status %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
//RsumCompartment.printStatus()
view.printViewRoles()
view2.printViewRoles()
view3.printViewRoles()*/
}
\ No newline at end of file
package org.rosi_project.example
object ModelJoinExample extends App {
/*println("%%%%%%%%%%%%%%%%%%%%%% Create new views %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
var eclipseView = EclipselibraryView.getNewView()
var imdbView = ImdbdatabaseView.getNewView()
println("%%%%%%%%%%%%%%%%%%%%%% Add joinable filmes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
var avaFilmRole = imdbView.createFilm(2013, "Avatar Aufbruch nach Pandory")
var avaVideoRole = eclipseView.createVideoCassette(false, 230, "Avatar Aufbruch nach Pandory", new Date())
var dwFilmRole = imdbView.createFilm(2018, "Death Wish")
var asterViedeoRole = eclipseView.createVideoCassette(false, 90, "Asterix erobert Rom", new Date())
println(avaVideoRole.getTitleView())
eclipseView.printViewRoles()
imdbView.printViewRoles()
RsumCompartment.printStatus
println("%%%%%%%%%%%%%%%%%%%%%% Add the join view %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
var joinView = JoinEclipseImdbView.getNewView()
eclipseView.printViewRoles()
imdbView.printViewRoles()
joinView.printViewRoles()
RsumCompartment.printStatus
println("%%%%%%%%%%%%%%%%%%%%%% Test Println Options for variables %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
joinView.getElementsWithClassName("JoinMovieRole").foreach(r => {
val movie = r.asInstanceOf[JoinEclipseImdbView#JoinMovieRole]
println(movie.getTitleView())
println(movie.getDamagedView())
println(movie.getMinutesLengthView())
})
println("%%%%%%%%%%%%%%%%%%%%%% Remove Avatar in the Join View %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
joinView.getElementsWithClassName("JoinMovieRole").foreach(r => {
val movie = r.asInstanceOf[JoinEclipseImdbView#JoinMovieRole]
if (movie.getTitleView() == "Avatar Aufbruch nach Pandory") {
movie.deleteElement()
}
})
eclipseView.printViewRoles()
imdbView.printViewRoles()
joinView.printViewRoles()
RsumCompartment.printStatus
println("%%%%%%%%%%%%%%%%%%%%%% Add Death Wish in video view %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
var dwVideoRole = eclipseView.createVideoCassette(true, 98, "Death Wish", new Date())
eclipseView.printViewRoles()
imdbView.printViewRoles()
joinView.printViewRoles()
RsumCompartment.printStatus
println("%%%%%%%%%%%%%%%%%%%%%% Create elements in the view %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
var movieRole = joinView.createMovie(1979, "Star Trek I", false, 132, new Date())
//var movie2Role = joinView.createMovie(1996, "Star Trek VIII", false, 111, new Date())
var filmRole = imdbView.createFilm(1994, "Star Trek VII")
println("Year: " + movieRole.getYearView())
println("Minutes: " + movieRole.getMinutesLengthView())
println("Title: " + movieRole.getTitleView())
var list = joinView.getAllViewElements
eclipseView.printViewRoles()
imdbView.printViewRoles()
joinView.printViewRoles()
RsumCompartment.printStatus
println("%%%%%%%%%%%%%%%%%%%%%% Add also video cassette from Star Trek VII %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
var videoRole = eclipseView.createVideoCassette(false, 130, "Star Trek VII", new Date())
eclipseView.printViewRoles()
joinView.printViewRoles()
RsumCompartment.printStatus
println("%%%%%%%%%%%%%%%%%%%%%% Add Relations in Film view and show results in other views %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
var imdbRole = imdbView.createIMDB()
imdbRole.addFilms(filmRole)
imdbView.printViewRoles()
joinView.printViewRoles()
RsumCompartment.printStatus
println("%%%%%%%%%%%%%%%%%%%%%% Add Relations in join view and show results in other views %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
var voteRole = joinView.createVote(6)
movieRole.addVotes(voteRole)
eclipseView.printViewRoles()
imdbView.printViewRoles()
joinView.printViewRoles()
RsumCompartment.printStatus
println("%%%%%%%%%%%%%%%%%%%%%% Change the name of Star Trek I in a view %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
movieRole.setTitleView("Star Trek I The Beginning")
eclipseView.printViewRoles()
imdbView.printViewRoles()
joinView.printViewRoles()
RsumCompartment.printStatus
println("%%%%%%%%%%%%%%%%%%%%%% Remove the movie Start Trek I %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%")
movieRole.deleteElement()
eclipseView.printViewRoles()
imdbView.printViewRoles()
joinView.printViewRoles()
RsumCompartment.printStatus*/
}
\ No newline at end of file
......@@ -27,7 +27,8 @@ object ModelElementLists {
if (elementsWithClass.isEmpty) {
elements += (obj.getClass -> Set(obj))
} else {
elements += (obj.getClass -> (elementsWithClass.get ++ Set(obj)))
//var seti = (elementsWithClass.get ++ Set(obj))
elements += (obj.getClass -> (elementsWithClass.get + obj))
}
}
......
......@@ -256,7 +256,7 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
case _ =>
}
//if role manager was not integrated before then integrate now
//if synchronization compartment was not integrated before then integrate now
if (proof) {
//add new role to the player
//the new compartment
......@@ -275,10 +275,12 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
val player = r.player
if (player.isRight) {
val realPlayer = player.right.get
if (newComp.isNextIntegration(realPlayer)) {
val newRole = newComp.getNextIntegrationRole(realPlayer)
r play newRole
}
}
}
this combine newComp
running = true
break
......@@ -397,6 +399,17 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
null
}
def getSetRelatedClassesFromName(name: String): Set[PlayerSync] = {
var resultSet: Set[PlayerSync] = Set.empty
getRelatedManager.foreach(rm => {
val realPlayer = rm.player.right.get
if (realPlayer.getClass.getName.contains(name) || realPlayer.getClass.getSuperclass.getName.contains(name)) {
resultSet += realPlayer.asInstanceOf[PlayerSync]
}
})
resultSet
}
def insertNotification(): Unit = {
//println("Insert Notification")
+this notifyInsertion ()
......@@ -432,11 +445,18 @@ object SynchronizationCompartment extends ISynchronizationCompartment {
if (construct != null) {
this play construct
underConstruction = true;
var list = +this construct (value, this)
val _ = +this construct (value, this)
underConstruction = false;
construct.remove()
}
}
/**
* Create a relation between two IRoleManager and RoleManager of other PlayerSync instances.
*/
def makePlayerSyncRelated(playerSync: PlayerSync): Unit = {
+playerSync makeRelated (this)
}
}
}
......@@ -2,12 +2,10 @@ package org.rosi_project.model_management.sync
import scroll.internal.Compartment
import scala.collection.mutable.ListBuffer
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
/**
* Interface for each construction rule.
*/
......@@ -20,7 +18,7 @@ trait IConstructionCompartment extends Compartment {
def getRuleName: String
private def addExtensionRoles(containers: ListBuffer[ConstructionContainer]): Unit = {
private def addExtensionRoles(containers: Set[ConstructionContainer]): Unit = {
containers.foreach { cc =>
if (cc.isConstructed) {
SynchronizationCompartment.getExtensions().foreach { e =>
......@@ -33,7 +31,8 @@ trait IConstructionCompartment extends Compartment {
}
}
private def notifyExtensionRoles(containers: ListBuffer[ConstructionContainer]): Unit = {
private def notifyExtensionRoles(containers: Set[ConstructionContainer]): Unit = {
if (!SynchronizationCompartment.getExtensions().isEmpty) {
containers.foreach { cc =>
if (cc.isConstructed) {
var playerInstance = cc.getPlayerInstance()
......@@ -41,11 +40,12 @@ trait IConstructionCompartment extends Compartment {
}
}
}
}
/**
* Add the RoleManager roles from the synchronization compartment if necessary
*/
protected def addManagerRoles(containers: ListBuffer[ConstructionContainer]): Unit = {
protected def addManagerRoles(containers: Set[ConstructionContainer]): Unit = {
containers.foreach { cc =>
if (cc.isConstructed && !cc.isStartElement) {
cc.getPlayerInstance play cc.getManagerInstance
......@@ -56,7 +56,7 @@ trait IConstructionCompartment extends Compartment {
/**
* Add the delete roles for the elements in the ConstructionContainers.
*/
protected def addDeleteRoles(containers: ListBuffer[ConstructionContainer]): Unit = {
protected def addDeleteRoles(containers: Set[ConstructionContainer]): Unit = {
containers.foreach { cc =>
if (cc.isConstructed) {
cc.getManagerInstance() play SynchronizationCompartment.getDestructionRule().getDestructorForClassName(cc.getPlayerInstance())
......@@ -67,7 +67,7 @@ trait IConstructionCompartment extends Compartment {
/**
* Add the related RoleManagers for the elements in the ConstructionContainers.
*/
protected def addRelatedRoleManager(containers: ListBuffer[ConstructionContainer]): Unit = {
protected def addRelatedRoleManager(containers: Set[ConstructionContainer]): Unit = {
containers.foreach { cc =>
containers.foreach { inner =>
cc.getManagerInstance.addRelatedManager(inner.getManagerInstance)
......@@ -78,7 +78,7 @@ trait IConstructionCompartment extends Compartment {
/**
* Combine the SynchronizationCompartment with all Players from the ConstructionContainers.
*/
protected def synchronizeCompartments(containers: ListBuffer[ConstructionContainer]): Unit = {
protected def synchronizeCompartments(containers: Set[ConstructionContainer]): Unit = {
containers.foreach { cc =>
if (cc.isConstructed() && !cc.isStartElement()) {
SynchronizationCompartment combine cc.getPlayerInstance
......@@ -89,7 +89,7 @@ trait IConstructionCompartment extends Compartment {
/**
* Create the Synchronization mechanisms for the elements in the ConstructionContainers.
*/
protected def bindSynchronizationRules(containers: ListBuffer[ConstructionContainer]): Unit = {
protected def bindSynchronizationRules(containers: Set[ConstructionContainer]): Unit = {
SynchronizationCompartment.getSyncRules().foreach { s =>
var sync: ISyncCompartment = null
//Proof all container for integration
......@@ -111,13 +111,13 @@ trait IConstructionCompartment extends Compartment {
/**
* Fill the test lists with all Players from the ConstructionContainers.
*/
protected def fillTestLists(containers: ListBuffer[ConstructionContainer]): Unit = {
protected def fillTestLists(containers: Set[ConstructionContainer]): Unit = {
containers.foreach { cc =>
ModelElementLists.addElement(cc.getPlayerInstance)
}
}
protected def makeCompleteConstructionProcess(containers: ListBuffer[ConstructionContainer]): Unit = {
protected def makeCompleteConstructionProcess(containers: Set[ConstructionContainer]): Unit = {
//first synchronize new compartments
//var t1 = System.nanoTime()
this.synchronizeCompartments(containers)
......
package org.rosi_project.model_management.sync
import scroll.internal.Compartment
import scala.collection.mutable.ListBuffer
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
......@@ -26,7 +25,7 @@ trait IIntegrationCompartment extends Compartment {
def finalEditFunction(): Unit
protected def connectTargetElementWithSourceElementes(target: PlayerSync, sourceList: Set[PlayerSync]): Unit = {
var containers: ListBuffer[IntegrationContainer] = ListBuffer.empty
var containers: Set[IntegrationContainer] = Set.empty
//Create Containers
sourceList.foreach(e => {
containers += new IntegrationContainer(target, e)
......@@ -36,14 +35,14 @@ trait IIntegrationCompartment extends Compartment {
}
protected def connectTargetElementWithSourceElemente(target: PlayerSync, source: PlayerSync): Unit = {
var containers: ListBuffer[IntegrationContainer] = ListBuffer.empty
var containers: Set[IntegrationContainer] = Set.empty
//Create Container
containers += new IntegrationContainer(target, source)
//Finish Creation
makeCompleteIntegrationProcess(containers)
}
private def addExtensionRoles(containers: ListBuffer[IntegrationContainer]): Unit = {
private def addExtensionRoles(containers: Set[IntegrationContainer]): Unit = {
containers.filter(_.newManagerConnection).foreach { cc =>
SynchronizationCompartment.getExtensions().foreach { e =>
var role = e.getExtensionForClassName(cc.getNewPlayerInstance())
......@@ -54,17 +53,19 @@ trait IIntegrationCompartment extends Compartment {
}
}
private def notifyExtensionRoles(containers: ListBuffer[IntegrationContainer]): Unit = {
private def notifyExtensionRoles(containers: Set[IntegrationContainer]): Unit = {
if (!SynchronizationCompartment.getExtensions().isEmpty) {
containers.filter(_.newManagerConnection).foreach { cc =>
var playerInstance = cc.getNewPlayerInstance()
+playerInstance insertNotification ()
}
}
}
/**
* Add Manager roles to all constructed elements.
*/
private def addManagerRoles(containers: ListBuffer[IntegrationContainer]): Unit = {
private def addManagerRoles(containers: Set[IntegrationContainer]): Unit = {
containers.filter(_.newManagerConnection).foreach { cc =>
cc.getNewPlayerInstance() play cc.getNewManagerInstance()
}
......@@ -73,7 +74,7 @@ trait IIntegrationCompartment extends Compartment {
/**
* Add the delete roles for the elements in the IntegrationContainer.
*/
private def addDeleteRoles(containers: ListBuffer[IntegrationContainer]): Unit = {
private def addDeleteRoles(containers: Set[IntegrationContainer]): Unit = {
containers.filter(_.newManagerConnection).foreach { cc =>
cc.getNewManagerInstance() play SynchronizationCompartment.getDestructionRule().getDestructorForClassName(cc.getNewPlayerInstance())
}
......@@ -82,22 +83,19 @@ trait IIntegrationCompartment extends Compartment {
/**
* Add the related RoleManagers for the elements in the IntegrationContainer.
*/
private def addRelatedRoleManager(containers: ListBuffer[IntegrationContainer]): Unit = {
private def addRelatedRoleManager(containers: Set[IntegrationContainer]): Unit = {
containers.foreach { cc =>
if (cc.simpleRelatedManagerConnection) {
val oldPlayer = cc.getOldPlayerInstance()
if (cc.simpleRelatedManagerConnection) {
val manager: IRoleManager = +oldPlayer getManager ()
if (manager != null) {
manager.addRelatedManager(cc.getNewManagerInstance())
cc.getNewManagerInstance().addRelatedManager(manager)
manager.makeRelated(cc.getNewManagerInstance())
}
} else {
val oldPlayer = cc.getOldPlayerInstance()
val allManager: Set[IRoleManager] = +oldPlayer getAllManager ()
if (allManager != null) {
allManager.foreach { r =>
r.addRelatedManager(cc.getNewManagerInstance())
cc.getNewManagerInstance().addRelatedManager(r)
r.makeRelated(cc.getNewManagerInstance())
}
}
}
......@@ -107,7 +105,7 @@ trait IIntegrationCompartment extends Compartment {
/**
* Combine the SynchronizationCompartment with all Players from the IntegrationContainer.
*/
private def synchronizeCompartments(containers: ListBuffer[IntegrationContainer]): Unit = {
private def synchronizeCompartments(containers: Set[IntegrationContainer]): Unit = {
containers.filter(_.newManagerConnection).foreach { cc =>
SynchronizationCompartment combine cc.getNewPlayerInstance()
}
......@@ -116,7 +114,7 @@ trait IIntegrationCompartment extends Compartment {
/**
* Create the Synchronization mechanisms for the elements in the IntegrationContainer.
*/
private def bindSynchronizationRules(containers: ListBuffer[IntegrationContainer]): Unit = {
private def bindSynchronizationRules(containers: Set[IntegrationContainer]): Unit = {
containers.filter(_.newManagerConnection).foreach { cc =>
val oldPlayer = cc.getOldPlayerInstance()
val allManager: Set[IRoleManager] = +oldPlayer getAllManager ()
......@@ -154,7 +152,7 @@ trait IIntegrationCompartment extends Compartment {
/**
* Fill the test lists with all Players from the IntegrationContainer.
*/
private def fillTestLists(containers: ListBuffer[IntegrationContainer]): Unit = {
private def fillTestLists(containers: Set[IntegrationContainer]): Unit = {
containers.filter(_.newManagerConnection).foreach { cc =>
ModelElementLists.addElement(cc.getNewPlayerInstance())
}
......@@ -163,7 +161,7 @@ trait IIntegrationCompartment extends Compartment {
/**
* Do the integration process automatically.
*/
protected def makeCompleteIntegrationProcess(containers: ListBuffer[IntegrationContainer]): Unit = {
protected def makeCompleteIntegrationProcess(containers: Set[IntegrationContainer]): Unit = {
containers.foreach(cc => {
if (cc.getNewManagerInstance() == null) {
val newPlayer = cc.getNewPlayerInstance()
......@@ -180,7 +178,7 @@ trait IIntegrationCompartment extends Compartment {
//add new role managers to the new players
this.addManagerRoles(containers)
this.addDeleteRoles(containers)
//this.addDeleteRoles(containers)
this.addRelatedRoleManager(containers)
//combines the new compartments with the existing ones
this.synchronizeCompartments(containers)
......
......@@ -17,12 +17,15 @@ trait ISyncCompartment extends Compartment {
/**
* All sync roles of this synchronization rule.
*/
protected var syncer = Set.empty[ISyncRole]
private var syncer: Set[ISyncRole] = Set.empty
/**
* Get roles for all integration classes.
*/
protected def getNextRole(classname: Object) : ISyncRole
protected def getNextRole(classname: Object) : ISyncRole = {
getFirstRole(classname)
}
/**
* Get roles for integration classes. Should give less roles than getNextRole.
*/
......@@ -30,13 +33,10 @@ trait ISyncCompartment extends Compartment {
def containsSyncer(value: Object): Boolean = {
syncer.foreach { s =>
//println("Equals: " + s.player + " " + value.player)
//TODO: das hier muss cleaner werden
if (s.player.equals(value.player)) {
//println("++Equals true")
if (+s == +value) {
//if (s.player.equals(value.player)) {
return true;
}
//println("++Equals false")
}
return false
}
......@@ -54,7 +54,7 @@ trait ISyncCompartment extends Compartment {
* Clear the list of all sync roles.
*/
def clearSyncer(): Unit = {
syncer = Set.empty[ISyncRole]
syncer = Set.empty
}
/**
......@@ -85,7 +85,9 @@ trait ISyncCompartment extends Compartment {
/**
* Get boolean if next integration
*/
def isNextIntegration(classname: Object): Boolean
def isNextIntegration(classname: Object): Boolean = {
isFirstIntegration(classname)
}
/**
* Create a new instance of this class.
......
......@@ -19,15 +19,41 @@ object GeneralDestructor extends IDestructionCompartment {
class DeleteRole() extends IDestructor {
def deleteRoleFunction(): Unit = {
//println("##Delete roles and related from Player: " + this.player)
//remove this manager from all related ones
+this removeThisManager()
//clear list of related manager
+this clearRelatedManager()
//send notification about deletion
+this deletionNotification()
//delete all roles this element has
val player = this.player
if (player.isRight) {
val test: PlayerSync = player.right.get.asInstanceOf[PlayerSync]
ModelElementLists.removeElement(test)
val roles = test.roles()
roles.foreach { r =>
r.remove()
}
}
}
}
class DeleteRoleAndConnections() extends IDestructor {
def deleteRoleFunction(): Unit = {
//get the list of related manager
var relatedManagers: Set[IRoleManager] = (+this).getRelatedManager()
//clear all lists from the related managers
(+this).clearListsOfRelatedManager()
//delete also all related elements
relatedManagers.foreach { m =>
(+m).deleteObjectFromSynchro()
}
//send notification about deletion
(+this).deletionNotification()
//clear now the related manager list
......
......@@ -22,7 +22,7 @@ object SuppressingConstructionCompartment extends IConstructionCompartment {
override def construct(comp: PlayerSync, man: IRoleManager): Unit = {
// just set up the player
createContainerElement(start=true, con=true, comp, man)
SuppressingConstructionCompartment.this.makeCompleteConstructionProcess(containers)
makeCompleteConstructionProcess(containers)
}
}
......
......@@ -2,7 +2,6 @@ package org.rosi_project.model_management.sync.roles
import org.rosi_project.model_management.core.PlayerSync
import org.rosi_project.model_management.sync.helper.ConstructionContainer
import scala.collection.mutable.ListBuffer
/**
* Interface for the constructor roles.
......@@ -12,7 +11,7 @@ trait IConstructor {
/**
* Container list for the construction process.
*/
protected var containers: ListBuffer[ConstructionContainer] = ListBuffer[ConstructionContainer]()
protected var containers: Set[ConstructionContainer] = Set.empty
/**
* Create a container element with the incoming configuration.
......@@ -20,8 +19,7 @@ trait IConstructor {
protected def createContainerElement(start: Boolean, con: Boolean, play: PlayerSync, man: IRoleManager): Unit = {
if (play == null)
return
var cc = new ConstructionContainer(start, con, play, man)
containers += cc
containers += new ConstructionContainer(start, con, play, man)
}
/**
......
package org.rosi_project.model_management.sync.roles
import scala.collection.mutable.ListBuffer
import org.rosi_project.model_management.sync.helper.IntegrationContainer
import org.rosi_project.model_management.core.PlayerSync
import org.rosi_project.model_management.core.SynchronizationCompartment
......@@ -13,16 +12,15 @@ trait IIntegrator {
/**
* Container list for the integration process.
*/
protected var containers = ListBuffer[IntegrationContainer]()
protected var containers: Set[IntegrationContainer] = Set.empty
/**
* Create a container element with the incoming configuration.
*/
protected def createContainerElement(newPlayer: PlayerSync, oldPlayer: PlayerSync): Unit = {
if (oldPlayer == null || oldPlayer == null)
if (newPlayer == null || oldPlayer == null)
return
var cc = new IntegrationContainer(newPlayer, oldPlayer)
containers += cc
containers += new IntegrationContainer(newPlayer, oldPlayer)
}
/**
......
......@@ -15,7 +15,7 @@ trait IRoleManager {
* Add a related manager to the list.
*/
def addRelatedManager(related: IRoleManager): Unit = {
if (related == null || related.equals(this) || relatedManager.contains(related))
if (related == null || related.equals(this))
return
relatedManager += related
}
......@@ -68,6 +68,14 @@ trait IRoleManager {
relatedManager = Set.empty
}
/**
* Create a relation between two IRoleManager instances.
*/
def makeRelated(relate: IRoleManager): Unit = {
this.addRelatedManager(relate)
relate.addRelatedManager(this)
}
/**
* General manage function for external call.
*/
......@@ -83,13 +91,13 @@ trait IRoleManager {
*/
def getRelatedClassFromName(name: String): PlayerSync
def printAllManager(): Unit
/**
* Create a relation between two IRoleManager and RoleManager of other PlayerSync instances.
*/
def makePlayerSyncRelated(playerSync: PlayerSync): Unit
/**
* Create a relation between two IRoleManager instances.
* Print all Manager only for debug.
*/
def makeRelated(relate: IRoleManager): Unit = {
this.addRelatedManager(relate)
relate.addRelatedManager(this)
}
def printAllManager(): Unit
}
......@@ -18,6 +18,7 @@ class Assignment(protected var value: Boolean, protected var owner: Leaf, protec
}
def setOwner(o: Leaf): Unit = {
require(o != null)
owner = o
+this syncSetOwner ()
}
......@@ -27,6 +28,7 @@ class Assignment(protected var value: Boolean, protected var owner: Leaf, protec
}
def setPort(p: OutputPort): Unit = {
require(p != null)
port = p
+this syncSetPort ()
}
......
......@@ -9,6 +9,7 @@ class BDD(protected var name: String, protected var tree: Tree, protected var po
}
def setName(n: String): Unit = {
require(n != null)
name = n
+this syncSetName ()
}
......@@ -18,6 +19,7 @@ class BDD(protected var name: String, protected var tree: Tree, protected var po
}
def setTree(t: Tree): Unit = {
require(t != null)
tree = t
+this syncSetTree ()
}
......@@ -27,11 +29,15 @@ class BDD(protected var name: String, protected var tree: Tree, protected var po
}
def addPorts(p: Port): Unit = {
require(p != null)
require(!ports.contains(p))
ports += p
+this syncAddPorts (p)
}
def removePorts(p: Port): Unit = {
require(p != null)
require(ports.contains(p))
ports -= p
+this syncRemovePorts (p)
}
......
......@@ -7,11 +7,15 @@ class InputPort(protected var subtrees: Set[Subtree], p_Name: String, p_Owner: B
}
def addSubtrees(s: Subtree): Unit = {
require(s != null)
require(!subtrees.contains(s))
subtrees += s
+this syncAddSubtrees (s)
}
def removeSubtrees(s: Subtree): Unit = {
require(s != null)
require(subtrees.contains(s))
subtrees -= s
+this syncRemoveSubtrees (s)
}
......
......@@ -7,11 +7,15 @@ class Leaf(protected var assignments: Set[Assignment], t_OwnerSubtreeForOne: Sub
}
def addAssignments(a: Assignment): Unit = {
require(a != null)
require(!assignments.contains(a))
assignments += a
+this syncAddAssignments (a)
}
def removeAssignments(a: Assignment): Unit = {
require(a != null)
require(assignments.contains(a))
assignments -= a
+this syncRemoveAssignments (a)
}
......
......@@ -7,11 +7,15 @@ class OutputPort(protected var assignments: Set[Assignment], p_Name: String, p_O
}
def addAssignments(a: Assignment): Unit = {
require(a != null)
require(!assignments.contains(a))
assignments += a
+this syncAddAssignments (a)
}
def removeAssignments(a: Assignment): Unit = {
require(a != null)
require(assignments.contains(a))
assignments -= a
+this syncRemoveAssignments (a)
}
......
......@@ -9,6 +9,7 @@ abstract class Port(protected var name: String, protected var owner: BDD) extend
}
def setName(n: String): Unit = {
require(n != null)
name = n
+this syncSetName ()
}
......@@ -18,6 +19,7 @@ abstract class Port(protected var name: String, protected var owner: BDD) extend
}
def setOwner(o: BDD): Unit = {
require(o != null)
owner = o
+this syncSetOwner ()
}
......
......@@ -7,6 +7,7 @@ class Subtree(protected var treeForOne: Tree, protected var treeForZero: Tree, p
}
def setTreeForOne(t: Tree): Unit = {
require(t != null)
treeForOne = t
+this syncSetTreeForOne ()
}
......@@ -16,6 +17,7 @@ class Subtree(protected var treeForOne: Tree, protected var treeForZero: Tree, p
}
def setTreeForZero(t: Tree): Unit = {
require(t != null)
treeForZero = t
+this syncSetTreeForZero ()
}
......@@ -25,6 +27,7 @@ class Subtree(protected var treeForOne: Tree, protected var treeForZero: Tree, p
}
def setPort(p: InputPort): Unit = {
require(p != null)
port = p
+this syncSetPort ()
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment