Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcletavernie2013-02-18 15:50:30 +0000
committercletavernie2013-02-18 15:50:30 +0000
commitf6beec7ac32f7979034f4a7ed96562d6ebb6cb5a (patch)
tree80076e899d16f9df808edcc9c251db6f379317c8 /plugins/views
parent6773747c768861b2c89f2a232f6f600c482fcc66 (diff)
downloadorg.eclipse.papyrus-f6beec7ac32f7979034f4a7ed96562d6ebb6cb5a.tar.gz
org.eclipse.papyrus-f6beec7ac32f7979034f4a7ed96562d6ebb6cb5a.tar.xz
org.eclipse.papyrus-f6beec7ac32f7979034f4a7ed96562d6ebb6cb5a.zip
398712: [Core] Multiple issues with the PageManager
https://bugs.eclipse.org/bugs/show_bug.cgi?id=398712 360243: [ModelExplorer] Undo/Redo on delete for Diagrams and Tables https://bugs.eclipse.org/bugs/show_bug.cgi?id=360243
Diffstat (limited to 'plugins/views')
-rw-r--r--plugins/views/documentation/org.eclipse.papyrus.views.documentation.view.papyrus/src/org/eclipse/papyrus/views/documentation/view/papyrus/PapyrusDocumentationPartHandler.java24
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/LinkHelper.java7
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/ModelExplorerView.java6
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/AbstractModelExplorerHandler.java68
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/CloseHandler.java75
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/LoadBrowserCustomization.java6
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/OpenHandler.java114
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/listener/DoubleClickListener.java54
-rw-r--r--plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/provider/PropertyTester.java10
9 files changed, 239 insertions, 125 deletions
diff --git a/plugins/views/documentation/org.eclipse.papyrus.views.documentation.view.papyrus/src/org/eclipse/papyrus/views/documentation/view/papyrus/PapyrusDocumentationPartHandler.java b/plugins/views/documentation/org.eclipse.papyrus.views.documentation.view.papyrus/src/org/eclipse/papyrus/views/documentation/view/papyrus/PapyrusDocumentationPartHandler.java
index cb45225a5e7..c2a60bf0cb7 100644
--- a/plugins/views/documentation/org.eclipse.papyrus.views.documentation.view.papyrus/src/org/eclipse/papyrus/views/documentation/view/papyrus/PapyrusDocumentationPartHandler.java
+++ b/plugins/views/documentation/org.eclipse.papyrus.views.documentation.view.papyrus/src/org/eclipse/papyrus/views/documentation/view/papyrus/PapyrusDocumentationPartHandler.java
@@ -22,6 +22,7 @@ import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.transaction.RecordingCommand;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart;
import org.eclipse.gmf.runtime.notation.Diagram;
@@ -29,7 +30,7 @@ import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.papyrus.infra.core.editor.CoreMultiDiagramEditor;
import org.eclipse.papyrus.infra.core.editor.IMultiDiagramEditor;
-import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageManager;
import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
import org.eclipse.papyrus.infra.core.utils.ServiceUtils;
@@ -93,22 +94,33 @@ public class PapyrusDocumentationPartHandler implements IDocumentationPartHandle
EditingDomain ed = ServiceUtils.getInstance().getTransactionalEditingDomain(registry);
if(ed != null) {
EObject eObject = ed.getResourceSet().getEObject(elementUri, false);
- Diagram diagram = null;
+ final Diagram diagram;
if(eObject instanceof Diagram) {
diagram = (Diagram)eObject;
} else {
List<Diagram> diagrams = DiagramsUtil.getAssociatedDiagrams(eObject, null);
- if(!diagrams.isEmpty()) {
+ if(diagrams.isEmpty()) {
+ return;
+ } else {
diagram = diagrams.get(0);
}
}
+
if(diagram != null) {
- IPageMngr pageMngr = ServiceUtils.getInstance().getIPageMngr(registry);
+ final IPageManager pageMngr = ServiceUtils.getInstance().getIPageManager(registry);
if(pageMngr != null) {
if(pageMngr.isOpen(diagram)) {
- pageMngr.closePage(diagram);
+ pageMngr.selectPage(diagram);
+ } else {
+ TransactionalEditingDomain editingDomain = ServiceUtils.getInstance().getTransactionalEditingDomain(registry);
+ editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain, "Open diagram") {
+
+ @Override
+ public void doExecute() {
+ pageMngr.openPage(diagram);
+ }
+ });
}
- pageMngr.openPage(diagram);
}
}
}
diff --git a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/LinkHelper.java b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/LinkHelper.java
index 9f696c74c82..1d71284629a 100644
--- a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/LinkHelper.java
+++ b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/LinkHelper.java
@@ -22,6 +22,7 @@ import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.papyrus.infra.core.sasheditor.editor.ISashWindowsContainer;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.core.utils.ServiceUtilsForWorkbenchPage;
import org.eclipse.papyrus.infra.widgets.util.IRevealSemanticElement;
import org.eclipse.ui.IEditorInput;
@@ -88,8 +89,10 @@ public class LinkHelper implements ILinkHelper {
}
}
}
- } catch (Exception e) {
- Activator.log.error("Impossible to acces to windows Container", e);
+ } catch (ServiceException ex) {
+ //We cannot access the service registry. The PapyrusEditor is probably closed.
+ } catch (Exception ex) {
+ Activator.log.error("Impossible to acces to windows Container", ex);
}
}
}
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 85ef9a584de..8689ea97bb3 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
@@ -48,7 +48,7 @@ import org.eclipse.papyrus.infra.core.lifecycleevents.IEditorInputChangedListene
import org.eclipse.papyrus.infra.core.lifecycleevents.ISaveAndDirtyService;
import org.eclipse.papyrus.infra.core.resource.ModelSet;
import org.eclipse.papyrus.infra.core.resource.additional.AdditionalResourcesModel;
-import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageManager;
import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
import org.eclipse.papyrus.infra.core.utils.ServiceUtils;
@@ -254,9 +254,9 @@ public class ModelExplorerView extends CommonNavigator implements IRevealSemanti
List<Object> path = new ArrayList<Object>();
ITreeContentProvider contentProvider = (ITreeContentProvider)getCommonViewer().getContentProvider();
// IPageMngr iPageMngr = EditorUtils.getIPageMngr();
- IPageMngr iPageMngr;
+ IPageManager iPageMngr;
try {
- iPageMngr = ServiceUtils.getInstance().getIPageMngr(serviceRegistry);
+ iPageMngr = ServiceUtils.getInstance().getIPageManager(serviceRegistry);
} catch (ServiceException e) {
// This shouldn't happen.
return Collections.emptyList();
diff --git a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/AbstractModelExplorerHandler.java b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/AbstractModelExplorerHandler.java
index 6d6551e6ff2..20ae835775f 100644
--- a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/AbstractModelExplorerHandler.java
+++ b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/AbstractModelExplorerHandler.java
@@ -26,7 +26,7 @@ import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeSelection;
-import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageManager;
import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.core.utils.ServiceUtilsForActionHandlers;
import org.eclipse.ui.handlers.HandlerUtil;
@@ -62,15 +62,15 @@ public abstract class AbstractModelExplorerHandler extends AbstractHandler {
* @return
* the page manager
*/
- protected IPageMngr getPageManager() {
- IPageMngr pageMngr = null;
+ protected IPageManager getPageManager() {
+ IPageManager pageManager = null;
try {
- pageMngr = ServiceUtilsForActionHandlers.getInstance().getIPageMngr();
+ pageManager = ServiceUtilsForActionHandlers.getInstance().getIPageManager();
} catch (ServiceException e) {
//we are closing the editor, so the model explorer has nothing to display
// e.printStackTrace();
}
- return pageMngr;
+ return pageManager;
}
/**
@@ -82,24 +82,24 @@ public abstract class AbstractModelExplorerHandler extends AbstractHandler {
* @return The adapted object, or null.
*/
@SuppressWarnings("unchecked")
- private <T> T adapt( Object object, Class<T> expectedClassType) {
-
- if( object instanceof IAdaptable ) {
+ private <T> T adapt(Object object, Class<T> expectedClassType) {
+
+ if(object instanceof IAdaptable) {
T ele = (T)((IAdaptable)object).getAdapter(expectedClassType);
if(ele != null) {
- return ele;
+ return ele;
}
// Try as EObject if the expectedClasType is sub-type of EObject.
- if( EObject.class.isAssignableFrom( expectedClassType) ) {
+ if(EObject.class.isAssignableFrom(expectedClassType)) {
// to EObject
EObject eobject = (EObject)((IAdaptable)object).getAdapter(EObject.class);
-
+
if(eobject != null && expectedClassType.isInstance(eobject)) {
- return (T)eobject;
+ return (T)eobject;
}
}
}
-
+
// Try global mechanism
{
T ele = (T)Platform.getAdapterManager().getAdapter(object, expectedClassType);
@@ -107,36 +107,38 @@ public abstract class AbstractModelExplorerHandler extends AbstractHandler {
return ele;
}
// Try as EObject if the expectedClasType is sub-type of EObject.
- if( EObject.class.isAssignableFrom( expectedClassType) ) {
+ if(EObject.class.isAssignableFrom(expectedClassType)) {
// to EObject
EObject eobject = (EObject)Platform.getAdapterManager().getAdapter(object, EObject.class);
-
+
if(eobject != null && expectedClassType.isInstance(eobject)) {
-
- return (T)eobject;
+
+ return (T)eobject;
}
}
}
// Can't be adapted
return null;
-
+
}
/**
* Filter the list, and only retain objects that can be adapted to the specified type
+ *
* @param objects
* @param class1
* @return
*/
private <T> List<T> getAllElementAdaptedToType(List<Object> list, Class<T> expectedClassType) {
-
+
List<T> res = new ArrayList<T>();
-
- for( Object cur : list) {
-
- T adapted = adapt( cur, expectedClassType);
- if( adapted != null)
+
+ for(Object cur : list) {
+
+ T adapted = adapt(cur, expectedClassType);
+ if(adapted != null) {
res.add(adapted);
+ }
}
return res;
}
@@ -146,24 +148,22 @@ public abstract class AbstractModelExplorerHandler extends AbstractHandler {
*
* @param expectedType
* @return
- * @throws ExecutionException
+ * @throws ExecutionException
*/
@SuppressWarnings("unchecked")
protected <T> List<T> getCurrentSelectionAdaptedToType(ExecutionEvent event, Class<T> expectedType) throws ExecutionException {
-
+
// Get selection from the workbench
ISelection selection = HandlerUtil.getCurrentSelectionChecked(event);
-
+
// Get the selected objects according to the type of the selected
- if(selection instanceof IStructuredSelection)
- {
+ if(selection instanceof IStructuredSelection) {
IStructuredSelection structuredSelection = (IStructuredSelection)selection;
- return getAllElementAdaptedToType( structuredSelection.toList(), expectedType);
- }
- else if( selection instanceof TreeSelection) {
+ return getAllElementAdaptedToType(structuredSelection.toList(), expectedType);
+ } else if(selection instanceof TreeSelection) {
TreeSelection treeSelection = (TreeSelection)selection;
- return getAllElementAdaptedToType( treeSelection.toList(), expectedType );
-
+ return getAllElementAdaptedToType(treeSelection.toList(), expectedType);
+
}
return null;
}
diff --git a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/CloseHandler.java b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/CloseHandler.java
index 67fcbc30a87..a798ccad0e2 100644
--- a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/CloseHandler.java
+++ b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/CloseHandler.java
@@ -14,6 +14,7 @@
package org.eclipse.papyrus.views.modelexplorer.handler;
import java.util.Hashtable;
+import java.util.LinkedList;
import java.util.List;
import org.eclipse.core.commands.ExecutionEvent;
@@ -22,7 +23,12 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExecutableExtension;
import org.eclipse.emf.ecore.EObject;
-import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageManager;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
+import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForHandlers;
/**
* This handler allows to Close Diagrams and Tables
@@ -58,33 +64,72 @@ public class CloseHandler extends AbstractModelExplorerHandler implements IExecu
* @throws ExecutionException
*/
public Object execute(ExecutionEvent event) throws ExecutionException {
-
- IPageMngr pageMngr = getPageManager();
- if(pageMngr == null) {
- return null;
+
+ final IPageManager pageMngr;
+ TransactionalEditingDomain editingDomain;
+
+ try {
+ ServicesRegistry registry = ServiceUtilsForHandlers.getInstance().getServiceRegistry(event);
+ pageMngr = registry.getService(IPageManager.class);
+ editingDomain = registry.getService(TransactionalEditingDomain.class);
+ } catch (ServiceException ex) {
+ throw new ExecutionException(ex.getMessage(), ex);
}
-
+
// What kind of command ?
if(PARAMETER_ALL.equals(parameter)) {
- pageMngr.closeAllOpenedPages();
+ boolean atLeastOneOpenedPage = false;
+ for(Object page : pageMngr.allPages()) {
+ if(pageMngr.isOpen(page)) {
+ atLeastOneOpenedPage = true;
+ break;
+ }
+ }
+ if(atLeastOneOpenedPage) {
+ editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain, "Close all pages") {
+
+ @Override
+ protected void doExecute() {
+ pageMngr.closeAllOpenedPages();
+ }
+ });
+ }
+
+ 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) {
+ List<EObject> selectedProperties = getCurrentSelectionAdaptedToType(event, EObject.class);
+ if(selectedProperties == null) {
// nothing to do
return null;
}
-
-
+
+
+ final List<EObject> pagesToClose = new LinkedList<EObject>();
// Check each selected object
- for( EObject selected : selectedProperties) {
-
- pageMngr.closePage(selected);
+ for(EObject selected : selectedProperties) {
+ if(pageMngr.isOpen(selected)) {
+ pagesToClose.add(selected);
+ }
}
+ if(pagesToClose.isEmpty()) {
+ return null;
+ }
+
+ editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain, "Close pages") {
+
+ @Override
+ protected void doExecute() {
+ for(EObject page : pagesToClose) {
+ pageMngr.closePage(page);
+ }
+ }
+ });
+
return null;
}
diff --git a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/LoadBrowserCustomization.java b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/LoadBrowserCustomization.java
index 3852be90c15..a89e06c87b2 100644
--- a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/LoadBrowserCustomization.java
+++ b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/handler/LoadBrowserCustomization.java
@@ -40,7 +40,7 @@ import org.eclipse.jface.window.Window;
import org.eclipse.osgi.util.NLS;
import org.eclipse.papyrus.infra.core.resource.ModelSet;
import org.eclipse.papyrus.infra.core.resource.ModelUtils;
-import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageManager;
import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
import org.eclipse.papyrus.infra.core.utils.ServiceUtils;
@@ -261,9 +261,9 @@ public class LoadBrowserCustomization extends AbstractHandler {
* we look for the current editors, because their are represented in the model explorer
* using specific facet and uiCustom. (see bug 359692)
*/
- IPageMngr pageMngr = null;
+ IPageManager pageMngr = null;
try {
- pageMngr = ServiceUtils.getInstance().getIPageMngr(serviceRegistry);
+ pageMngr = ServiceUtils.getInstance().getIPageManager(serviceRegistry);
List<Object> pages = pageMngr.allPages();
for(int i = 0; i < pages.size(); i++) {
if(pages.get(i) instanceof EObject) {
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 ae68091527f..3c581dfab3a 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
@@ -14,6 +14,7 @@
package org.eclipse.papyrus.views.modelexplorer.handler;
import java.util.Hashtable;
+import java.util.LinkedList;
import java.util.List;
import org.eclipse.core.commands.ExecutionEvent;
@@ -22,7 +23,11 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExecutableExtension;
import org.eclipse.emf.ecore.EObject;
-import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageManager;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForHandlers;
/**
* This handler allows to Open Diagrams and Tables
@@ -57,30 +62,53 @@ public class OpenHandler extends AbstractModelExplorerHandler implements IExecut
* @throws ExecutionException
*/
public Object execute(ExecutionEvent event) throws ExecutionException {
- IPageMngr pageMngr = getPageManager();
+ final IPageManager pageMngr = getPageManager();
if(pageMngr == 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) {
+ List<EObject> selectedProperties = getCurrentSelectionAdaptedToType(event, EObject.class);
+ if(selectedProperties == null) {
// nothing to do
return null;
}
-
+
// Check each selected object
- for( EObject selected : selectedProperties) {
-
- if( isDuplicateDiagramAllowed || !pageMngr.isOpen(selected) ) {
- pageMngr.openPage(selected);
+ final List<EObject> pagesToOpen = new LinkedList<EObject>();
+ List<EObject> pagesToSelect = new LinkedList<EObject>();
+ for(EObject selected : selectedProperties) {
+ if(!pageMngr.isOpen(selected) || isDuplicateDiagramAllowed) {
+ pagesToOpen.add(selected);
+ } else {
+ pagesToSelect.add(selected);
}
}
- return null;
+ if(!pagesToOpen.isEmpty()) {
+ try {
+ TransactionalEditingDomain editingDomain = ServiceUtilsForHandlers.getInstance().getTransactionalEditingDomain(event);
+ editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain, "Open pages") {
+
+ @Override
+ protected void doExecute() {
+ for(EObject page : pagesToOpen) {
+ pageMngr.openPage(page);
+ }
+ }
+ });
+ } catch (ServiceException ex) {
+ throw new ExecutionException(ex.getMessage(), ex);
+ }
+ }
+ for(EObject page : pagesToSelect) {
+ pageMngr.selectPage(page);
+ }
+
+ return null;
}
/**
@@ -89,34 +117,34 @@ public class OpenHandler extends AbstractModelExplorerHandler implements IExecut
*
* @return
*/
-// @Override
-// public boolean isEnabled() {
-// IPageMngr pageMngr = getPageManager();
-// if(pageMngr == null) {
-// return false;
-// }
-//
-// // 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) {
-// // nothing to do
-// return false;
-// }
-//
-// // Check each selected object
-// // Return true if one of them is enabled
-// for( EObject selected : selectedProperties) {
-//
-// if( isDuplicateDiagramAllowed || !pageMngr.isOpen(selected) ) {
-// return true;
-// }
-// }
-//
-//
-// return false;
-// }
+ // @Override
+ // public boolean isEnabled() {
+ // IPageMngr pageMngr = getPageManager();
+ // if(pageMngr == null) {
+ // return false;
+ // }
+ //
+ // // 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) {
+ // // nothing to do
+ // return false;
+ // }
+ //
+ // // Check each selected object
+ // // Return true if one of them is enabled
+ // for( EObject selected : selectedProperties) {
+ //
+ // if( isDuplicateDiagramAllowed || !pageMngr.isOpen(selected) ) {
+ // return true;
+ // }
+ // }
+ //
+ //
+ // return false;
+ // }
/**
*
@@ -129,15 +157,15 @@ public class OpenHandler extends AbstractModelExplorerHandler implements IExecut
* @throws CoreException
*/
public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException {
- if( ! (data instanceof Hashtable) ) {
+ if(!(data instanceof Hashtable)) {
return;
}
-
+
@SuppressWarnings("rawtypes")
Hashtable map = (Hashtable)data;
-
+
try {
- isDuplicateDiagramAllowed = Boolean.parseBoolean((String)map.get(IS_DUPLICATE_EDITOR_ALLOWED_PARAMETER) );
+ isDuplicateDiagramAllowed = Boolean.parseBoolean((String)map.get(IS_DUPLICATE_EDITOR_ALLOWED_PARAMETER));
} catch (Exception e) {
// silently fail;
}
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
index bbddf7e49ca..d3456e50981 100644
--- 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
@@ -14,17 +14,23 @@
package org.eclipse.papyrus.views.modelexplorer.listener;
import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.transaction.RecordingCommand;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
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.contentprovider.IPageMngr;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageManager;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.core.utils.ServiceUtilsForActionHandlers;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.papyrus.infra.emf.utils.ServiceUtilsForSelection;
import org.eclipse.papyrus.views.modelexplorer.Activator;
import org.eclipse.papyrus.views.modelexplorer.Messages;
-import org.eclipse.papyrus.views.modelexplorer.NavigatorUtils;
/**
* this class is a listener in charge to manage double on element of the model explorer
@@ -39,32 +45,52 @@ public class DoubleClickListener implements IDoubleClickListener {
*/
public void doubleClick(DoubleClickEvent event) {
ISelection selection = event.getSelection();
- IPageMngr pageMngr = null;
+ final IPageManager pageManager;
//get the page Manager
try {
- pageMngr = ServiceUtilsForActionHandlers.getInstance().getIPageMngr();
+ pageManager = ServiceUtilsForActionHandlers.getInstance().getIPageManager();
} catch (Exception e) {
Activator.log.error(Messages.DoubleClickListener_Error_NoLoadManagerToOpen, e);
+ return;
}
- if(pageMngr != null) {
+ if(pageManager != null) {
if(selection instanceof IStructuredSelection) {
Iterator<?> iter = ((IStructuredSelection)selection).iterator();
+ final List<EObject> pagesToOpen = new LinkedList<EObject>();
+ EObject pageToSelect = null;
while(iter.hasNext()) {
Object currentObject = iter.next();
- EObject diag = NavigatorUtils.getElement(currentObject, EObject.class);
- if(pageMngr.allPages().contains(diag)) {
- /**
- * Close the diagram if it was already open
- */
- if(pageMngr.isOpen(diag)) {
- pageMngr.closePage(diag);
+ EObject diag = EMFHelper.getEObject(currentObject);
+
+ if(pageManager.allPages().contains(diag)) {
+ if(pageManager.isOpen(diag)) {
+ pageToSelect = diag;
+ } else {
+ pagesToOpen.add(diag);
}
- pageMngr.openPage(diag);
}
}
+
+ if(!pagesToOpen.isEmpty()) {
+ try {
+ TransactionalEditingDomain editingDomain = ServiceUtilsForSelection.getInstance().getTransactionalEditingDomain(selection);
+ editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain, "Open pages") {
+
+ @Override
+ protected void doExecute() {
+ for(EObject page : pagesToOpen) {
+ pageManager.openPage(page);
+ }
+ }
+ });
+ } catch (ServiceException ex) {
+ Activator.log.error(ex);
+ }
+ } else if(pageToSelect != null) {
+ pageManager.selectPage(pageToSelect);
+ }
}
}
}
-
}
diff --git a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/provider/PropertyTester.java b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/provider/PropertyTester.java
index 9fddf09c60e..548bb4361a3 100644
--- a/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/provider/PropertyTester.java
+++ b/plugins/views/modelexplorer/org.eclipse.papyrus.views.modelexplorer/src/org/eclipse/papyrus/views/modelexplorer/provider/PropertyTester.java
@@ -18,7 +18,7 @@ import java.util.Iterator;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
+import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageManager;
import org.eclipse.papyrus.infra.core.services.ServiceException;
import org.eclipse.papyrus.infra.core.utils.ServiceUtilsForActionHandlers;
import org.eclipse.papyrus.views.modelexplorer.ModelExplorerPageBookView;
@@ -78,7 +78,7 @@ public class PropertyTester extends org.eclipse.core.expressions.PropertyTester
* <code>true</code> if all selected elements are pages
*/
private boolean isPage(IStructuredSelection selection) {
- IPageMngr pageMngr = getPageManager();
+ IPageManager pageMngr = getPageManager();
if(pageMngr != null) {
if(!selection.isEmpty()) {
Iterator<?> iter = selection.iterator();
@@ -105,12 +105,12 @@ public class PropertyTester extends org.eclipse.core.expressions.PropertyTester
* @return
* the page manager
*/
- protected IPageMngr getPageManager() {
- IPageMngr pageMngr = null;
+ protected IPageManager getPageManager() {
+ IPageManager pageMngr = null;
try {
ServiceUtilsForActionHandlers instance = org.eclipse.papyrus.infra.core.utils.ServiceUtilsForActionHandlers.getInstance();
if(instance != null) {
- pageMngr = instance.getIPageMngr();
+ pageMngr = instance.getIPageManager();
}
} catch (NullPointerException npe) {
//NPE

Back to the top