package org.jboss.seam.framework;
import java.io.Serializable;
import org.jboss.seam.core.Mutable;
/**
* Base class for controllers which implement the
* Mutable interface.
*
* @author Gavin King
*
*/
public abstract class MutableController<T>
extends PersistenceController<T>
implements Serializable, Mutable
{
//copy/paste from AbstractMutable
private transient boolean dirty;
public boolean clearDirty()
{
boolean result = dirty;
dirty = false;
return result;
}
/**
* Set the dirty flag if the value has changed.
* Call whenever a subclass attribute is updated.
*
* @param oldValue the old value of an attribute
* @param newValue the new value of an attribute
* @return true if the newValue is not equal to the oldValue
*/
protected <U> boolean setDirty(U oldValue, U newValue)
{
boolean attributeDirty = oldValue!=newValue && (
oldValue==null ||
!oldValue.equals(newValue)
);
dirty = dirty || attributeDirty;
return attributeDirty;
}
/**
* Set the dirty flag.
*/
protected void setDirty()
{
dirty = true;
}
}