Преглед изворни кода

Added Execution context to simulation core

Andreas Mülder пре 14 година
родитељ
комит
7baabb5a88
13 измењених фајлова са 154 додато и 17 уклоњено
  1. 3 1
      plugins/org.yakindu.sct.core.simulation/src/org/yakindu/sct/core/simulation/ISGraphExecutionFacade.java
  2. 53 0
      plugins/org.yakindu.sct.core.simulation/src/org/yakindu/sct/core/simulation/ISGraphExecutionScope.java
  3. 8 4
      plugins/org.yakindu.sct.core.simulation/src/org/yakindu/sct/core/simulation/SGraphSimulationSession.java
  4. 5 5
      plugins/org.yakindu.sct.core.simulation/src/org/yakindu/sct/core/simulation/SGraphSimulationSessionRegistry.java
  5. 3 3
      plugins/org.yakindu.sct.core.simulation/src/org/yakindu/sct/core/simulation/debugmodel/SCTDebugThread.java
  6. 1 2
      plugins/org.yakindu.sct.simulation.runtime/plugin.xml
  7. 4 0
      plugins/org.yakindu.sct.simulation.runtime/src/org/yakindu/sct/simulation/runtime/ExecutionScope.java
  8. 63 0
      plugins/org.yakindu.sct.simulation.runtime/src/org/yakindu/sct/simulation/runtime/sgraph/ExecutionScopeAdapter.java
  9. 5 0
      plugins/org.yakindu.sct.simulation.runtime/src/org/yakindu/sct/simulation/runtime/sgraph/RTStatechart.java
  10. 6 0
      plugins/org.yakindu.sct.simulation.runtime/src/org/yakindu/sct/simulation/runtime/stext/RTScope.java
  11. BIN
      plugins/org.yakindu.sct.ui.simulation/icons/yacop.png
  12. 2 2
      plugins/org.yakindu.sct.ui.simulation/src/org/yakindu/sct/ui/simulation/view/DeclarationView.java
  13. 1 0
      test-plugins/org.yakindu.sct.simulation.runtime.test/src/org/yakindu/sct/simulation/runtime/stext/test/FunctionsTest.java

+ 3 - 1
plugins/org.yakindu.sct.core.simulation/src/org/yakindu/sct/core/simulation/ISGraphExecutionFacade.java

@@ -21,10 +21,12 @@ public interface ISGraphExecutionFacade {
 	public void enter();
 
 	public void runCycle();
-	
+
 	public void raise(String eventName);
 
 	public void addExecutionListener(ISGraphExecutionListener listener);
 
 	public void removeExecutionListener(ISGraphExecutionListener listener);
+
+	public ISGraphExecutionScope getExecutionScope();
 }

+ 53 - 0
plugins/org.yakindu.sct.core.simulation/src/org/yakindu/sct/core/simulation/ISGraphExecutionScope.java

@@ -0,0 +1,53 @@
+package org.yakindu.sct.core.simulation;
+
+import java.util.List;
+
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public interface ISGraphExecutionScope {
+
+	public ScopeVariable getVariable(String varName);
+
+	public List<ScopeVariable> getVariables();
+
+	public void setVariableValue(ScopeVariable variable, Object object);
+
+	public void createVariable(String varName, Object value, Class<?> type);
+
+	public void call(String procedureId);
+
+	public void raise(String signal);
+
+	/**
+	 * Read only access to ScopeVariables. Value can only be changed via
+	 * {@link ISGraphExecutionScope}#setVariableValue
+	 * 
+	 */
+	public class ScopeVariable {
+		private String name;
+		private Class<?> type;
+		private Object value;
+
+		public ScopeVariable(String name, Class<?> type, Object value) {
+			super();
+			this.name = name;
+			this.type = type;
+			this.value = value;
+		}
+
+		public String getName() {
+			return name;
+		}
+
+		public Class<?> getType() {
+			return type;
+		}
+
+		public Object getValue() {
+			return value;
+		}
+	}
+}

+ 8 - 4
plugins/org.yakindu.sct.core.simulation/src/org/yakindu/sct/core/simulation/SGraphSimulationSession.java

@@ -26,7 +26,7 @@ import org.yakindu.sct.model.sgraph.Vertex;
  * @author andreas muelder - Initial contribution and API
  * 
  */
