[547640] Support server-side commit conflict resolution

https://bugs.eclipse.org/bugs/show_bug.cgi?id=547640
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 19b7daf..e8f26bc 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
@@ -4655,12 +4655,11 @@
           ((InternalCDOPackageUnit)newPackageUnit).setState(CDOPackageUnit.State.LOADED);
         }
 
+        CDOLockChangeInfo lockChangeInfo = makeUnlockChangeInfo(result);
+        CDOCommitInfo commitInfo = null;
+
         CommitData newCommitData = result.getNewCommitData();
-        if (newCommitData != null)
-        {
-          applyNewCommitData(newCommitData, timeStamp);
-        }
-        else
+        if (newCommitData == null)
         {
           Map<CDOID, CDOObject> newObjects = getNewObjects();
           postCommit(newObjects, result);
@@ -4678,9 +4677,7 @@
             removeObject(id);
           }
 
-          CDOLockChangeInfo lockChangeInfo = makeUnlockChangeInfo(result);
-
-          CDOCommitInfo commitInfo = makeCommitInfo(timeStamp, previousTimeStamp);
+          commitInfo = makeCommitInfo(timeStamp, previousTimeStamp);
           if (!commitInfo.isEmpty())
           {
             InvalidationData invalidationData = new InvalidationData();
@@ -4715,43 +4712,50 @@
               session.setCommittedSinceLastRefresh(id, commitBranchPoint);
             }
           }
+        }
+        else
+        {
+          applyNewCommitData(newCommitData, timeStamp);
+        }
 
-          CDOTransactionHandler2[] handlers = getTransactionHandlers2();
-          for (int i = 0; i < handlers.length; i++)
+        CDOTransactionHandler2[] handlers = getTransactionHandlers2();
+        for (int i = 0; i < handlers.length; i++)
+        {
+          CDOTransactionHandler2 handler = handlers[i];
+          if (handler instanceof CDOTransactionHandler3)
           {
-            CDOTransactionHandler2 handler = handlers[i];
-            if (handler instanceof CDOTransactionHandler3)
-            {
-              CDOTransactionHandler3 handler3 = (CDOTransactionHandler3)handler;
-              handler3.committedTransaction(transaction, this, commitInfo);
-            }
-            else
-            {
-              handler.committedTransaction(transaction, this);
-            }
+            CDOTransactionHandler3 handler3 = (CDOTransactionHandler3)handler;
+            handler3.committedTransaction(transaction, this, commitInfo);
           }
+          else
+          {
+            handler.committedTransaction(transaction, this);
+          }
+        }
 
-          getChangeSubscriptionManager().committedTransaction(transaction, this);
-          getAdapterManager().committedTransaction(transaction, this);
+        getChangeSubscriptionManager().committedTransaction(transaction, this);
+        getAdapterManager().committedTransaction(transaction, this);
 
+        if (newCommitData == null)
+        {
           cleanUp(this);
+        }
 
-          IListener[] listeners = getListeners();
-          if (listeners != null)
+        IListener[] listeners = getListeners();
+        if (listeners != null)
+        {
+          if (branchChanged)
           {
-            if (branchChanged)
-            {
-              fireViewTargetChangedEvent(oldBranch.getHead(), listeners);
-            }
-
-            Map<CDOID, CDOID> idMappings = result.getIDMappings();
-            fireEvent(new FinishedEvent(idMappings), listeners);
+            fireViewTargetChangedEvent(oldBranch.getHead(), listeners);
           }
 
-          if (lockChangeInfo != null && isActive())
-          {
-            fireLocksChangedEvent(CDOTransactionImpl.this, lockChangeInfo);
-          }
+          Map<CDOID, CDOID> idMappings = result.getIDMappings();
+          fireEvent(new FinishedEvent(idMappings), listeners);
+        }
+
+        if (lockChangeInfo != null && isActive())
+        {
+          fireLocksChangedEvent(CDOTransactionImpl.this, lockChangeInfo);
         }
       }
       catch (RuntimeException ex)