package lectures.mvc.properties;
import util.annotations.WebDocuments;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import lectures.interfaces.ABMISpreadsheet;
import util.annotations.ObserverRegisterer;
import util.annotations.ObserverTypes;
@WebDocuments({"Lectures/MvcProperties.pptx", "Lectures/MvcProperties.pdf", "Videos/MvcProperties.avi"})
public class AnObservableBMISpreadsheet extends ABMISpreadsheet implements ObservableBMISpreadsheet {
PropertyListenerSupport propertyListenerSupport = new APropertyListenerSupport();
public AnObservableBMISpreadsheet() { }
public AnObservableBMISpreadsheet(
double theInitialHeight, double theInitialWeight) {
super(theInitialHeight, theInitialWeight);
}
public void setWeight(double newWeight) {
double oldWeight = getWeight();
double oldBMI = getBMI();
super.setWeight(newWeight);
propertyListenerSupport.notifyAllListeners(new PropertyChangeEvent(this, "Weight", oldWeight, newWeight));
propertyListenerSupport.notifyAllListeners(new PropertyChangeEvent(this, "BMI", oldBMI, getBMI()));
}
public void setHeight(double newHeight) {
double oldHeight = getHeight();
double oldBMI = getBMI();
super.setHeight(newHeight);
propertyListenerSupport.notifyAllListeners(new PropertyChangeEvent(this, "Height", oldHeight, newHeight));
propertyListenerSupport.notifyAllListeners(new PropertyChangeEvent(this, "BMI", oldBMI, getBMI()));
}
@ObserverRegisterer(ObserverTypes.PROPERTY_LISTENER)
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertyListenerSupport.add(listener);
listener.propertyChange(new PropertyChangeEvent(this, "Weight", 0, getWeight()));
listener.propertyChange(new PropertyChangeEvent(this, "Height", 0, getHeight()));
listener.propertyChange(new PropertyChangeEvent(this, "BMI", 0, getHeight()));
}
}