diff options
author | Eike Stepper | 2015-09-13 13:01:04 +0000 |
---|---|---|
committer | Eike Stepper | 2015-09-13 13:01:04 +0000 |
commit | 65d335a670ad3ccc0777482f7cf4134c890d05c1 (patch) | |
tree | c3dd2b12f7370ebbdaff561c7b429aa2bc2ad7a7 | |
parent | 73969d5eb69779c1ca2a13fa36a9e9d2fa0b9630 (diff) | |
download | cdo-65d335a670ad3ccc0777482f7cf4134c890d05c1.tar.gz cdo-65d335a670ad3ccc0777482f7cf4134c890d05c1.tar.xz cdo-65d335a670ad3ccc0777482f7cf4134c890d05c1.zip |
[467442] Add Interactive Transaction Conflict Resolution
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=467442
4 files changed, 40 insertions, 22 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 4fdbf9ef48..3e926bb4e4 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 @@ -20,6 +20,8 @@ import org.eclipse.emf.cdo.ui.CDOEditorUtil; import org.eclipse.emf.cdo.util.CDOURIUtil; import org.eclipse.emf.cdo.view.CDOView; +import org.eclipse.emf.internal.cdo.transaction.CDOHandlingConflictResolver; + import org.eclipse.emf.common.util.URI; import org.eclipse.emf.spi.cdo.CDOMergingConflictResolver; @@ -35,8 +37,8 @@ import org.eclipse.ui.IWorkbenchPart; */ public class CDOModelEditorOpener extends CDOEditorOpener.Default { - private static final boolean INTERACTIVE_CONFLICT_RESOLUTION = "true" - .equalsIgnoreCase(System.getProperty("INTERACTIVE_CONFLICT_RESOLUTION")); + private static final boolean INTERACTIVE_CONFLICT_RESOLUTION = !"false" + .equalsIgnoreCase(System.getProperty("cdo.interactive.conflict.resolution")); public CDOModelEditorOpener() { @@ -99,20 +101,9 @@ public class CDOModelEditorOpener extends CDOEditorOpener.Default return editor; } - @SuppressWarnings("restriction") protected void configureTransaction(CDOTransaction transaction) { - if (INTERACTIVE_CONFLICT_RESOLUTION) - { - org.eclipse.emf.internal.cdo.transaction.CDOHandlingConflictResolver conflictResolver = new org.eclipse.emf.internal.cdo.transaction.CDOHandlingConflictResolver(); - conflictResolver.setConflictHandlerSelector(new InteractiveConflictHandlerSelector()); - - transaction.options().addConflictResolver(conflictResolver); - } - else - { - transaction.options().addConflictResolver(new CDOMergingConflictResolver()); - } + addConflictResolver(transaction); } private IEditorPart openEditor(IWorkbenchPage page, CDOView view, String resourcePath) @@ -142,4 +133,19 @@ public class CDOModelEditorOpener extends CDOEditorOpener.Default return null; } + + public static void addConflictResolver(CDOTransaction transaction) + { + if (INTERACTIVE_CONFLICT_RESOLUTION) + { + CDOHandlingConflictResolver conflictResolver = new CDOHandlingConflictResolver(); + conflictResolver.setConflictHandlerSelector(new InteractiveConflictHandlerSelector()); + + transaction.options().addConflictResolver(conflictResolver); + } + else + { + transaction.options().addConflictResolver(new CDOMergingConflictResolver()); + } + } } diff --git a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java index 1084588168..983539db39 100644 --- a/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java +++ b/plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java @@ -53,6 +53,7 @@ import org.eclipse.emf.compare.Match; import org.eclipse.emf.compare.domain.ICompareEditingDomain; import org.eclipse.emf.compare.domain.impl.EMFCompareEditingDomain; import org.eclipse.emf.compare.scope.IComparisonScope; +import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; @@ -814,11 +815,18 @@ public class CDOCompareEditorUtil Match match = comparison.getMatch(rightObject); if (match != null) { - CDOObject leftObject = CDOUtil.getCDOObject(match.getLeft()); - CDOID id = leftObject.cdoID(); - - idMappings.put(rightObject.cdoID(), id); - org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl.resurrectObject(rightObject, id); + EObject left = match.getLeft(); + if (left != null) + { + CDOObject leftObject = CDOUtil.getCDOObject(left); + if (leftObject != null) + { + CDOID id = leftObject.cdoID(); + idMappings.put(rightObject.cdoID(), id); + + org.eclipse.emf.internal.cdo.transaction.CDOTransactionImpl.resurrectObject(rightObject, id); + } + } } } diff --git a/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF index f777ba29c3..f2978ba366 100644 --- a/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF @@ -71,7 +71,8 @@ Export-Package: org.eclipse.emf.cdo;version="4.5.0", org.eclipse.emf.cdo.server, org.eclipse.emf.cdo.tests, org.eclipse.emf.cdo.defs, - org.eclipse.emf.cdo.ui", + org.eclipse.emf.cdo.ui, + org.eclipse.emf.cdo.explorer.ui", org.eclipse.emf.internal.cdo.util;version="4.5.0"; x-friends:="org.eclipse.emf.cdo.net4j, org.eclipse.emf.cdo.server, diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java index 2654d2984d..bde1aa96ee 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java @@ -412,7 +412,7 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa public boolean hasConflict() { checkActive(); - return conflict != 0; + return conflict > 0; } public void setConflict(InternalCDOObject object) @@ -431,7 +431,10 @@ public class CDOTransactionImpl extends CDOViewImpl implements InternalCDOTransa { synchronized (this) { - --conflict; + if (conflict > 0) + { + --conflict; + } } } |