/* * Copyright (c) 2009-2012 Eike Stepper (Berlin, Germany) and others. * 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: * Simon McDuff - initial API and implementation * Eike Stepper - maintenance * Simon McDuff - bug 213402 */ package org.eclipse.emf.cdo.spi.common.revision; import org.eclipse.emf.cdo.common.revision.delta.CDOAddFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDOClearFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDOContainerFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDOMoveFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDORemoveFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDORevisionDelta; import org.eclipse.emf.cdo.common.revision.delta.CDOSetFeatureDelta; import org.eclipse.emf.cdo.common.revision.delta.CDOUnsetFeatureDelta; /** * If the meaning of this type isn't clear, there really should be more of a description here... * * @author Simon McDuff * @since 2.0 */ public class CDORevisionMerger extends CDOFeatureDeltaVisitorImpl { private InternalCDORevision revision; public CDORevisionMerger() { } public synchronized void merge(InternalCDORevision revision, CDORevisionDelta delta) { this.revision = revision; delta.accept(this); revision = null; } @Override public void visit(CDOMoveFeatureDelta delta) { revision.move(delta.getFeature(), delta.getNewPosition(), delta.getOldPosition()); } @Override public void visit(CDOAddFeatureDelta delta) { revision.add(delta.getFeature(), delta.getIndex(), delta.getValue()); } @Override public void visit(CDORemoveFeatureDelta delta) { revision.remove(delta.getFeature(), delta.getIndex()); } @Override public void visit(CDOSetFeatureDelta delta) { revision.set(delta.getFeature(), delta.getIndex(), delta.getValue()); } @Override public void visit(CDOUnsetFeatureDelta delta) { revision.unset(delta.getFeature()); } @Override public void visit(CDOClearFeatureDelta delta) { revision.clear(delta.getFeature()); } @Override public void visit(CDOContainerFeatureDelta delta) { revision.setResourceID(delta.getResourceID()); revision.setContainerID(delta.getContainerID()); revision.setContainingFeatureID(delta.getContainerFeatureID()); } }