Bladeren bron

Made sct editor and simulation infrastructure extendible for derived language editors and simulations

terfloth@itemis.de 14 jaren geleden
bovenliggende
commit
e6563325cc

+ 4 - 2
plugins/org.yakindu.sct.model.sgraph.resource/META-INF/MANIFEST.MF

@@ -8,9 +8,11 @@ Bundle-Activator: org.yakindu.sct.model.sgraph.resource.Activator
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
  org.yakindu.sct.model.stext.ui;bundle-version="1.0.0",
- org.yakindu.sct.model.sgraph;bundle-version="1.0.0",
+ org.yakindu.sct.model.sgraph;bundle-version="1.0.0";visibility:=reexport,
  de.itemis.xtext.utils.gmf;bundle-version="1.0.0",
  org.eclipse.gmf.runtime.emf.core;bundle-version="1.4.1",
- org.eclipse.xtext.ui;bundle-version="2.0.0"
+ org.eclipse.xtext.ui;bundle-version="2.0.0";visibility:=reexport
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Bundle-ActivationPolicy: lazy
+Export-Package: org.yakindu.sct.model.sgraph.resource,
+ org.yakindu.sct.model.sgraph.resource.provider

+ 3 - 3
plugins/org.yakindu.sct.model.sgraph.resource/src/org/yakindu/sct/model/sgraph/resource/factory/InjectMembersResourceFactory.java

@@ -31,11 +31,11 @@ import de.itemis.xtext.utils.gmf.resource.InjectMembersResource;
 public class InjectMembersResourceFactory extends XMIResourceFactoryImpl {
 
 	@Inject
-	TransitionInjectionService transitionService;
+	private TransitionInjectionService transitionService;
 	@Inject
-	StateInjectionService stateService;
+	private StateInjectionService stateService;
 	@Inject
-	StatechartInjectionService statechartService;
+	private StatechartInjectionService statechartService;
 
 	@Override
 	public Resource createResource(URI uri) {

+ 8 - 0
plugins/org.yakindu.sct.simulation.core/src/org/yakindu/sct/simulation/core/ISCTBuilder.java

@@ -0,0 +1,8 @@
+package org.yakindu.sct.simulation.core;
+
+import org.eclipse.emf.ecore.EObject;
+//TODO 
+public interface ISCTBuilder {
+
+	public boolean isBuilderFor(EObject eObject);
+}

+ 2 - 1
plugins/org.yakindu.sct.simulation.core/src/org/yakindu/sct/simulation/core/ISGraphExecutionBuilder.java

@@ -17,7 +17,7 @@ import org.yakindu.sct.model.sgraph.Statechart;
  * @author andreas muelder - Initial contribution and API
  * 
  */
-public interface ISGraphExecutionBuilder {
+public interface ISGraphExecutionBuilder extends ISCTBuilder{
 	/**
 	 * Returns an execution facade for a statechart model. Execution Builder can
 	 * be registered via extension point
@@ -27,4 +27,5 @@ public interface ISGraphExecutionBuilder {
 	 * @return
 	 */
 	public ISGraphExecutionFacade build(Statechart statechart);
+
 }

+ 11 - 11
plugins/org.yakindu.sct.simulation.core/src/org/yakindu/sct/simulation/core/extensions/Extensions.java

@@ -6,13 +6,15 @@ import java.util.List;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.ecore.EObject;
+import org.yakindu.sct.simulation.core.ISCTBuilder;
 
 /**
  * 
  * @author andreas muelder
  * 
  */
-public class Extensions<T> {
+public class Extensions<T extends ISCTBuilder> {
 
 	private String extensionPointId;
 
@@ -20,17 +22,15 @@ public class Extensions<T> {
 		this.extensionPointId = extensionPointId;
 	}
 
-	public T getFirstExtension() {
-		return getExtensions().get(0);
-	}
+	public T getRegisteredProvider(EObject object) {
+		List<T> loadRegisteredProvider = loadRegisteredProvider();
+		for (T t : loadRegisteredProvider) {
+			if (t.isBuilderFor(object)) {
+				return t;
+			}
+		}
+		throw new IllegalStateException("No provider found for type" + object);
 
-	public List<T> getExtensions() {
-		List<T> extensions = loadRegisteredProvider();
-		if (extensions.size() == 0)
-			throw new IllegalStateException(
-					"No extensions registered for extension point"
-							+ extensionPointId);
-		return extensions;
 	}
 
 	public List<T> loadRegisteredProvider() {

+ 4 - 3
plugins/org.yakindu.sct.simulation.core/src/org/yakindu/sct/simulation/core/launch/StatechartLaunchConfigurationDelegate.java

@@ -29,6 +29,7 @@ import org.eclipse.debug.core.IStatusHandler;
 import org.eclipse.debug.core.model.IDebugTarget;
 import org.eclipse.debug.core.model.ILaunchConfigurationDelegate;
 import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.Resource.Factory;
 import org.eclipse.emf.ecore.resource.ResourceSet;
@@ -83,17 +84,17 @@ public class StatechartLaunchConfigurationDelegate implements
 		Statechart statechart = (Statechart) EcoreUtil.getObjectByType(
 				resource.getContents(), SGraphPackage.Literals.STATECHART);
 
-		ISGraphExecutionBuilder builder = getBuilder();
+		ISGraphExecutionBuilder builder = getBuilder(statechart);
 		ISGraphExecutionFacade executionFacade = builder.build(statechart);
 		IDebugTarget target = new SCTDebugTarget(launch, executionFacade);
 		launch.addDebugTarget(target);
 
 	}
 
-	protected ISGraphExecutionBuilder getBuilder() {
+	protected ISGraphExecutionBuilder getBuilder(EObject context) {
 		Extensions<ISGraphExecutionBuilder> extensions = new Extensions<ISGraphExecutionBuilder>(
 				EXECUTION_BUILDER);
-		return extensions.getFirstExtension();
+		return extensions.getRegisteredProvider(context);
 	}
 
 	protected void handleStatusInformation(int severity, String message) {

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

@@ -338,4 +338,9 @@ public class SGraphBuilder extends Function implements ISGraphExecutionBuilder {
 				+ sourceChild.eClass().getName() + ") !");
 	}
 
+	public boolean isBuilderFor(EObject context) {
+		String resourceExtension = context.eResource().getURI().lastSegment();
+		return resourceExtension.endsWith("sct");
+	}
+
 }