Sfoglia il codice sorgente

Added operations for retrieving an execution slot for a qualified name.

tomqc86@googlemail.com 12 anni fa
parent
commit
a503c8e019

+ 5 - 1
plugins/org.yakindu.sct.simulation.core/model/sruntime.ecore

@@ -14,6 +14,10 @@
     <eOperations name="getAllActiveStates" upperBound="-1" eType="ecore:EClass ../../org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore#//RegularState"/>
     <eOperations name="getAllEvents" upperBound="-1" eType="#//ExecutionEvent"/>
     <eOperations name="getAllVariables" upperBound="-1" eType="#//ExecutionVariable"/>
+    <eOperations name="getAllSlots" upperBound="-1" eType="#//ExecutionSlot"/>
+    <eOperations name="getSlot" eType="#//ExecutionSlot">
+      <eParameters name="qualifiedName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    </eOperations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="activeStates" upperBound="-1"
         eType="ecore:EClass ../../org.yakindu.sct.model.sgraph/model/emf/sgraph.ecore#//RegularState"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="executedElements" upperBound="-1"
@@ -32,7 +36,7 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" eType="#//JavaObject"/>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="fqName" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EDataType" name="InferredType" instanceClassName="org.yakindu.base.types.ITypeSystem.InferredType"/>
+  <eClassifiers xsi:type="ecore:EDataType" name="InferredType" instanceClassName="org.yakindu.base.types.InferredType"/>
   <eClassifiers xsi:type="ecore:EClass" name="ExecutionVariable" eSuperTypes="#//ExecutionSlot"/>
   <eClassifiers xsi:type="ecore:EClass" name="CompositeSlot" eSuperTypes="#//ExecutionSlot">
     <eStructuralFeatures xsi:type="ecore:EReference" name="slots" upperBound="-1"

+ 16 - 0
plugins/org.yakindu.sct.simulation.core/src/org/yakindu/sct/simulation/core/sruntime/ExecutionContext.java

@@ -168,4 +168,20 @@ public interface ExecutionContext extends NamedElement, CompositeSlot {
 	 */
 	List<ExecutionVariable> getAllVariables();
 
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model kind="operation"
+	 * @generated
+	 */
+	List<ExecutionSlot> getAllSlots();
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @model
+	 * @generated
+	 */
+	ExecutionSlot getSlot(String qualifiedName);
+
 } // ExecutionContext

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

