1 package com.billkuker.rocketry.motorsim;
3 import java.beans.PropertyChangeEvent;
4 import java.beans.PropertyChangeListener;
5 import java.beans.PropertyChangeSupport;
6 import java.lang.reflect.Method;
8 public aspect ChangeListening {
10 public interface Subject {
11 // public void addPropertyChangeListener(PropertyChangeListener l);
14 private PropertyChangeSupport Subject.pcs;
16 public void Subject.addPropertyChangeListener(PropertyChangeListener l) {
17 //System.out.println("PCS Added");
18 pcs.addPropertyChangeListener(l);
21 public void Subject.removePropertyChangeListener(PropertyChangeListener l) {
22 //System.out.println("PCS Removed");
23 pcs.addPropertyChangeListener(l);
26 public void Subject.firePropertyChange(PropertyChangeEvent e) {
27 pcs.firePropertyChange(e);
30 declare parents: Motor || Grain || Chamber || Nozzle || Fuel implements Subject;
32 void around(Subject s, Object newVal):
33 execution(void Subject+.set*(..)) && target(s) && args(newVal) {
34 System.out.println(s);
35 String name = thisJoinPointStaticPart.getSignature().getName();
36 name = name.replaceFirst("set", "");
40 if (newVal instanceof Boolean)
42 Method m = s.getClass().getMethod(pre + name);
45 } catch (Throwable t) {
46 System.err.print("Error getting old value for " + name);
50 System.out.println(name + " changed from " + old + " to "
52 s.pcs.firePropertyChange(name, old, newVal);
56 after(Subject s) returning: this(s) && initialization(Subject.new(..)) {
57 s.pcs = new PropertyChangeSupport(s);