diff options
author | Eike Stepper | 2015-09-13 06:44:59 +0000 |
---|---|---|
committer | Eike Stepper | 2015-09-13 07:04:51 +0000 |
commit | 2ac6b92d0de0947e411671221a47ce47d15ed31f (patch) | |
tree | 9f9858f76b0159775fcb5621b40995f963cc9b08 | |
parent | 7f83472bc6affc3104fc20ec7a305b4369ddfa0d (diff) | |
download | cdo-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
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; + } } } |