Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Lorenzo2021-10-20 08:10:53 +0000
committerPauline DEVILLE2021-10-20 09:23:01 +0000
commit28c27073aba91a8295f9206ad2b4860d5f18d73a (patch)
tree50a0d4f92e5ce467771be989ac97879a07f00ed6 /plugins/views
parent8961fcf1a70aa86e10d75ef26d03e29c079d754b (diff)
downloadorg.eclipse.papyrus-28c27073aba91a8295f9206ad2b4860d5f18d73a.tar.gz
org.eclipse.papyrus-28c27073aba91a8295f9206ad2b4860d5f18d73a.tar.xz
org.eclipse.papyrus-28c27073aba91a8295f9206ad2b4860d5f18d73a.zip
Bug 576599: [ModelExplorer] IOpenable and Open on double-click must be
improved Change-Id: Idf266c7ffc894ad799b2229236142d3586285e6f Signed-off-by: Vincent Lorenzo <vincent.lorenzo@cea.fr>
Diffstat (limited to 'plugins/views')
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/META-INF/MANIFEST.MF1
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/plugin.xml14
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerView.java33
-rwxr-xr-xplugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/actionprovider/OpenActionProvider.java60
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/OpenHandler.java83
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/listener/DoubleClickListener.java115
6 files changed, 148 insertions, 158 deletions
diff --git a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/META-INF/MANIFEST.MF b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/META-INF/MANIFEST.MF
index 5fa867ca26f..0e3ed866073 100644
--- a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/META-INF/MANIFEST.MF
+++ b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/META-INF/MANIFEST.MF
@@ -41,6 +41,7 @@ Require-Bundle: org.eclipse.core.expressions;bundle-version="[3.6.0,4.0.0)",
org.eclipse.papyrus.infra.services.labelprovider;bundle-version="[3.0.0,4.0.0)",
org.eclipse.papyrus.infra.services.navigation;bundle-version="[4.0.0,5.0.0)",
org.eclipse.papyrus.infra.services.semantic;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.infra.tools;bundle-version="[4.2.0,5.0.0)",
org.eclipse.papyrus.infra.ui;bundle-version="[3.0.0,4.0.0)",
org.eclipse.papyrus.infra.ui.emf;bundle-version="[3.0.0,4.0.0)",
org.eclipse.papyrus.infra.viewpoints.policy;bundle-version="[4.0.0,5.0.0)",
diff --git a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/plugin.xml b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/plugin.xml
index ebaab1dee8b..0b70f14a335 100644
--- a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/plugin.xml
+++ b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/plugin.xml
@@ -121,6 +121,20 @@
name="search filter"
visibleInUI="false">
</commonFilter>
+ <actionProvider
+ class="org.eclipse.papyrus.views.modelexplorer.actionprovider.OpenActionProvider"
+ id="org.eclipse.papyrus.views.modelexplorer.actionprovider.OpenActionProvider">
+ <enablement>
+ <or>
+ <adapt
+ type="org.eclipse.emf.ecore.EObject">
+ <adapt
+ type="org.eclipse.papyrus.infra.core.sasheditor.di.contentprovider.IOpenable">
+ </adapt>
+ </adapt>
+ </or>
+ </enablement>
+ </actionProvider>
</extension>
<!--
<extension
diff --git a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerView.java b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerView.java
index e24bdb2c235..f458199ba91 100644
--- a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerView.java
+++ b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerView.java
@@ -18,7 +18,7 @@
* Ansgar Radermacher (CEA LIST) - Bug 516459: Navigation mechanism with Alt+hover does not work on Linux
* Ansgar Radermacher (CEA LIST) - Bug 553094: Avoid potential NPE during dispose and remove reload-listener
* Ansgar Radermacher (CEA LIST) - Bug 574410: Exceptions during reload, contents disappears during 2nd reload
- *
+ * Vincent Lorenzo (CEA LIST) - Bug 576599: IOpenable and Open on double-click must be improved
*****************************************************************************/
package org.eclipse.papyrus.views.modelexplorer;
@@ -49,6 +49,7 @@ import org.eclipse.emf.transaction.ResourceSetListener;
import org.eclipse.emf.transaction.ResourceSetListenerImpl;
import org.eclipse.emf.transaction.Transaction;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.jface.action.IAction;
import org.eclipse.jface.util.Policy;
import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.DoubleClickEvent;
@@ -58,6 +59,7 @@ import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerColumn;
import org.eclipse.jface.viewers.ViewerFilter;
@@ -72,7 +74,6 @@ import org.eclipse.papyrus.infra.core.sasheditor.editor.ISashWindowsContainer;
import org.eclipse.papyrus.infra.core.sashwindows.di.service.IPageManager;
import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
-import org.eclipse.papyrus.infra.core.utils.AdapterUtils;
import org.eclipse.papyrus.infra.core.utils.ServiceUtils;
import org.eclipse.papyrus.infra.emf.commands.PapyrusDeleteCommand;
import org.eclipse.papyrus.infra.emf.gmf.command.ICommandWrapper;
@@ -81,6 +82,7 @@ import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
import org.eclipse.papyrus.infra.services.labelprovider.service.LabelProviderService;
import org.eclipse.papyrus.infra.services.navigation.service.NavigationMenu;
import org.eclipse.papyrus.infra.services.navigation.service.NavigationService;
+import org.eclipse.papyrus.infra.tools.util.PlatformHelper;
import org.eclipse.papyrus.infra.ui.editor.IMultiDiagramEditor;
import org.eclipse.papyrus.infra.ui.editor.IReloadableEditor;
import org.eclipse.papyrus.infra.ui.editor.reload.EditorReloadAdapter;
@@ -94,7 +96,6 @@ import org.eclipse.papyrus.infra.widgets.editors.StringWithClearEditor;
import org.eclipse.papyrus.infra.widgets.providers.PatternViewerFilter;
import org.eclipse.papyrus.infra.widgets.util.IRevealSemanticElement;
import org.eclipse.papyrus.views.modelexplorer.SharedModelExplorerState.StateChangedEvent;
-import org.eclipse.papyrus.views.modelexplorer.listener.DoubleClickListener;
import org.eclipse.papyrus.views.modelexplorer.matching.ModelElementItemMatchingItem;
import org.eclipse.papyrus.views.modelexplorer.preferences.IFilterPreferenceConstants;
import org.eclipse.papyrus.views.modelexplorer.preferences.INavigatorPreferenceConstants;
@@ -129,6 +130,7 @@ import org.eclipse.ui.PartInitException;
import org.eclipse.ui.navigator.CommonNavigator;
import org.eclipse.ui.navigator.CommonViewer;
import org.eclipse.ui.navigator.CommonViewerSorter;
+import org.eclipse.ui.navigator.ICommonActionConstants;
import org.eclipse.ui.navigator.IExtensionActivationListener;
import org.eclipse.ui.navigator.ILinkHelper;
import org.eclipse.ui.navigator.INavigatorContentService;
@@ -139,7 +141,6 @@ import org.eclipse.ui.views.properties.IPropertySheetPage;
import org.eclipse.ui.views.properties.tabbed.ITabbedPropertySheetPageContributor;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
-import com.google.common.base.Supplier;
import com.google.common.collect.Lists;
/**
@@ -303,6 +304,9 @@ public class ModelExplorerView extends CommonNavigator implements IRevealSemanti
/** The {@link IPropertySheetPage} this model explorer will use. */
private final List<IPropertySheetPage> propertySheetPages = new LinkedList<>();
+
+
+
/**
*
* Constructor.
@@ -362,8 +366,17 @@ public class ModelExplorerView extends CommonNavigator implements IRevealSemanti
@Override
protected void handleDoubleClick(DoubleClickEvent anEvent) {
- if (Activator.getDefault().getPreferenceStore().getBoolean(INavigatorPreferenceConstants.PREF_EXPAND_NODE_ON_DOUBLE_CLICK)) {
- super.handleDoubleClick(anEvent);
+ final IAction openHandler = getViewSite().getActionBars().getGlobalActionHandler(ICommonActionConstants.OPEN);
+
+ if (openHandler == null && Activator.getDefault().getPreferenceStore().getBoolean(INavigatorPreferenceConstants.PREF_EXPAND_NODE_ON_DOUBLE_CLICK)) {
+ IStructuredSelection selection = (IStructuredSelection) anEvent
+ .getSelection();
+ Object element = selection.getFirstElement();
+
+ TreeViewer viewer = getCommonViewer();
+ if (viewer.isExpandable(element)) {
+ viewer.setExpandedState(element, !viewer.getExpandedState(element));
+ }
}
}
@@ -591,12 +604,6 @@ public class ModelExplorerView extends CommonNavigator implements IRevealSemanti
getCommonViewer().setSorter(null);
((CustomCommonViewer) getCommonViewer()).getDropAdapter().setFeedbackEnabled(true);
- getCommonViewer().addDoubleClickListener(new DoubleClickListener(new Supplier<ServicesRegistry>() {
- @Override
- public ServicesRegistry get() {
- return serviceRegistry;
- }
- }));
try {
navigationMenu = serviceRegistry.getService(NavigationService.class).createNavigationList();
@@ -953,7 +960,7 @@ public class ModelExplorerView extends CommonNavigator implements IRevealSemanti
getCommonViewer().setInput(serviceRegistry);
}
editingDomain.addResourceSetListener(resourceSetListener);
- IReadOnlyHandler2 readOnlyHandler = AdapterUtils.adapt(editingDomain, IReadOnlyHandler2.class, null);
+ final IReadOnlyHandler2 readOnlyHandler = PlatformHelper.getAdapter(editingDomain, IReadOnlyHandler2.class);
if (readOnlyHandler != null) {
readOnlyHandler.addReadOnlyListener(createReadOnlyListener());
}
diff --git a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/actionprovider/OpenActionProvider.java b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/actionprovider/OpenActionProvider.java
new file mode 100755
index 00000000000..9eac90ddb8b
--- /dev/null
+++ b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/actionprovider/OpenActionProvider.java
@@ -0,0 +1,60 @@
+/*****************************************************************************
+ * Copyright (c) 2021 CEA LIST.
+ *
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.views.modelexplorer.actionprovider;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.papyrus.infra.ui.api.actions.EclipseCommandToAction;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.ICommonActionConstants;
+
+/**
+ *
+ * This provider provides the action used to be able to open an existing page on a DoubleClick
+ * reusing the Papyrus Open Command declared in the plugin.xml
+ *
+ * @since 5.0
+ *
+ */
+public class OpenActionProvider extends CommonActionProvider {
+
+ /**
+ * The ID of the open command declared in the ModelExplorer
+ */
+ private static final String OPEN_COMMAND_ID = "org.eclipse.papyrus.views.modelexplorer.popup.open.command"; //$NON-NLS-1$
+
+ /**
+ *
+ * Constructor.
+ *
+ */
+ public OpenActionProvider() {
+ // nothing to do
+ }
+
+ /**
+ * @see org.eclipse.ui.actions.ActionGroup#fillActionBars(org.eclipse.ui.IActionBars)
+ *
+ * @param actionBars
+ */
+ @Override
+ public void fillActionBars(final IActionBars actionBars) {
+ final IAction openAction = new EclipseCommandToAction(OPEN_COMMAND_ID);
+ if (openAction.isEnabled()) {
+ actionBars.setGlobalActionHandler(ICommonActionConstants.OPEN, openAction);
+ }
+ }
+
+}
diff --git a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/OpenHandler.java b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/OpenHandler.java
index e27e30d8a07..644b59bbbc6 100644
--- a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/OpenHandler.java
+++ b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/OpenHandler.java
@@ -11,11 +11,14 @@
*
* Contributors:
* Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 576595
+ * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 576595, 576599
*****************************************************************************/
package org.eclipse.papyrus.views.modelexplorer.handler;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Hashtable;
+import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
@@ -24,18 +27,15 @@ import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.ecore.EObject;
-import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.papyrus.infra.core.sasheditor.di.contentprovider.IOpenable;
import org.eclipse.papyrus.infra.core.sashwindows.di.service.IPageManager;
-import org.eclipse.papyrus.infra.gmfdiag.common.utils.DiagramUtils;
import org.eclipse.papyrus.infra.ui.command.AbstractPapyrusHandler;
import org.eclipse.papyrus.infra.viewpoints.policy.ViewPrototype;
/**
- * This handler allows to Open Diagrams and Tables
- *
- *
- *
+ * This handler allows to Open EObject that can be adapted to IOpenable.
*/
public class OpenHandler extends AbstractPapyrusHandler implements IExecutableExtension {
@@ -58,7 +58,6 @@ public class OpenHandler extends AbstractPapyrusHandler implements IExecutableEx
*/
private boolean isDuplicateViewAllowed = false;
-
/**
*
* @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
@@ -68,32 +67,42 @@ public class OpenHandler extends AbstractPapyrusHandler implements IExecutableEx
* @throws ExecutionException
*/
@Override
- public Object execute(ExecutionEvent event) throws ExecutionException {
+ public Object execute(final ExecutionEvent event) throws ExecutionException {
final IPageManager pageManager = getPageManager(event);
if (pageManager == null) {
return null;
}
- // Try to close each selected editor.
- // There is no common type for object representing an editor. So,
- // We try to get the EObject, and try to close it as an Editor.
- List<EObject> selectedProperties = getCurrentSelectionAdaptedToType(event, EObject.class);
- if (selectedProperties == null) {
+ // 1. get the selected EObject
+ final List<EObject> selectedEObjects = getCurrentSelectionAdaptedToType(event, EObject.class);
+ if (selectedEObjects == null || selectedEObjects.isEmpty()) {
// nothing to do
return null;
}
+ // 2. convert to IOpenable
+ final Collection<IOpenable> openables = getIOpenables(selectedEObjects);
+ if (openables.isEmpty()) {
+ return null;
+ }
+
// Check each selected object
final List<EObject> pagesToOpen = new LinkedList<>();
List<EObject> pagesToSelect = new LinkedList<>();
- for (EObject selected : selectedProperties) {
- if (!canOpenByPolicy(selected)) {
- continue;
- }
- if (!pageManager.isOpen(selected) || this.isDuplicateViewAllowed) {
- pagesToOpen.add(selected);
- } else {
- pagesToSelect.add(selected);
+ for (IOpenable selected : openables) {
+ if (selected.getPageIdentifier() instanceof EObject) {
+
+ // bug 571087
+ // we use the IOpenable element to get the real element to open
+ final EObject realObjectToOpen = (EObject) selected.getPageIdentifier();
+ if (!canOpenByPolicy(realObjectToOpen)) {
+ continue;
+ }
+ if (!pageManager.isOpen(realObjectToOpen) || this.isDuplicateViewAllowed) {
+ pagesToOpen.add(realObjectToOpen);
+ } else {
+ pagesToSelect.add(realObjectToOpen);
+ }
}
}
@@ -111,6 +120,25 @@ public class OpenHandler extends AbstractPapyrusHandler implements IExecutableEx
}
/**
+ *
+ * @param selectedEObject
+ * the selected EObject
+ * @return
+ * the IOpenanbel corresponding to these {@link EObject}
+ */
+ private Collection<IOpenable> getIOpenables(final Collection<EObject> selectedEObject) {
+ final Iterator<EObject> iter = selectedEObject.iterator();
+ final Collection<IOpenable> openables = new ArrayList<>();
+ while (iter.hasNext()) {
+ final IOpenable openable = Platform.getAdapterManager().getAdapter(iter.next(), IOpenable.class);
+ if (openable != null) {
+ openables.add(openable);
+ }
+ }
+ return openables;
+ }
+
+ /**
* Determines whether the current policy allows this object to be opened
*
* @param selection
@@ -118,12 +146,8 @@ public class OpenHandler extends AbstractPapyrusHandler implements IExecutableEx
* @return <code>true</code> if the object can be opened
*/
private boolean canOpenByPolicy(EObject selection) {
- if (selection instanceof Diagram) {
- Diagram diagram = (Diagram) selection;
- ViewPrototype proto = DiagramUtils.getPrototype(diagram);
- return proto != ViewPrototype.UNAVAILABLE_VIEW;
- }
- return true;
+ final ViewPrototype proto = ViewPrototype.get(selection);
+ return proto != ViewPrototype.UNAVAILABLE_VIEW;
}
/**
@@ -147,5 +171,4 @@ public class OpenHandler extends AbstractPapyrusHandler implements IExecutableEx
this.isDuplicateViewAllowed = Boolean.parseBoolean(value.toString());
}
}
-
-}
+} \ No newline at end of file
diff --git a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/listener/DoubleClickListener.java b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/listener/DoubleClickListener.java
deleted file mode 100644
index b82ee5cce3c..00000000000
--- a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/listener/DoubleClickListener.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*****************************************************************************
- * Copyright (c) 2010, 2016, 2021 CEA LIST, Christian W. Damus, and others.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Patrick Tessier (CEA LIST) Patrick.tessier@cea.fr - Initial API and implementation
- * Christian W. Damus - bug 450235
- * Christian W. Damus - bug 485220
- * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Bug 571087
- *****************************************************************************/
-package org.eclipse.papyrus.views.modelexplorer.listener;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.papyrus.infra.core.sasheditor.di.contentprovider.IOpenable;
-import org.eclipse.papyrus.infra.core.sashwindows.di.service.IPageManager;
-import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
-import org.eclipse.papyrus.infra.core.utils.ServiceUtils;
-import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
-import org.eclipse.papyrus.views.modelexplorer.Activator;
-
-import com.google.common.base.Supplier;
-
-/**
- * this class is a listener in charge to manage double on element of the model explorer
- *
- */
-public class DoubleClickListener implements IDoubleClickListener {
-
- private final Supplier<ServicesRegistry> servicesRegistry;
-
- /**
- * Initializes me with a variable service registry.
- *
- * @param servicesRegistrySupplier
- * a supplier of a dynamically variable service registry
- */
- public DoubleClickListener(Supplier<ServicesRegistry> servicesRegistrySupplier) {
- this.servicesRegistry = servicesRegistrySupplier;
- }
-
- /**
- *
- * @see org.eclipse.jface.viewers.IDoubleClickListener#doubleClick(org.eclipse.jface.viewers.DoubleClickEvent)
- *
- */
- @Override
- public void doubleClick(DoubleClickEvent event) {
- ISelection selection = event.getSelection();
- final IPageManager pageManager;
- // get the page Manager
- try {
- pageManager = ServiceUtils.getInstance().getService(IPageManager.class, servicesRegistry.get());
- } catch (Exception e) {
- Activator.log.error("Impossibility to load the page manager", e);//$NON-NLS-1$
- return;
- }
-
- if (pageManager != null) {
- if (selection instanceof IStructuredSelection) {
- Iterator<?> iter = ((IStructuredSelection) selection).iterator();
- final List<EObject> pagesToOpen = new LinkedList<>();
- EObject pageToSelect = null;
- while (iter.hasNext()) {
- Object currentObject = iter.next();
-
- final EObject selectedElement = EMFHelper.getEObject(currentObject);
- final IOpenable openable = Platform.getAdapterManager().getAdapter(selectedElement, IOpenable.class);
-
- // bug 571087
- // we use the IOpenable element to get the real element to open
- EObject toOpen = selectedElement;
- if (openable != null && openable.getPageIdentifier() instanceof EObject) {
- toOpen = (EObject) openable.getPageIdentifier();
- }
-
-
- if (openable != null) {
- // Note that Diagram migration is triggered by the Diagram Editor.
- // Try to open the diagram, even if it is currently invalid. The editor might be able to repair it
- if (pageManager.isOpen(toOpen)) {
- pageToSelect = toOpen;
- } else {
- pagesToOpen.add(toOpen);
- }
- }
- }
-
- if (!pagesToOpen.isEmpty()) {
- for (EObject page : pagesToOpen) {
- pageManager.openPage(page);
- }
- } else if (pageToSelect != null) {
- pageManager.selectPage(pageToSelect);
- }
- }
-
- }
- }
-
-}

Back to the top