Bläddra i källkod

Refactored Expression Provider interface to support different text DSLs based on resource extension

Andreas Mülder 14 år sedan
förälder
incheckning
a0d36126bd
18 ändrade filer med 212 tillägg och 133 borttagningar
  1. 5 3
      plugins/org.yakindu.sct.model.stext/META-INF/MANIFEST.MF
  2. 7 5
      plugins/org.yakindu.sct.ui.editor/META-INF/MANIFEST.MF
  3. 17 5
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/PlugableExternalXtextLabelEditPart.java
  4. 15 4
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/PlugableXtextLabelEditPart.java
  5. 44 0
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/extensions/AbstractExpressionsProvider.java
  6. 17 7
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/extensions/Extensions.java
  7. 10 4
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/extensions/IExpressionsProvider.java
  8. 12 2
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/extensions/ISCTProvider.java
  9. 0 16
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/extensions/IValidationProvider.java
  10. 14 0
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/AbstractEditorPropertySection.java
  11. 3 13
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/StatePropertySection.java
  12. 5 17
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/StatechartPropertySection.java
  13. 3 16
      plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/TransitionPropertySection.java
  14. 3 0
      plugins/org.yakindu.sct.ui.integration.stext/META-INF/MANIFEST.MF
  15. 0 1
      plugins/org.yakindu.sct.ui.integration.stext/plugin.xml
  16. 19 15
      plugins/org.yakindu.sct.ui.integration.stext/src/org/yakindu/sct/ui/integration/stext/StateExpressionProvider.java
  17. 22 16
      plugins/org.yakindu.sct.ui.integration.stext/src/org/yakindu/sct/ui/integration/stext/StatechartExpressionProvider.java
  18. 16 9
      plugins/org.yakindu.sct.ui.integration.stext/src/org/yakindu/sct/ui/integration/stext/TransitionExpressionProvider.java

+ 5 - 3
plugins/org.yakindu.sct.model.stext/META-INF/MANIFEST.MF

@@ -26,11 +26,13 @@ Import-Package: org.apache.commons.logging,
  org.eclipse.xtext.xtend2.lib
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Export-Package: org.yakindu.sct.model.stext,
+ org.yakindu.sct.model.stext.formatting,
+ org.yakindu.sct.model.stext.parseTreeConstruction,
+ org.yakindu.sct.model.stext.parser.antlr,
+ org.yakindu.sct.model.stext.parser.antlr.internal,
+ org.yakindu.sct.model.stext.scoping,
  org.yakindu.sct.model.stext.services,
  org.yakindu.sct.model.stext.stext,
  org.yakindu.sct.model.stext.stext.impl,
  org.yakindu.sct.model.stext.stext.util,
- org.yakindu.sct.model.stext.parseTreeConstruction,
- org.yakindu.sct.model.stext.parser.antlr,
- org.yakindu.sct.model.stext.parser.antlr.internal,
  org.yakindu.sct.model.stext.validation

+ 7 - 5
plugins/org.yakindu.sct.ui.editor/META-INF/MANIFEST.MF

@@ -7,7 +7,7 @@ Bundle-Activator: org.yakindu.sct.ui.editor.DiagramActivator
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.core.resources,
  org.eclipse.jface,
- org.eclipse.ui.ide,
+ org.eclipse.ui.ide;visibility:=reexport,
  org.eclipse.ui.views,
  org.eclipse.ui.navigator,
  org.eclipse.ui.navigator.resources,
@@ -17,15 +17,15 @@ Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.gmf.runtime.emf.core,
  org.eclipse.gmf.runtime.emf.commands.core,
  org.eclipse.gmf.runtime.emf.ui.properties,
- org.eclipse.gmf.runtime.diagram.ui,
+ org.eclipse.gmf.runtime.diagram.ui;visibility:=reexport,
  org.eclipse.gmf.runtime.diagram.ui.printing,
  org.eclipse.gmf.runtime.diagram.ui.printing.render,
  org.eclipse.gmf.runtime.diagram.ui.properties,
  org.eclipse.gmf.runtime.diagram.ui.providers,
  org.eclipse.gmf.runtime.diagram.ui.providers.ide,
  org.eclipse.gmf.runtime.diagram.ui.render,