@@ -437,7 +437,7 @@ public interface SRuntimePackage extends EPackage {
 	 * The meta object id for the '<em>Inferred Type</em>' data type.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.yakindu.base.types.ITypeSystem.InferredType
+	 * @see org.yakindu.base.types.InferredType
 	 * @see org.yakindu.sct.simulation.core.sruntime.impl.SRuntimePackageImpl#getInferredType()
 	 * @generated
 	 */
@@ -637,12 +637,12 @@ public interface SRuntimePackage extends EPackage {
 	EEnum getEventDirection();
 
 	/**
-	 * Returns the meta object for data type '{@link org.yakindu.base.types.ITypeSystem.InferredType <em>Inferred Type</em>}'.
+	 * Returns the meta object for data type '{@link org.yakindu.base.types.InferredType <em>Inferred Type</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @return the meta object for data type '<em>Inferred Type</em>'.
-	 * @see org.yakindu.base.types.ITypeSystem.InferredType
-	 * @model instanceClass="org.yakindu.base.types.ITypeSystem.InferredType"
+	 * @see org.yakindu.base.types.InferredType
+	 * @model instanceClass="org.yakindu.base.types.InferredType"
 	 * @generated
 	 */
 	EDataType getInferredType();
@@ -832,7 +832,7 @@ public interface SRuntimePackage extends EPackage {
 		 * The meta object literal for the '<em>Inferred Type</em>' data type.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
-		 * @see org.yakindu.base.types.ITypeSystem.InferredType
+		 * @see org.yakindu.base.types.InferredType
 		 * @see org.yakindu.sct.simulation.core.sruntime.impl.SRuntimePackageImpl#getInferredType()
 		 * @generated
 		 */

+ 58 - 16
plugins/org.yakindu.sct.simulation.core/src/org/yakindu/sct/simulation/core/sruntime/impl/ExecutionContextImpl.java

@@ -13,7 +13,7 @@ package org.yakindu.sct.simulation.core.sruntime.impl;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-
+import java.util.Set;
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
@@ -36,10 +36,10 @@ import org.yakindu.sct.simulation.core.sruntime.ExecutionEvent;
 import org.yakindu.sct.simulation.core.sruntime.ExecutionSlot;
 import org.yakindu.sct.simulation.core.sruntime.ExecutionVariable;
 import org.yakindu.sct.simulation.core.sruntime.SRuntimePackage;
-
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
 
 /**
  * <!-- begin-user-doc --> An implementation of the model object '
@@ -200,7 +200,8 @@ public class ExecutionContextImpl extends NamedElementImpl implements ExecutionC
 	}
 
 	/**
-	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
 	 * @generated
 	 */
 	public void setType(InferredType newType) {
@@ -344,7 +345,8 @@ public class ExecutionContextImpl extends NamedElementImpl implements ExecutionC
 		Iterables.addAll(result, raisedEvents);
 		return result;
 	}
-
+	
+	
 	/**
 	 * Returns the variable by its qualified name
 	 * 
@@ -372,6 +374,21 @@ public class ExecutionContextImpl extends NamedElementImpl implements ExecutionC
 		}
 		return null;
 	}
+	
+	/**
+	 * Returns the execution slot by its qualified name
+	 * @param name
+	 * @return
+	 */
+	public ExecutionSlot getSlot(final String fqName) {
+		Assert.isNotNull(fqName);
+		for (ExecutionSlot slot : getAllSlots()) {
+			if (fqName.equals(slot.getFqName())) {
+				return slot;
+			}
+		}
+		return null;
+	}
 
 	/**
 	 * <!-- begin-user-doc --> <!-- end-user-doc -->
@@ -393,16 +410,18 @@ public class ExecutionContextImpl extends NamedElementImpl implements ExecutionC
 	 */
 	public List<ExecutionEvent> getAllEvents() {
 		List<ExecutionEvent> result = new BasicEList<ExecutionEvent>();
-		addEvents(result, getSlots());
+		addEvents(result, getSlots(), Sets.<ExecutionSlot>newHashSet());
 		return result;
 	}
 
-	protected void addEvents(List<ExecutionEvent> event, List<ExecutionSlot> slots) {
+	protected void addEvents(List<ExecutionEvent> event, List<ExecutionSlot> slots, Set<ExecutionSlot> visitedSlots) {
 		for (ExecutionSlot slot : slots) {
-			if (slot instanceof ExecutionEvent) {
-				event.add((ExecutionEvent) slot);
-			} else if (slot instanceof CompositeSlot) {
-				addEvents(event, ((CompositeSlot) slot).getSlots());
+			if (visitedSlots.add(slot)) {
+				if (slot instanceof ExecutionEvent) {
+					event.add((ExecutionEvent) slot);
+				} else if (slot instanceof CompositeSlot) {
+					addEvents(event, ((CompositeSlot) slot).getSlots(), visitedSlots);
+				}
 			}
 		}
 	}
@@ -414,16 +433,39 @@ public class ExecutionContextImpl extends NamedElementImpl implements ExecutionC
 	 */
 	public List<ExecutionVariable> getAllVariables() {
 		List<ExecutionVariable> result = new BasicEList<ExecutionVariable>();
-		addVariables(result, getSlots());
+		addVariables(result, getSlots(), Sets.<ExecutionSlot>newHashSet());
+		return result;
+	}
+
+	protected void addVariables(List<ExecutionVariable> variables, List<ExecutionSlot> slots, Set<ExecutionSlot> visitedSlots) {
+		for (ExecutionSlot slot : slots) {
+			if (visitedSlots.add(slot)) {
+				if (slot instanceof ExecutionVariable) {
+					variables.add((ExecutionVariable) slot);
+				} else if (slot instanceof CompositeSlot) {
+					addVariables(variables, ((CompositeSlot) slot).getSlots(), visitedSlots);
+				}
+			}
+		}
+	}
+	
+	/**
+	 * <!-- begin-user-doc --> <!-- end-user-doc -->
+	 * @generated NOT
+	 */
+	public List<ExecutionSlot> getAllSlots() {
+		List<ExecutionSlot> result = new BasicEList<ExecutionSlot>();
+		addSlots(result, getSlots(), Sets.<ExecutionSlot>newHashSet());
 		return result;
 	}
 
-	protected void addVariables(List<ExecutionVariable> variables, List<ExecutionSlot> slots) {
+	protected void addSlots(List<ExecutionSlot> result, List<ExecutionSlot> slots, Set<ExecutionSlot> visitedSlots) {
 		for (ExecutionSlot slot : slots) {
-			if (slot instanceof ExecutionVariable) {
-				variables.add((ExecutionVariable) slot);
-			} else if (slot instanceof CompositeSlot) {
-				addVariables(variables, ((CompositeSlot) slot).getSlots());
+			if (visitedSlots.add(slot)) {
+				result.add(slot);
+				if (slot instanceof CompositeSlot) {
+					addSlots(result, ((CompositeSlot) slot).getSlots(), visitedSlots);
+				}
 			}
 		}
 	}

+ 2 - 9
plugins/org.yakindu.sct.simulation.core/src/org/yakindu/sct/simulation/core/sruntime/impl/ExecutionSlotImpl.java

@@ -257,20 +257,13 @@ public abstract class ExecutionSlotImpl extends NamedElementImpl implements Exec
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @generated
+	 * @generated NOT
 	 */
 	@Override
 	public String toString() {
 		if (eIsProxy()) return super.toString();
 
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (type: ");
-		result.append(type);
-		result.append(", value: ");
-		result.append(value);
-		result.append(", fqName: ");
-		result.append(fqName);
-		result.append(')');
+		StringBuffer result = new StringBuffer(fqName);
 		return result.toString();
 	}
 

+ 5 - 0
plugins/org.yakindu.sct.simulation.core/src/org/yakindu/sct/simulation/core/sruntime/impl/SRuntimePackageImpl.java

@@ -447,6 +447,11 @@ public class SRuntimePackageImpl extends EPackageImpl implements SRuntimePackage
 
 		addEOperation(executionContextEClass, this.getExecutionVariable(), "getAllVariables", 0, -1, IS_UNIQUE, IS_ORDERED);
 
+		addEOperation(executionContextEClass, this.getExecutionSlot(), "getAllSlots", 0, -1, IS_UNIQUE, IS_ORDERED);
+
+		op = addEOperation(executionContextEClass, this.getExecutionSlot(), "getSlot", 0, 1, IS_UNIQUE, IS_ORDERED);
+		addEParameter(op, ecorePackage.getEString(), "qualifiedName", 0, 1, IS_UNIQUE, IS_ORDERED);
+
 		initEClass(executionEventEClass, ExecutionEvent.class, "ExecutionEvent", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getExecutionEvent_Raised(), ecorePackage.getEBoolean(), "raised", null, 0, 1, ExecutionEvent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEAttribute(getExecutionEvent_Scheduled(), ecorePackage.getEBoolean(), "scheduled", null, 0, 1, ExecutionEvent.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);