-public class SGraphSimulationSession implements Runnable,
+public class ISGraphSimulationSession implements Runnable,
 		ISGraphExecutionListener {
 
 	private List<ISimulationSessionListener> listeners;
@@ -39,7 +39,7 @@ public class SGraphSimulationSession implements Runnable,
 
 	private Timer timer;
 
-	public SGraphSimulationSession(ISGraphExecutionFacade facade) {
+	public ISGraphSimulationSession(ISGraphExecutionFacade facade) {
 		this.facade = facade;
 		facade.addExecutionListener(this);
 		listeners = new ArrayList<ISimulationSessionListener>();
@@ -51,7 +51,7 @@ public class SGraphSimulationSession implements Runnable,
 		taskQueue.add(new Runnable() {
 			public void run() {
 				SGraphSimulationSessionRegistry.INSTANCE
-						.registerSimulationSession(SGraphSimulationSession.this);
+						.registerSimulationSession(ISGraphSimulationSession.this);
 				changeSimulationState(SimulationState.STARTED);
 				facade.enter();
 				changeSimulationState(SimulationState.RUNNING);
@@ -90,7 +90,7 @@ public class SGraphSimulationSession implements Runnable,
 			public void run() {
 				changeSimulationState(SimulationState.TERMINATED);
 				SGraphSimulationSessionRegistry.INSTANCE
-						.unregisterSimulationSession(SGraphSimulationSession.this);
+						.unregisterSimulationSession(ISGraphSimulationSession.this);
 			}
 		});
 	}
@@ -177,4 +177,8 @@ public class SGraphSimulationSession implements Runnable,
 			listener.eventRaised(eventName);
 		}
 	}
+
+	public ISGraphExecutionScope getExecutionScope() {
+		return facade.getExecutionScope();
+	}
 }

+ 5 - 5
plugins/org.yakindu.sct.core.simulation/src/org/yakindu/sct/core/simulation/SGraphSimulationSessionRegistry.java