- org.eclipse.gmf.runtime.diagram.ui.resources.editor,
- org.eclipse.gmf.runtime.diagram.ui.resources.editor.ide,
+ org.eclipse.gmf.runtime.diagram.ui.resources.editor;visibility:=reexport,
+ org.eclipse.gmf.runtime.diagram.ui.resources.editor.ide;visibility:=reexport,
  org.eclipse.draw2d;visibility:=reexport,
  org.eclipse.gmf.runtime.draw2d.ui;visibility:=reexport,
  org.yakindu.sct.model.sgraph,
@@ -43,4 +43,6 @@ Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
 Export-Package: org.yakindu.sct.ui.editor,
  org.yakindu.sct.ui.editor.actions,
- org.yakindu.sct.ui.editor.extensions
+ org.yakindu.sct.ui.editor.editor,
+ org.yakindu.sct.ui.editor.extensions,
+ org.yakindu.sct.ui.editor.wizards

+ 17 - 5
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/PlugableExternalXtextLabelEditPart.java

@@ -1,3 +1,13 @@
+/**
+ * Copyright (c) 2010 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * Contributors:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
 package org.yakindu.sct.ui.editor.editparts;
 
 import org.eclipse.emf.common.notify.Notification;
@@ -16,10 +26,11 @@ import de.itemis.xtext.utils.gmf.directedit.XtextDirectEditManager;
 
 /**
  * 
- * @author muelder
+ * @author andreas muelder - Initial contribution and API
  * 
  */
-public abstract class PlugableExternalXtextLabelEditPart extends ExternalXtextLabelEditPart {
+public abstract class PlugableExternalXtextLabelEditPart extends
+		ExternalXtextLabelEditPart {
 
 	private Injector injector;
 	private int editorStyle;
@@ -33,7 +44,9 @@ public abstract class PlugableExternalXtextLabelEditPart extends ExternalXtextLa
 		Extensions<IExpressionsProvider> extensions = new Extensions<IExpressionsProvider>(
 				IExpressionsProvider.EXPRESSIONS_EXTENSION);
 		IExpressionsProvider registeredProvider = extensions
-				.getRegisteredProvider(resolveSemanticElement());
+				.getRegisteredProvider(resolveSemanticElement().eClass(),
+						resolveSemanticElement().eResource().getURI()
+								.lastSegment());
 		injector = registeredProvider.getInjector();
 		editorStyle = registeredProvider.getStyle();
 	}
@@ -68,7 +81,7 @@ public abstract class PlugableExternalXtextLabelEditPart extends ExternalXtextLa
 		String exp = resolveSemanticElement().getExpression();
 		return exp != null ? exp : "";
 	}
-	
+
 	protected int getEditorStyles() {
 		return editorStyle;
 	}
@@ -77,5 +90,4 @@ public abstract class PlugableExternalXtextLabelEditPart extends ExternalXtextLa
 		return injector;
 	}
 
-
 }

+ 15 - 4
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editparts/PlugableXtextLabelEditPart.java

