diff --git a/analyzer.sh b/analyzer.sh old mode 100644 new mode 100755 index aa9e0be..36464ea --- a/analyzer.sh +++ b/analyzer.sh @@ -2,6 +2,6 @@ #sh starter.sh & export ECG_FED=FED1 export JYTHONPATH=../ecg_framework_code/build/compling.core.jar:../ecg_framework_code/src/main/nluas/language -jython -J-Xmx3g -m analyzer ../ecg_grammars/compRobots.prefs +jython -J-Xmx5g -m analyzer ../ecg_grammars/compRobots.prefs #jython -m analyzer ../ecg_grammars/compRobots.prefs #python3 src/main/robots/robots_ui.py AgentUI diff --git a/morse.sh b/morse.sh old mode 100644 new mode 100755 diff --git a/src/main/robots/queue_solver.py b/src/main/robots/queue_solver.py index 1ab7841..ab4b977 100644 --- a/src/main/robots/queue_solver.py +++ b/src/main/robots/queue_solver.py @@ -43,6 +43,7 @@ def __init__(self, commandQ, solver, simulator): ## print('SolverCommandProcessor init complete') def checkAndRunCommand(self): + #print('queue_solver.checkAndRunCommand') if not self.commandQ.empty(): if (self.next_command_priority() < self.last_command_priority()) or self.command_done or self.other_command_done or (self.continue_dequeue and self.suspended_command_completed): command = self.commandQ.get() @@ -122,6 +123,7 @@ def set_continue_expected(self, expected): def propertyChange(self,javaObject): + #print('queue_solver.propertyChange: ',javaObject.getPropertyName()) if javaObject.getPropertyName() == 'state updated': #print('SolverCommandProcessor propertyChange, about to check and run command') self.checkAndRunCommand() diff --git a/src/main/robots/xnet_worker.py b/src/main/robots/xnet_worker.py index 73c6ead..22a989e 100644 --- a/src/main/robots/xnet_worker.py +++ b/src/main/robots/xnet_worker.py @@ -41,7 +41,6 @@ def build_xnet(self, xnet): def add_command_processor_as_listener(self, listener): # listen to all state changes; used to get control to check for new commands -## print('in simulator.addCommandProcessorAsListener') self.command_processor_listener = listener if not self.xnet == None: self.xnet.listenAllStateChanges(self.command_processor_listener) @@ -114,4 +113,4 @@ def start(self): self.started = True def isStarted(self): - return self.started \ No newline at end of file + return self.started diff --git a/src/main/robots/xschema/jvm.py b/src/main/robots/xschema/jvm.py index 720486b..56504f9 100644 --- a/src/main/robots/xschema/jvm.py +++ b/src/main/robots/xschema/jvm.py @@ -11,7 +11,7 @@ class PetriNetJVM: alreadyRunning = False def __init__(self): if not PetriNetJVM.alreadyRunning: - cp = '-Djava.class.path=$M2REPO/uk/ac/imperial/pipe-core/1.0.3-SNAPSHOT/pipe-core-1.0.3-SNAPSHOT.jar:$M2REPO/uk/ac/imperial/pipe-markov-chain/1.0.2-SNAPSHOT/pipe-markov-chain-1.0.2-SNAPSHOT.jar:$M2REPO/org/apache/logging/log4j/log4j-api/2.3/log4j-api-2.3.jar:$M2REPO/org/apache/logging/log4j/log4j-core/2.3/log4j-core-2.3.jar:$M2REPO/com/esotericsoftware/kryo/kryo/2.24.0/kryo-2.24.0.jar:$M2REPO/com/esotericsoftware/minlog/minlog/1.2/minlog-1.2.jar:$M2REPO/org/objenesis/objenesis/2.1/objenesis-2.1.jar:$M2REPO/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar:$M2REPO/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar:$M2REPO/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar:$M2REPO/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar:$M2REPO/commons-collections/commons-collections/3.0/commons-collections-3.0.jar:$M2REPO/commons-io/commons-io/1.3.2/commons-io-1.3.2.jar:$M2REPO/com/google/guava/guava/17.0/guava-17.0.jar:$M2REPO/de/twentyeleven/skysail/jgraphx-osgi/1.10.3.1/jgraphx-osgi-1.10.3.1.jar:$M2REPO/org/antlr/antlr4/4.2/antlr4-4.2.jar:$M2REPO/org/antlr/antlr4-runtime/4.2/antlr4-runtime-4.2.jar:$M2REPO/org/abego/treelayout/org.abego.treelayout.core/1.0.1/org.abego.treelayout.core-1.0.1.jar:$M2REPO/org/antlr/antlr4-annotations/4.2/antlr4-annotations-4.2.jar:$M2REPO/org/antlr/antlr-runtime/3.5/antlr-runtime-3.5.jar:$M2REPO/org/antlr/stringtemplate/3.2.1/stringtemplate-3.2.1.jar:$M2REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar:$M2REPO/org/antlr/ST4/4.0.7/ST4-4.0.7.jar:$M2REPO/javax/json/javax.json-api/1.0/javax.json-api-1.0.jar:$M2REPO/org/glassfish/javax.json/1.0.4/javax.json-1.0.4.jar:$M2REPO/edu/berkeley/icsi/robot-xnet/1.0.1-SNAPSHOT/robot-xnet-1.0.1-SNAPSHOT.jar' + cp = '-Djava.class.path=$M2REPO/uk/ac/imperial/pipe-core/1.1.0/pipe-core-1.1.0.jar:$M2REPO/uk/ac/imperial/pipe-markov-chain/1.1.0/pipe-markov-chain-1.1.0.jar:$M2REPO/org/apache/logging/log4j/log4j-api/2.3/log4j-api-2.3.jar:$M2REPO/org/apache/logging/log4j/log4j-core/2.3/log4j-core-2.3.jar:$M2REPO/com/esotericsoftware/kryo/kryo/2.24.0/kryo-2.24.0.jar:$M2REPO/com/esotericsoftware/minlog/minlog/1.2/minlog-1.2.jar:$M2REPO/org/objenesis/objenesis/2.1/objenesis-2.1.jar:$M2REPO/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar:$M2REPO/org/codehaus/jackson/jackson-core-asl/1.9.13/jackson-core-asl-1.9.13.jar:$M2REPO/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar:$M2REPO/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar:$M2REPO/commons-collections/commons-collections/3.0/commons-collections-3.0.jar:$M2REPO/commons-io/commons-io/1.3.2/commons-io-1.3.2.jar:$M2REPO/com/google/guava/guava/17.0/guava-17.0.jar:$M2REPO/de/twentyeleven/skysail/jgraphx-osgi/1.10.3.1/jgraphx-osgi-1.10.3.1.jar:$M2REPO/org/antlr/antlr4/4.2/antlr4-4.2.jar:$M2REPO/org/antlr/antlr4-runtime/4.2/antlr4-runtime-4.2.jar:$M2REPO/org/abego/treelayout/org.abego.treelayout.core/1.0.1/org.abego.treelayout.core-1.0.1.jar:$M2REPO/org/antlr/antlr4-annotations/4.2/antlr4-annotations-4.2.jar:$M2REPO/org/antlr/antlr-runtime/3.5/antlr-runtime-3.5.jar:$M2REPO/org/antlr/stringtemplate/3.2.1/stringtemplate-3.2.1.jar:$M2REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar:$M2REPO/org/antlr/ST4/4.0.7/ST4-4.0.7.jar:$M2REPO/javax/json/javax.json-api/1.0/javax.json-api-1.0.jar:$M2REPO/org/glassfish/javax.json/1.0.4/javax.json-1.0.4.jar:$M2REPO/edu/berkeley/icsi/robot-xnet/1.0.1/robot-xnet-1.0.1.jar' expcp = os.path.expandvars(cp) log4jdir = '-Dlog4j.configurationFile=${PWD}/src/main/log4j2.xml' explog4jdir = os.path.expandvars(log4jdir) diff --git a/src/main/robots/xschema/moveXnet.py b/src/main/robots/xschema/moveXnet.py index 381c91f..ef32a99 100644 --- a/src/main/robots/xschema/moveXnet.py +++ b/src/main/robots/xschema/moveXnet.py @@ -24,22 +24,22 @@ def setpos(self, pos): self.pos = Struct(**pos) def currentLocation(self, currentX, currentY): - self.morseChannel.updateCurrentLocation(currentX+0.0, currentY+0.0) + self.motionChannel.updateCurrentLocation(currentX+0.0, currentY+0.0) def targetLocation(self, targetX, targetY): ## print('move x, y: ', targetX, targetY) - self.morseChannel.updateTargetLocation(targetX+0.0, targetY+0.0) + self.motionChannel.updateTargetLocation(targetX+0.0, targetY+0.0) def setSpeed(self, speed): - self.morseChannel.setSpeed(speed+0.0) + self.motionChannel.setSpeed(speed+0.0) def setTolerance(self, tolerance): - self.morseChannel.setTolerance(tolerance+0.0) + self.motionChannel.setTolerance(tolerance+0.0) def setCollide(self, collide): - self.morseChannel.setCollide(collide) + self.motionChannel.setCollide(collide) - def moveMorse(self, command): + def moveMover(self, command): motion = command['motion'] #where = { 'x':['x'], 'y':['y'], 'z':0.0, 'collide':False, 'speed':2.0, 'tolerance':4} #print(self.printts(), 'where: ', motion) @@ -47,38 +47,38 @@ def moveMorse(self, command): #TODO sleeping should be done in the xnet Wait timed transition, when it works #self.robot._morse.sleep(0.1) - def suspendMorse(self, command): - #print('suspendMorse') + def suspendMover(self, command): + #print('suspendMover') self.robot.motion.stop() - def resumeMorse(self, command): - #print('resumeMorse') + def resumeMover(self, command): + #print('resumeMover') self.robot.motion.resume() - def restartMorse(self, command): - #print('restartMorse') + def restartMover(self, command): + #print('restartMover') #TODO self.robot.motion.resume() - def updateMorsePosition(self, command): - #print('updateMorsePosition', self.pos.x, self.pos.y) + def updateMoverPosition(self, command): + #print('updateMoverPosition', self.pos.x, self.pos.y) self.currentLocation(self.pos.x, self.pos.y) #self.robot._morse.sleep(0.1) #TODO #self.robot.motion.resume() if self.robot.motion.get_status() == 'Arrived': #print('arrived!') - self.morseChannel.setStatus(2) + self.motionChannel.setStatus(2) # 2 = arrived - def callMorse(self, commandJson): -## print('in callMorse') + def callMover(self, commandJson): +## print('in callMover') command = json.loads(commandJson) #self.queue.put(command) #print('command dict: ', command) #TODO: validate methodName = command['command'] - #print(self.printts(), ' callMorse: method to invoke: ',methodName) + #print(self.printts(), ' callMover: method to invoke: ',methodName) #print(self.__dict__) self.commands[methodName](self,command) # yield to other threads @@ -97,21 +97,21 @@ def addCommand(self, command): def buildCommands(self): #print(self.__dict__) self.commands = {} - self.addCommand('moveMorse') - self.addCommand('suspendMorse') - self.addCommand('resumeMorse') - self.addCommand('restartMorse') - self.addCommand('updateMorsePosition') + self.addCommand('moveMover') + self.addCommand('suspendMover') + self.addCommand('resumeMover') + self.addCommand('restartMover') + self.addCommand('updateMoverPosition') #print('commands: ',self.commands) def setup(self): - self.morseChannel = JClass('edu.berkeley.icsi.xnet.MorseChannel')() - proxy = JProxy('edu.berkeley.icsi.xnet.Morse', inst=self) - self.morseChannel.setMorse(proxy) - self.runner.setTransitionContext("Move", self.morseChannel); - self.runner.setTransitionContext("SuspendT", self.morseChannel); - self.runner.setTransitionContext("ResumeT", self.morseChannel); - self.runner.setTransitionContext("RestartT", self.morseChannel); + self.motionChannel = JClass('edu.berkeley.icsi.xnet.MotionChannel')() + proxy = JProxy('edu.berkeley.icsi.xnet.Mover', inst=self) + self.motionChannel.setMover(proxy) + self.runner.setTransitionContext("Move", self.motionChannel); + self.runner.setTransitionContext("SuspendT", self.motionChannel); + self.runner.setTransitionContext("ResumeT", self.motionChannel); + self.runner.setTransitionContext("RestartT", self.motionChannel); self.buildCommands() ## print('MoveXnet setup complete') diff --git a/src/main/robots/xschema/petrinet.py b/src/main/robots/xschema/petrinet.py index 5ed5532..65a159e 100644 --- a/src/main/robots/xschema/petrinet.py +++ b/src/main/robots/xschema/petrinet.py @@ -19,6 +19,7 @@ def printts(self): return st def printState(self): + #print('in printState') stateList = [] state = self.javaObject.getNewValue().state it = state.getPlaces().iterator() @@ -34,6 +35,7 @@ def printState(self): #print(self.printts(), stateList) def propertyChange(self,javaObject): + #print('firing listener property change: ', javaObject.getPropertyName()) if javaObject.getPropertyName() == 'state updated': self.javaObject = javaObject self.printState() @@ -78,19 +80,21 @@ def updateAttribute(self, value): #print(self.petrinet.__dict__) def propertyChange(self,javaObject): + #print('petrinet.propertyChange: ',javaObject.getPropertyName()) #print(self.printts(), 'updated place ', end='') #print(self.placeId, end='') #print(': ', end='') #print(javaObject.getNewValue()) - self.javaObject = javaObject - self.count = self.convertObjectToDigit() - # updateTargetField delegated to subclasses - self.updateTargetField() - if self.call_evaluator(): - if self.evaluatorArgs is None: - self.evaluator() - else: - self.evaluator(self.evaluatorArgs) + if javaObject.getPropertyName() == 'tokens': + self.javaObject = javaObject + self.count = self.convertObjectToDigit() + # updateTargetField delegated to subclasses + self.updateTargetField() + if self.call_evaluator(): + if self.evaluatorArgs is None: + self.evaluator() + else: + self.evaluator(self.evaluatorArgs) def getPlaceId(self): return self.placeId