@@ -24,19 +24,19 @@ public class SGraphSimulationSessionRegistry {
 
 	private List<ISimulationSessionListener> sessionListener;
 
-	private List<SGraphSimulationSession> sessions;
+	private List<ISGraphSimulationSession> sessions;
 
 	private SGraphSimulationSessionRegistry() {
 		sessionListener = new ArrayList<ISimulationSessionListener>();
-		sessions = new ArrayList<SGraphSimulationSession>();
+		sessions = new ArrayList<ISGraphSimulationSession>();
 	}
 
-	public void registerSimulationSession(SGraphSimulationSession session) {
+	public void registerSimulationSession(ISGraphSimulationSession session) {
 		session.getListeners().addAll(getListeners());
 		sessions.add(session);
 	}
 
-	public void unregisterSimulationSession(SGraphSimulationSession session) {
+	public void unregisterSimulationSession(ISGraphSimulationSession session) {
 		session.getListeners().clear();
 		sessions.remove(session);
 	}
@@ -45,7 +45,7 @@ public class SGraphSimulationSessionRegistry {
 		return sessionListener;
 	}
 
-	public SGraphSimulationSession getActiveSession() {
+	public ISGraphSimulationSession getActiveSession() {
 		// TODO
 		if (sessions.isEmpty())
 			return null;

+ 3 - 3
plugins/org.yakindu.sct.core.simulation/src/org/yakindu/sct/core/simulation/debugmodel/SCTDebugThread.java

@@ -10,7 +10,7 @@ import org.eclipse.debug.core.model.IDebugTarget;
 import org.eclipse.debug.core.model.IStackFrame;
 import org.eclipse.debug.core.model.IThread;
 import org.yakindu.sct.core.simulation.ISGraphExecutionFacade;
-import org.yakindu.sct.core.simulation.SGraphSimulationSession;
+import org.yakindu.sct.core.simulation.ISGraphSimulationSession;
 
 /**
  * 
@@ -23,12 +23,12 @@ public class SCTDebugThread extends PlatformObject implements IThread {
 	private boolean terminated = false;
 	private boolean suspended = false;
 	private Thread thread;
-	private SGraphSimulationSession session;
+	private ISGraphSimulationSession session;
 	private final SCTDebugTarget target;
 
 	public SCTDebugThread(SCTDebugTarget target, ISGraphExecutionFacade facade) {
 		this.target = target;
-		session = new SGraphSimulationSession(facade);
+		session = new ISGraphSimulationSession(facade);
 		thread = new Thread(session);
 		thread.start();
 		session.start();

+ 1 - 2
plugins/org.yakindu.sct.simulation.runtime/plugin.xml

@@ -4,8 +4,7 @@
    <extension
          point="org.yakindu.sct.simulation.core.sgraph.executionbuilder">
       <SGraphExecutionBuilder
-            class="org.yakindu.sct.simulation.runtime.sgraph.builder.SGraphBuilder"
-            clazz="org.yakindu.sct.simulation.runtime.stext.builder.STextBuilder">
+            class="org.yakindu.sct.simulation.runtime.sgraph.builder.SGraphBuilder">
       </SGraphExecutionBuilder>
    </extension>
 

+ 4 - 0
plugins/org.yakindu.sct.simulation.runtime/src/org/yakindu/sct/simulation/runtime/ExecutionScope.java

@@ -10,6 +10,8 @@
  */
 package org.yakindu.sct.simulation.runtime;
 
+import java.util.Collection;
+
 import org.yakindu.sct.simulation.runtime.stext.RTVariable;
 
 public interface ExecutionScope {
@@ -25,5 +27,7 @@ public interface ExecutionScope {
 	public abstract void raise(String signal);
 
 	public abstract void setVariableValue(RTVariable variable, Object object);
+	
+	public Collection<RTVariable> getVariables();
 
 }

+ 63 - 0
plugins/org.yakindu.sct.simulation.runtime/src/org/yakindu/sct/simulation/runtime/sgraph/ExecutionScopeAdapter.java

@@ -0,0 +1,63 @@
+package org.yakindu.sct.simulation.runtime.sgraph;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.yakindu.sct.core.simulation.ISGraphExecutionScope;
+import org.yakindu.sct.simulation.runtime.ExecutionScope;
+import org.yakindu.sct.simulation.runtime.stext.RTVariable;
+
+/**
+ * Adapts the {@link ISGraphExecutionScope} interface to the runtime
+ * {@link ExecutionScope}
+ * 
+ */
+public class ExecutionScopeAdapter implements ISGraphExecutionScope {
+
+	private final ExecutionScope scope;
+
+	public ExecutionScopeAdapter(ExecutionScope scope) {
+		this.scope = scope;
+	}
+
+	public ScopeVariable getVariable(String varName) {
+		return toScope(scope.getVariable(varName));
+	}
+
+	public List<ScopeVariable> getVariables() {
+		List<ScopeVariable> scopeVariables = new ArrayList<ScopeVariable>();
+		Collection<RTVariable> variables = scope.getVariables();
+		for (RTVariable rtVariable : variables) {
+			scopeVariables.add(toScope(rtVariable));
+		}
+		return scopeVariables;
+	}
+
+	private ScopeVariable toScope(RTVariable rtVariable) {
+		return new ScopeVariable(rtVariable.getName(), rtVariable.getType(),
+				rtVariable.getValue());
+	}
+
+	public void setVariableValue(ScopeVariable variable, Object object) {
+		RTVariable rtVar = scope.getVariable(variable.getName());
+		scope.setVariableValue(rtVar, object);
+
+	}
+
+	public void createVariable(String varName, Object value, Class<?> type) {
+		RTVariable var = new RTVariable(varName);
+		var.setValue(value);
+		scope.addVariable(var);
+
+	}
+
+	public void call(String procedureId) {
+		// TODO
+	}
+
+	public void raise(String signal) {
+		// TODO
+	}
+
+}

+ 5 - 0
plugins/org.yakindu.sct.simulation.runtime/src/org/yakindu/sct/simulation/runtime/sgraph/RTStatechart.java

@@ -20,6 +20,7 @@ import java.util.Set;
 
 import org.yakindu.sct.core.simulation.ISGraphExecutionFacade;
 import org.yakindu.sct.core.simulation.ISGraphExecutionListener;
+import org.yakindu.sct.core.simulation.ISGraphExecutionScope;
 import org.yakindu.sct.model.sgraph.Transition;
 import org.yakindu.sct.model.sgraph.Vertex;
 import org.yakindu.sct.simulation.runtime.ExecutionScope;
@@ -220,4 +221,8 @@ public class RTStatechart extends AbstractStatechart implements ExecutionScope,
 			addAllRegions(regions, region);
 		}
 	}
+
+	public ISGraphExecutionScope getExecutionScope() {
+		return new ExecutionScopeAdapter(this);
+	}
 }

+ 6 - 0
plugins/org.yakindu.sct.simulation.runtime/src/org/yakindu/sct/simulation/runtime/stext/RTScope.java

@@ -10,7 +10,9 @@
  */
 package org.yakindu.sct.simulation.runtime.stext;
 
+import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.yakindu.sct.simulation.runtime.ExecutionScope;
@@ -68,5 +70,9 @@ public class RTScope implements ExecutionScope {
 		variable.setValue(object);
 		
 	}
+
+	public Collection<RTVariable> getVariables() {
+		return variables.values();
+	}
 	
 }

BIN
plugins/org.yakindu.sct.ui.simulation/icons/yacop.png


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

@@ -26,7 +26,7 @@ import org.eclipse.ui.IViewReference;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.ViewPart;
 import org.yakindu.sct.core.simulation.ISimulationSessionListener;
-import org.yakindu.sct.core.simulation.SGraphSimulationSession;
+import org.yakindu.sct.core.simulation.ISGraphSimulationSession;
 import org.yakindu.sct.core.simulation.SGraphSimulationSessionRegistry;
 import org.yakindu.sct.model.sgraph.Declaration;
 import org.yakindu.sct.model.sgraph.Event;
@@ -180,7 +180,7 @@ public class DeclarationView extends ViewPart implements
 		}
 
 		public void widgetSelected(SelectionEvent e) {
-			SGraphSimulationSession activeSession = SGraphSimulationSessionRegistry.INSTANCE
+			ISGraphSimulationSession activeSession = SGraphSimulationSessionRegistry.INSTANCE
 					.getActiveSession();
 			if (activeSession != null) {
 				activeSession.raiseEvent(eventName);

+ 1 - 0
test-plugins/org.yakindu.sct.simulation.runtime.test/src/org/yakindu/sct/simulation/runtime/stext/test/FunctionsTest.java

@@ -178,6 +178,7 @@ public class FunctionsTest {
 		Class<?> paramTypes[] = new Class<?>[] { Object.class };
 
 		try {
+			@SuppressWarnings("unused")
 			Function result = Function.lookup(
 					FunctionWithFailingConstructor.class, "foo", paramTypes);
 			fail("Expected ExpressionRuntimeException !");