@@ -1,3 +1,13 @@
+/**
+ * Copyright (c) 2010 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * Contributors:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
 package org.yakindu.sct.ui.editor.editparts;
 
 import org.eclipse.emf.common.notify.Notification;
@@ -16,7 +26,7 @@ import de.itemis.xtext.utils.gmf.directedit.XtextLabelEditPart;
 
 /**
  * 
- * @author muelder
+ * @author andreas muelder - Initial contribution and API
  * 
  */
 public abstract class PlugableXtextLabelEditPart extends XtextLabelEditPart {
@@ -33,7 +43,9 @@ public abstract class PlugableXtextLabelEditPart extends XtextLabelEditPart {
 		Extensions<IExpressionsProvider> extensions = new Extensions<IExpressionsProvider>(
 				IExpressionsProvider.EXPRESSIONS_EXTENSION);
 		IExpressionsProvider registeredProvider = extensions
-				.getRegisteredProvider(resolveSemanticElement());
+				.getRegisteredProvider(resolveSemanticElement().eClass(),
+						resolveSemanticElement().eResource().getURI()
+								.lastSegment());
 		injector = registeredProvider.getInjector();
 		editorStyle = registeredProvider.getStyle();
 	}
@@ -68,7 +80,7 @@ public abstract class PlugableXtextLabelEditPart extends XtextLabelEditPart {
 		String exp = resolveSemanticElement().getExpression();
 		return exp != null ? exp : "";
 	}
-	
+
 	protected int getEditorStyles() {
 		return editorStyle;
 	}
@@ -77,5 +89,4 @@ public abstract class PlugableXtextLabelEditPart extends XtextLabelEditPart {
 		return injector;
 	}
 
-
 }

+ 44 - 0
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/extensions/AbstractExpressionsProvider.java

@@ -0,0 +1,44 @@
+/**
+ * Copyright (c) 2011 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * Contributors:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
+package org.yakindu.sct.ui.editor.extensions;
+
+import org.eclipse.emf.ecore.EClass;
+
+import com.google.inject.Injector;
+
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public abstract class AbstractExpressionsProvider implements
+		IExpressionsProvider {
+
+	private Injector injector = null;
+
+	protected abstract Injector createInjector();
+
+	protected abstract EClass getType();
+
+	protected abstract String getResourceExtension();
+
+	public Injector getInjector() {
+		if (injector == null)
+			injector = createInjector();
+		return injector;
+	}
+
+	public boolean isProviderFor(EClass type, String resourceUri) {
+		return type.equals(getType())
+				&& resourceUri.toLowerCase().endsWith(getResourceExtension());
+	}
+
+}

+ 17 - 7
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/extensions/Extensions.java

@@ -1,3 +1,13 @@
+/**
+ * Copyright (c) 2011 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * Contributors:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
 package org.yakindu.sct.ui.editor.extensions;
 
 import java.util.ArrayList;
@@ -6,11 +16,11 @@ 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.eclipse.emf.ecore.EClass;
 
 /**
  * 
- * @author muelder
+ * @author andreas muelder - Initial contribution and API
  * 
  * @param <T>
  */
