/*
* Copyright (c) 2006, 2007 Borland Software Corporation
*
* 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:
* Michael Golubev (Borland) - initial API and implementation
*/
package org.eclipse.gmf.internal.common.reconcile;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
public abstract class Decision {
private final EStructuralFeature myFeature;
public abstract void apply(EObject current, EObject old);
public Decision(EStructuralFeature feature){
myFeature = feature;
}
protected final EStructuralFeature getFeature(){
return myFeature;
}
public static class ALWAYS_OLD extends Decision {
public ALWAYS_OLD(EStructuralFeature feature){
super(feature);
}
public void apply(EObject current, EObject old) {
preserveOld(current, old);
}
}
public static class ALWAYS_NEW extends Decision {
public ALWAYS_NEW(EStructuralFeature feature){
super(feature);
}
public void apply(EObject current, EObject old) {
acceptNew(current, old);
}
}
protected void acceptNew(EObject current, EObject old) {
// do nothing
}
protected void preserveOld(EObject current, EObject old) {
Object oldValue = old.eGet(getFeature(), true);
current.eSet(getFeature(), oldValue);
}
protected final boolean isValueSet(EObject obj) {
return obj.eIsSet(getFeature());
}
}