浏览代码

Merge pull request #407 from Yakindu/pro_issue_88

Unresolveable type proxies for when a snapshot is restored
Thomas Kutz 9 年之前
父节点
当前提交
dc3b9c7f11

+ 4 - 0
plugins/org.yakindu.base.types/src/org/yakindu/base/types/typesystem/AbstractTypeSystem.java

@@ -207,4 +207,8 @@ public abstract class AbstractTypeSystem implements ITypeSystem {
 	protected Type getConversionType(Type sourceType) {
 		return conversionRegistry.get(sourceType);
 	}
+	
+	public Resource getResource() {
+		return resource;
+	}
 }

+ 13 - 3
plugins/org.yakindu.sct.simulation.core.sexec/src/org/yakindu/sct/simulation/core/sexec/container/DefaultSimulationEngineFactory.java

@@ -25,6 +25,10 @@ import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.URIConverter;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.yakindu.base.types.typesystem.AbstractTypeSystem;
+import org.yakindu.base.types.typesystem.ITypeSystem;
+import org.yakindu.sct.domain.extension.DomainRegistry;
+import org.yakindu.sct.domain.extension.IDomainDescriptor;
 import org.yakindu.sct.model.sgraph.Statechart;
 import org.yakindu.sct.simulation.core.engine.ISimulationEngine;
 import org.yakindu.sct.simulation.core.sexec.launch.ISCTLaunchParameters;
@@ -57,19 +61,25 @@ public class DefaultSimulationEngineFactory implements ISimulationEngineFactory
 		// For restoring execution context
 		String attribute = launch.getLaunchConfiguration().getAttribute(ISCTLaunchParameters.EXECUTION_CONTEXT, "");
 		if (attribute != null && attribute.trim().length() > 0) {
-			ExecutionContext context = restore(attribute);
+			ExecutionContext context = restore(attribute, statechart);
 			controller.setExecutionContext(context);
 		}
 
 		return controller;
 	}
 
-	protected ExecutionContext restore(String context) {
+	protected ExecutionContext restore(String context, Statechart statechart) {
 		try {
 			ResourceSet set = new ResourceSetImpl();
-			Resource resource = set.createResource(URI.createURI("test.xmi"));
+			Resource resource = set.createResource(URI.createURI("snapshot.xmi"));
 			set.getResources().add(resource);
 			resource.load(new URIConverter.ReadableInputStream(context, "UTF_8"), Collections.emptyMap());
+			IDomainDescriptor domainDescriptor = DomainRegistry.getDomainDescriptor(statechart);
+			ITypeSystem typeSystem = domainDescriptor.getDomainInjectorProvider().getResourceInjector()
+					.getInstance(ITypeSystem.class);
+			if (typeSystem instanceof AbstractTypeSystem) {
+				set.getResources().add(((AbstractTypeSystem) typeSystem).getResource());
+			}
 			EcoreUtil.resolveAll(resource);
 			ExecutionContext result = (ExecutionContext) resource.getContents().get(0);
 			result.setSnapshot(true);