Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2016-04-12 12:35:13 +0000
committerEike Stepper2016-04-12 12:35:13 +0000
commitbb06d61bf76e5be079ef500a33ce9c74ff998a7d (patch)
tree34e31b44e9357409568d67c0e9d02e000c4c17a1
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
-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
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/CDOEditorInputImpl.java17
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/editor/CDOEditor.java20
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOEditorInput.java2
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOEditorInput2.java29
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);
+}

Back to the top