浏览代码

#683 Allow binding of custom PaletteProvider for a domain.

Andreas Muelder 9 年之前
父节点
当前提交
1c5106c83d

+ 31 - 15
plugins/org.yakindu.base.gmf.runtime/src/org/yakindu/base/gmf/runtime/palette/CreationTool.java

@@ -21,6 +21,7 @@ import org.eclipse.gef.EditPart;
 import org.eclipse.gef.EditPartViewer;
 import org.eclipse.gef.Request;
 import org.eclipse.gef.RequestConstants;
+import org.eclipse.gmf.runtime.diagram.ui.tools.CreationTool;
 import org.eclipse.gmf.runtime.emf.type.core.IElementType;
 import org.eclipse.gmf.runtime.notation.View;
 import org.eclipse.jface.viewers.StructuredSelection;
@@ -35,24 +36,37 @@ import org.eclipse.swt.widgets.Display;
  * @author muehlbrandt
  * 
  */
-public class CreationTool extends
-		org.eclipse.gmf.runtime.diagram.ui.tools.CreationTool {
-	
+public class DirectEditCreationTool extends CreationTool {
+
 	private boolean performDirectEdit;
-	
+
 	/**
 	 * Default constructor
-	 * @param elementType The type the tool should create.
-	 * @param performDirectEdit flag to set direct editing enabled or disabled.
+	 * 
+	 * @param elementType
+	 *            The type the tool should create.
+	 * @param performDirectEdit
+	 *            flag to set direct editing enabled or disabled.
 	 */
-	public CreationTool(IElementType elementType, boolean performDirectEdit) {
+	public DirectEditCreationTool(IElementType elementType, boolean performDirectEdit) {
 		super(elementType);
 		Assert.isNotNull(performDirectEdit);
 		this.performDirectEdit = performDirectEdit;
 	}
-	
+
+	/**
+	 * Default constructor with direct editing enabled
+	 * 
+	 * @param elementType
+	 *            The type the tool should create.
+	 */
+	public DirectEditCreationTool(IElementType elementType) {
+		this(elementType, true);
+	}
+
 	/**
 	 * Select the newly added shape view by default
+	 * 
 	 * @param viewer
 	 * @param objects
 	 */
@@ -62,8 +76,7 @@ public class CreationTool extends
 		for (Iterator i = objects.iterator(); i.hasNext();) {
 			Object object = i.next();
 			if (object instanceof IAdaptable) {
-				Object editPart = viewer.getEditPartRegistry().get(
-						((IAdaptable) object).getAdapter(View.class));
+				Object editPart = viewer.getEditPartRegistry().get(((IAdaptable) object).getAdapter(View.class));
 				if (editPart != null)
 					editparts.add(editPart);
 			}
@@ -81,8 +94,7 @@ public class CreationTool extends
 						// this basically, the editpart has been deleted when
 						// this code is being executed. (see RATLC00527114)
 						if (editPart.isActive()) {
-							editPart.performRequest(new Request(
-									RequestConstants.REQ_DIRECT_EDIT));
+							editPart.performRequest(new Request(RequestConstants.REQ_DIRECT_EDIT));
 							revealEditPart((EditPart) editparts.get(0));
 						}
 					}
@@ -90,17 +102,21 @@ public class CreationTool extends
 			}
 		}
 	}
