diff options
Diffstat (limited to 'plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/part/PaletteUtil.java')
-rw-r--r-- | plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/part/PaletteUtil.java | 986 |
1 files changed, 499 insertions, 487 deletions
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/part/PaletteUtil.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/part/PaletteUtil.java index 0038328f8ca..eb1a09af05b 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/part/PaletteUtil.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.common/src/org/eclipse/papyrus/uml/diagram/common/part/PaletteUtil.java @@ -1,498 +1,510 @@ -/***************************************************************************** - * Copyright (c) 2009 CEA LIST. - * - * 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: - * Remi Schnekenburger (CEA LIST) remi.schnekenburger@cea.fr - Initial API and implementation - * - *****************************************************************************/ - -package org.eclipse.papyrus.uml.diagram.common.part; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.StringTokenizer; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.gef.Tool; -import org.eclipse.gef.palette.PaletteContainer; -import org.eclipse.gef.palette.PaletteEntry; -import org.eclipse.gef.palette.PaletteRoot; -import org.eclipse.gef.palette.ToolEntry; -import org.eclipse.gmf.runtime.common.core.service.IProvider; -import org.eclipse.gmf.runtime.common.core.service.ProviderPriority; -import org.eclipse.gmf.runtime.diagram.ui.internal.services.palette.ContributeToPaletteOperation; -import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditorWithFlyOutPalette; -import org.eclipse.gmf.runtime.diagram.ui.services.palette.IPaletteProvider; -import org.eclipse.gmf.runtime.emf.type.core.IElementType; -import org.eclipse.gmf.runtime.emf.type.core.SpecializationType; -import org.eclipse.gmf.runtime.notation.Diagram; -import org.eclipse.papyrus.infra.core.utils.PapyrusTrace; -import org.eclipse.papyrus.uml.diagram.common.Activator; -import org.eclipse.papyrus.uml.diagram.common.service.AspectUnspecifiedTypeConnectionTool; -import org.eclipse.papyrus.uml.diagram.common.service.AspectUnspecifiedTypeCreationTool; -import org.eclipse.papyrus.uml.diagram.common.service.IPapyrusPaletteConstant; -import org.eclipse.papyrus.uml.diagram.common.service.IProfileDependantPaletteProvider; -import org.eclipse.papyrus.uml.diagram.common.service.PapyrusPaletteService; -import org.eclipse.papyrus.uml.diagram.common.service.PapyrusPaletteService.ProviderDescriptor; -import org.eclipse.papyrus.uml.diagram.common.service.palette.AspectToolService; -import org.eclipse.papyrus.uml.diagram.common.service.palette.IAspectAction; -import org.eclipse.papyrus.uml.diagram.common.service.palette.IAspectActionProvider; -import org.eclipse.papyrus.uml.diagram.common.service.palette.IPostAction; -import org.eclipse.papyrus.uml.diagram.common.service.palette.IPreAction; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IMemento; -import org.eclipse.uml2.uml.Element; -import org.eclipse.uml2.uml.NamedElement; -import org.eclipse.uml2.uml.Profile; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * Utility class for palette. - */ -public class PaletteUtil { - - /** - * Returns the parent container by its ID - * - * @param entry - * the palette container for which parent container is looked - * @param parentID - * the id of the parent container - * @return the parent - */ - public static PaletteContainer getContainerByID(PaletteContainer container, String parentID) { - // check this element is the searched parent; - if(parentID.equals(container.getId())) { - return container; - } - - // element is not the parent. Look its children - Iterator<PaletteContainer> it = getDirectChildContainers(container).iterator(); - while(it.hasNext()) { - PaletteContainer tmp = getContainerByID(it.next(), parentID); - if(tmp != null) { - return tmp; - } - } - return null; - } - - /** - * Returns the type of metaclasses created by the toolentry - * - * @param entry - * the entry for which metaclass created is searched - * @return the type of metaclasses created by the toolentry or <code>null</code>. - */ - public static EClass getToolMetaclass(ToolEntry entry) { - Tool tool = entry.createTool(); - List<IElementType> types = null; - if(tool instanceof AspectUnspecifiedTypeCreationTool) { - types = ((AspectUnspecifiedTypeCreationTool)tool).getElementTypes(); - } else if(tool instanceof AspectUnspecifiedTypeConnectionTool) { - types = ((AspectUnspecifiedTypeConnectionTool)tool).getElementTypes(); - } - if(types != null && types.size() > 0) { - IElementType type = types.get(0); - - if(type instanceof SpecializationType) { - type = ((SpecializationType)type).getSpecializedTypes()[0]; - } - return type.getEClass(); - } - return null; - } - - /** - * Returns the parent container by its ID - * - * @param entry - * the palette entry for which parent container is looked - * @param parentID - * the id of the parent container - * @return the parent - */ - public static PaletteContainer getContainerByID(PaletteEntry entry, String parentID) { - // retrieve the root - PaletteContainer root = getRoot(entry); - return getContainerByID(root, parentID); - } - - /** - * Return the child containers directly contained by the specified container - * - * @param container - * the container to look in. - * @return the list of directly contained elements - */ - @SuppressWarnings("unchecked") - public static List<PaletteContainer> getDirectChildContainers(PaletteContainer container) { - List<PaletteContainer> containers = new ArrayList<PaletteContainer>(); - Iterator<PaletteEntry> it = container.getChildren().iterator(); - while(it.hasNext()) { - PaletteEntry entry = it.next(); - if(entry instanceof PaletteContainer) { - containers.add((PaletteContainer)entry); - } - } - return containers; - } - - /** - * Retrieves the root element for the given container - * - * @param container - * the container for which the root is searched - * @return the root of the container - */ - public static PaletteContainer getRoot(PaletteContainer container) { - // if container has a parent, returns it. - if(container.getParent() != null) { - return getRoot(container.getParent()); - } - // else, root element is the container itself. - return container; - } - - /** - * Retrieves the root element for the given palette entry - * - * @param container - * the container for which the root is searched - * @return the root of the container - */ - public static PaletteContainer getRoot(PaletteEntry entry) { - return getRoot(entry.getParent()); - } - - /** - * Default constructor. Should never be used, as method are static in this - * class. - */ - // @unused - private PaletteUtil() { - - } - - /** - * return tool entries for the given {@link PaletteContainer} and its - * sub-containers - * - * @param container - * the container that contains the ToolEntries - * @return the list of tool entries or an empty list - */ - public static List<ToolEntry> getAllToolEntries(PaletteContainer container) { - final List<ToolEntry> entries = new ArrayList<ToolEntry>(); - Iterator<PaletteEntry> it = container.getChildren().iterator(); - while(it.hasNext()) { - PaletteEntry entry = it.next(); - if(entry instanceof ToolEntry) { - entries.add((ToolEntry)entry); - } - if(entry instanceof PaletteContainer) { - entries.addAll(getAllToolEntries((PaletteContainer)entry)); - } - } - return entries; - } - - /** - * Looks for the memento with the correct id from the root momento - * - * @param rootMemento - * the root memento from which the memento is searched - * @param id - * the id of the memento to search - * @return the memento with the given ID or <code>null</code> if no memento - * was found - */ - // @unused - public static IMemento getMemento(IMemento rootMemento, String id) { - IMemento memento = null; - memento = rootMemento.getChild(id); - return memento; - } - - /** - * Return all entries from a palette - * - * @param paletteRoot - * the root from which tools are retrieved - * @return the list of entries - */ - public static List<PaletteEntry> getAllEntries(PaletteContainer container) { - List<PaletteEntry> elements = new ArrayList<PaletteEntry>(); - for(Object object : container.getChildren()) { - if(object instanceof PaletteContainer) { - elements.add((PaletteContainer)object); - elements.addAll(getAllEntries((PaletteContainer)object)); - } else if(object instanceof ToolEntry) { - elements.add((ToolEntry)object); - } - } - return elements; - } - - /** - * Returns all available entries for the given editor ID - * - * @param editorID - * the editor to be contributed - * @param priority - * the priority max for the entries - * @return the set of available entries - */ - public static Set<? extends PaletteEntry> getAvailableEntries(IEditorPart part, ProviderPriority priority) { - Set<? extends PaletteEntry> entries = new HashSet<PaletteEntry>(); - - // retrieve all provider for the given editor ID - PaletteRoot root = new PaletteRoot(); - List<? extends PapyrusPaletteService.ProviderDescriptor> providers = (List<? extends ProviderDescriptor>)PapyrusPaletteService.getInstance().getProviders(); - ContributeToPaletteOperation operation = new ContributeToPaletteOperation(part, part.getEditorInput(), root, new HashMap<Object, Object>()); - - // generate for each provider, according to priority - @SuppressWarnings("unchecked") - List<PapyrusPaletteService.ProviderDescriptor> providerList = (List<PapyrusPaletteService.ProviderDescriptor>)PapyrusPaletteService.getInstance().getProviders(); - for(PapyrusPaletteService.ProviderDescriptor descriptor : providerList) { - int compare = descriptor.getPriority().compareTo(priority); - if(compare < 0) { - if(descriptor.providesWithVisibility(operation)) { - ((IPaletteProvider)descriptor.getProvider()).contributeToPalette(part, part.getEditorInput(), root, new HashMap<Object, Object>()); - } - } - } - return entries; - } - - /** - * Returns all available entries for the given editor ID - * - * @param editorID - * the editor to be contributed - * @param priority - * the priority max for the entries - * @return the set of available entries - */ - public static Map<String, PaletteEntry> getAvailableEntriesSet(IEditorPart part, ProviderPriority priority) { - Map<String, PaletteEntry> entries = new HashMap<String, PaletteEntry>(); - - // retrieve all provider for the given editor ID - PaletteRoot root = new PaletteRoot(); - List<? extends PapyrusPaletteService.ProviderDescriptor> providers = (List<? extends ProviderDescriptor>)PapyrusPaletteService.getInstance().getProviders(); - ContributeToPaletteOperation operation = new ContributeToPaletteOperation(part, part.getEditorInput(), root, entries); - - // generate for each provider, according to priority - @SuppressWarnings("unchecked") - List<PapyrusPaletteService.ProviderDescriptor> providerList = (List<PapyrusPaletteService.ProviderDescriptor>)PapyrusPaletteService.getInstance().getProviders(); - for(PapyrusPaletteService.ProviderDescriptor descriptor : providerList) { - int compare = descriptor.getPriority().compareTo(priority); - if(compare <= 0) { - if(descriptor.providesWithVisibility(operation)) { - ((IPaletteProvider)descriptor.getProvider()).contributeToPalette(part, part.getEditorInput(), root, entries); - } - } - } - return entries; - } - - /** - * Returns the list of stereotypes String from a serialize string form - * - * @param serializedForm - * the serialized form of the list of stereotypes - * @return the list of stereotypes String from a serialize string form - */ - public static List<String> getStereotypeListFromString(String serializedForm) { - StringTokenizer tokenizer = new StringTokenizer(serializedForm, ","); - List<String> list = new ArrayList<String>(); - while(tokenizer.hasMoreElements()) { - list.add(tokenizer.nextToken().trim()); - } - return list; - } - - /** - * Returns the list of stereotypes String under a serialized form - * - * @param list - * the list of stereotypes to serialize - * @return the list of stereotypes String under a serialized form - */ - public static String getSerializedStereotypeList(Collection<String> stereotypes) { - return convertToCommaSeparatedRepresentation(stereotypes); - } - - /** - * Returns the name of the profile from the given stereotype qualified Name - * - * @param stereotypeName - * the name of the stereotype to parse - * @return the qualified name of the profile from the given stereotype - * qualified Name - */ - public static String findProfileNameFromStereotypeName(String stereotypeName) { - return stereotypeName.substring(0, stereotypeName.lastIndexOf(NamedElement.SEPARATOR)); - } - - /** - * Returns the list of profile Qualified Names String under a serialized - * form - * - * @param list - * the list of profiles to serialize - * @return the list of profiles String under a serialized form - */ - public static String getSerializedProfileList(Collection<String> profiles) { - return convertToCommaSeparatedRepresentation(profiles); - } - - public static String convertToCommaSeparatedRepresentation(Collection objects) { - return convertToFlatRepresentation(objects, ","); - } +/*****************************************************************************
+ * Copyright (c) 2009 CEA LIST.
+ *
+ * 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:
+ * Remi Schnekenburger (CEA LIST) remi.schnekenburger@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+
+package org.eclipse.papyrus.uml.diagram.common.part;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gef.Tool;
+import org.eclipse.gef.palette.PaletteContainer;
+import org.eclipse.gef.palette.PaletteEntry;
+import org.eclipse.gef.palette.PaletteRoot;
+import org.eclipse.gef.palette.ToolEntry;
+import org.eclipse.gmf.runtime.common.core.service.IProvider;
+import org.eclipse.gmf.runtime.common.core.service.ProviderPriority;
+import org.eclipse.gmf.runtime.diagram.ui.internal.services.palette.ContributeToPaletteOperation;
+import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditorWithFlyOutPalette;
+import org.eclipse.gmf.runtime.diagram.ui.services.palette.IPaletteProvider;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.type.core.SpecializationType;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.papyrus.infra.core.utils.PapyrusTrace;
+import org.eclipse.papyrus.uml.diagram.common.Activator;
+import org.eclipse.papyrus.uml.diagram.common.service.AspectUnspecifiedTypeConnectionTool;
+import org.eclipse.papyrus.uml.diagram.common.service.AspectUnspecifiedTypeCreationTool;
+import org.eclipse.papyrus.uml.diagram.common.service.IPapyrusPaletteConstant;
+import org.eclipse.papyrus.uml.diagram.common.service.IProfileDependantPaletteProvider;
+import org.eclipse.papyrus.uml.diagram.common.service.PapyrusPaletteService;
+import org.eclipse.papyrus.uml.diagram.common.service.PapyrusPaletteService.ProviderDescriptor;
+import org.eclipse.papyrus.uml.diagram.common.service.palette.AspectToolService;
+import org.eclipse.papyrus.uml.diagram.common.service.palette.IAspectAction;
+import org.eclipse.papyrus.uml.diagram.common.service.palette.IAspectActionProvider;
+import org.eclipse.papyrus.uml.diagram.common.service.palette.IPostAction;
+import org.eclipse.papyrus.uml.diagram.common.service.palette.IPreAction;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IMemento;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.NamedElement;
+import org.eclipse.uml2.uml.Profile;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * Utility class for palette.
+ */
+public class PaletteUtil {
+
+ /**
+ * Returns the parent container by its ID
+ *
+ * @param entry
+ * the palette container for which parent container is looked
+ * @param parentID
+ * the id of the parent container
+ * @return the parent
+ */
+ public static PaletteContainer getContainerByID(PaletteContainer container, String parentID) {
+ // check this element is the searched parent;
+ if(parentID.equals(container.getId())) {
+ return container;
+ }
+
+ // element is not the parent. Look its children
+ Iterator<PaletteContainer> it = getDirectChildContainers(container).iterator();
+ while(it.hasNext()) {
+ PaletteContainer tmp = getContainerByID(it.next(), parentID);
+ if(tmp != null) {
+ return tmp;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns the type of metaclasses created by the toolentry
+ *
+ * @param entry
+ * the entry for which metaclass created is searched
+ * @return the type of metaclasses created by the toolentry or <code>null</code>.
+ */
+ public static EClass getToolMetaclass(ToolEntry entry) {
+ Tool tool = entry.createTool();
+ List<IElementType> types = null;
+ if(tool instanceof AspectUnspecifiedTypeCreationTool) {
+ types = ((AspectUnspecifiedTypeCreationTool)tool).getElementTypes();
+ } else if(tool instanceof AspectUnspecifiedTypeConnectionTool) {
+ types = ((AspectUnspecifiedTypeConnectionTool)tool).getElementTypes();
+ }
+ if(types != null && types.size() > 0) {
+ IElementType type = types.get(0);
+
+ if(type instanceof SpecializationType) {
+ type = ((SpecializationType)type).getSpecializedTypes()[0];
+ }
+ return type.getEClass();
+ }
+ return null;
+ }
+
+ /**
+ * Returns the parent container by its ID
+ *
+ * @param entry
+ * the palette entry for which parent container is looked
+ * @param parentID
+ * the id of the parent container
+ * @return the parent
+ */
+ public static PaletteContainer getContainerByID(PaletteEntry entry, String parentID) {
+ // retrieve the root
+ PaletteContainer root = getRoot(entry);
+ return getContainerByID(root, parentID);
+ }
+
+ /**
+ * Return the child containers directly contained by the specified container
+ *
+ * @param container
+ * the container to look in.
+ * @return the list of directly contained elements
+ */
+ @SuppressWarnings("unchecked")
+ public static List<PaletteContainer> getDirectChildContainers(PaletteContainer container) {
+ List<PaletteContainer> containers = new ArrayList<PaletteContainer>();
+ Iterator<PaletteEntry> it = container.getChildren().iterator();
+ while(it.hasNext()) {
+ PaletteEntry entry = it.next();
+ if(entry instanceof PaletteContainer) {
+ containers.add((PaletteContainer)entry);
+ }
+ }
+ return containers;
+ }
+
+ /**
+ * Retrieves the root element for the given container
+ *
+ * @param container
+ * the container for which the root is searched
+ * @return the root of the container
+ */
+ public static PaletteContainer getRoot(PaletteContainer container) {
+ // if container has a parent, returns it.
+ if(container.getParent() != null) {
+ return getRoot(container.getParent());
+ }
+ // else, root element is the container itself.
+ return container;
+ }
+
+ /**
+ * Retrieves the root element for the given palette entry
+ *
+ * @param container
+ * the container for which the root is searched
+ * @return the root of the container
+ */
+ public static PaletteContainer getRoot(PaletteEntry entry) {
+ return getRoot(entry.getParent());
+ }
+
+ /**
+ * Default constructor. Should never be used, as method are static in this
+ * class.
+ */
+ // @unused
+ private PaletteUtil() {
+
+ }
+
+ /**
+ * return tool entries for the given {@link PaletteContainer} and its
+ * sub-containers
+ *
+ * @param container
+ * the container that contains the ToolEntries
+ * @return the list of tool entries or an empty list
+ */
+ public static List<ToolEntry> getAllToolEntries(PaletteContainer container) {
+ final List<ToolEntry> entries = new ArrayList<ToolEntry>();
+ Iterator<PaletteEntry> it = container.getChildren().iterator();
+ while(it.hasNext()) {
+ PaletteEntry entry = it.next();
+ if(entry instanceof ToolEntry) {
+ entries.add((ToolEntry)entry);
+ }
+ if(entry instanceof PaletteContainer) {
+ entries.addAll(getAllToolEntries((PaletteContainer)entry));
+ }
+ }
+ return entries;
+ }
+
+ /**
+ * Looks for the memento with the correct id from the root momento
+ *
+ * @param rootMemento
+ * the root memento from which the memento is searched
+ * @param id
+ * the id of the memento to search
+ * @return the memento with the given ID or <code>null</code> if no memento
+ * was found
+ */
+ // @unused
+ public static IMemento getMemento(IMemento rootMemento, String id) {
+ IMemento memento = null;
+ memento = rootMemento.getChild(id);
+ return memento;
+ }
+
+ /**
+ * Return all entries from a palette
+ *
+ * @param paletteRoot
+ * the root from which tools are retrieved
+ * @return the list of entries
+ */
+ public static List<PaletteEntry> getAllEntries(PaletteContainer container) {
+ List<PaletteEntry> elements = new ArrayList<PaletteEntry>();
+ for(Object object : container.getChildren()) {
+ if(object instanceof PaletteContainer) {
+ elements.add((PaletteContainer)object);
+ elements.addAll(getAllEntries((PaletteContainer)object));
+ } else if(object instanceof ToolEntry) {
+ elements.add((ToolEntry)object);
+ }
+ }
+ return elements;
+ }
+
+ /**
+ * Returns all available entries for the given editor ID
+ *
+ * @param editorID
+ * the editor to be contributed
+ * @param priority
+ * the priority max for the entries
+ * @return the set of available entries
+ */
+ public static Set<? extends PaletteEntry> getAvailableEntries(IEditorPart part, ProviderPriority priority) {
+ Set<? extends PaletteEntry> entries = new HashSet<PaletteEntry>();
+
+ // retrieve all provider for the given editor ID
+ PaletteRoot root = new PaletteRoot();
+ List<? extends PapyrusPaletteService.ProviderDescriptor> providers = (List<? extends ProviderDescriptor>)PapyrusPaletteService.getInstance().getProviders();
+ ContributeToPaletteOperation operation = new ContributeToPaletteOperation(part, part.getEditorInput(), root, new HashMap<Object, Object>());
+
+ // generate for each provider, according to priority
+ @SuppressWarnings("unchecked")
+ List<PapyrusPaletteService.ProviderDescriptor> providerList = (List<PapyrusPaletteService.ProviderDescriptor>)PapyrusPaletteService.getInstance().getProviders();
+ for(PapyrusPaletteService.ProviderDescriptor descriptor : providerList) {
+ int compare = descriptor.getPriority().compareTo(priority);
+ if(compare < 0) {
+ if(descriptor.providesWithVisibility(operation)) {
+ ((IPaletteProvider)descriptor.getProvider()).contributeToPalette(part, part.getEditorInput(), root, new HashMap<Object, Object>());
+ }
+ }
+ }
+ return entries;
+ }
+
+ /**
+ * Returns all available entries for the given editor ID
+ *
+ * @param editorID
+ * the editor to be contributed
+ * @param priority
+ * the priority max for the entries
+ * @return the set of available entries
+ */
+ public static Map<String, PaletteEntry> getAvailableEntriesSet(IEditorPart part, ProviderPriority priority) {
+ Map<String, PaletteEntry> entries = new HashMap<String, PaletteEntry>();
+
+ // retrieve all provider for the given editor ID
+ PaletteRoot root = new PaletteRoot();
+ List<? extends PapyrusPaletteService.ProviderDescriptor> providers = (List<? extends ProviderDescriptor>)PapyrusPaletteService.getInstance().getProviders();
+ ContributeToPaletteOperation operation = new ContributeToPaletteOperation(part, part.getEditorInput(), root, entries);
+
+ // generate for each provider, according to priority
+ @SuppressWarnings("unchecked")
+ List<PapyrusPaletteService.ProviderDescriptor> providerList = (List<PapyrusPaletteService.ProviderDescriptor>)PapyrusPaletteService.getInstance().getProviders();
+ for(PapyrusPaletteService.ProviderDescriptor descriptor : providerList) {
+ int compare = descriptor.getPriority().compareTo(priority);
+ if(compare <= 0) {
+ if(descriptor.providesWithVisibility(operation)) {
+ ((IPaletteProvider)descriptor.getProvider()).contributeToPalette(part, part.getEditorInput(), root, entries);
+ }
+ }
+ }
+ return entries;
+ }
+
+ /**
+ * Returns the list of stereotypes String from a serialize string form
+ *
+ * @param serializedForm
+ * the serialized form of the list of stereotypes
+ * @return the list of stereotypes String from a serialize string form
+ */
+ public static List<String> getStereotypeListFromString(String serializedForm) {
+ StringTokenizer tokenizer = new StringTokenizer(serializedForm, ",");
+ List<String> list = new ArrayList<String>();
+ while(tokenizer.hasMoreElements()) {
+ list.add(tokenizer.nextToken().trim());
+ }
+ return list;
+ }
+
+ /**
+ * Returns the list of stereotypes String under a serialized form
+ *
+ * @param list
+ * the list of stereotypes to serialize
+ * @return the list of stereotypes String under a serialized form
+ */
+ public static String getSerializedStereotypeList(Collection<String> stereotypes) {
+ return convertToCommaSeparatedRepresentation(stereotypes);
+ }
+
+ /**
+ * Returns the name of the profile from the given stereotype qualified Name
+ *
+ * @param stereotypeName
+ * the name of the stereotype to parse
+ * @return the qualified name of the profile from the given stereotype
+ * qualified Name
+ */
+ public static String findProfileNameFromStereotypeName(String stereotypeName) {
+ return stereotypeName.substring(0, stereotypeName.lastIndexOf(NamedElement.SEPARATOR));
+ }
+
+ /**
+ * Returns the list of profile Qualified Names String under a serialized
+ * form
+ *
+ * @param list
+ * the list of profiles to serialize
+ * @return the list of profiles String under a serialized form
+ */
+ public static String getSerializedProfileList(Collection<String> profiles) {
+ return convertToCommaSeparatedRepresentation(profiles);
+ }
+
+ public static String convertToCommaSeparatedRepresentation(Collection objects) {
+ return convertToFlatRepresentation(objects, ",");
+ }
+
+ public static String convertToFlatRepresentation(Collection objects, String separator) {
+ StringBuilder buffer = new StringBuilder();
+ Iterator it = objects.iterator();
+ while(it.hasNext()) {
+ buffer.append(it.next());
+ if(it.hasNext()) {
+ buffer.append(separator);
+ }
+ }
+ return buffer.toString();
+ }
+
+ /**
+ * Returns the list of profiles String from a serialize string form
+ *
+ * @param serializedForm
+ * the serialized form of the list of stereotypes
+ * @return the list of profiles String from a serialize string form
+ */
+ public static Set<String> getProfileSetFromString(String serializedForm) {
+ StringTokenizer tokenizer = new StringTokenizer(serializedForm, ",");
+ Set<String> list = new HashSet<String>();
+ while(tokenizer.hasMoreElements()) {
+ list.add(tokenizer.nextToken());
+ }
+ return list;
+ }
+
+ /**
+ * returns <code>true</code> if the descriptor have all necessary profiles
+ *
+ * @param part
+ * the editor part for which the palette is shown
+ * @param papyrusProviderDesc
+ * the current provider descriptor to test
+ * @return <code>true</code> if all required profile are present
+ */
+ public static boolean areRequiredProfileApplied(IEditorPart part, PapyrusPaletteService.ProviderDescriptor papyrusProviderDesc) {
+ if(!(part instanceof DiagramEditorWithFlyOutPalette)) {
+ PapyrusTrace.log(IStatus.WARNING, "trying to check a papyrus palette descriptor outside papyrus framework");
+ return false;
+ }
+ if(papyrusProviderDesc instanceof PapyrusPaletteService.LocalProviderDescriptor) {
+ IPaletteDescription description = ((PapyrusPaletteService.LocalProviderDescriptor)papyrusProviderDesc).getDescription();
+ // checks the presence of required profile
+ Diagram diagram = ((DiagramEditorWithFlyOutPalette)part).getDiagram();
+ EObject element = diagram.getElement();
+ if(element instanceof Element) {
+ org.eclipse.uml2.uml.Package package_ = ((Element)element).getNearestPackage();
+ List<Profile> appliedProfiles = package_.getAllAppliedProfiles();
+ List<String> appliedProfilesNames = new ArrayList<String>();
+ for(Profile profile : appliedProfiles) {
+ appliedProfilesNames.add(profile.getQualifiedName());
+ }
+
+ // compare to the list of profiles used by the palette
+ Map<String, String> properties = description.getProperties();
+ if(description != null) {
+ String requiredProfilesList = properties.get(IPapyrusPaletteConstant.PROFILE_LIST);
+ if(requiredProfilesList != null) {
+ // parse requiredProfile string (profile1QN, profile2QN,
+ // etc.)
+ Set<String> requiredProfiles = PaletteUtil.getProfileSetFromString(requiredProfilesList);
+ for(String requiredProfileName : requiredProfiles) {
+ if(!appliedProfilesNames.contains(requiredProfileName)) {
+ return false;
+ }
+ }
+ }
+ }
+ }
+ } else {
+ IProvider provider = papyrusProviderDesc.getProvider();
+ if(provider instanceof IProfileDependantPaletteProvider) {
+ Diagram diagram = ((DiagramEditorWithFlyOutPalette)part).getDiagram();
+ return areRequiredProfileApplied(diagram, (IProfileDependantPaletteProvider)provider); + }
+ }
+ // by default, returns true if the descriptor is not a local descriptor,
+ // as they do not use
+ // profile
+ return true;
+ }
- public static String convertToFlatRepresentation(Collection objects, String separator) { - StringBuilder buffer = new StringBuilder(); - Iterator it = objects.iterator(); - while(it.hasNext()) { - buffer.append(it.next()); - if(it.hasNext()) { - buffer.append(separator); - } - } - return buffer.toString(); - } - - /** - * Returns the list of profiles String from a serialize string form - * - * @param serializedForm - * the serialized form of the list of stereotypes - * @return the list of profiles String from a serialize string form - */ - public static Set<String> getProfileSetFromString(String serializedForm) { - StringTokenizer tokenizer = new StringTokenizer(serializedForm, ","); - Set<String> list = new HashSet<String>(); - while(tokenizer.hasMoreElements()) { - list.add(tokenizer.nextToken()); - } - return list; - } - /** * returns <code>true</code> if the descriptor have all necessary profiles - * - * @param part - * the editor part for which the palette is shown - * @param papyrusProviderDesc - * the current provider descriptor to test + * @param diagram The diagram being provided palette elements + * @param provider The profile-dependent palette provider * @return <code>true</code> if all required profile are present */ - public static boolean areRequiredProfileApplied(IEditorPart part, PapyrusPaletteService.ProviderDescriptor papyrusProviderDesc) { - if(!(part instanceof DiagramEditorWithFlyOutPalette)) { - PapyrusTrace.log(IStatus.WARNING, "trying to check a papyrus palette descriptor outside papyrus framework"); - return false; - } - if(papyrusProviderDesc instanceof PapyrusPaletteService.LocalProviderDescriptor) { - IPaletteDescription description = ((PapyrusPaletteService.LocalProviderDescriptor)papyrusProviderDesc).getDescription(); - // checks the presence of required profile - Diagram diagram = ((DiagramEditorWithFlyOutPalette)part).getDiagram(); - EObject element = diagram.getElement(); - if(element instanceof Element) { - org.eclipse.uml2.uml.Package package_ = ((Element)element).getNearestPackage(); - List<Profile> appliedProfiles = package_.getAllAppliedProfiles(); - List<String> appliedProfilesNames = new ArrayList<String>(); - for(Profile profile : appliedProfiles) { - appliedProfilesNames.add(profile.getQualifiedName()); - } - - // compare to the list of profiles used by the palette - Map<String, String> properties = description.getProperties(); - if(description != null) { - String requiredProfilesList = properties.get(IPapyrusPaletteConstant.PROFILE_LIST); - if(requiredProfilesList != null) { - // parse requiredProfile string (profile1QN, profile2QN, - // etc.) - Set<String> requiredProfiles = PaletteUtil.getProfileSetFromString(requiredProfilesList); - for(String requiredProfileName : requiredProfiles) { - if(!appliedProfilesNames.contains(requiredProfileName)) { - return false; - } - } - } - } + public static boolean areRequiredProfileApplied(Diagram diagram, IProfileDependantPaletteProvider provider) { + EObject element = diagram.getElement(); + if(element instanceof Element) { + org.eclipse.uml2.uml.Package package_ = ((Element)element).getNearestPackage();
+ if (package_ == null)
+ return false; + List<Profile> appliedProfiles = package_.getAllAppliedProfiles(); + List<String> appliedProfilesNames = new ArrayList<String>(); + for(Profile profile : appliedProfiles) { + appliedProfilesNames.add(profile.getQualifiedName()); } - } else { - IProvider provider = papyrusProviderDesc.getProvider(); - if(provider instanceof IProfileDependantPaletteProvider) { - Diagram diagram = ((DiagramEditorWithFlyOutPalette)part).getDiagram(); - EObject element = diagram.getElement(); - if(element instanceof Element) { - org.eclipse.uml2.uml.Package package_ = ((Element)element).getNearestPackage(); - List<Profile> appliedProfiles = package_.getAllAppliedProfiles(); - List<String> appliedProfilesNames = new ArrayList<String>(); - for(Profile profile : appliedProfiles) { - appliedProfilesNames.add(profile.getQualifiedName()); - } - // not null also - Collection<String> requiredProfiles = ((IProfileDependantPaletteProvider)provider).getRequiredProfiles(); - for(String requiredProfileName : requiredProfiles) { - if(!appliedProfilesNames.contains(requiredProfileName)) { - return false; - } - } + // not null also + Collection<String> requiredProfiles = ((IProfileDependantPaletteProvider)provider).getRequiredProfiles(); + for(String requiredProfileName : requiredProfiles) { + if(!appliedProfilesNames.contains(requiredProfileName)) { + return false; } - return true; } } - // by default, returns true if the descriptor is not a local descriptor, - // as they do not use - // profile return true; } - - public static void initAspectActions(NodeList aspectActionNodes, List<IPostAction> postActions, List<IPreAction> preActions) { - for(int i = 0; i < aspectActionNodes.getLength(); i++) { - Node childNode = aspectActionNodes.item(i); - String childName = childNode.getNodeName(); - if(IPapyrusPaletteConstant.POST_ACTION.equals(childName)) { - // node is a post action => retrieve the id of the factory in charge of this configuration - IAspectActionProvider provider = AspectToolService.getInstance().getProvider(AspectToolService.getProviderId(childNode)); - if(provider != null) { - IAspectAction action = provider.createAction(childNode); - if (action instanceof IPostAction) { - postActions.add((IPostAction)action); - } - } else { - Activator.log.error("impossible to find factory with id: " + AspectToolService.getProviderId(childNode), null); - } - } else if(IPapyrusPaletteConstant.PRE_ACTION.equals(childName)) { - // node is a pre action => retrieve the id of the factory in charge of this configuration - IAspectActionProvider provider = AspectToolService.getInstance().getProvider(AspectToolService.getProviderId(childNode)); - if(provider != null) { - IAspectAction action = provider.createAction(childNode); - if (action instanceof IPreAction) { - preActions.add((IPreAction)action); - } - } else { - Activator.log.error("impossible to find factory with id: " + AspectToolService.getProviderId(childNode), null); - } - } - } - } - -} +
+ public static void initAspectActions(NodeList aspectActionNodes, List<IPostAction> postActions, List<IPreAction> preActions) {
+ for(int i = 0; i < aspectActionNodes.getLength(); i++) {
+ Node childNode = aspectActionNodes.item(i);
+ String childName = childNode.getNodeName();
+ if(IPapyrusPaletteConstant.POST_ACTION.equals(childName)) {
+ // node is a post action => retrieve the id of the factory in charge of this configuration
+ IAspectActionProvider provider = AspectToolService.getInstance().getProvider(AspectToolService.getProviderId(childNode));
+ if(provider != null) {
+ IAspectAction action = provider.createAction(childNode);
+ if (action instanceof IPostAction) {
+ postActions.add((IPostAction)action);
+ }
+ } else {
+ Activator.log.error("impossible to find factory with id: " + AspectToolService.getProviderId(childNode), null);
+ }
+ } else if(IPapyrusPaletteConstant.PRE_ACTION.equals(childName)) {
+ // node is a pre action => retrieve the id of the factory in charge of this configuration
+ IAspectActionProvider provider = AspectToolService.getInstance().getProvider(AspectToolService.getProviderId(childNode));
+ if(provider != null) {
+ IAspectAction action = provider.createAction(childNode);
+ if (action instanceof IPreAction) {
+ preActions.add((IPreAction)action);
+ }
+ } else {
+ Activator.log.error("impossible to find factory with id: " + AspectToolService.getProviderId(childNode), null);
+ }
+ }
+ }
+ }
+
+}
|