diff options
author | Eike Stepper | 2016-04-12 12:35:13 +0000 |
---|---|---|
committer | Eike Stepper | 2016-04-12 12:35:13 +0000 |
commit | bb06d61bf76e5be079ef500a33ce9c74ff998a7d (patch) | |
tree | 34e31b44e9357409568d67c0e9d02e000c4c17a1 | |
parent | 2d09c40ae81937ce7c6292852a6c3626a9a93c8a (diff) | |
download | cdo-bb06d61bf76e5be079ef500a33ce9c74ff998a7d.tar.gz cdo-bb06d61bf76e5be079ef500a33ce9c74ff998a7d.tar.xz cdo-bb06d61bf76e5be079ef500a33ce9c74ff998a7d.zip |
[490491] Selecting Open With ->CDO Editor from a model subtree element, instead opens whole model
https://bugs.eclipse.org/bugs/show_bug.cgi?id=490491
6 files changed, 99 insertions, 11 deletions
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOModelEditorOpener.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOModelEditorOpener.java index 5c681befab..ab53a1fdec 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOModelEditorOpener.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOModelEditorOpener.java @@ -10,14 +10,18 @@ */ package org.eclipse.emf.cdo.explorer.ui.checkouts; +import org.eclipse.emf.cdo.CDOObject; +import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.emf.cdo.explorer.CDOExplorerUtil; import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout; import org.eclipse.emf.cdo.explorer.ui.bundle.OM; +import org.eclipse.emf.cdo.internal.ui.CDOEditorInputImpl; import org.eclipse.emf.cdo.internal.ui.InteractiveConflictHandlerSelector; import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.eclipse.emf.cdo.ui.CDOEditorOpener; import org.eclipse.emf.cdo.ui.CDOEditorUtil; import org.eclipse.emf.cdo.util.CDOURIUtil; +import org.eclipse.emf.cdo.util.CDOUtil; import org.eclipse.emf.cdo.view.CDOView; import org.eclipse.emf.internal.cdo.transaction.CDOHandlingConflictResolver; @@ -65,7 +69,17 @@ public class CDOModelEditorOpener extends CDOEditorOpener.Default configureTransaction((CDOTransaction)view); } - final IEditorPart editor = openEditor(page, view, CDOURIUtil.extractResourcePath(uri)); + CDOID objectID = null; + if (uri.hasFragment()) + { + CDOObject cdoObject = CDOUtil.getCDOObject(view.getResourceSet().getEObject(uri, true)); + if (cdoObject != null) + { + objectID = cdoObject.cdoID(); + } + } + + final IEditorPart editor = openEditor(page, view, CDOURIUtil.extractResourcePath(uri), objectID); page.addPartListener(new IPartListener() { public void partClosed(IWorkbenchPart part) @@ -116,7 +130,7 @@ public class CDOModelEditorOpener extends CDOEditorOpener.Default addConflictResolver(transaction); } - private IEditorPart openEditor(IWorkbenchPage page, CDOView view, String resourcePath) + private IEditorPart openEditor(IWorkbenchPage page, CDOView view, String resourcePath, CDOID objectID) { try { @@ -134,6 +148,7 @@ public class CDOModelEditorOpener extends CDOEditorOpener.Default } IEditorInput input = CDOEditorUtil.createCDOEditorInput(view, resourcePath, false); + ((CDOEditorInputImpl)input).setObjectID(objectID); return page.openEditor(input, editorID); } catch (Exception ex) diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/OpenWithActionProvider.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/OpenWithActionProvider.java index cc4930624c..f3ddf65c15 100644 --- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/OpenWithActionProvider.java +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/OpenWithActionProvider.java @@ -12,6 +12,7 @@ package org.eclipse.emf.cdo.explorer.ui.checkouts.actions; import org.eclipse.emf.cdo.CDOObject; import org.eclipse.emf.cdo.common.id.CDOID; +import org.eclipse.emf.cdo.common.id.CDOIDUtil; import org.eclipse.emf.cdo.eresource.CDOResource; import org.eclipse.emf.cdo.eresource.CDOResourceFolder; import org.eclipse.emf.cdo.eresource.CDOResourceLeaf; @@ -299,16 +300,25 @@ public class OpenWithActionProvider extends CommonActionProvider } CDOObject cdoObject = CDOUtil.getCDOObject(object); + CDOResourceLeaf resourceLeaf = getResourceLeaf(cdoObject); if (resourceLeaf instanceof CDOResource) { - CDOResource resource = (CDOResource)resourceLeaf; - URI uri = resource.getURI(); - CDOCheckout checkout = CDOExplorerUtil.getCheckout(cdoObject); if (checkout != null) { - CDOEditorOpener[] editorOpeners = CDOEditorOpener.Registry.INSTANCE.getEditorOpeners(uri); + URI uri = resourceLeaf.getURI(); + + if (!(object instanceof CDOResourceNode)) + { + StringBuilder builder = new StringBuilder(); + CDOIDUtil.write(builder, cdoObject.cdoID()); + + String fragment = builder.toString(); + uri = uri.appendFragment(fragment); + } + + CDOEditorOpener[] editorOpeners = CDOEditorOpener.Registry.INSTANCE.getEditorOpeners(uri.trimFragment()); String defaultEditorOpenerID = editorOpeners.length != 0 ? editorOpeners[0].getID() : null; CDOID objectID = cdoObject.cdoID(); @@ -334,6 +344,11 @@ public class OpenWithActionProvider extends CommonActionProvider checkout.setEditorOpenerID(objectID, editorOpenerID); } + if (cdoObject instanceof CDOResourceNode) + { + uri = uri.trimFragment(); + } + editorOpener.openEditor(page, uri); } } diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOEditorInputImpl.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOEditorInputImpl.java index be06ecb1b1..45ab924385 100644 --- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOEditorInputImpl.java +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOEditorInputImpl.java @@ -11,10 +11,11 @@ */ package org.eclipse.emf.cdo.internal.ui; +import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.emf.cdo.common.util.CDOCommonUtil; import org.eclipse.emf.cdo.internal.ui.messages.Messages; import org.eclipse.emf.cdo.session.CDOSession; -import org.eclipse.emf.cdo.ui.CDOEditorInput; +import org.eclipse.emf.cdo.ui.CDOEditorInput2; import org.eclipse.emf.cdo.ui.CDOItemProvider; import org.eclipse.emf.cdo.view.CDOView; @@ -29,7 +30,7 @@ import org.eclipse.ui.IPersistableElement; * @author Eike Stepper * @since 2.0 */ -public class CDOEditorInputImpl extends PlatformObject implements CDOEditorInput +public class CDOEditorInputImpl extends PlatformObject implements CDOEditorInput2 { private CDOView view; @@ -37,6 +38,8 @@ public class CDOEditorInputImpl extends PlatformObject implements CDOEditorInput private String resourcePath; + private CDOID objectID; + public CDOEditorInputImpl(CDOView view, String resourcePath) { this(view, resourcePath, false); @@ -64,6 +67,16 @@ public class CDOEditorInputImpl extends PlatformObject implements CDOEditorInput return resourcePath; } + public CDOID getObjectID() + { + return objectID; + } + + public void setObjectID(CDOID objectID) + { + this.objectID = objectID; + } + public boolean exists() { return true; diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/editor/CDOEditor.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/editor/CDOEditor.java index e76379556e..84a2e973d1 100644 --- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/editor/CDOEditor.java +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/editor/CDOEditor.java @@ -14,6 +14,7 @@ package org.eclipse.emf.cdo.internal.ui.editor; import org.eclipse.emf.cdo.CDOObject; import org.eclipse.emf.cdo.CDOState; +import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.emf.cdo.common.model.CDOPackageInfo; import org.eclipse.emf.cdo.common.model.CDOPackageRegistry; import org.eclipse.emf.cdo.common.model.CDOPackageUnit; @@ -27,6 +28,7 @@ import org.eclipse.emf.cdo.internal.ui.dialogs.SelectClassDialog; import org.eclipse.emf.cdo.internal.ui.messages.Messages; import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.eclipse.emf.cdo.ui.CDOEditorInput; +import org.eclipse.emf.cdo.ui.CDOEditorInput2; import org.eclipse.emf.cdo.ui.CDOEventHandler; import org.eclipse.emf.cdo.ui.CDOInvalidRootAgent; import org.eclipse.emf.cdo.ui.CDOLabelProvider; @@ -1071,8 +1073,22 @@ public class CDOEditor extends MultiPageEditorPart } else { - URI resourceURI = CDOURIUtil.createResourceURI(view, resourcePath); - viewerInput = resourceSet.getResource(resourceURI, true); + InternalCDOObject inputObject = null; + if (editorInput instanceof CDOEditorInput2) + { + CDOID objectID = ((CDOEditorInput2)editorInput).getObjectID(); + inputObject = (InternalCDOObject)view.getObject(objectID); + } + + if (inputObject != null) + { + viewerInput = inputObject.cdoInternalInstance(); + } + else + { + URI resourceURI = CDOURIUtil.createResourceURI(view, resourcePath); + viewerInput = resourceSet.getResource(resourceURI, true); + } if (!view.isReadOnly()) { diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOEditorInput.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOEditorInput.java index 1287448356..d33cb0e550 100644 --- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOEditorInput.java +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOEditorInput.java @@ -16,7 +16,7 @@ import org.eclipse.emf.cdo.view.CDOView; import org.eclipse.ui.IEditorInput; /** - * An specialized {@link org.eclipse.ui.IEditorInput IEditorInput} for the CDO editor. A <code>CDOEditorInput</code> is + * A specialized {@link org.eclipse.ui.IEditorInput IEditorInput} for the CDO editor. A <code>CDOEditorInput</code> is * associated with a {@link org.eclipse.emf.cdo.eresource.CDOResource CDOResource}, accessed through a * {@link org.eclipse.emf.cdo.view.CDOView CDOView} instance. * <p> diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOEditorInput2.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOEditorInput2.java new file mode 100644 index 0000000000..2b2b216cda --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOEditorInput2.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2009, 2011, 2012, 2015 Eike Stepper (Berlin, Germany) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Victor Roldan Betancort - initial API and implementation + * Eike Stepper - maintenance + */ +package org.eclipse.emf.cdo.ui; + +import org.eclipse.emf.cdo.common.id.CDOID; + +/** + * An extension to {@link CDOEditorInput} that provides input object information. + * + * @author Eike Stepper + * @since 4.5 + * @see org.eclipse.ui.IEditorInput + * @see org.eclipse.emf.cdo.ui.CDOEditorUtil + */ +public interface CDOEditorInput2 extends CDOEditorInput +{ + public CDOID getObjectID(); + + public void setObjectID(CDOID objectID); +} |