/**
*
*/
package cz.cuni.mff.peckam.java.origamist.utils;
/**
* An observable property change event that is propagated some levels up, so it takes account of the original bean which
* caused the propagation.
*
* @author Martin Pecka
*/
public class PropagatedObservablePropertyEvent<T> extends ObservablePropertyEvent<T>
{
/** The bean that fired originally caused this event's propagation. */
protected Object deepSource;
/**
* Constructs a new {@link PropagatedObservablePropertyEvent} from the given event.
*
* If the event isn't a {@link PropagatedObservablePropertyEvent}, treat it's source also as deepSource, otherwise
* copy
* the deepSource and set source to the given source.
*
* @param source The bean that fired the event.
* @param propagatedEvent The event to take values from.
*/
public PropagatedObservablePropertyEvent(Object source, ObservablePropertyEvent<? extends T> propagatedEvent)
{
this(source, null, propagatedEvent);
}
/**
* Constructs a new {@link PropagatedObservablePropertyEvent} from the given event.
*
* If the event isn't a {@link PropagatedObservablePropertyEvent}, treat it's source also as deepSource, otherwise
* copy
* the deepSource and set source to the given source.
*
* @param source The bean that fired the event.
* @param propertyPrefix The prefix to add before the property name (can denote propagation hierarchy).
* @param propagatedEvent The event to take values from.
*/
public PropagatedObservablePropertyEvent(Object source, String propertyPrefix,
ObservablePropertyEvent<? extends T> propagatedEvent)
{
super(source, (propertyPrefix == null ? "" : (propertyPrefix + "@")) + propagatedEvent.getPropertyName(),
propagatedEvent.getEvent());
if (propagatedEvent instanceof PropagatedObservablePropertyEvent)
this.deepSource = ((PropagatedObservablePropertyEvent<? extends T>) propagatedEvent).deepSource;
else
this.deepSource = source;
}
/**
* @return The bean that fired originally caused this event's propagation.
*/
public Object getDeepSource()
{
return deepSource;
}
}