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 /plugins/org.eclipse.emf.cdo.explorer.ui/src | |
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
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.explorer.ui/src')
2 files changed, 36 insertions, 6 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); } } |