/*
* BioJava development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. If you do not have a copy,
* see:
*
* http://www.gnu.org/copyleft/lesser.html
*
* Copyright for this code is held jointly by the individual
* authors. These should be listed in @author doc comments.
*
* For more information on the BioJava project and its aims,
* or to join the biojava-l mailing list, visit the home page
* at:
*
* http://www.biojava.org
*/
package org.biojava.utils;
import java.util.EventObject;
/**
* Event which encapsulates a change in any mutable BioJava object.
*
* @author Thomas Down
* @author Matthew Pocock
* @author Greg Cox
* @since 1.1
*/
public class ChangeEvent extends EventObject {
private final ChangeType type;
private final Object change;
private final Object previous;
private final ChangeEvent chain;
/**
* Construct a ChangeEvent with no change details.
*
* @param source The object being changed.
* @param type The type of change being made.
*/
public ChangeEvent(Object source, ChangeType type) {
this(source, type, null, null, null);
}
/**
*
* Construct a ChangeEvent specifying a new value for
* a property, or an object to be added to a collection.
*
* @param source The object being changed.
* @param type The type of change being made.
* @param change The new value of the property being changed.
*/
public ChangeEvent(
Object source,
ChangeType type,
Object change
) {
this(source, type, change, null, null);
}
/**
*
* Construct a ChangeEvent specifying a new value for
* a property, and giving the previous value.
*
* @param source The object being changed.
* @param type The type of change being made.
* @param change The new value of the property being changed.
* @param previous The old value of the property being changed.
*/
public ChangeEvent(
Object source,
ChangeType type,
Object change,
Object previous
) {
this(source, type, change, previous, null);
}
/**
*
* Construct a ChangeEvent to be fired because another ChangeEvent has
* been received from a property object.
*
* @param source The object being changed.
* @param type The type of change being made.
* @param change The new value of the property being changed.
* @param previous The old value of the property being changed.
* @param chain The event which caused this event to be fired.
*/
public ChangeEvent(
Object source,
ChangeType type,
Object change,
Object previous,
ChangeEvent chain
) {
super(source);
this.type = type;
this.change = change;
this.previous = previous;
this.chain = chain;
}
/**
* Find the type of this event.
*
* @return The Type value
*/
public ChangeType getType() {
return type;
}
/**
*
* Return an object which is to be the new value of some property,
* or is to be added to a collection. May return null
* is this is not meaningful.
*
* @return The Change value
*/
public Object getChange() {
return change;
}
/**
*
* Return the old value of a property being changed. May return
* null
is this is not meaningful.
*
* @return The Previous value
*/
public Object getPrevious() {
return previous;
}
/**
*
* Return the event which caused this to be fired, or null
* if this change was not caused by another event.
*
* @return The ChainedEvent value
*/
public ChangeEvent getChainedEvent() {
return chain;
}
public String toString() {
return
super.toString() +
"[" +
"type:" + getType() +
", change: " + getChange() +
", previous: " + getPrevious() +
", chainedEvent: " + getChainedEvent() +
"]";
}
}