-	
+
 	/**
 	 * Get the current state of direct editing behavior.
-	 * @return {@code true} if direct editing is enabled on element creation. Otherwise {@code false}.
+	 * 
+	 * @return {@code true} if direct editing is enabled on element creation.
+	 *         Otherwise {@code false}.
 	 */
 	public boolean isPerformDirectEdit() {
 		return performDirectEdit;
 	}
 
 	/**
-	 * Set the direct editing flag to allow or disallow direct editing on element creation
+	 * Set the direct editing flag to allow or disallow direct editing on
+	 * element creation
+	 * 
 	 * @param performDirectEdit
 	 */
 	public void setPerformDirectEdit(boolean performDirectEdit) {

+ 6 - 1
plugins/org.yakindu.sct.domain.generic/src/org/yakindu/sct/domain/generic/modules/GenericEditorModule.java

@@ -14,6 +14,8 @@ import org.eclipse.xtext.service.AbstractGenericModule;
 import org.yakindu.sct.refactoring.proposals.RefactoringProposalProvider;
 import org.yakindu.sct.ui.editor.editor.proposals.SmartEditProposalProvider;
 import org.yakindu.sct.ui.editor.proposals.IEditProposalProvider;
+import org.yakindu.sct.ui.editor.providers.DefaultSCTPaletteFactory;
+import org.yakindu.sct.ui.editor.providers.ISCTPaletteFactory;
 
 import com.google.inject.Binder;
 import com.google.inject.multibindings.Multibinder;
@@ -33,6 +35,9 @@ public class GenericEditorModule extends AbstractGenericModule {
 	    proposalProviderBinder.addBinding().to(SmartEditProposalProvider.class);
 	    proposalProviderBinder.addBinding().to(RefactoringProposalProvider.class);
 	}
-
+	
+	public Class<? extends ISCTPaletteFactory> bindISCTPaletteFactory() {
+		return DefaultSCTPaletteFactory.class;
+	}
 	
 }

+ 27 - 0
plugins/org.yakindu.sct.domain/src/org/yakindu/sct/domain/extension/DomainRegistry.java

@@ -10,14 +10,21 @@
  */
 package org.yakindu.sct.domain.extension;
 
+import java.io.IOException;
 import java.net.URL;
 import java.util.List;
 import java.util.NoSuchElementException;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.URIConverter;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.xmi.XMIResource;
+import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.xtext.EcoreUtil2;
@@ -146,4 +153,24 @@ public class DomainRegistry {
 				: BasePackage.Literals.DOMAIN_ELEMENT__DOMAIN_ID.getDefaultValueLiteral();
 		return getDomainDescriptor(domainID);
 	}
+	
+	public static String determineDomainID(URI uri) {
+		String result = BasePackage.Literals.DOMAIN_ELEMENT__DOMAIN_ID.getDefaultValueLiteral();
+		if (URIConverter.INSTANCE.exists(uri, null)) {
+			XMIResource resource = new XMIResourceImpl(uri);
+			try {
+				resource.load(null);
+				DomainElement element = (DomainElement) EcoreUtil.getObjectByType(resource.getContents(),
+						BasePackage.Literals.DOMAIN_ELEMENT);
+				String domainID = element.getDomainID();
+				Assert.isNotNull(domainID);
+				result = domainID;
+			} catch (IOException e) {
+				e.printStackTrace();
+			} finally {
+				resource.unload();
+			}
+		}
+		return result;
+	}
 }

+ 1 - 31
plugins/org.yakindu.sct.model.resource/src/org/yakindu/sct/model/resource/SCTResourceFactory.java

@@ -10,23 +10,13 @@
  */
 package org.yakindu.sct.model.resource;
 
-import java.io.IOException;
-
-import org.eclipse.core.runtime.Assert;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.Resource;
 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.eclipse.emf.ecore.xmi.XMIResource;
 import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
-import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
-import org.yakindu.base.base.BasePackage;
 import org.yakindu.sct.domain.extension.DomainRegistry;
 import org.yakindu.sct.domain.extension.IDomainDescriptor;
-import org.yakindu.sct.model.sgraph.SGraphPackage;
-import org.yakindu.sct.model.sgraph.Statechart;
 
 import com.google.inject.Injector;
 
