Browse Source

applied patches for issue #120

terfloth@itemis.de 14 years ago
parent
commit
35a58b1656

+ 36 - 17
plugins/org.yakindu.sct.simulation.core/src/org/yakindu/sct/simulation/core/SGraphSimulationSession.java

@@ -135,47 +135,66 @@ public class SGraphSimulationSession implements Runnable,
 	}
 
 	protected void changeSimulationState(SimulationState newState) {
-		for (ISimulationSessionListener listener : listeners) {
-			listener.simulationStateChanged(this.currentState, newState);
+		synchronized (listeners) {
+			for (ISimulationSessionListener listener : listeners) {
+				listener.simulationStateChanged(this.currentState, newState);
+			}
+			this.currentState = newState;
 		}
-		this.currentState = newState;
 	}
 
 	public void stateEntered(Vertex vertex) {
-		for (ISimulationSessionListener listener : listeners) {
-			listener.stateEntered(vertex);
+		synchronized (listeners) {
+			for (ISimulationSessionListener listener : listeners) {
+				listener.stateEntered(vertex);
+			}
 		}
 	}
 
 	public void stateLeft(Vertex vertex) {
-		for (ISimulationSessionListener listener : listeners) {
-			listener.stateLeft(vertex);
+		synchronized (listeners) {
+			for (ISimulationSessionListener listener : listeners) {
+				listener.stateLeft(vertex);
+			}
 		}
-
 	}
 
 	public void transitionFired(Transition transition) {
-		for (ISimulationSessionListener listener : listeners) {
-			listener.transitionFired(transition);
+		synchronized (listeners) {
+			for (ISimulationSessionListener listener : listeners) {
+				listener.transitionFired(transition);
+			}
 		}
+	}
 
+	public void addSimulationListener(ISimulationSessionListener listener) {
+		synchronized (listeners) {
+			listeners.add(listener);
+		}
 	}
 
-	public List<ISimulationSessionListener> getListeners() {
-		return listeners;
+	public void removeSimulationListener(ISimulationSessionListener listener) {
+		synchronized (listeners) {
+			listeners.remove(listener);
+		}
 	}
 
 	public void variableValueChanged(String variableName, Object value) {
-		for (ISimulationSessionListener listener : listeners) {
-			listener.variableValueChanged(variableName, value);
+		synchronized (listeners) {
+			for (ISimulationSessionListener listener : listeners) {
+				listener.variableValueChanged(variableName, value);
+			}
 		}
 
 	}
 
 	public void eventRaised(String eventName) {
-		for (ISimulationSessionListener listener : listeners) {
-			listener.eventRaised(eventName);
-		}
+synchronized (listeners) {
+	for (ISimulationSessionListener listener : listeners) {
+		listener.eventRaised(eventName);
+	}
+	
+}
 	}
 
 	public ISGraphExecutionScope getExecutionScope() {

+ 2 - 2
plugins/org.yakindu.sct.simulation.ui/src/org/yakindu/sct/simulation/ui/model/presenter/SCTSourceDisplay.java

@@ -90,9 +90,9 @@ public class SCTSourceDisplay extends SimulationSessionListenerAdapter
 
 		// Register me as a Session Listener to control the highlighting
 		if (lastActiveSession != null) {
-			lastActiveSession.getListeners().remove(this);
+			lastActiveSession.removeSimulationListener(this);
 		}
-		session.getListeners().add(this);
+		session.addSimulationListener(this);
 		lastActiveSession = session;
 
 	}

+ 3 - 2
plugins/org.yakindu.sct.simulation.ui/src/org/yakindu/sct/simulation/ui/view/DeclarationView.java

@@ -195,6 +195,7 @@ public class DeclarationView extends ViewPart implements IDebugContextListener,
 	}
 
 	public void eventRaised(String eventName) {
+		System.out.println("raised: " + eventName);
 		Display.getDefault().asyncExec(new Runnable() {
 			public void run() {
 				setEventViewerInput();
@@ -236,10 +237,10 @@ public class DeclarationView extends ViewPart implements IDebugContextListener,
 		}
 		if (!(selectedSession == activeSession) && selectedSession != null) {
 			if (activeSession != null) {
-				activeSession.getListeners().remove(this);
+				activeSession.removeSimulationListener(this);
 			}
 			activeSession = selectedSession;
-			selectedSession.getListeners().add(this);
+			selectedSession.addSimulationListener(this);
 			clearViewerInput();
 			setEventViewerInput();
 			setVariableViewerInput();