From 6a94865fd1ac67c9b6f603d88f9d99b682b2ac63 Mon Sep 17 00:00:00 2001 From: cletavernie Date: Mon, 4 Feb 2013 09:51:45 +0000 Subject: 367938: [Refactoring][Diagram Common] the package oep.uml.diagram.common.ui.hyperlink should be moved in a new plugin https://bugs.eclipse.org/bugs/show_bug.cgi?id=367938 391945: [Refactoring] Part 2: Refactoring on Kepler (0.10) https://bugs.eclipse.org/bugs/show_bug.cgi?id=391945 Move oep.infra.gmfdiag.hyperlink to its final SVN location --- .../.classpath | 7 + .../.project | 28 + .../.settings/org.eclipse.jdt.core.prefs | 7 + .../META-INF/MANIFEST.MF | 27 + .../about.html | 28 + .../build.properties | 7 + .../plugin.xml | 20 + .../papyrus/infra/gmfdiag/hyperlink/Activator.java | 69 +++ .../hyperlink/dnd/HyperlinkDropStrategy.java | 125 ++++ .../editpolicies/HyperLinkPopupBarEditPolicy.java | 681 +++++++++++++++++++++ .../editpolicies/NavigationEditPolicy.java | 245 ++++++++ .../providers/HyperlinkEditPolicyProvider.java | 59 ++ .../gmfdiag/hyperlink/ui/AdvancedHLManager.java | 125 ++++ .../hyperlink/ui/HyperLinkDiagramConstants.java | 32 + .../hyperlink/ui/LocalDefaultLinkDiagramTab.java | 360 +++++++++++ 15 files changed, 1820 insertions(+) create mode 100644 plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/.classpath create mode 100644 plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/.project create mode 100644 plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/.settings/org.eclipse.jdt.core.prefs create mode 100644 plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/META-INF/MANIFEST.MF create mode 100644 plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/about.html create mode 100644 plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/build.properties create mode 100644 plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/plugin.xml create mode 100644 plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/Activator.java create mode 100644 plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/dnd/HyperlinkDropStrategy.java create mode 100644 plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/editpolicies/HyperLinkPopupBarEditPolicy.java create mode 100644 plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/editpolicies/NavigationEditPolicy.java create mode 100644 plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/providers/HyperlinkEditPolicyProvider.java create mode 100644 plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/AdvancedHLManager.java create mode 100644 plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/HyperLinkDiagramConstants.java create mode 100644 plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/LocalDefaultLinkDiagramTab.java (limited to 'plugins/infra') diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/.classpath b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/.classpath new file mode 100644 index 00000000000..2d1a4302f04 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/.project b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/.project new file mode 100644 index 00000000000..094c2587586 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/.project @@ -0,0 +1,28 @@ + + + org.eclipse.papyrus.infra.gmfdiag.hyperlink + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/.settings/org.eclipse.jdt.core.prefs b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000000..44217f8c068 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/META-INF/MANIFEST.MF b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..a0d2114dac7 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/META-INF/MANIFEST.MF @@ -0,0 +1,27 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: GMF Diagram Hyperlink (Incubation) +Bundle-SymbolicName: org.eclipse.papyrus.infra.gmfdiag.hyperlink;singleton:=true +Bundle-Version: 0.10.0.qualifier +Bundle-Activator: org.eclipse.papyrus.infra.gmfdiag.hyperlink.Activator +Bundle-Vendor: Eclipse Modeling Project +Require-Bundle: org.eclipse.ui, + org.eclipse.core.runtime, + org.eclipse.papyrus.infra.hyperlink;bundle-version="0.10.0", + org.eclipse.papyrus.infra.gmfdiag.common;bundle-version="0.10.0", + org.eclipse.papyrus.infra.gmfdiag.navigation;bundle-version="0.10.0", + org.eclipse.gmf.runtime.common.core;bundle-version="1.4.1", + org.eclipse.gmf.runtime.notation;bundle-version="1.5.0", + org.eclipse.emf.transaction;bundle-version="1.4.0", + org.eclipse.papyrus.infra.core;bundle-version="0.10.0", + org.eclipse.papyrus.infra.gmfdiag.commands;bundle-version="0.10.0", + org.eclipse.papyrus.infra.emf;bundle-version="0.10.0", + org.eclipse.papyrus.infra.core.log;bundle-version="0.10.0", + org.eclipse.gmf.runtime.diagram.ui;bundle-version="1.6.0", + org.eclipse.papyrus.infra.services.labelprovider;bundle-version="0.10.0", + org.eclipse.papyrus.infra.gmfdiag.dnd;bundle-version="0.10.0" +Bundle-RequiredExecutionEnvironment: J2SE-1.5 +Bundle-ActivationPolicy: lazy +Export-Package: org.eclipse.papyrus.infra.gmfdiag.hyperlink, + org.eclipse.papyrus.infra.gmfdiag.hyperlink.editpolicies, + org.eclipse.papyrus.infra.gmfdiag.hyperlink.ui diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/about.html b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/about.html new file mode 100644 index 00000000000..209103075a7 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/about.html @@ -0,0 +1,28 @@ + + + + +About + + +

About This Content

+ +

November 14, 2008

+

License

+ +

The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise +indicated below, the Content is provided to you under the terms and conditions of the +Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available +at http://www.eclipse.org/legal/epl-v10.html. +For purposes of the EPL, "Program" will mean the Content.

+ +

If you did not receive this Content directly from the Eclipse Foundation, the Content is +being redistributed by another party ("Redistributor") and different terms and conditions may +apply to your use of any object code in the Content. Check the Redistributor's license that was +provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise +indicated below, the terms and conditions of the EPL still apply to any source code in the Content +and such source code may be obtained at http://www.eclipse.org.

