Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2015-09-13 13:01:04 +0000
committerEike Stepper2015-09-13 13:01:04 +0000
commit65d335a670ad3ccc0777482f7cf4134c890d05c1 (patch)
treec3dd2b12f7370ebbdaff561c7b429aa2bc2ad7a7
parent73969d5eb69779c1ca2a13fa36a9e9d2fa0b9630 (diff)
downloadcdo-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
-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 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;
+ }
}
}

Back to the top