@@ -21,16 +31,16 @@ public class Extensions<T extends ISCTProvider> {
 	public Extensions(String extensionPointId) {
 		this.extensionPointId = extensionPointId;
 	}
-	//TODO: Change to EClass instead of EObject
-	public T getRegisteredProvider(EObject semanticElement) {
+
+
+	public T getRegisteredProvider(EClass type, String resourceUri) {
 		List<T> loadRegisteredProvider = loadRegisteredProvider();
 		for (T t : loadRegisteredProvider) {
-			if (t.isProviderFor(semanticElement)) {
+			if (t.isProviderFor(type, resourceUri)) {
 				return t;
 			}
 		}
-		throw new IllegalStateException("No provider found for semantic element "
-				+ semanticElement);
+		throw new IllegalStateException("No provider found for type" + type);
 
 	}
 

+ 10 - 4
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/extensions/IExpressionsProvider.java

@@ -1,3 +1,13 @@
+/**
+ * Copyright (c) 2011 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * Contributors:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
 package org.yakindu.sct.ui.editor.extensions;
 
 import org.eclipse.swt.SWT;
@@ -12,10 +22,6 @@ public interface IExpressionsProvider extends ISCTProvider {
 
 	String EXPRESSIONS_EXTENSION = "org.yakindu.sct.ui.editor.expressions";
 
-	/**
-	 * 
-	 * @return the Injector
-	 */
 	public Injector getInjector();
 
 	/**

+ 12 - 2
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/extensions/ISCTProvider.java

@@ -1,8 +1,18 @@
+/**
+ * Copyright (c) 2011 committers of YAKINDU and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * Contributors:
+ * 	committers of YAKINDU - initial API and implementation
+ * 
+ */
 package org.yakindu.sct.ui.editor.extensions;
 
-import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EClass;
 
 public interface ISCTProvider {
 
-	public boolean isProviderFor(EObject semanticElement);
+	public boolean isProviderFor(EClass type, String resourceUri);
 }

+ 0 - 16
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/extensions/IValidationProvider.java

@@ -1,16 +0,0 @@
-package org.yakindu.sct.ui.editor.extensions;
-
-import java.util.Set;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * 
- * @author muelder
- * 
- */
-public interface IValidationProvider extends ISCTProvider {
-
-	public Set<IStatus> validate(EObject semanticElement);
-}

+ 14 - 0
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/AbstractEditorPropertySection.java

@@ -1,11 +1,16 @@
 package org.yakindu.sct.ui.editor.propertysheets;
 
 import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.edit.domain.EditingDomain;
 import org.eclipse.emf.edit.domain.IEditingDomainProvider;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.IEditorPart;
+import org.yakindu.sct.ui.editor.extensions.Extensions;
+import org.yakindu.sct.ui.editor.extensions.IExpressionsProvider;
+
+import com.google.inject.Injector;
 
 import de.itemis.gmf.runtime.commons.properties.GenericFormBasedPropertySection;
 import de.itemis.gmf.runtime.commons.properties.descriptors.XtextPropertyDescriptor;
@@ -48,6 +53,15 @@ public abstract class AbstractEditorPropertySection extends
 					"Different resources in resource set , don't know which to use...");
 		}
 		return resources.get(0);
+	}
 
+	protected Injector getInjector(EClass type) {
+		Extensions<IExpressionsProvider> extensions = new Extensions<IExpressionsProvider>(
+				IExpressionsProvider.EXPRESSIONS_EXTENSION);
+		IExpressionsProvider registeredProvider = extensions
+				.getRegisteredProvider(type, getActiveEditorResource().getURI()
+						.lastSegment());
+		return registeredProvider.getInjector();
 	}
+
 }

+ 3 - 13
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/StatePropertySection.java

@@ -12,15 +12,10 @@ package org.yakindu.sct.ui.editor.propertysheets;
 
 import java.util.List;
 
-import org.yakindu.sct.model.sgraph.SGraphFactory;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.ui.editor.editparts.StateEditPart;
-import org.yakindu.sct.ui.editor.extensions.Extensions;
-import org.yakindu.sct.ui.editor.extensions.IExpressionsProvider;
 import org.yakindu.sct.ui.editor.utils.IYakinduSctHelpContextIds;
 
-import com.google.inject.Injector;
-
 import de.itemis.gmf.runtime.commons.properties.descriptors.IFormPropertyDescriptor;
 import de.itemis.gmf.runtime.commons.properties.descriptors.TextPropertyDescriptor;
 import de.itemis.gmf.runtime.commons.properties.descriptors.XtextPropertyDescriptor;
@@ -42,15 +37,10 @@ public class StatePropertySection extends NamePropertySection {
 
 		XtextPropertyDescriptor expressionsDescriptor = new XtextPropertyDescriptor(
 				SGraphPackage.Literals.EXPRESSION_ELEMENT__EXPRESSION,
-				"Expression: ", getInjector(), getActiveEditorResource(), IYakinduSctHelpContextIds.SC_PROPERTIES_STATE_EXPRESSION);
+				"Expression: ", getInjector(SGraphPackage.Literals.STATE),
+				getActiveEditorResource(),
+				IYakinduSctHelpContextIds.SC_PROPERTIES_STATE_EXPRESSION);
 		descriptors.add(expressionsDescriptor);
 	}
 
-	protected Injector getInjector() {
-		Extensions<IExpressionsProvider> extensions = new Extensions<IExpressionsProvider>(
-				IExpressionsProvider.EXPRESSIONS_EXTENSION);
-		IExpressionsProvider registeredProvider = extensions
-				.getRegisteredProvider(SGraphFactory.eINSTANCE.createState());
-		return registeredProvider.getInjector();
-	}
 }

+ 5 - 17
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/StatechartPropertySection.java

@@ -12,15 +12,10 @@ package org.yakindu.sct.ui.editor.propertysheets;
 
 import java.util.List;
 
-import org.yakindu.sct.model.sgraph.SGraphFactory;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.ui.editor.editparts.StatechartTextEditPart;
-import org.yakindu.sct.ui.editor.extensions.Extensions;
-import org.yakindu.sct.ui.editor.extensions.IExpressionsProvider;
 import org.yakindu.sct.ui.editor.utils.IYakinduSctHelpContextIds;
 
-import com.google.inject.Injector;
-
 import de.itemis.gmf.runtime.commons.properties.descriptors.IFormPropertyDescriptor;
 import de.itemis.gmf.runtime.commons.properties.descriptors.TextPropertyDescriptor;
 import de.itemis.gmf.runtime.commons.properties.descriptors.XtextPropertyDescriptor;
@@ -38,23 +33,16 @@ public class StatechartPropertySection extends AbstractEditorPropertySection {
 	@Override
 	protected void createPropertyDescriptors(
 			List<IFormPropertyDescriptor> descriptors) {
-		//Text Property Descriptor for the name
+		// Text Property Descriptor for the name
 		TextPropertyDescriptor nameDescriptor = new TextPropertyDescriptor(
 				SGraphPackage.Literals.NAMED_ELEMENT__NAME, "Name: ");
 		descriptors.add(nameDescriptor);
-		//Text property descriptor for the expression
+		// Text property descriptor for the expression
 		XtextPropertyDescriptor expressionsDescriptor = new XtextPropertyDescriptor(
 				SGraphPackage.Literals.EXPRESSION_ELEMENT__EXPRESSION,
-				"Expression: ", getInjector(), IYakinduSctHelpContextIds.SC_PROPERTIES_STATECHART_EXPRESSION);
+				"Expression: ", getInjector(SGraphPackage.Literals.STATECHART),
+				IYakinduSctHelpContextIds.SC_PROPERTIES_STATECHART_EXPRESSION);
 		descriptors.add(expressionsDescriptor);
 	}
-
-	protected Injector getInjector() {
-		Extensions<IExpressionsProvider> extensions = new Extensions<IExpressionsProvider>(
-				IExpressionsProvider.EXPRESSIONS_EXTENSION);
-		IExpressionsProvider registeredProvider = extensions
-				.getRegisteredProvider(SGraphFactory.eINSTANCE
-						.createStatechart());
-		return registeredProvider.getInjector();
-	}
+	
 }

+ 3 - 16
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/propertysheets/TransitionPropertySection.java

@@ -12,15 +12,10 @@ package org.yakindu.sct.ui.editor.propertysheets;
 
 import java.util.List;
 
-import org.yakindu.sct.model.sgraph.SGraphFactory;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
 import org.yakindu.sct.ui.editor.editparts.TransitionEditPart;
-import org.yakindu.sct.ui.editor.extensions.Extensions;
-import org.yakindu.sct.ui.editor.extensions.IExpressionsProvider;
 import org.yakindu.sct.ui.editor.utils.IYakinduSctHelpContextIds;
 
-import com.google.inject.Injector;
-
 import de.itemis.gmf.runtime.commons.properties.descriptors.IFormPropertyDescriptor;
 import de.itemis.gmf.runtime.commons.properties.descriptors.XtextPropertyDescriptor;
 
@@ -38,18 +33,10 @@ public class TransitionPropertySection extends AbstractEditorPropertySection {
 			List<IFormPropertyDescriptor> descriptors) {
 		XtextPropertyDescriptor expressionsDescriptor = new XtextPropertyDescriptor(
 				SGraphPackage.Literals.EXPRESSION_ELEMENT__EXPRESSION,
-				"Expression: ", getInjector(), getActiveEditorResource(), IYakinduSctHelpContextIds.SC_PROPERTIES_TRANSITION_EXPRESSION);
+				"Expression: ", getInjector(SGraphPackage.Literals.TRANSITION),
+				getActiveEditorResource(),
+				IYakinduSctHelpContextIds.SC_PROPERTIES_TRANSITION_EXPRESSION);
 		descriptors.add(expressionsDescriptor);
 
 	}
-
-	protected Injector getInjector() {
-		Extensions<IExpressionsProvider> extensions = new Extensions<IExpressionsProvider>(
-				IExpressionsProvider.EXPRESSIONS_EXTENSION);
-		IExpressionsProvider registeredProvider = extensions
-				.getRegisteredProvider(SGraphFactory.eINSTANCE
-						.createTransition());
-		return registeredProvider.getInjector();
-	}
-
 }

+ 3 - 0
plugins/org.yakindu.sct.ui.integration.stext/META-INF/MANIFEST.MF

@@ -15,3 +15,6 @@ Require-Bundle: org.eclipse.ui,
  org.yakindu.sct.model.sgraph;bundle-version="1.0.0"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.yakindu.sct.ui.integration.stext,
+ org.yakindu.sct.ui.integration.stext.modules,
+ org.yakindu.sct.ui.integration.stext.parsers

+ 0 - 1
plugins/org.yakindu.sct.ui.integration.stext/plugin.xml

@@ -13,5 +13,4 @@
             class="org.yakindu.sct.ui.integration.stext.StatechartExpressionProvider">
       </ExpressionProvider>
    </extension>
-
 </plugin>

+ 19 - 15
plugins/org.yakindu.sct.ui.integration.stext/src/org/yakindu/sct/ui/integration/stext/StateExpressionProvider.java

@@ -1,9 +1,10 @@
 package org.yakindu.sct.ui.integration.stext;
 
-import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EClass;
 import org.eclipse.swt.SWT;
 import org.eclipse.xtext.ui.shared.SharedStateModule;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
+import org.yakindu.sct.ui.editor.extensions.AbstractExpressionsProvider;
 import org.yakindu.sct.ui.editor.extensions.IExpressionsProvider;
 import org.yakindu.sct.ui.integration.stext.modules.StateRuntimeModule;
 import org.yakindu.sct.ui.integration.stext.modules.StateUIModule;
@@ -14,29 +15,32 @@ import com.google.inject.util.Modules;
 
 /**
  * 
- * @author muelder
+ * @author andreas muelder - Initial contribution and API
  * 
  */
-public class StateExpressionProvider implements IExpressionsProvider {
+public class StateExpressionProvider extends AbstractExpressionsProvider
+		implements IExpressionsProvider {
 
-	
-	public boolean isProviderFor(EObject semanticElement) {
-		return SGraphPackage.STATE == semanticElement.eClass()
-				.getClassifierID();
-	}
-
-	
-	public Injector getInjector() {
+	@Override
+	protected Injector createInjector() {
 		return Guice.createInjector(Modules.override(
 				Modules.override(new StateRuntimeModule()).with(
-						new StateUIModule(ExtensionsActivator.getDefault()))).with(
-				new SharedStateModule()));
+						new StateUIModule(ExtensionsActivator.getDefault())))
+				.with(new SharedStateModule()));
 	}
 
-
 	public int getStyle() {
 		return SWT.MULTI;
 	}
-
 	
+	@Override
+	protected EClass getType() {
+		return SGraphPackage.Literals.STATE;
+	}
+
+	@Override
+	protected String getResourceExtension() {
+		return "sct";
+	}
+
 }

+ 22 - 16
plugins/org.yakindu.sct.ui.integration.stext/src/org/yakindu/sct/ui/integration/stext/StatechartExpressionProvider.java

@@ -1,9 +1,10 @@
 package org.yakindu.sct.ui.integration.stext;
 
-import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EClass;
 import org.eclipse.swt.SWT;
 import org.eclipse.xtext.ui.shared.SharedStateModule;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
+import org.yakindu.sct.ui.editor.extensions.AbstractExpressionsProvider;
 import org.yakindu.sct.ui.editor.extensions.IExpressionsProvider;
 import org.yakindu.sct.ui.integration.stext.modules.StatechartRuntimeModule;
 import org.yakindu.sct.ui.integration.stext.modules.StatechartUIModule;
@@ -11,30 +12,35 @@ import org.yakindu.sct.ui.integration.stext.modules.StatechartUIModule;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.util.Modules;
+
 /**
  * 
- * @author muelder
- *
+ * @author andreas muelder - Initial contribution and API
+ * 
  */
-public class StatechartExpressionProvider implements IExpressionsProvider {
+public class StatechartExpressionProvider extends AbstractExpressionsProvider
+		implements IExpressionsProvider {
 
-	
-	public boolean isProviderFor(EObject semanticElement) {
-		return SGraphPackage.STATECHART == semanticElement.eClass()
-				.getClassifierID();
-	}
-
-	
-	public Injector getInjector() {
+	@Override
+	protected Injector createInjector() {
 		return Guice.createInjector(Modules.override(
-				Modules.override(new StatechartRuntimeModule()).with(
-						new StatechartUIModule(ExtensionsActivator.getDefault()))).with(
-				new SharedStateModule()));
+				Modules.override(new StatechartRuntimeModule())
+						.with(new StatechartUIModule(ExtensionsActivator
+								.getDefault()))).with(new SharedStateModule()));
 	}
 
-
 	public int getStyle() {
 		return SWT.MULTI;
 	}
 
+	@Override
+	protected EClass getType() {
+		return SGraphPackage.Literals.STATECHART;
+	}
+
+	@Override
+	protected String getResourceExtension() {
+		return "sct";
+	}
+
 }

+ 16 - 9
plugins/org.yakindu.sct.ui.integration.stext/src/org/yakindu/sct/ui/integration/stext/TransitionExpressionProvider.java

@@ -1,9 +1,10 @@
 package org.yakindu.sct.ui.integration.stext;
 
-import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EClass;
 import org.eclipse.swt.SWT;
 import org.eclipse.xtext.ui.shared.SharedStateModule;
 import org.yakindu.sct.model.sgraph.SGraphPackage;
+import org.yakindu.sct.ui.editor.extensions.AbstractExpressionsProvider;
 import org.yakindu.sct.ui.editor.extensions.IExpressionsProvider;
 import org.yakindu.sct.ui.integration.stext.modules.TransitionRuntimeModule;
 import org.yakindu.sct.ui.integration.stext.modules.TransitionUIModule;
@@ -14,17 +15,13 @@ import com.google.inject.util.Modules;
 
 /**
  * 
- * @author muelder
+ * @author andreas muelder - Initial contribution and API
  * 
  */
-public class TransitionExpressionProvider implements IExpressionsProvider {
+public class TransitionExpressionProvider extends AbstractExpressionsProvider
+		implements IExpressionsProvider {
 
-	public boolean isProviderFor(EObject semanticElement) {
-		return SGraphPackage.TRANSITION == semanticElement.eClass()
-				.getClassifierID();
-	}
-
-	public Injector getInjector() {
+	public Injector createInjector() {
 		return Guice.createInjector(Modules.override(
 				Modules.override(new TransitionRuntimeModule())
 						.with(new TransitionUIModule(ExtensionsActivator
@@ -35,4 +32,14 @@ public class TransitionExpressionProvider implements IExpressionsProvider {
 		return SWT.SINGLE;
 	}
 
+	@Override
+	protected EClass getType() {
+		return SGraphPackage.Literals.TRANSITION;
+	}
+
+	@Override
+	protected String getResourceExtension() {
+		return "sct";
+	}
+
 }