+ + + \ No newline at end of file diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/build.properties b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/build.properties new file mode 100644 index 00000000000..e3693a3b66e --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/build.properties @@ -0,0 +1,7 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + about.html,\ + plugin.xml +src.includes = about.html diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/plugin.xml b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/plugin.xml new file mode 100644 index 00000000000..58a5a833629 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/plugin.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/Activator.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/Activator.java new file mode 100644 index 00000000000..0c13db06cd0 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/Activator.java @@ -0,0 +1,69 @@ +/***************************************************************************** + * Copyright (c) 2012 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: + * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation + *****************************************************************************/ +package org.eclipse.papyrus.infra.gmfdiag.hyperlink; + +import org.eclipse.papyrus.infra.core.log.LogHelper; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.BundleContext; + +/** + * The activator class controls the plug-in life cycle + */ +public class Activator extends AbstractUIPlugin { + + // The plug-in ID + public static final String PLUGIN_ID = "org.eclipse.papyrus.infra.gmfdiag.hyperlink"; //$NON-NLS-1$ + + // The shared instance + private static Activator plugin; + + public static LogHelper log; + + /** + * The constructor + */ + public Activator() { + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) + */ + @Override + public void start(BundleContext context) throws Exception { + super.start(context); + plugin = this; + log = new LogHelper(this); + } + + /* + * (non-Javadoc) + * + * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) + */ + @Override + public void stop(BundleContext context) throws Exception { + plugin = null; + super.stop(context); + } + + /** + * Returns the shared instance + * + * @return the shared instance + */ + public static Activator getDefault() { + return plugin; + } + +} diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/dnd/HyperlinkDropStrategy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/dnd/HyperlinkDropStrategy.java new file mode 100644 index 00000000000..75107e4f872 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/dnd/HyperlinkDropStrategy.java @@ -0,0 +1,125 @@ +/***************************************************************************** + * Copyright (c) 2012 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: + * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation + *****************************************************************************/ +package org.eclipse.papyrus.infra.gmfdiag.hyperlink.dnd; + +import org.eclipse.emf.ecore.EModelElement; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.transaction.TransactionalEditingDomain; +import org.eclipse.gef.EditPart; +import org.eclipse.gef.Request; +import org.eclipse.gef.commands.Command; +import org.eclipse.gmf.runtime.diagram.ui.requests.DropObjectsRequest; +import org.eclipse.gmf.runtime.notation.Diagram; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.papyrus.commands.Activator; +import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr; +import org.eclipse.papyrus.infra.core.services.ServiceException; +import org.eclipse.papyrus.infra.core.services.ServicesRegistry; +import org.eclipse.papyrus.infra.core.utils.ServiceUtils; +import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForEObject; +import org.eclipse.papyrus.infra.gmfdiag.common.helper.SemanticElementHelper; +import org.eclipse.papyrus.infra.gmfdiag.dnd.strategy.TransactionalDropStrategy; +import org.eclipse.papyrus.infra.hyperlink.commands.CreateHyperLinkPageCommand; +import org.eclipse.papyrus.infra.services.labelprovider.service.LabelProviderService; +import org.eclipse.swt.graphics.Image; + +/** + * A Strategy to drop shortcuts to nested editors on GMF Diagram elements + * + * @author Camille Letavernier + * + */ +public class HyperlinkDropStrategy extends TransactionalDropStrategy { + + /** + * {@inheritDoc} + */ + public String getLabel() { + return "Create hyperlinks"; + } + + public String getDescription() { + return "Creates an hyperlink to Papyrus nested editor (e.g. Diagram, Table, ...) on a Diagram element"; + } + + public Image getImage() { + return null; + } + + public String getID() { + return "org.eclipse.papyrus.infra.gmfdiag.dnd.CreateHyperlink"; + } + + @Deprecated + public int getPriority() { + return 0; + } + + @Override + public Command doGetCommand(Request request, final EditPart targetEditPart) { + if(request instanceof DropObjectsRequest) { + + View view = getTargetView(targetEditPart); + if(view == null) { + return null; + } + + final View mainView = SemanticElementHelper.findPrimaryView(view); + if(mainView instanceof Diagram) { + //We cannot create hyperlinks from the root edit part + return null; + } + + final DropObjectsRequest dropRequest = (DropObjectsRequest)request; + + final ServicesRegistry registry; + try { + registry = ServiceUtilsForEObject.getInstance().getServiceRegistry(mainView); + IPageMngr pageManager = ServiceUtils.getInstance().getIPageMngr(registry); + + for(Object droppedObject : dropRequest.getObjects()) { + if(!(droppedObject instanceof EObject && pageManager.allPages().contains(droppedObject))) { + return null; + } + } + } catch (ServiceException ex) { + Activator.log.error(ex); + return null; + } + + return new Command() { + + @Override + public void execute() { + + try { + ILabelProvider labelProvider = registry.getService(LabelProviderService.class).getLabelProvider(); + TransactionalEditingDomain domain = ServiceUtils.getInstance().getTransactionalEditingDomain(registry); + + for(Object droppedObject : dropRequest.getObjects()) { + String text = labelProvider.getText(droppedObject); + CreateHyperLinkPageCommand command = new CreateHyperLinkPageCommand(domain, mainView, text, text, (EModelElement)droppedObject, true); + command.execute(); + } + } catch (ServiceException ex) { + Activator.log.error(ex); + } + + + } + }; + } + + return null; + } +} diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/editpolicies/HyperLinkPopupBarEditPolicy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/editpolicies/HyperLinkPopupBarEditPolicy.java new file mode 100644 index 00000000000..408038c5275 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/editpolicies/HyperLinkPopupBarEditPolicy.java @@ -0,0 +1,681 @@ +/***************************************************************************** + * 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: + * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation + * + *****************************************************************************/ +package org.eclipse.papyrus.infra.gmfdiag.hyperlink.editpolicies; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.draw2d.ColorConstants; +import org.eclipse.draw2d.FigureCanvas; +import org.eclipse.draw2d.Graphics; +import org.eclipse.draw2d.IFigure; +import org.eclipse.draw2d.Label; +import org.eclipse.draw2d.MouseEvent; +import org.eclipse.draw2d.MouseListener; +import org.eclipse.draw2d.RoundedRectangle; +import org.eclipse.draw2d.Viewport; +import org.eclipse.draw2d.geometry.Point; +import org.eclipse.draw2d.geometry.Rectangle; +import org.eclipse.emf.ecore.EModelElement; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gef.DragTracker; +import org.eclipse.gef.EditPartViewer; +import org.eclipse.gef.Handle; +import org.eclipse.gef.LayerConstants; +import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.DiagramAssistantEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramGraphicalViewer; +import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.jface.viewers.CellLabelProvider; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.papyrus.infra.core.editorsfactory.IPageIconsRegistry; +import org.eclipse.papyrus.infra.core.editorsfactory.PageIconsRegistry; +import org.eclipse.papyrus.infra.core.services.ServiceException; +import org.eclipse.papyrus.infra.emf.utils.EMFHelper; +import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForEObject; +import org.eclipse.papyrus.infra.gmfdiag.common.utils.ServiceUtilsForEditPart; +import org.eclipse.papyrus.infra.gmfdiag.hyperlink.ui.AdvancedHLManager; +import org.eclipse.papyrus.infra.hyperlink.Activator; +import org.eclipse.papyrus.infra.hyperlink.helper.AbstractHyperLinkHelper; +import org.eclipse.papyrus.infra.hyperlink.helper.HyperLinkHelperFactory; +import org.eclipse.papyrus.infra.hyperlink.object.HyperLinkObject; +import org.eclipse.papyrus.infra.hyperlink.ui.HyperLinkManagerShell; +import org.eclipse.papyrus.infra.hyperlink.util.HyperLinkException; +import org.eclipse.papyrus.infra.hyperlink.util.HyperLinkHelpersRegistrationUtil; +import org.eclipse.papyrus.infra.services.labelprovider.service.LabelProviderService; +import org.eclipse.swt.graphics.Image; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.plugin.AbstractUIPlugin; + +/** + * The Class HyperLinkPopupBarEditPolicy can be applied on edit part to display + * shortcuts on sub-diagrams or to associate hyper-link of files + */ +public class HyperLinkPopupBarEditPolicy extends DiagramAssistantEditPolicy { + + /** + * Default tool placed on the popup bar. + * + * @author affrantz@us.ibm.com modified by Patrick Tessier + */ + + private class PopupBarLabelHandle extends Label implements Handle { + + /** + * flag to drawFocus rect around the handle when the mouse rolls over + * it. + */ + private boolean myMouseOver = false; + + /** The dragTracker CreationTool associated with the handle *. */ + private Object myObject = null; + + /** + * constructor. + * + * @param theImage + * the image to display + * @param anObject + * the an object + */ + public PopupBarLabelHandle(Object anObject, Image theImage) { + super(theImage); + myObject = anObject; + this.setOpaque(true); + this.setBackgroundColor(ColorConstants.buttonLightest); + } + + /** + * Dispose. + */ + public void dispose() { + //Nothing. Do not dispose the Image, as it may be shared + + // if(this.getIcon() != null && (!this.getIcon().isDisposed())) { + // this.getIcon().dispose(); + // } + } + + /** + * Gets the accessible location. + * + * @return the accessible location + * + * @see org.eclipse.gef.Handle#getAccessibleLocation() + */ + public Point getAccessibleLocation() { + return null; + } + + /** + * {@inheritedDoc} + */ + public DragTracker getDragTracker() { + // TODO Auto-generated method stub + return null; + } + + /** + * Gets the referenced object. + * + * @return the referenced object + * + * @see org.eclipse.gef.Handle#getDragTracker() + */ + public Object getReferencedObject() { + return myObject; + } + + /** + * Handle mouse entered. + * + * @param event + * the event + * + * @see org.eclipse.draw2d.IFigure#handleMouseEntered(org.eclipse.draw2d.MouseEvent) + * flip myMouseOver bit and repaint + */ + @Override + public void handleMouseEntered(MouseEvent event) { + + super.handleMouseEntered(event); + this.setBackgroundColor(ColorConstants.button); + myMouseOver = true; + // repaint(); + } + + /** + * Handle mouse exited. + * + * @param event + * the event + * + * @see org.eclipse.draw2d.IFigure#handleMouseExited(org.eclipse.draw2d.MouseEvent) + * flip myMouseOver bit and repaint + */ + @Override + public void handleMouseExited(MouseEvent event) { + + super.handleMouseExited(event); + this.setBackgroundColor(ColorConstants.white); + myMouseOver = false; + // repaint(); + } + + /** + * Handle mouse pressed. + * + * @param event + * the event + * + * @see org.eclipse.draw2d.IFigure#handleMousePressed(org.eclipse.draw2d.MouseEvent) + * set PopupBarEditPolicy.myActionMoveFigure bit so the popup bar + * is not dismissed after creating an item in the editpart + */ + @Override + public void handleMousePressed(MouseEvent event) { + if(1 == event.button) { + } + super.handleMousePressed(event); + } + + /** + * Paint border. + * + * @param graphics + * the graphics + * + * @see org.eclipse.draw2d.Figure#paintBorder(org.eclipse.draw2d.Graphics) + * paint a focus rectangle for the label if the mouse is inside the + * label + */ + @Override + protected void paintBorder(Graphics graphics) { + super.paintBorder(graphics); + + if(myMouseOver) { + + Rectangle area = getClientArea(); + graphics.setForegroundColor(ColorConstants.black); + graphics.setBackgroundColor(ColorConstants.white); + + graphics.drawFocus(area.x, area.y, area.width - 1, area.height - 1); + + } + + } + + /** + * Paint figure. + * + * @param graphics + * the graphics + * + * @see org.eclipse.draw2d.Figure#paintFigure(org.eclipse.draw2d.Graphics) + */ + @Override + protected void paintFigure(Graphics graphics) { + if(!isEnabled()) { + Image theImage = this.getIcon(); + if(theImage != null) { + graphics.translate(bounds.x, bounds.y); + graphics.drawImage(theImage, getIconLocation()); + graphics.translate(-bounds.x, -bounds.y); + return; + } + + } + super.paintFigure(graphics); + + } + } + + /** + * The Class PopupBarLabelPlusHandle. + */ + private class PopupBarLabelPlusHandle extends PopupBarLabelHandle { + + /** + * Instantiates a new popup bar label plus handle. + */ + public PopupBarLabelPlusHandle() { + super(null, AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.papyrus.uml.diagram.common", "/icons/obj16/Plus.gif").createImage()); + // TODO Auto-generated constructor stub + } + } + + /** + * Listens for mouse key presses so the popup bar can be dismissed if the + * context menu is displayed. + * + * @author affrantz@us.ibm.com + */ + private class PopupBarMouseListener extends MouseListener.Stub { + + /** + * Mouse pressed. + * + * @param me + * the me + * + * @see org.eclipse.draw2d.MouseListener#mousePressed(org.eclipse.draw2d.MouseEvent) + */ + @Override + public void mousePressed(MouseEvent me) { + if(3 == me.button) // context menu, hide the popup bar + { + hideDiagramAssistant(); + } + if(1 == me.button) // context menu, hide the popup bar + { + if(me.getSource() instanceof PopupBarLabelPlusHandle) { + hyperLinkManagerShell = new AdvancedHLManager(getEditorRegistry(), ((IGraphicalEditPart)getHost()).getEditingDomain(), (EModelElement)((IGraphicalEditPart)getHost()).getNotationView().getElement(), ((IGraphicalEditPart)getHost()).getNotationView(), hyperlinkHelperFactory); + hyperLinkManagerShell.setInput(hyperLinkObjectList); + hyperLinkManagerShell.open(); + + } else if(me.getSource() instanceof PopupBarLabelHandle) { + if((((PopupBarLabelHandle)me.getSource()).getReferencedObject()) instanceof HyperLinkObject) { + HyperLinkObject hyperLinkObject = (HyperLinkObject)(((PopupBarLabelHandle)me.getSource()).getReferencedObject()); + hyperLinkObject.executeSelectPressed(); + } + } + + hideDiagramAssistant(); + + } + super.mousePressed(me); + // setPopupBarOnDiagramActivated(true); + } + + /** + * {@inheritedDoc} + */ + @Override + public void mouseReleased(MouseEvent me) { + super.mouseReleased(me); + + } + } + + /** + * This is the figure that represents the ballon portion of the popup bar. + * + * @author affrantz@us.ibm.com + */ + private class RoundedRectangleWithTail extends RoundedRectangle { + + /** + * constructor. + */ + public RoundedRectangleWithTail() { + // we do not make the myActionTailFigue opaque because it + // doesn't look good when magnification is set. + this.setFill(true); + this.setBackgroundColor(ColorConstants.yellow); + this.setForegroundColor(ColorConstants.orange); + this.setVisible(true); + this.setEnabled(true); + this.setOpaque(true); + + } + + } + + /** The editor registry. */ + private IPageIconsRegistry editorRegistry; + + /** The figure bar. */ + private IFigure figureBar; + + /** The hyper link manager shell. */ + private HyperLinkManagerShell hyperLinkManagerShell; + + /** Images created that must be deleted when popup bar is removed. */ + protected List imagesToBeDisposed = new ArrayList(); + + /** mouse keys listener for the owner shape. */ + private final PopupBarMouseListener myMouseKeyListener = new PopupBarMouseListener(); + + protected ArrayList hyperLinkObjectList; + + protected HyperLinkHelperFactory hyperlinkHelperFactory; + + /** + * {@inheritedDoc} + */ + @Override + public void activate() { + super.activate(); + } + + public HyperLinkPopupBarEditPolicy() { + super(); + ArrayList hyperLinkHelpers = new ArrayList(); + //TODO + // hyperLinkHelpers.add(new DiagramHyperLinkHelper()); + // hyperLinkHelpers.add(new DocumentHyperLinkHelper()); + // hyperLinkHelpers.add(new WebHyperLinkHelper()); + hyperLinkHelpers.addAll(HyperLinkHelpersRegistrationUtil.INSTANCE.getAllRegisteredHyperLinkHelper()); + hyperlinkHelperFactory = new HyperLinkHelperFactory(hyperLinkHelpers); + } + + /** + * Adds the object list in the popup bar. + * + * @param imageLocation + * the image location that will represent the object + * @param positonwidth + * the positonwidth to display the icon into the popup + * @param objectList + * the object list to add + * + * @return the int the new position after adding all objects in the list + */ + public int addObjectList(int positonwidth, List objectList) { + for(int i = 0; i < objectList.size(); i++) { + PopupBarLabelHandle handle = null; + + ILabelProvider labelProvider = null; + try { + EObject contextElement = EMFHelper.getEObject(getHost()); + labelProvider = ServiceUtilsForEObject.getInstance().getService(LabelProviderService.class, contextElement).getLabelProvider(); + } catch (ServiceException ex) { + Activator.log.error(ex); + } + + if(labelProvider == null) { + labelProvider = new LabelProvider(); + } + + handle = new PopupBarLabelHandle(hyperLinkObjectList.get(i), labelProvider.getImage(objectList.get(i))); + + Rectangle r1 = new Rectangle(); + r1.setLocation(positonwidth, 5); + positonwidth += 20; + r1.setSize(16, 16); + + Label l = new Label(); + if(labelProvider instanceof CellLabelProvider) { + l.setText(((CellLabelProvider)labelProvider).getToolTipText(hyperLinkObjectList.get(i))); + } else { + l.setText(labelProvider.getText(hyperLinkObjectList.get(i))); + } + handle.setToolTip(l); + + handle.setPreferredSize(16, 16); + handle.setBounds(r1); + handle.setBackgroundColor(ColorConstants.white); + getFigureBar().add(handle); + handle.addMouseListener(this.myMouseKeyListener); + handle.addMouseMotionListener(this); + + } + return positonwidth; + + } + + /** + * Return the EditorRegistry for nested editor descriptors. Subclass should + * implements this method in order to return the registry associated to the + * extension point namespace. + * + * @return the EditorRegistry for nested editor descriptors + * + * @generated NOT + */ + protected IPageIconsRegistry createEditorRegistry() { + try { + return ServiceUtilsForEditPart.getInstance().getService(IPageIconsRegistry.class, getHost()); + } catch (ServiceException e) { + // Return an empty registry always providing null; + return new PageIconsRegistry(); + } + } + + /** + * Creates the popup bar figure. + * + * @return the i figure + */ + protected IFigure createPopupBarFigure() { + figureBar = new RoundedRectangleWithTail(); + return figureBar; + } + + /** + * Gets the editor registry. + * + * @return the singleton eINSTANCE of editor registry + * + * @generated NOT Get the EditorRegistry used to create editor instances. + * This default implementation return the singleton eINSTANCE. + * This method can be subclassed to return another registry. + */ + protected IPageIconsRegistry getEditorRegistry() { + if(editorRegistry == null) { + editorRegistry = createEditorRegistry(); + } + return editorRegistry; + } + + /** + * Gets the figure bar. + * + * @return the figure bar + */ + protected IFigure getFigureBar() { + + return figureBar; + } + + /** + * {@inheritedDoc} + */ + @Override + protected void hideDiagramAssistant() { + if(getFigureBar() != null) { + getFigureBar().removeMouseMotionListener(this); + getFigureBar().removeMouseListener(myMouseKeyListener); + IFigure layer = getLayer(LayerConstants.HANDLE_LAYER); + if(getFigureBar().getParent() != null) { + layer.remove(getFigureBar()); + } + + if(imagesToBeDisposed != null) { + for(Iterator iter = figureBar.getChildren().iterator(); iter.hasNext();) { + Object current = iter.next(); + if(current instanceof PopupBarLabelHandle) { + ((PopupBarLabelHandle)current).dispose(); + } + } + imagesToBeDisposed.clear(); + } + } + figureBar = null; + } + + /** + * {@inheritedDoc} + */ + @Override + protected boolean isDiagramAssistant(Object object) { + return object instanceof RoundedRectangleWithTail || object instanceof PopupBarLabelHandle; + } + + /** + * {@inheritedDoc} + */ + @Override + protected boolean isDiagramAssistantShowing() { + + return true; + } + + /** + * {@inheritedDoc}. + * + * @return true, if checks if is preference on + */ + @Override + protected boolean isPreferenceOn() { + return true; + } + + /** + * fill the popup bar. + * + * @return the width of popup bar + */ + protected int populatePopup() { + int xLoc = 5; + if(getFigureBar() != null) { + // add all subdiagrams + + try { + hyperLinkObjectList = (ArrayList)hyperlinkHelperFactory.getAllreferenced(((IGraphicalEditPart)getHost()).getNotationView()); + } catch (HyperLinkException e) { + e.printStackTrace(); + } + xLoc = addObjectList(xLoc, hyperLinkObjectList); + // add the PLUS button + PopupBarLabelHandle handle = new PopupBarLabelPlusHandle(); + Rectangle r1 = new Rectangle(); + r1.setLocation(xLoc, 5); + xLoc += 20; + r1.setSize(16, 16); + + Label l = new Label(); + l.setText("Add hyperlink"); + + handle.setToolTip(l); + handle.setPreferredSize(16, 16); + handle.setBounds(r1); + handle.setBackgroundColor(ColorConstants.white); + getFigureBar().add(handle); + handle.addMouseListener(this.myMouseKeyListener); + handle.addMouseMotionListener(this); + } + return xLoc; + } + + /** + * {@inheritedDoc}. + * + * @param referencePoint + * the reference point + */ + @Override + protected void showDiagramAssistant(Point referencePoint) { + if(getFigureBar() == null) { + createPopupBarFigure(); + int width = populatePopup(); + IFigure layer = getLayer(LayerConstants.HANDLE_LAYER); + layer.add(getFigureBar()); + if(referencePoint == null) { + referencePoint = getHostFigure().getBounds().getCenter(); + } + Point position = getHostFigure().getBounds().getBottomLeft(); + getHostFigure().translateToAbsolute(position); + EditPartViewer viewer = getHost().getRoot().getViewer(); + Viewport viewport = null; + if(viewer instanceof DiagramGraphicalViewer) { + viewport = ((FigureCanvas)((DiagramGraphicalViewer)viewer).getControl()).getViewport(); + } + if(viewport != null) { + position.x = position.x + viewport.getClientArea().x; + position.y = position.y + viewport.getClientArea().y; + } + getFigureBar().setSize(width, 30); + getFigureBar().setLocation(position); + getFigureBar().setBackgroundColor(ColorConstants.white); + getFigureBar().setForegroundColor(ColorConstants.orange); + + // dismiss the popup bar after a delay + if(!shouldAvoidHidingDiagramAssistant()) { + hideDiagramAssistantAfterDelay(getDisappearanceDelay()); + } + } + } + + @Override + protected boolean shouldShowDiagramAssistant() { + return getHost().isActive() && isPreferenceOn() && isHostEditable() && isHostResolvable() && isDiagramPartActive(); + } + + /** + * Checks if the diagram part is active. + * + * @return True if the diagram part is active; false otherwise. + */ + private boolean isDiagramPartActive() { + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + + if(window != null) { + IWorkbenchPage page = window.getActivePage(); + if(page != null) { + IWorkbenchPart activePart = page.getActivePart(); + + IDiagramWorkbenchPart editorPart = null; + + if(activePart instanceof IDiagramWorkbenchPart) { + editorPart = (IDiagramWorkbenchPart)activePart; + } else if(activePart instanceof IAdaptable) { + editorPart = (IDiagramWorkbenchPart)((IAdaptable)activePart).getAdapter(IDiagramWorkbenchPart.class); + } + + if(editorPart == null) { + return false; + } + + return editorPart.getDiagramEditPart().getRoot().equals(((IGraphicalEditPart)getHost()).getRoot()); + } + } + return false; + } + + /** + * Checks if the host editpart is editable. + * + * @return True if the host is editable; false otherwise. + */ + private boolean isHostEditable() { + if(getHost() instanceof GraphicalEditPart) { + return ((GraphicalEditPart)getHost()).isEditModeEnabled(); + } + return true; + } + + /** + * Is the host's semantic reference resolvable (if applicable)? + * + * @return true if the semantic reference is resolvable, true if there is no + * semantic reference, and false otherwise + */ + private boolean isHostResolvable() { + final View view = (View)getHost().getModel(); + EObject element = view.getElement(); + if(element != null) { + return !element.eIsProxy(); + } + return true; + } +} diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/editpolicies/NavigationEditPolicy.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/editpolicies/NavigationEditPolicy.java new file mode 100644 index 00000000000..a1fc04804bd --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/editpolicies/NavigationEditPolicy.java @@ -0,0 +1,245 @@ +/***************************************************************************** + * Copyright (c) 2010 Atos Origin. + * + * + * 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: + * Mathieu Velten (Atos Origin) mathieu.velten@atosorigin.com - Initial API and implementation + * Patrick Tessier (CEA LIST)-modification + * + *****************************************************************************/ +package org.eclipse.papyrus.infra.gmfdiag.hyperlink.editpolicies; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.emf.ecore.EModelElement; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.gef.Request; +import org.eclipse.gef.commands.Command; +import org.eclipse.gef.commands.UnexecutableCommand; +import org.eclipse.gmf.runtime.diagram.ui.editparts.CompartmentEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.OpenEditPolicy; +import org.eclipse.gmf.runtime.notation.Diagram; +import org.eclipse.papyrus.commands.CreationCommandDescriptor; +import org.eclipse.papyrus.infra.core.editorsfactory.IPageIconsRegistry; +import org.eclipse.papyrus.infra.core.editorsfactory.PageIconsRegistry; +import org.eclipse.papyrus.infra.core.services.ServiceException; +import org.eclipse.papyrus.infra.gmfdiag.common.DiagramsUtil; +import org.eclipse.papyrus.infra.gmfdiag.common.utils.ServiceUtilsForEditPart; +import org.eclipse.papyrus.infra.gmfdiag.hyperlink.Activator; +import org.eclipse.papyrus.infra.gmfdiag.hyperlink.ui.AdvancedHLManager; +import org.eclipse.papyrus.infra.gmfdiag.navigation.ExistingNavigableElement; +import org.eclipse.papyrus.infra.gmfdiag.navigation.NavigableElement; +import org.eclipse.papyrus.infra.gmfdiag.navigation.NavigationHelper; +import org.eclipse.papyrus.infra.gmfdiag.navigation.preference.INavigationPreferenceConstant; +import org.eclipse.papyrus.infra.hyperlink.helper.AbstractHyperLinkHelper; +import org.eclipse.papyrus.infra.hyperlink.helper.HyperLinkHelperFactory; +import org.eclipse.papyrus.infra.hyperlink.object.HyperLinkEditor; +import org.eclipse.papyrus.infra.hyperlink.object.HyperLinkObject; +import org.eclipse.papyrus.infra.hyperlink.ui.EditorNavigationDialog; +import org.eclipse.papyrus.infra.hyperlink.ui.HyperLinkManagerShell; +import org.eclipse.papyrus.infra.hyperlink.util.HyperLinkHelpersRegistrationUtil; + +/** + * This class is used to open a new diagram when the double click is detected. + * It is dependent of papyrus environment + */ +public class NavigationEditPolicy extends OpenEditPolicy { + + public static final String NAVIGATION_POLICY = "NavigationEditPolicy"; + + public NavigationEditPolicy() { + } + + /** + * + * @param request + * @return get the command to open a new diagram + */ + @Override + protected Command getOpenCommand(Request request) { + final IGraphicalEditPart gep; + + // in order to obtain the list of default diagram we need to fin the + // edit part that refers to default diagram + + // if this a label of a compartment, the good editpart is the parent + if((IGraphicalEditPart)getHost() instanceof CompartmentEditPart) { + gep = (IGraphicalEditPart)getHost().getParent(); + } else { + + gep = (IGraphicalEditPart)getHost(); + } + final EObject semanticElement = gep.resolveSemanticElement(); + + // navigable element by using heuristic + List navElements = null; + + // defaultHyperlinks + final ArrayList defaultHyperLinkObject = new ArrayList(); + final ArrayList hyperLinkObjectList; + // Diagrams that will be found by using heuristic + HashMap> existingDiagrams = new HashMap>(); + + if(semanticElement == null) { + return UnexecutableCommand.INSTANCE; + } + // initialition of code to extract hyperlinks, in the future to do with + // extension points + ArrayList hyperLinkHelpers = new ArrayList(); + // hyperLinkHelpers.add(new DiagramHyperLinkHelper()); + // hyperLinkHelpers.add(new DocumentHyperLinkHelper()); + // hyperLinkHelpers.add(new WebHyperLinkHelper()); + hyperLinkHelpers.addAll(HyperLinkHelpersRegistrationUtil.INSTANCE.getAllRegisteredHyperLinkHelper()); + final HyperLinkHelperFactory hyperlinkHelperFactory = new HyperLinkHelperFactory(hyperLinkHelpers); + + try { + // fill the list of default hyperlinks + hyperLinkObjectList = (ArrayList)hyperlinkHelperFactory.getAllreferenced(gep.getNotationView()); + + Iterator iterator = hyperLinkObjectList.iterator(); + while(iterator.hasNext()) { + HyperLinkObject hyperlinkObject = iterator.next(); + if(hyperlinkObject.getIsDefault()) { + + defaultHyperLinkObject.add(hyperlinkObject); + } + + } + + // fill navigation by using heuristics + navElements = NavigationHelper.getInstance().getAllNavigableElements(semanticElement); + HashMap> possibleCreations = new HashMap>(); + + // test which kind of navigation by consulting preference + String navigationKind = Activator.getDefault().getPreferenceStore().getString(INavigationPreferenceConstant.PAPYRUS_NAVIGATION_DOUBLECLICK_KIND); + + // no naviagation + if(navigationKind.equals(INavigationPreferenceConstant.NO_NAVIGATION)) { + // do nothing + return UnexecutableCommand.INSTANCE; + } + + // navigation by using heuristic + // add list of diagram navigables by using heuristic + if(navigationKind.equals(INavigationPreferenceConstant.EXPLICIT_IMPLICIT_NAVIGATION)) { + for(NavigableElement navElement : navElements) { + final EObject element = navElement.getElement(); + if(navElement instanceof ExistingNavigableElement) { + List associatedDiagrams = DiagramsUtil.getAssociatedDiagrams(element, null); + + // ignore the current diagram + associatedDiagrams.remove(gep.getNotationView().getDiagram()); + if(associatedDiagrams != null && !associatedDiagrams.isEmpty()) { + existingDiagrams.put(navElement, associatedDiagrams); + } + } + } + + Iterator> iter = existingDiagrams.values().iterator(); + while(iter.hasNext()) { + List list = iter.next(); + Iterator iterDiagram = list.iterator(); + while(iterDiagram.hasNext()) { + Diagram diagram = iterDiagram.next(); + HyperLinkEditor hyperLinkEditor = new HyperLinkEditor(); + hyperLinkEditor.setObject(diagram); + hyperLinkEditor.setTooltipText(diagram.getName() + " (found by heuristic)"); + // look for if a hyperlink already exists + HyperLinkObject foundHyperlink = null; + for(int i = 0; i < defaultHyperLinkObject.size() && foundHyperlink == null; i++) { + if(defaultHyperLinkObject.get(i).getObject().equals(diagram)) { + foundHyperlink = defaultHyperLinkObject.get(i); + } + } + // the diagram was not into the list of existing default + // hyperlink + if(foundHyperlink == null) { + defaultHyperLinkObject.add(hyperLinkEditor); + } + } + } + } + if(defaultHyperLinkObject.size() == 0) { + Command command = new Command() { + + @Override + public void execute() { + EObject semanticElement = gep.getNotationView().getElement(); + if(semanticElement instanceof EModelElement) { + HyperLinkManagerShell hyperLinkManagerShell = new AdvancedHLManager(createEditorRegistry(), ((IGraphicalEditPart)getHost()).getEditingDomain(), (EModelElement)semanticElement, gep.getNotationView(), hyperlinkHelperFactory); + hyperLinkManagerShell.setInput(hyperLinkObjectList); + hyperLinkManagerShell.open(); + } + } + }; + return command; + } + if(defaultHyperLinkObject.size() == 1) { + // open the diagram + Command command = new Command() { + + @Override + public void execute() { + super.execute(); + defaultHyperLinkObject.get(0).executeSelectPressed(); + } + }; + return command; + + } + if(defaultHyperLinkObject.size() > 1) { + // open a dialog to choose a diagram + EditorNavigationDialog diagramNavigationDialog = new EditorNavigationDialog(getHost().getViewer().getControl().getShell(), defaultHyperLinkObject, semanticElement); + diagramNavigationDialog.open(); + final List hList = diagramNavigationDialog.getSelectedHyperlinks(); + Command command = new Command() { + + @Override + public void execute() { + super.execute(); + + Iterator iter = hList.iterator(); + while(iter.hasNext()) { + HyperLinkObject hyperlinkObject = iter.next(); + hyperlinkObject.executeSelectPressed(); + } + } + }; + return command; + + } + + } catch (Exception e) { + Activator.log.error("Impossible to load hyperlinks", e); + } + return UnexecutableCommand.INSTANCE; + } + + /** + * Return the EditorRegistry for nested editor descriptors. Subclass should + * implements this method in order to return the registry associated to the + * extension point namespace. + * + * @return the EditorRegistry for nested editor descriptors + * + * @generated NOT + */ + protected IPageIconsRegistry createEditorRegistry() { + try { + return ServiceUtilsForEditPart.getInstance().getService(IPageIconsRegistry.class, getHost()); + } catch (ServiceException e) { + // Return an empty registry always providing null; + return new PageIconsRegistry(); + } + } + +} diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/providers/HyperlinkEditPolicyProvider.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/providers/HyperlinkEditPolicyProvider.java new file mode 100644 index 00000000000..06151d93396 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/providers/HyperlinkEditPolicyProvider.java @@ -0,0 +1,59 @@ +/***************************************************************************** + * Copyright (c) 2012 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: + * Camille Letavernier (CEA LIST) camille.letavernier@cea.fr - Initial API and implementation + *****************************************************************************/ +package org.eclipse.papyrus.infra.gmfdiag.hyperlink.providers; + +import org.eclipse.gef.EditPart; +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.editparts.IGraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IPrimaryEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPoliciesOperation; +import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; +import org.eclipse.papyrus.infra.gmfdiag.hyperlink.editpolicies.HyperLinkPopupBarEditPolicy; +import org.eclipse.papyrus.infra.gmfdiag.hyperlink.editpolicies.NavigationEditPolicy; + +/** + * An EditPolicyProvider for Navigation and Hyperlinks + * + * @author Camille Letavernier + * + */ +public class HyperlinkEditPolicyProvider extends AbstractProvider implements IEditPolicyProvider { + + /** + * {@inheritDoc} + * + * This provider can handle GraphicalEditParts + */ + public boolean provides(IOperation operation) { + if(operation instanceof CreateEditPoliciesOperation) { + CreateEditPoliciesOperation epOperation = (CreateEditPoliciesOperation)operation; + return epOperation.getEditPart() instanceof IGraphicalEditPart; + } + return false; + } + + /** + * {@inheritDoc} + * + * Installs the Hyperlink and Navigation edit policies + */ + public void createEditPolicies(EditPart editPart) { + if(editPart instanceof IPrimaryEditPart) { + editPart.installEditPolicy(EditPolicyRoles.POPUPBAR_ROLE, new HyperLinkPopupBarEditPolicy()); + } + editPart.installEditPolicy(NavigationEditPolicy.NAVIGATION_POLICY, new NavigationEditPolicy()); + + } + +} diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/AdvancedHLManager.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/AdvancedHLManager.java new file mode 100644 index 00000000000..f0f75a128d8 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/AdvancedHLManager.java @@ -0,0 +1,125 @@ +/***************************************************************************** + * Copyright (c) 2009-2011 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: + * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation + * Arthur Daussy (Atos) arthur.daussy@atos.net - Bug 363827 - [Improvement] Diagram creation, remember the latest tab chosen + * Vincent Lorenzo (CEA-LIST) Vincent.lorenzo@cea.fr (refactoring of the hyperlink) + *****************************************************************************/ +package org.eclipse.papyrus.infra.gmfdiag.hyperlink.ui; + +import java.util.ArrayList; +import java.util.Collection; + +import org.eclipse.core.runtime.Assert; +import org.eclipse.emf.ecore.EModelElement; +import org.eclipse.emf.transaction.TransactionalEditingDomain; +import org.eclipse.gmf.runtime.common.core.command.CompositeCommand; +import org.eclipse.gmf.runtime.common.core.command.ICommand; +import org.eclipse.gmf.runtime.notation.Diagram; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.papyrus.commands.wrappers.GMFtoEMFCommandWrapper; +import org.eclipse.papyrus.infra.core.editorsfactory.IPageIconsRegistry; +import org.eclipse.papyrus.infra.hyperlink.helper.HyperLinkHelperFactory; +import org.eclipse.papyrus.infra.hyperlink.object.HyperLinkEditor; +import org.eclipse.papyrus.infra.hyperlink.ui.AbstractHyperLinkTab; +import org.eclipse.papyrus.infra.hyperlink.ui.HyperLinkManagerShell; + +/** + * + * This hyperlink manager can manage default hyperlinks and creation of diagram with heuristic + */ +public class AdvancedHLManager extends HyperLinkManagerShell { + + + /** + * + * Constructor. + * + * @param editorFactoryRegistry + * the editor factory registry + * @param model + * the model that contains all elements + * @param domain + * the domain in order to execute command + * @param umlElement + * the uml element linked to the view + * @param aview + * the view of the uml element + * + */ + public AdvancedHLManager(IPageIconsRegistry editorFactoryRegistry, TransactionalEditingDomain domain, EModelElement semanticElement, View aview, HyperLinkHelperFactory hyperHelperFactory) { + super(editorFactoryRegistry, domain, semanticElement, aview, hyperHelperFactory); + } + + /** + * this method parse the command to extract created diagram and construct a list of hyperlinkDiagrams + * + * @param creationcommand + * a gmf command + * @return the list of hyperlinks diagram + */ + protected ArrayList getCreatedHyperlinkDiagramsWithHeuristic(ICommand creationcommand) { + ArrayList diagrams = new ArrayList(); + if(creationcommand instanceof CompositeCommand) { + CompositeCommand compositeCommand = (CompositeCommand)creationcommand; + Object value = compositeCommand.getCommandResult().getReturnValue(); + if(value instanceof ArrayList) { + diagrams.addAll((Collection)value); + } + } + ArrayList hyperLinkDiagrams = new ArrayList(); + for(int i = 0; i < diagrams.size(); i++) { + HyperLinkEditor hyperLinkEditor = new HyperLinkEditor(); + hyperLinkEditor.setObject(diagrams.get(i)); + hyperLinkEditor.setIsDefault(true); + hyperLinkEditor.setTooltipText(diagrams.get(i).getName()); + hyperLinkDiagrams.add(hyperLinkEditor); + } + return hyperLinkDiagrams; + } + + @Override + protected void doAction() { + super.doAction(); + // defaultTab = getDefaultHyperLinkTab(); + final LocalDefaultLinkDiagramTab heuristicTab = getHeuristicTab(); + ArrayList defaultdiagramsWithHeuristic = new ArrayList(); + //if the default diagrams is opened, get created default diagrams + if(heuristicTab.getDefaultHyperlinkComposite().isVisible()) { + heuristicTab.okPressed(); + ICommand creationCommand = heuristicTab.getCommand(); + //TODO : should be chained with the others command + transactionalEditingDomain.getCommandStack().execute(new GMFtoEMFCommandWrapper(heuristicTab.getCommand())); + defaultdiagramsWithHeuristic.addAll(getCreatedHyperlinkDiagramsWithHeuristic(creationCommand)); + } + + + + //add into the list all diagram create by using heuristic + for(int i = 0; i < defaultdiagramsWithHeuristic.size(); i++) { + allhypHyperlinkObjects.add(0, defaultdiagramsWithHeuristic.get(i)); + } + + } + + private LocalDefaultLinkDiagramTab getHeuristicTab() { + int i = 0; + LocalDefaultLinkDiagramTab tab = null; + for(AbstractHyperLinkTab current : tabList) { + if(current instanceof LocalDefaultLinkDiagramTab) { + tab = (LocalDefaultLinkDiagramTab)current; + i++; + } + } + Assert.isTrue(i == 1); + Assert.isNotNull(tab); + return tab; + } +} diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/HyperLinkDiagramConstants.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/HyperLinkDiagramConstants.java new file mode 100644 index 00000000000..2375d7d0767 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/HyperLinkDiagramConstants.java @@ -0,0 +1,32 @@ +/***************************************************************************** + * Copyright (c) 2012 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: + * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation + * + *****************************************************************************/ +package org.eclipse.papyrus.infra.gmfdiag.hyperlink.ui; + +import org.eclipse.papyrus.infra.hyperlink.util.HyperLinkConstants; + + +public class HyperLinkDiagramConstants { + + private HyperLinkDiagramConstants(){ + //nothing to do + } + + /** + * this is a key of eAnnnotation that contains hypertext link or referenced document + **/ + public static final String HYPERLINK_DIAGRAM = HyperLinkConstants.PAPYRUS_HYPERLINK_PREFIX+ "Diagram"; + + public static final String HYPERLINK_DIAGRAM_NAME = "diagram_name"; + +} diff --git a/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/LocalDefaultLinkDiagramTab.java b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/LocalDefaultLinkDiagramTab.java new file mode 100644 index 00000000000..1595c2a7fa2 --- /dev/null +++ b/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.hyperlink/src/org/eclipse/papyrus/infra/gmfdiag/hyperlink/ui/LocalDefaultLinkDiagramTab.java @@ -0,0 +1,360 @@ +/***************************************************************************** + * Copyright (c) 2011 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: + * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation + * + *****************************************************************************/ +package org.eclipse.papyrus.infra.gmfdiag.hyperlink.ui; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.gmf.runtime.common.core.command.CompositeCommand; +import org.eclipse.gmf.runtime.common.core.command.ICommand; +import org.eclipse.papyrus.commands.CreationCommandDescriptor; +import org.eclipse.papyrus.commands.CreationCommandRegistry; +import org.eclipse.papyrus.commands.ICreationCommandRegistry; +import org.eclipse.papyrus.infra.core.editor.BackboneException; +import org.eclipse.papyrus.infra.core.resource.ModelSet; +import org.eclipse.papyrus.infra.core.services.ServiceException; +import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForEObject; +import org.eclipse.papyrus.infra.gmfdiag.hyperlink.Activator; +import org.eclipse.papyrus.infra.gmfdiag.navigation.CreatedNavigableElement; +import org.eclipse.papyrus.infra.gmfdiag.navigation.NavigableElement; +import org.eclipse.papyrus.infra.gmfdiag.navigation.NavigationHelper; +import org.eclipse.papyrus.infra.hyperlink.object.HyperLinkObject; +import org.eclipse.papyrus.infra.hyperlink.ui.AbstractHyperLinkTab; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.CCombo; +import org.eclipse.swt.custom.CTabFolder; +import org.eclipse.swt.custom.CTabItem; +import org.eclipse.swt.custom.TableEditor; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.swt.widgets.TableItem; +import org.eclipse.swt.widgets.Text; + +/** + * this is the tab in charge to display the hyperlink diagram created by using heuristic for the property default + * the code was extract from {@link NavigationCreateDiagramDialog} + * + */ +public class LocalDefaultLinkDiagramTab extends AbstractHyperLinkTab { + + private static final String CREATION_ENTRY_KEY = "CREATION_ENTRY"; + + private static final String ELEMENT_TYPE_COMBO_KEY = "ELEMENT_TYPE_COMBO"; + + private static final String DIAGRAM_TYPE_COMBO_KEY = "DIAGRAM_TYPE_COMBO"; + + private static final String DIAGRAM_NAME_TEXT_KEY = "DIAGRAM_NAME_TEXT"; + + private static final String[] COLUMN_NAMES = { "Navigation type", "Feature", "Element type", "Diagram type", "Diagram name" }; + + private static final int[] COLUMN_WIDTHS = { 80, 120, 120, 200, 120 }; + + private Map> possibleCreations; + + private ICommand command = null; + + private Table table; + + private EObject semanticElement; + + + private class NavigableGroupKey { + + + public NavigableElement ancestor = null; + + public EStructuralFeature feature = null; + + @Override + public int hashCode() { + return 0; + } + + @Override + public boolean equals(Object obj) { + if(obj instanceof NavigableGroupKey) { + NavigableGroupKey grpKey = (NavigableGroupKey)obj; + return grpKey.ancestor == ancestor && grpKey.feature == feature; + } + return false; + } + } + + private Composite defaultHyperlinkComposite; + + + /** + * @return the composite that contains the table + * **/ + public Composite getDefaultHyperlinkComposite() { + return defaultHyperlinkComposite; + } + + /** + * + * Constructor. + * + * @param tabFolder + * the parent tabfolder + * @param semanticElement + * the element from which diagram can be created + */ + @Deprecated + public LocalDefaultLinkDiagramTab(CTabFolder tabFolder, EObject semanticElement) { + this.semanticElement = semanticElement; + //init list of descriptor to fill the table + initLocalNavigableElement(); + //associate the composite to the tabfolder + CTabItem tbtmDefaultsHyperlinks = new CTabItem(tabFolder, SWT.NONE); + tbtmDefaultsHyperlinks.setText("Hyperlink diagram with Heuristic"); + defaultHyperlinkComposite = new Composite(tabFolder, SWT.NONE); + defaultHyperlinkComposite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)); + createArea(defaultHyperlinkComposite); + tbtmDefaultsHyperlinks.setControl(defaultHyperlinkComposite); + } + + public LocalDefaultLinkDiagramTab() { + super(); + } + + @Override + public void init(CTabFolder tabFolder, List hyperlinkObjects, EObject element) { + super.init(tabFolder, hyperlinkObjects, element); + this.semanticElement = element; + //init list of descriptor to fill the table + initLocalNavigableElement(); + //associate the composite to the tabfolder + CTabItem tbtmDefaultsHyperlinks = new CTabItem(tabFolder, SWT.NONE); + tbtmDefaultsHyperlinks.setText("Hyperlink diagram with Heuristic"); + defaultHyperlinkComposite = new Composite(tabFolder, SWT.NONE); + defaultHyperlinkComposite.setLayout(new GridLayout(1, false)); + defaultHyperlinkComposite.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)); + createArea(defaultHyperlinkComposite); + tbtmDefaultsHyperlinks.setControl(defaultHyperlinkComposite); + } + + /** + * get the command to create diagrams from the selection done into the table + * + * @return the command in charge of the creation of the diagrams + * **/ + public ICommand getCommand() { + return command; + } + + /** + * code that is called when the button ok is selected + */ + protected void okPressed() { + ModelSet modelSet; + + try { + modelSet = ServiceUtilsForEObject.getInstance().getModelSet(semanticElement); + } catch (ServiceException ex) { + Activator.log.error(ex); + return; + } + + CompositeCommand compositeCommand = new CompositeCommand("Create diagrams"); + + for(TableItem tableItem : table.getItems()) { + try { + CCombo elementTypeCombo = (CCombo)tableItem.getData(ELEMENT_TYPE_COMBO_KEY); + int elementTypeSelectionIndex = elementTypeCombo.getSelectionIndex(); + CCombo diagramTypeCombo = (CCombo)tableItem.getData(DIAGRAM_TYPE_COMBO_KEY); + int diagramTypeSelectionIndex = diagramTypeCombo.getSelectionIndex(); + + if(tableItem.getChecked() && elementTypeSelectionIndex != -1 && diagramTypeSelectionIndex != -1) { + List possibleElements = (List)tableItem.getData(CREATION_ENTRY_KEY); + NavigableElement navElement = possibleElements.get(elementTypeSelectionIndex); + + CreationCommandDescriptor desc = possibleCreations.get(navElement).get(diagramTypeSelectionIndex); + + Text diagramNameText = (Text)tableItem.getData(DIAGRAM_NAME_TEXT_KEY); + + compositeCommand.add(NavigationHelper.getLinkCreateAndOpenNavigableDiagramCommand(navElement, desc.getCommand(), diagramNameText.getText(), modelSet)); + } + } catch (BackboneException e) { + e.printStackTrace(); + } + } + + command = compositeCommand; + + } + + /** + * construction the ui + * + * @param parent + * the composite that contains table. + * @return the table contained in the composite + */ + protected Control createArea(Composite parent) { + + table = new Table(parent, SWT.BORDER | SWT.V_SCROLL | SWT.CHECK); + table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); + table.setHeaderVisible(true); + table.setLinesVisible(true); + // table.setBounds(10, 20, 650, 170); + + for(int i = 0; i < COLUMN_NAMES.length; i++) { + TableColumn col = new TableColumn(table, SWT.NONE); + col.setText(COLUMN_NAMES[i]); + col.setWidth(COLUMN_WIDTHS[i]); + col.setResizable(true); + } + + // regroup CreatedNavigableElement which has same ancestor and use the same feature of this ancestor + Map> successorsMap = new HashMap>(); + + for(Entry> possibleCreationEntry : possibleCreations.entrySet()) { + NavigableElement navElement = possibleCreationEntry.getKey(); + + NavigableGroupKey groupKey = new NavigableGroupKey(); + + // ignore containing feature if we are on the root element + // because it is a direct diagram creation + // => the feature has no meaning in this case + if(!semanticElement.equals(navElement.getElement())) { + groupKey.feature = navElement.getFeature(); + } + + if(navElement instanceof CreatedNavigableElement) { + groupKey.ancestor = ((CreatedNavigableElement)navElement).getPreviousNavigableElement(); + } + + List successors = successorsMap.get(groupKey); + if(successors == null) { + successors = new LinkedList(); + successorsMap.put(groupKey, successors); + } + successors.add(navElement); + } + + // handle group + for(Entry> successorsEntry : successorsMap.entrySet()) { + NavigableGroupKey groupKey = successorsEntry.getKey(); + List successors = successorsEntry.getValue(); + + + TableItem tableItem = new TableItem(table, SWT.NONE); + tableItem.setChecked(false); + tableItem.setData(CREATION_ENTRY_KEY, successors); + + //////FIXME/////// + //tableItem.setText(0, UMLNavigationHelper.getNavigationTypeFromFeature(groupKey.feature)); //Remove this dependency to UML. LabelProviderService? + tableItem.setText(0, "Unknown"); + ////////////////// + + String featureString = ""; + if(groupKey.feature != null) { + featureString = groupKey.feature.getName(); + } + tableItem.setText(1, featureString); + + TableEditor diagramTypeEditor = new TableEditor(table); + final CCombo diagramTypeCombo = new CCombo(table, SWT.NONE); + diagramTypeEditor.grabHorizontal = true; + diagramTypeEditor.setEditor(diagramTypeCombo, tableItem, 3); + tableItem.setData(DIAGRAM_TYPE_COMBO_KEY, diagramTypeCombo); + + TableEditor elementTypeEditor = new TableEditor(table); + final CCombo elementTypeCombo = new CCombo(table, SWT.NONE); + for(NavigableElement successor : successors) { + String typeName = successor.getElement().eClass().getName(); + elementTypeCombo.add(typeName); + elementTypeCombo.setData(typeName, successor); + } + elementTypeEditor.grabHorizontal = true; + elementTypeEditor.setEditor(elementTypeCombo, tableItem, 2); + tableItem.setData(ELEMENT_TYPE_COMBO_KEY, elementTypeCombo); + elementTypeCombo.addModifyListener(new ModifyListener() { + + public void modifyText(ModifyEvent e) { + String currentTypeName = ((CCombo)e.widget).getText(); + + NavigableElement successor = (NavigableElement)elementTypeCombo.getData(currentTypeName); + + diagramTypeCombo.clearSelection(); + diagramTypeCombo.removeAll(); + for(CreationCommandDescriptor desc : possibleCreations.get(successor)) { + diagramTypeCombo.add(desc.getLabel()); + } + diagramTypeCombo.select(0); + } + }); + elementTypeCombo.select(0); + + TableEditor diagramNameEditor = new TableEditor(table); + Text text = new Text(table, SWT.NONE); + text.setText("DefaultName"); + diagramNameEditor.grabHorizontal = true; + diagramNameEditor.setEditor(text, tableItem, 4); + tableItem.setData(DIAGRAM_NAME_TEXT_KEY, text); + } + + parent.pack(); + return table; + } + + + /** + * this method is used to construct descriptors of heuristic to construct diagrams. + * These descriptors will be displayed in the table. + */ + protected void initLocalNavigableElement() { + List navElements = NavigationHelper.getInstance().getAllNavigableElements(semanticElement); + possibleCreations = new HashMap>(); + + for(NavigableElement navElement : navElements) { + final EObject element = navElement.getElement(); + + List possibleCommandDescs = new LinkedList(); + for(final CreationCommandDescriptor desc : getCreationCommandRegistry().getCommandDescriptors()) { + if(desc.getCondition() == null || desc.getCondition().create(element)) { + possibleCommandDescs.add(desc); + } + } + if(!possibleCommandDescs.isEmpty()) { + possibleCreations.put(navElement, possibleCommandDescs); + } + } + } + + /** + * @return the creation command registry + */ + protected static ICreationCommandRegistry getCreationCommandRegistry() { + return CreationCommandRegistry.getInstance(org.eclipse.papyrus.infra.core.Activator.PLUGIN_ID); + } + + @Override + public void setInput(List hyperLinkObjectList) { + //nothing to do here? + } + +} -- cgit v1.2.3