From 5ea5ea1294e66f9d761b05e0ac75171161fef36e Mon Sep 17 00:00:00 2001
From: SebastianEbert <sebastian.ebert@tu-dresden.de>
Date: Tue, 26 Jul 2022 12:58:14 +0200
Subject: [PATCH] working on signal fix

---
 .../de/tudresden/inf/st/pnml/engine/Main.java |  3 +-
 .../execution/TransitionCallbackService.java  | 53 +++++++++++++++++++
 2 files changed, 55 insertions(+), 1 deletion(-)
 create mode 100644 src/main/java/de/tudresden/inf/st/pnml/engine/execution/TransitionCallbackService.java

diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java b/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java
index 57767c6..2e87c01 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/engine/Main.java
@@ -72,7 +72,8 @@ public class Main {
 
             BalloonMarkedPlace bmp = bm.resolveBalloonPlace(p);
             bmp.addBalloonMarking(bt);
-        //    petriNet.flushTreeCache();
+            //bmp.addBalloonMarking(bt);
+            petriNet.flushTreeCache();
 
             for ( OutputSignalBinding b : p.asOutputSignalPlace().getOutputSignalBindingList()){
                 System.out.println("New Num: " + bm.resolveBalloonPlace(p).getNumBalloonMarking());
diff --git a/src/main/java/de/tudresden/inf/st/pnml/engine/execution/TransitionCallbackService.java b/src/main/java/de/tudresden/inf/st/pnml/engine/execution/TransitionCallbackService.java
new file mode 100644
index 0000000..a68f3a7
--- /dev/null
+++ b/src/main/java/de/tudresden/inf/st/pnml/engine/execution/TransitionCallbackService.java
@@ -0,0 +1,53 @@
+package de.tudresden.inf.st.pnml.engine.execution;
+
+import de.tudresden.inf.st.pnml.jastadd.model.BalloonCallbackStorage;
+import de.tudresden.inf.st.pnml.jastadd.model.BalloonTransition;
+import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TransitionCallbackService {
+
+    public static TransitionCallbackService INSTANCE = null;
+
+    private BalloonCallbackStorage balloonCallbackStorage = null;
+
+    private TransitionCallbackService() {}
+
+    public static TransitionCallbackService getInstance() {
+        if(INSTANCE == null) {
+            INSTANCE = new TransitionCallbackService();
+        }
+
+        return INSTANCE;
+    }
+
+    public void init(BalloonCallbackStorage balloonCallbackStorage) {
+        this.balloonCallbackStorage = balloonCallbackStorage;
+    }
+
+    public void registerCallback(PetriNet petriNet, String transitionId, TransitionCallback transitionCallback){
+
+        if(balloonCallbackStorage == null){
+            return;
+        }
+
+        BalloonTransition balloonTransition = balloonCallbackStorage.resolveBalloonTransition(petriNet.getTransitionById(transitionId));
+        List<TransitionCallback> transitionCallbacks = new ArrayList<>();
+        transitionCallbacks.add(transitionCallback);
+        registerCallback(petriNet, transitionId, transitionCallbacks);
+
+    }
+
+    public void registerCallback(PetriNet petriNet, String transitionId, List<TransitionCallback> transitionCallbacks){
+
+        if(balloonCallbackStorage == null){
+            return;
+        }
+
+        BalloonTransition balloonTransition = balloonCallbackStorage.resolveBalloonTransition(petriNet.getTransitionById(transitionId));
+        balloonTransition.setBalloonCallbacks(transitionCallbacks);
+
+    }
+}
-- 
GitLab