فهرست منبع

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

Andreas Mülder 14 سال پیش
والد
کامیت
a0d36126bd
18فایلهای تغییر یافته به همراه212 افزوده شده و 133 حذف شده
  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";
+	}
+
 }