Skip to content
Snippets Groups Projects
Commit 9d742013 authored by Sebastian Ebert's avatar Sebastian Ebert
Browse files

changed to gson, added time-based semantics

parent ebae2f8c
Branches
No related tags found
No related merge requests found
Showing
with 60 additions and 17 deletions
......@@ -57,6 +57,8 @@ sourceSets.main.java.srcDir "src/gen/java"
dependencies {
implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: "${jackson_version}"
implementation group: 'com.google.code.gson', name: 'gson', version: '2.10.1'
implementation group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11'
implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30'
implementation group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.13.2'
......
......@@ -65,13 +65,21 @@ aspect BalloonExecution{
for(Place place:incomingPlaces){
BalloonMarkedPlace bmp=this.resolveBalloonPlace(place);
long i = Long.MAX_VALUE;
int idx = 0;
int idxC = 0;
for(BalloonToken b : bmp.getBalloonMarkingList()){
if(b.getCreationTime() < i){
i = b.getCreationTime();
idx = idxC;
}
idxC++;
}
Random rand=new Random();
int randVal=rand.nextInt(bmp.getNumBalloonMarking());
BalloonToken bt=bmp.getBalloonMarking(randVal);
BalloonToken bt=bmp.getBalloonMarking(idx);
inToken.add(bt);
bmp.getBalloonMarking(randVal).removeSelf();
bmp.getBalloonMarking(idx).removeSelf();
}
BalloonTransition balloonTransition=callbackStorage.resolveBalloonTransition(transition);
......@@ -125,6 +133,7 @@ aspect BalloonExecution{
msg.setData(result.getValue());
pub.publish(msg);
} else {
result.setCreationTime(System.currentTimeMillis());
bmp.getBalloonMarkingList().add(result);
}
}
......@@ -167,7 +176,7 @@ aspect BalloonExecution{
return storage;
}
syn PetriNet PetriNet.registerHandler(String transitionId, int priority, Function<List<BalloonToken>, List<BalloonToken>> processTokenFunction){
syn PetriNet PetriNet.registerHandler(String transitionId, int priority, Function<List<Map<String, Object>>, List<Map<String, Object>>> processTokenFunction){
TransitionHandlerService ths = TransitionHandlerService.getInstance();
ths.registerHandler(this, transitionId, priority, processTokenFunction);
......
......@@ -6,6 +6,5 @@ rel BalloonTransition.Transition -> Transition;
abstract TransitionSelectionResult;
FiringSelectionSuccess : TransitionSelectionResult;
rel FiringSelectionSuccess.Transition -> Transition;
// FiringSelectionWait : TransitionSelectionResult ::= <WaitingTime:int>;
FiringSelectionFail : TransitionSelectionResult;
FiringSelectionNone : TransitionSelectionResult;
\ No newline at end of file
......@@ -51,6 +51,7 @@ aspect BalloonMarking {
BalloonToken token = new BalloonToken();
token.setValue(val);
token.setCreationTime(System.currentTimeMillis());
markedPlace.getBalloonMarkingList().add(token);
}
......
BalloonMarking ::= PetriNet:PetriNet Place:BalloonMarkedPlace*;
BalloonMarkedPlace ::= BalloonMarking:BalloonToken*;
BalloonToken ::= <Value:String>;
BalloonToken ::= <Value:String> <CreationTime:long>;
rel BalloonMarkedPlace.Place -> Place;
\ No newline at end of file
package de.tudresden.inf.st.pnml.engine.execution;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import de.tudresden.inf.st.pnml.jastadd.model.BalloonToken;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.function.Function;
......@@ -14,9 +20,9 @@ public class TransitionHandler {
private final String id;
private final int priority;
private Function<List<BalloonToken>, List<BalloonToken>> processTokenFunction;
protected Function<List<Map<String, Object>>, List<Map<String, Object>>> processTokenFunction;
public TransitionHandler(int priority, Function<List<BalloonToken>, List<BalloonToken>> processTokenFunction) {
public TransitionHandler(int priority, Function<List<Map<String, Object>>, List<Map<String, Object>>> processTokenFunction) {
this.id = UUID.randomUUID().toString();
this.priority = priority;
this.processTokenFunction = processTokenFunction;
......@@ -30,7 +36,32 @@ public class TransitionHandler {
return priority;
}
private Map<String, Object> parseToken(String s) {
Gson gson = new GsonBuilder().create();
Type mapType = new TypeToken<Map<Integer, Object>>(){}.getType();
return gson.fromJson(s, mapType);
}
public List<BalloonToken> processToken(List<BalloonToken> tokens) {
return processTokenFunction.apply(tokens);
List<Map<String, Object>> parsedTokens = new ArrayList<>();
List<BalloonToken> resultBalloonTokens = new ArrayList<>();
for (BalloonToken bt : tokens) {
Map<String, Object> t = parseToken(bt.getValue());
parsedTokens.add(t);
}
List<Map<String, Object>> resultTokens = processTokenFunction.apply(parsedTokens);
for (Map<String, Object> t : resultTokens) {
BalloonToken newBt = new BalloonToken();
Gson gson = new GsonBuilder().create();
newBt.setValue(gson.toJson(t));
resultBalloonTokens.add(newBt);
}
return resultBalloonTokens;
}
}
......@@ -29,7 +29,7 @@ public class TransitionHandlerExecutor {
if(i < callbacksSorted.size() - 1){
outTokens = callbacksSorted.get(i).processToken(outTokens);
} else {
BalloonToken tb = callbacksSorted.get(i).processToken(outTokens).get(0);
BalloonToken tb = (BalloonToken) callbacksSorted.get(i).processToken(outTokens).get(0);
outTokens = new ArrayList<>();
outTokens.add(tb);
}
......
......@@ -30,7 +30,8 @@ public class TransitionHandlerService {
balloonCallbackStorages.put(petriNetId, balloonCallbackStorage);
}
public void registerHandler(PetriNet petriNet, String transitionId, int priority, Function<List<BalloonToken>, List<BalloonToken>> processTokenFunction){
public void registerHandler(PetriNet petriNet, String transitionId, int priority,
Function<List<Map<String, Object>>, List<Map<String, Object>>> processTokenFunction){
TransitionHandler transitionHandler = new TransitionHandler(priority, processTokenFunction);
......
......@@ -163,7 +163,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
@Override
public void onSuccess(StringServiceResponse stringServiceResponse) {
bmpSource.getBalloonMarking(0).removeSelf();
bmpTarget.addBalloonMarking(new BalloonToken(stringServiceResponse.getOutput()));
bmpTarget.addBalloonMarking(new BalloonToken(stringServiceResponse.getOutput(), System.currentTimeMillis()));
}
@Override
......@@ -302,7 +302,7 @@ public abstract class DiNeRosNode extends AbstractNodeMain {
activeServerInstances.add(instanceId);
Place instanceEntryPlace = petriNet.getPlaceById(channelServerResElementMap.
get(resKey).get(0) + "-INSTANCE-" + instanceId);
marking.resolveBalloonPlace(instanceEntryPlace).addBalloonMarking(new BalloonToken(request.getInput()));
marking.resolveBalloonPlace(instanceEntryPlace).addBalloonMarking(new BalloonToken(request.getInput(), System.currentTimeMillis()));
this.notify(new DiNeRosEvent(DiNeRosEventTypes.NOTIFICATION_MARKING_CHANGE));
break;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment