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 import javax.swing.event.ChangeListener;
10 import com.billkuker.rocketry.motorsim.grain.MultiGrain;
12 public aspect ChangeListening {
14 public interface Subject {
15 // public void addPropertyChangeListener(PropertyChangeListener l);
18 private PropertyChangeSupport Subject.pcs;
20 public void Subject.addPropertyChangeListener(PropertyChangeListener l) {
21 //System.out.println("PCS Added");
22 pcs.addPropertyChangeListener(l);
25 public void Subject.removePropertyChangeListener(PropertyChangeListener l) {
26 //System.out.println("PCS Removed");
27 pcs.addPropertyChangeListener(l);
30 public void Subject.firePropertyChange(PropertyChangeEvent e) {
31 pcs.firePropertyChange(e);
34 declare parents: Motor || Grain || Chamber || Nozzle || Fuel implements Subject;
36 void around(Subject s, Object newVal):
37 execution(void Subject+.set*(..)) && target(s) && args(newVal) {
38 System.out.println(s);
39 String name = thisJoinPointStaticPart.getSignature().getName();
40 name = name.replaceFirst("set", "");
44 if (newVal instanceof Boolean)
46 Method m = s.getClass().getMethod(pre + name);
49 } catch (Throwable t) {
50 System.err.print("Error getting old value for " + name);
54 System.out.println(name + " changed from " + old + " to "
56 s.pcs.firePropertyChange(name, old, newVal);
60 after(Subject s) returning: this(s) && initialization(Subject.new(..)) {
61 s.pcs = new PropertyChangeSupport(s);