Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2015-09-13 06:44:59 +0000
committerEike Stepper2015-09-13 07:04:51 +0000
commit2ac6b92d0de0947e411671221a47ce47d15ed31f (patch)
tree9f9858f76b0159775fcb5621b40995f963cc9b08
parent7f83472bc6affc3104fc20ec7a305b4369ddfa0d (diff)
downloadcdo-2ac6b92d0de0947e411671221a47ce47d15ed31f.tar.gz
cdo-2ac6b92d0de0947e411671221a47ce47d15ed31f.tar.xz
cdo-2ac6b92d0de0947e411671221a47ce47d15ed31f.zip
[477130] Support interactive merging in CDOWorkspace.update()
https://bugs.eclipse.org/bugs/show_bug.cgi?id=477130
-rw-r--r--features/org.eclipse.emf.cdo.explorer-feature/build.properties2
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/MergeFromActionProvider.java8
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/handlers/WorkspaceUpdateHandler.java19
-rw-r--r--plugins/org.eclipse.emf.cdo.ui.compare/.settings/.api_filters11
-rw-r--r--plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/CompareCDOMerger.java89
5 files changed, 92 insertions, 37 deletions
diff --git a/features/org.eclipse.emf.cdo.explorer-feature/build.properties b/features/org.eclipse.emf.cdo.explorer-feature/build.properties
index 56da0aa06d..eae4f9f3fa 100644
--- a/features/org.eclipse.emf.cdo.explorer-feature/build.properties
+++ b/features/org.eclipse.emf.cdo.explorer-feature/build.properties
@@ -22,5 +22,3 @@ src.includes = about.html,\
buckminster.cspex,\
rootfiles/,\
license.html
-
-root = rootfiles
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/MergeFromActionProvider.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/MergeFromActionProvider.java
index e0daca4b34..4ce22ee40a 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/MergeFromActionProvider.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/actions/MergeFromActionProvider.java
@@ -14,7 +14,9 @@ import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
import org.eclipse.emf.cdo.explorer.repositories.CDORepository;
import org.eclipse.emf.cdo.internal.ui.Support;
+import org.eclipse.emf.cdo.transaction.CDOTransactionOpener;
import org.eclipse.emf.cdo.ui.compare.CDOCompareEditorUtil;
+import org.eclipse.emf.cdo.ui.internal.compare.CompareCDOMerger;
/**
* @author Eike Stepper
@@ -68,10 +70,12 @@ public class MergeFromActionProvider extends AbstractBranchPointActionProvider
{
if (Support.COMPARE.isAvailable())
{
- CDORepository repository = checkout.getRepository();
+ final CDORepository repository = checkout.getRepository();
CDOBranchPoint left = branchPoint;
CDOBranchPoint right = checkout.getBranchPoint();
- CDOCompareEditorUtil.openEditor(repository, repository, left, right, null, true);
+
+ CDOTransactionOpener transactionOpener = new CompareCDOMerger.TransactionOpenerAndEditorCloser(repository, true);
+ CDOCompareEditorUtil.openEditor(repository, transactionOpener, left, right, null, true);
}
}
}
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/handlers/WorkspaceUpdateHandler.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/handlers/WorkspaceUpdateHandler.java
index 2a20bd4950..800ff195a9 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/handlers/WorkspaceUpdateHandler.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/handlers/WorkspaceUpdateHandler.java
@@ -26,7 +26,6 @@ import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.emf.cdo.workspace.CDOWorkspace;
import org.eclipse.net4j.util.registry.IRegistry;
-import org.eclipse.net4j.util.ui.UIUtil;
import org.eclipse.net4j.util.ui.handlers.AbstractBaseHandler;
import org.eclipse.emf.spi.cdo.DefaultCDOMerger;
@@ -99,27 +98,9 @@ public class WorkspaceUpdateHandler extends AbstractBaseHandler<OfflineCDOChecko
transaction.addTransactionHandler(new CDODefaultTransactionHandler2()
{
@Override
- public void rolledBackTransaction(CDOTransaction transaction)
- {
- closeTransaction(transaction);
- }
-
- @Override
public void committedTransaction(CDOTransaction transaction, CDOCommitContext commitContext)
{
checkout.refresh();
- closeTransaction(transaction);
- }
-
- private void closeTransaction(final CDOTransaction transaction)
- {
- UIUtil.getDisplay().asyncExec(new Runnable()
- {
- public void run()
- {
- transaction.close();
- }
- });
}
});
}
diff --git a/plugins/org.eclipse.emf.cdo.ui.compare/.settings/.api_filters b/plugins/org.eclipse.emf.cdo.ui.compare/.settings/.api_filters
deleted file mode 100644
index 975cf4695c..0000000000
--- a/plugins/org.eclipse.emf.cdo.ui.compare/.settings/.api_filters
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<component id="org.eclipse.emf.cdo.ui.compare" version="2">
- <resource path="src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java" type="org.eclipse.emf.cdo.ui.compare.CDOCompareEditorUtil">
- <filter id="571519004">
- <message_arguments>
- <message_argument value="org.eclipse.emf.cdo.ui.compare.CDOCompareEditorUtil"/>
- <message_argument value="CDOResourceItemProvider"/>
- </message_arguments>
- </filter>
- </resource>
-</component>
diff --git a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/CompareCDOMerger.java b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/CompareCDOMerger.java
index e314b0e92b..b0957df3a6 100644
--- a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/CompareCDOMerger.java
+++ b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/internal/compare/CompareCDOMerger.java
@@ -10,10 +10,14 @@
*/
package org.eclipse.emf.cdo.ui.internal.compare;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.commit.CDOChangeSet;
import org.eclipse.emf.cdo.common.commit.CDOChangeSetData;
import org.eclipse.emf.cdo.common.id.CDOID;
+import org.eclipse.emf.cdo.transaction.CDOCommitContext;
+import org.eclipse.emf.cdo.transaction.CDODefaultTransactionHandler2;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
+import org.eclipse.emf.cdo.transaction.CDOTransactionOpener;
import org.eclipse.emf.cdo.ui.compare.CDOCompareEditorUtil;
import org.eclipse.emf.cdo.view.CDOView;
@@ -23,6 +27,8 @@ import org.eclipse.net4j.util.lifecycle.ILifecycle;
import org.eclipse.net4j.util.lifecycle.LifecycleEventAdapter;
import org.eclipse.net4j.util.ui.UIUtil;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IWorkbenchPage;
@@ -36,6 +42,7 @@ import java.util.Set;
public class CompareCDOMerger implements CDOMerger2
{
public static final String PROP_COMPARISON_LABEL = "comparison.label";
+
public static final String PROP_COMPARISON_IMAGE = "comparison.image";
public CompareCDOMerger()
@@ -51,6 +58,42 @@ public class CompareCDOMerger implements CDOMerger2
public void merge(final CDOTransaction localTransaction, CDOView remoteView, Set<CDOID> affectedIDs)
throws ConflictException
{
+ CompareCDOMerger.closeTransactionAfterCommit(localTransaction);
+ CompareCDOMerger.closeEditorWithTransaction(localTransaction);
+ CDOCompareEditorUtil.openEditor(remoteView, localTransaction, affectedIDs, true);
+ }
+
+ public static void closeTransactionAfterCommit(final CDOTransaction transaction)
+ {
+ transaction.addTransactionHandler(new CDODefaultTransactionHandler2()
+ {
+ @Override
+ public void rolledBackTransaction(CDOTransaction transaction)
+ {
+ closeTransaction(transaction);
+ }
+
+ @Override
+ public void committedTransaction(CDOTransaction transaction, CDOCommitContext commitContext)
+ {
+ closeTransaction(transaction);
+ }
+
+ private void closeTransaction(final CDOTransaction transaction)
+ {
+ UIUtil.getDisplay().asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ transaction.close();
+ }
+ });
+ }
+ });
+ }
+
+ public static void closeEditorWithTransaction(final CDOTransaction transaction)
+ {
final IEditorPart[] result = { null };
final IWorkbenchPage page = UIUtil.getActiveWorkbenchPage();
@@ -74,7 +117,7 @@ public class CompareCDOMerger implements CDOMerger2
{
if (part == result[0])
{
- localTransaction.close();
+ transaction.close();
page.removePartListener(this);
}
}
@@ -92,7 +135,7 @@ public class CompareCDOMerger implements CDOMerger2
page.addPartListener(listener);
- localTransaction.addListener(new LifecycleEventAdapter()
+ transaction.addListener(new LifecycleEventAdapter()
{
@Override
protected void onDeactivated(ILifecycle lifecycle)
@@ -109,7 +152,47 @@ public class CompareCDOMerger implements CDOMerger2
}
}
});
+ }
- CDOCompareEditorUtil.openEditor(remoteView, localTransaction, affectedIDs, true);
+ /**
+ * @author Eike Stepper
+ */
+ public static final class TransactionOpenerAndEditorCloser implements CDOTransactionOpener
+ {
+ private final CDOTransactionOpener delegate;
+
+ private final boolean closeTransactionAfterCommit;
+
+ public TransactionOpenerAndEditorCloser(CDOTransactionOpener delegate, boolean closeTransactionAfterCommit)
+ {
+ this.delegate = delegate;
+ this.closeTransactionAfterCommit = closeTransactionAfterCommit;
+ }
+
+ public boolean isCloseTransactionAfterCommit()
+ {
+ return closeTransactionAfterCommit;
+ }
+
+ public CDOTransaction openTransaction(String durableLockingID, ResourceSet resourceSet)
+ {
+ return wrap(delegate.openTransaction(durableLockingID, resourceSet));
+ }
+
+ public CDOTransaction openTransaction(CDOBranchPoint target, ResourceSet resourceSet)
+ {
+ return wrap(delegate.openTransaction(target, resourceSet));
+ }
+
+ private CDOTransaction wrap(CDOTransaction transaction)
+ {
+ if (closeTransactionAfterCommit)
+ {
+ closeTransactionAfterCommit(transaction);
+ }
+
+ closeEditorWithTransaction(transaction);
+ return transaction;
+ }
}
}

Back to the top