import java.beans.PropertyChangeSupport;
import java.lang.reflect.Method;
+import org.apache.log4j.Logger;
+
public aspect ChangeListening {
+ private static Logger log = Logger.getLogger(ChangeListening.class);
public interface Subject {
// public void addPropertyChangeListener(PropertyChangeListener l);
}
private PropertyChangeSupport Subject.pcs;
public void Subject.addPropertyChangeListener(PropertyChangeListener l) {
- //System.out.println("PCS Added");
pcs.addPropertyChangeListener(l);
}
public void Subject.removePropertyChangeListener(PropertyChangeListener l) {
- //System.out.println("PCS Removed");
- pcs.addPropertyChangeListener(l);
+ pcs.removePropertyChangeListener(l);
}
public void Subject.firePropertyChange(PropertyChangeEvent e) {
void around(Subject s, Object newVal):
execution(void Subject+.set*(..)) && target(s) && args(newVal) {
- System.out.println(s);
String name = thisJoinPointStaticPart.getSignature().getName();
name = name.replaceFirst("set", "");
Object old = null;
old = m.invoke(s);
} catch (Throwable t) {
- System.err.print("Error getting old value for " + name);
+ log.warn("Error getting old value for " + name);
}
proceed(s, newVal);
if (old != newVal) {
- System.out.println(name + " changed from " + old + " to "
- + newVal);
s.pcs.firePropertyChange(name, old, newVal);
}
}