Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2016-04-12 12:35:13 +0000
committerEike Stepper2016-04-12 12:35:13 +0000
commitbb06d61bf76e5be079ef500a33ce9c74ff998a7d (patch)
tree34e31b44e9357409568d67c0e9d02e000c4c17a1 /plugins/org.eclipse.emf.cdo.explorer.ui/src
parent2d09c40ae81937ce7c6292852a6c3626a9a93c8a (diff)
downloadcdo-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')
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOModelEditorOpener.java19
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/OpenWithActionProvider.java23
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);
}
}

Back to the top