@@ -39,7 +29,7 @@ public class SCTResourceFactory extends XMIResourceFactoryImpl {
 
 	@Override
 	public Resource createResource(URI uri) {
-		String determinedDomainID = determineDomainID(uri);
+		String determinedDomainID = DomainRegistry.determineDomainID(uri);
 		IDomainDescriptor domainDescriptor = DomainRegistry.getDomainDescriptor(determinedDomainID);
 		Injector injector = domainDescriptor.getDomainInjectorProvider().getResourceInjector();
 		Resource resource = injector.getInstance(Resource.class);
@@ -48,24 +38,4 @@ public class SCTResourceFactory extends XMIResourceFactoryImpl {
 		resource.setURI(uri);
 		return resource;
 	}
-
-	protected String determineDomainID(URI uri) {
-		String result = BasePackage.Literals.DOMAIN_ELEMENT__DOMAIN_ID.getDefaultValueLiteral();
-		if (URIConverter.INSTANCE.exists(uri, null)) {
-			XMIResource resource = new XMIResourceImpl(uri);
-			try {
-				resource.load(null);
-				Statechart statechart = (Statechart) EcoreUtil.getObjectByType(resource.getContents(),
-						SGraphPackage.Literals.STATECHART);
-				String domainID = statechart.getDomainID();
-				Assert.isNotNull(domainID);
-				result = domainID;
-			} catch (IOException e) {
-				e.printStackTrace();
-			} finally {
-				resource.unload();
-			}
-		}
-		return result;
-	}
 }

+ 11 - 133
plugins/org.yakindu.sct.ui.editor/plugin.xml

@@ -256,140 +256,18 @@
       </wizard>
    </extension>
    
-   <!-- Palette Provider -->
-   
-   <extension
-         point="org.eclipse.gmf.runtime.diagram.ui.paletteProviders">
-      <paletteProvider
-            class="org.yakindu.sct.ui.editor.providers.StatechartPaletteProvider">
-         <contribution
-               factoryClass="org.yakindu.sct.ui.editor.editor.StatechartDiagramPaletteFactory">
-            <entry
-                  id="tools"
-                  kind="drawer"
-                  label="Tools"
-                  path="/">
-                   <expand
-                         force="true">
-                     </expand>
-            </entry>
-             <entry
-                   description="Creates a transition"
-                   id="org.yakindu.sct.ui.editor.Transition"
-                   kind="tool"
-                   label="Transition"
-                   large_icon="icons/obj32/transition-32.png"
-                   path="/tools/"
-                   small_icon="icons/obj16/transition-16.png">
-             </entry>
-             
-             <entry
-                  description="Creates a state"
-                  id="org.yakindu.sct.ui.editor.State"
-                  kind="tool"
-                  label="State"
-                  large_icon="icons/obj32/State-32.png"
-                  path="/tools/"
-                  small_icon="icons/obj16/State-16.png">
-            </entry>
-             <entry
-                  description="Creates a composite state"
-                  id="org.yakindu.sct.ui.editor.CompositeState"
-                  kind="tool"
-                  label="Composite State"
-                  large_icon="icons/obj32/Composite-State-32.png"
-                  path="/tools/"
-                  small_icon="icons/obj16/Composite-State-16.png">
-            </entry>
-             <entry
-                  description="Creates a orthogonal state"
-                  id="org.yakindu.sct.ui.editor.OrthogonalState"
-                  kind="tool"
-                  label="Orthogonal State"
-                  large_icon="icons/obj32/Orthogonal-State-32.png"
-                  path="/tools/"
-                  small_icon="icons/obj16/Orthogonal-State-16.png">
-            </entry>
-             <entry
-                   description="Creates a region"
-                   id="org.yakindu.sct.ui.editor.Region"
-                   kind="tool"
-                   label="Region"
-                   large_icon="icons/obj32/Region-32.png"
-                   path="/tools/"
-                   small_icon="icons/obj16/Region-16.png">
-             </entry>
-             <entry
-                   description="Creates an initial entry node"
-                   id="org.yakindu.sct.ui.editor.Entry"
-                   kind="tool"
-                   label="Entry"
-                   large_icon="icons/obj32/Initial-State-32.png"
-                   path="/tools/"
-                   small_icon="icons/obj16/Initial-State-16.png">
-             </entry>
-              <entry
-                   description="Creates a shallow history"
-                   id="org.yakindu.sct.ui.editor.ShallowHistory"
-                   kind="tool"
-                   label="Shallow History"
-                   large_icon="icons/obj32/Shallow-History-32.png"
-                   path="/tools/"
-                   small_icon="icons/obj16/Shallow-History-16.png">
-             </entry>
-             <entry
-                   description="Creates a deep history"
-                   id="org.yakindu.sct.ui.editor.DeepHistory"
-                   kind="tool"
-                   label="Deep History"
-                   large_icon="icons/obj32/Deep-History-32.png"
-                   path="/tools/"
-                   small_icon="icons/obj16/Deep-History-16.png">
-             </entry>
-             <entry
-                   description="Creates a final state"
-                   id="org.yakindu.sct.ui.editor.FinalState"
-                   kind="tool"
-                   label="Final State"
-                   large_icon="icons/obj32/Final-State-32.png"
-                   path="/tools/"
-                   small_icon="icons/obj16/Final-State-16.png">
-             </entry>
-             <entry
-                   description="Creates an exit node"
-                   id="org.yakindu.sct.ui.editor.Exit"
-                   kind="tool"
-                   label="Exit Node"
-                   large_icon="icons/obj32/Exit-Point-32.png"
-                   path="/tools/"
-                   small_icon="icons/obj16/Exit-Point-16.png">
-             </entry>
-             <entry
-                   description="Creates a choice"
-                   id="org.yakindu.sct.ui.editor.Choice"
-                   kind="tool"
-                   label="Choice"
-                   large_icon="icons/obj32/Choice-32.png"
-                   path="/tools/"
-                   small_icon="icons/obj16/Choice-16.png">
-             </entry>
-             <entry
-                   description="Creates a synchronization"
-                   id="org.yakindu.sct.ui.editor.Synchronization"
-                   kind="tool"
-                   label="Synchronization"
-                   large_icon="icons/obj32/Synchronization-32.png"
-                   path="/tools/"
-                   small_icon="icons/obj16/Synchronization-16.png">
-             </entry>
-         </contribution>
+<!-- Palette Provider -->
+<extension
+     point="org.eclipse.gmf.runtime.diagram.ui.paletteProviders">
+  <paletteProvider
+        class="org.yakindu.sct.ui.editor.providers.StatechartPaletteProvider">
          <Priority
-               name="Lowest">
-         </Priority>
-         <editor
-               class="org.yakindu.sct.ui.editor.editor.StatechartDiagramEditor">
-         </editor>
-      </paletteProvider>
+           name="High">
+     </Priority>
+     <editor
+           class="org.yakindu.sct.ui.editor.editor.StatechartDiagramEditor">
+     </editor>
+  </paletteProvider>
    </extension>
 
 <!-- Property Tabs -->

+ 0 - 46
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/editor/StatechartDiagramPaletteFactory.java

@@ -1,46 +0,0 @@
-/**
- * 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.editor;
-
-import org.eclipse.gef.Tool;
-import org.eclipse.gmf.runtime.diagram.ui.services.palette.PaletteFactory;
-import org.eclipse.gmf.runtime.diagram.ui.tools.ConnectionCreationTool;
-import org.eclipse.gmf.runtime.emf.type.core.ElementTypeRegistry;
-import org.eclipse.gmf.runtime.emf.type.core.IElementType;
-import org.yakindu.base.gmf.runtime.palette.CreationTool;
-
-/**
- * 
- * @author andreas muelder - Initial contribution and API
- * @author muehlbrandt
- * 
- */
-public class StatechartDiagramPaletteFactory extends PaletteFactory.Adapter {
-
-	@Override
-	public Tool createTool(String toolId) {
-		IElementType elementType = ElementTypeRegistry.getInstance().getType(
-				toolId);
-		if (elementType == null)
-			throw new IllegalStateException("No Element Id for toolId "
-					+ toolId + " found!");
-		if (toolId.equals(StatechartElementTypes.TRANSITION.getId())) {
-			return new ConnectionCreationTool(elementType);
-		}
-		if (toolId.equals(StatechartElementTypes.ENTRY.getId())
-				|| toolId.equals(StatechartElementTypes.DEEPHISTORY.getId())
-				|| toolId.equals(StatechartElementTypes.SHALLOWHISTORY.getId())
-				|| toolId.equals(StatechartElementTypes.EXIT.getId())) {
-			return new CreationTool(elementType, false);
-		} else
-			return new CreationTool(elementType, true);
-	}
-}

+ 196 - 0
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/providers/DefaultSCTPaletteFactory.java

@@ -0,0 +1,196 @@
+/**
+ * Copyright (c) 2016 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.providers;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.gef.Tool;
+import org.eclipse.gef.palette.CombinedTemplateCreationEntry;
+import org.eclipse.gef.palette.PaletteContainer;
+import org.eclipse.gef.palette.PaletteDrawer;
+import org.eclipse.gef.palette.PaletteRoot;
+import org.eclipse.gmf.runtime.diagram.ui.tools.ConnectionCreationTool;
+import org.eclipse.gmf.runtime.emf.type.core.ElementTypeRegistry;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.osgi.framework.Bundle;
+import org.yakindu.base.gmf.runtime.palette.DirectEditCreationTool;
+import org.yakindu.sct.ui.editor.DiagramActivator;
+
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public class DefaultSCTPaletteFactory implements ISCTPaletteFactory {
+	
+	//Meta model type IDs
+	public static final String PLUGIN_ID_PREFIX = "org.yakindu.sct.ui.editor.";
+	public static final String STATECHART_ID = "Statechart";
+	public static final String REGION_ID = "Region";
+	public static final String STATE_ID = "State";
+	public static final String COMPOSITE_STATE_ID = "CompositeState";
+	public static final String ORTHOGONAL_STATE_ID = "OrthogonalState";
+	public static final String TRANSITION_ID = "Transition";
+	public static final String CHOICE_ID = "Choice";
+	public static final String ENTRY_ID = "Entry";
+	public static final String DEEPHISTORY_ID = "DeepHistory";
+	public static final String SHALLOWHISTORY_ID = "ShallowHistory";
+	private static final String EXITNODE_ID = "Exit";
+	public static final String FINALSTATE_ID = "FinalState";
+	public static final String SYNCHRONIZATION_ID = "Synchronization";
+
+	public void createPaletteEntries(PaletteRoot root) {
+		PaletteContainer container = createToolsCategory(root);
+		createTransitionEntry(container);
+		createStateEntry(container);
+		createCompositeStateEntry(container);
+		createOrthogonalStateEntry(container);
+		createRegionEntry(container);
+		createInitialStateEntry(container);
+		createShallowHistoryEntry(container);
+		createDeepHistoryEntry(container);
+		createFinalStateEntry(container);
+		createExitEntry(container);
+		createChoiceEntry(container);
+		createSynchronizationEntry(container);
+	}
+
+	protected PaletteContainer createToolsCategory(PaletteRoot root) {
+		PaletteDrawer drawer = new PaletteDrawer("Tools");
+		root.add(drawer);
+		return drawer;
+	}
+
+	protected void createTransitionEntry(PaletteContainer container) {
+		container.add(new ConnectionCreationToolEntry("Transition", "Creates a transition", getType(TRANSITION_ID),
+				findIcon("icons/obj16/transition-16.png"), findIcon("icons/obj32/transition-32.png")));
+	}
+
+	protected void createStateEntry(PaletteContainer container) {
+		container.add(new CreationToolEntry("State", "Creates a state", getType(STATE_ID),
+				findIcon("icons/obj16/State-16.png"), findIcon("icons/obj32/State-32.png"), true));
+	}
+
+	private void createCompositeStateEntry(PaletteContainer container) {
+		container.add(new CreationToolEntry("Composite State", "Creates a composite state", getType(COMPOSITE_STATE_ID),
+				findIcon("icons/obj16/Composite-State-16.png"), findIcon("icons/obj32/Composite-State-32.png"), true));
+	}
+
+	protected void createOrthogonalStateEntry(PaletteContainer container) {
+		container.add(new CreationToolEntry("Orthogonal State", "Creates an orthogonal state",
+				getType(ORTHOGONAL_STATE_ID), findIcon("icons/obj16/Orthogonal-State-16.png"),
+				findIcon("icons/obj32/Orthogonal-State-32.png"), true));
+	}
+
+	protected void createRegionEntry(PaletteContainer container) {
+		container.add(new CreationToolEntry("Region", "Creates a region", getType(REGION_ID),
+				findIcon("icons/obj16/Region-16.png"), findIcon("icons/obj32/Region-32.png"), false));
+	}
+
+	protected void createInitialStateEntry(PaletteContainer container) {
+		container.add(new CreationToolEntry("Entry", "Creates an initial state", getType(ENTRY_ID),
+				findIcon("icons/obj16/Initial-State-16.png"), findIcon("icons/obj32/Initial-State-32.png"), false));
+	}
+
+	protected void createShallowHistoryEntry(PaletteContainer container) {
+		container.add(new CreationToolEntry("Shallow History", "Creates a shallow state", getType(ENTRY_ID),
+				findIcon("icons/obj16/Shallow-History-16.png"), findIcon("icons/obj32/Shallow-History-32.png"), false));
+	}
+
+	protected void createDeepHistoryEntry(PaletteContainer container) {
+		container.add(new CreationToolEntry("Deep History", "Creates a deep history", getType(ENTRY_ID),
+				findIcon("icons/obj16/Deep-History-16.png"), findIcon("icons/obj32/Deep-History-32.png"), false));
+	}
+
+	protected void createFinalStateEntry(PaletteContainer container) {
+		container.add(new CreationToolEntry("Final State", "Creates a final state", getType(FINALSTATE_ID),
+				findIcon("icons/obj16/Final-State-16.png"), findIcon("icons/obj32/Final-State-32.png"), false));
+	}
+
+	protected void createExitEntry(PaletteContainer container) {
+		container.add(new CreationToolEntry("Exit Node", "Creates an exit node", getType(EXITNODE_ID),
+				findIcon("icons/obj16/Exit-Point-16.png"), findIcon("icons/obj32/Exit-Point-32.png"), false));
+	}
+
+	protected void createChoiceEntry(PaletteContainer container) {
+		container.add(new CreationToolEntry("Choice", "Creates a choice", getType(CHOICE_ID),
+				findIcon("icons/obj16/Choice-16.png"), findIcon("icons/obj32/Choice-32.png"), false));
+	}
+
+	protected void createSynchronizationEntry(PaletteContainer container) {
+		container.add(new CreationToolEntry("Synchronization", "Creates a synchronization", getType(SYNCHRONIZATION_ID),
+				findIcon("icons/obj16/Synchronization-16.png"), findIcon("icons/obj32/Synchronization-32.png"), false));
+	}
+
+	protected IElementType getType(String id) {
+		return ElementTypeRegistry.getInstance().getType(PLUGIN_ID_PREFIX + id);
+	}
+
+	protected ImageDescriptor findIcon(String iconPath) {
+		return getImageDescriptor(iconPath, DiagramActivator.getDefault().getBundle());
+	}
+
+	protected ImageDescriptor getImageDescriptor(String iconPath, Bundle bundle) {
+		try {
+			if (iconPath != null) {
+				URL fullPathString = FileLocator.find(bundle, new Path(iconPath), null);
+				fullPathString = fullPathString != null ? fullPathString : new URL(iconPath);
+				if (fullPathString != null) {
+					return ImageDescriptor.createFromURL(fullPathString);
+				}
+			}
+		} catch (MalformedURLException e) {
+			e.printStackTrace();
+		}
+
+		return null;
+	}
+
+	public static class CreationToolEntry extends CombinedTemplateCreationEntry {
+
+		private IElementType elementType;
+		private boolean directEdit;
+
+		public CreationToolEntry(String label, String shortDesc, IElementType elementType, ImageDescriptor iconSmall,
+				ImageDescriptor iconLarge, boolean directEdit) {
+			super(label, shortDesc, null, iconSmall, iconLarge);
+			this.elementType = elementType;
+			this.directEdit = directEdit;
+		}
+
+		@Override
+		public Tool createTool() {
+			return new DirectEditCreationTool(elementType, directEdit);
+		}
+	}
+
+	public static class ConnectionCreationToolEntry extends CombinedTemplateCreationEntry {
+
+		private IElementType elementType;
+
+		public ConnectionCreationToolEntry(String label, String shortDesc, IElementType elementType,
+				ImageDescriptor iconSmall, ImageDescriptor iconLarge) {
+			super(label, shortDesc, null, iconSmall, iconLarge);
+			this.elementType = elementType;
+		}
+
+		@Override
+		public Tool createTool() {
+			return new ConnectionCreationTool(elementType);
+		}
+
+	}
+
+}

+ 24 - 0
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/providers/ISCTPaletteFactory.java

@@ -0,0 +1,24 @@
+/**
+ * Copyright (c) 2016 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.providers;
+
+import org.eclipse.gef.palette.PaletteRoot;
+
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public interface ISCTPaletteFactory {
+
+	public void createPaletteEntries(PaletteRoot root);
+
+}

+ 33 - 14
plugins/org.yakindu.sct.ui.editor/src/org/yakindu/sct/ui/editor/providers/StatechartPaletteProvider.java

@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2010 committers of YAKINDU and others.
+ * Copyright (c) 2016 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
@@ -12,23 +12,42 @@ package org.yakindu.sct.ui.editor.providers;
 
 import java.util.Map;
 
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.gef.palette.PaletteRoot;
-import org.eclipse.gmf.runtime.diagram.ui.providers.DefaultPaletteProvider;
+import org.eclipse.gmf.runtime.common.core.service.AbstractProvider;
+import org.eclipse.gmf.runtime.common.core.service.IOperation;
+import org.eclipse.gmf.runtime.diagram.ui.services.palette.IPaletteProvider;
 import org.eclipse.ui.IEditorPart;
-import org.yakindu.sct.ui.editor.editor.StatechartDiagramEditor;
+import org.yakindu.sct.domain.extension.DomainRegistry;
 
-public class StatechartPaletteProvider extends DefaultPaletteProvider {
+import com.google.inject.Injector;
+
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public class StatechartPaletteProvider extends AbstractProvider implements IPaletteProvider {
+
+	public void contributeToPalette(IEditorPart editor, Object content, PaletteRoot root,
+			@SuppressWarnings("rawtypes") Map predefinedEntries) {
+		IFile adapter = editor.getEditorInput().getAdapter(IFile.class);
+		String domainID = DomainRegistry
+				.determineDomainID(URI.createPlatformResourceURI(adapter.getFullPath().toOSString(), true));
+		Injector editorInjector = DomainRegistry.getDomainDescriptor(domainID).getDomainInjectorProvider()
+				.getEditorInjector();
+		ISCTPaletteFactory factory = editorInjector.getInstance(ISCTPaletteFactory.class);
+		factory.createPaletteEntries(root);
+	}
+
+	@Override
+	public boolean provides(IOperation operation) {
+		return false;
+	}
 
 	@Override
-	public void contributeToPalette(IEditorPart editor, Object content,
-			PaletteRoot root, @SuppressWarnings("rawtypes") Map predefinedEntries) {
-		if (editor instanceof StatechartDiagramEditor) {
-//			StatechartDiagramEditor scEditor = (StatechartDiagramEditor) editor;
-//			if (StatechartDiagramEditor.ID.equals(scEditor.getContributorId())) {
-				super.contributeToPalette(editor, content, root,
-						predefinedEntries);
-//			}
-		}
-		return;
+	public void setContributions(IConfigurationElement configElement) {
 	}
 }