Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2015-09-13 13:01:04 +0000
committerEike Stepper2015-09-14 06:25:53 +0000
commitf2ed2cca7fed0c0d100d5be566ea4661acb4b1f6 (patch)
tree0358576ff0f21d7ab71827fe6728e2271e08fd13
parent2ac6b92d0de0947e411671221a47ce47d15ed31f (diff)
downloadcdo-f2ed2cca7fed0c0d100d5be566ea4661acb4b1f6.tar.gz
cdo-f2ed2cca7fed0c0d100d5be566ea4661acb4b1f6.tar.xz
cdo-f2ed2cca7fed0c0d100d5be566ea4661acb4b1f6.zip
[467442] Add Interactive Transaction Conflict Resolution
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=467442
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/CDOModelEditorOpener.java34
-rw-r--r--plugins/org.eclipse.emf.cdo.ui.compare/src/org/eclipse/emf/cdo/ui/compare/CDOCompareEditorUtil.java18
-rw-r--r--plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF3
-rw-r--r--plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/transaction/CDOTransactionImpl.java7
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 22bb249987..655777fed4 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
@@ -50,6 +50,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;
@@ -693,11 +694,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 b50a2711a9..5a6e333441 100644
--- a/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.cdo/META-INF/MANIFEST.MF
@@ -73,7 +73,8 @@ Export-Package: org.eclipse.emf.cdo;version="4.4.1",
org.eclipse.emf.cdo.defs,
org.eclipse.emf.cdo.ui,
org.eclipse.emf.cdo.workspace,
- org.eclipse.emf.cdo.ui.compare",
+ org.eclipse.emf.cdo.ui.compare,
+ org.eclipse.emf.cdo.explorer.ui",
org.eclipse.emf.internal.cdo.util;version="4.4.1";
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;
+ }
}
}

Back to the top