FigureChangeEventMulticaster.java
/*
* @(#)FigureChangeEventMulticaster.java
*
* Project: JHotdraw - a GUI framework for technical drawings
* http://www.jhotdraw.org
* http://jhotdraw.sourceforge.net
* Copyright: © by the original author(s) and all contributors
* License: Lesser GNU Public License (LGPL)
* http://www.opensource.org/licenses/lgpl-license.html
*/
package CH.ifa.draw.standard;
import CH.ifa.draw.util.*;
import CH.ifa.draw.framework.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
/**
* Manages a list of FigureChangeListeners to be notified of
* specific FigureChangeEvents.
*
* @version <$CURRENT_VERSION$>
*/
public class FigureChangeEventMulticaster extends
AWTEventMulticaster implements FigureChangeListener {
public FigureChangeEventMulticaster(EventListener a, EventListener b) {
super(a, b);
}
public void figureInvalidated(FigureChangeEvent e) {
((FigureChangeListener)a).figureInvalidated(e);
((FigureChangeListener)b).figureInvalidated(e);
}
public void figureRequestRemove(FigureChangeEvent e) {
((FigureChangeListener)a).figureRequestRemove(e);
((FigureChangeListener)b).figureRequestRemove(e);
}
public void figureRequestUpdate(FigureChangeEvent e) {
((FigureChangeListener)a).figureRequestUpdate(e);
((FigureChangeListener)b).figureRequestUpdate(e);
}
public void figureChanged(FigureChangeEvent e) {
((FigureChangeListener)a).figureChanged(e);
((FigureChangeListener)b).figureChanged(e);
}
public void figureRemoved(FigureChangeEvent e) {
((FigureChangeListener)a).figureRemoved(e);
((FigureChangeListener)b).figureRemoved(e);
}
public static FigureChangeListener add(FigureChangeListener a, FigureChangeListener b) {
return (FigureChangeListener)addInternal(a, b);
}
public static FigureChangeListener remove(FigureChangeListener l, FigureChangeListener oldl) {
return (FigureChangeListener) removeInternal(l, oldl);
}
protected EventListener remove(EventListener oldl)
{
if (oldl == a) {
return b;
}
if (oldl == b) {
return a;
}
EventListener a2 = removeInternal((FigureChangeListener)a, oldl);
EventListener b2 = removeInternal((FigureChangeListener)b, oldl);
if (a2 == a && b2 == b) {
return this;
}
else {
return addInternal((FigureChangeListener)a2, (FigureChangeListener)b2);
}
}
protected static EventListener addInternal(FigureChangeListener a, FigureChangeListener b) {
if (a == null) {
return b;
}
if (b == null) {
return a;
}
return new FigureChangeEventMulticaster(a, b);
}
protected static EventListener removeInternal(EventListener l, EventListener oldl) {
if (l == oldl || l == null) {
return null;
}
else if (l instanceof FigureChangeEventMulticaster) {
return ((FigureChangeEventMulticaster)l).remove(oldl);
}
else {
return l; // it's not here
}
}
}