blob: 885022c68c00b481fb81ff01d10c499095dcfd5a (
plain) (
tree)
|
|
/***************************************************************************
* Copyright (c) 2004 - 2008 Eike Stepper, Germany.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eike Stepper - initial API and implementation
**************************************************************************/
package org.eclipse.emf.spi.cdo;
import org.eclipse.emf.cdo.CDOConflictResolver;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.CDOTransaction;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.revision.delta.CDOFeatureDelta;
import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta;
import org.eclipse.emf.internal.cdo.CDOStateMachine;
import org.eclipse.emf.internal.cdo.InternalCDOObject;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* @author Eike Stepper
* @since 2.0
*/
public abstract class ObjectConflictResolver implements CDOConflictResolver
{
public ObjectConflictResolver()
{
}
public void resolveConflicts(CDOTransaction transaction, Set<CDOObject> conflicts)
{
Map<CDOID, CDORevisionDelta> revisionDeltas = transaction.getRevisionDeltas();
for (Iterator<CDOObject> it = conflicts.iterator(); it.hasNext();)
{
CDOObject conflict = it.next();
CDORevisionDelta revisionDelta = revisionDeltas.get(conflict.cdoID());
if (resolveConflict(transaction, conflict, revisionDelta))
{
it.remove();
}
}
}
/**
* Resolves the conflict of a single object in the current transaction and returns <code>true</code> if successful,
* <code>false</code> otherwise.
*/
protected abstract boolean resolveConflict(CDOTransaction transaction, CDOObject conflict,
CDORevisionDelta revisionDelta);
public static void rollbackObject(CDOObject object)
{
CDOStateMachine.INSTANCE.rollback((InternalCDOObject)object);
}
public static void changeObject(CDOObject object, CDORevisionDelta revisionDelta)
{
for (CDOFeatureDelta featureDelta : revisionDelta.getFeatureDeltas())
{
changeObject(object, featureDelta);
}
}
public static void changeObject(CDOObject object, CDOFeatureDelta featureDelta)
{
CDOStateMachine.INSTANCE.write((InternalCDOObject)object, featureDelta);
}
}
|