import java.beans.*;
public class Thermometer implements PropertyChangeListener{
// Einschraenkung der Werte
protected double minTemp = 18.0;
protected double maxTemp = 30.0;
final static double MIN = 10;
final static double MAX = 35;
// die aktuelle Temperatur
protected Temperatur aktTemp;
protected VetoableChangeSupport constraintHandler;
public Thermometer(){
this(25.0);
}
public Thermometer(double temperatur){
aktTemp = new Temperatur(temperatur);
constraintHandler = new VetoableChangeSupport(this);
}
// implementierung des PropertyChangeListener interfaces
public void propertyChange(PropertyChangeEvent evt){
// hier muesste noch implementiert werden
}
// implementierung des VetoableChangesupport
public void addVetoableChangeListener(VetoableChangeListener l){
// weiterreichen an den Handler
constraintHandler.addVetoableChangeListener(l);
}
public void removeVetoableChangeListener(VetoableChangeListener l){
// weiterreichen an den Handler
constraintHandler.removeVetoableChangeListener(l);
}
// Zugriffsmethoden für die min und max Werte
public double getMinimumTemperatur(){
return minTemp;
}
public double getMaximumTemperatur(){
return maxTemp;
}
public void setMinimumTemperatur(double value)
throws PropertyVetoException{
// intern einmal testen, ob der neue Wert
// ok ist und ggf. veto ausloesen
if (value>MAX || value<MIN ){
throw new PropertyVetoException("Wert liegt ausserhalb des
zulaessigen Bereiches(10-35)",
new PropertyChangeEvent(this,"MinimumTemperature",
new Double(minTemp),
new Double(value)));
}
// ansonsten weiterreichen an Haendler (extern)
constraintHandler.fireVetoableChange("MinimumTemperatur",
new Double(minTemp), new Double(value));
// wenn keine Exception fliegt geht die Aenderung in Ordnung
minTemp = value;
}
public void setMaximumTemperatur(double value) throws
PropertyVetoException{
// intern testen, ob der neue Wert ok ist und ggf. veto ausloesen
if (value>MAX || value<MIN ){
throw new PropertyVetoException("Wert liegt ausserhalb des
zulaessigen Bereiches(10-35)",
new PropertyChangeEvent(this,"MinimumTemperature",
new Double(minTemp),
new Double(value)));
}
// ansonsten weiterreichen an Haendler
constraintHandler.fireVetoableChange("MaximumTemperatur",
new Double(maxTemp), new Double(value));
// wenn keine Exception fliegt geht die Aenderung in Ordnung
maxTemp = value;
}
}
Constrainer.java
import java.beans.*;
public class Constrainer implements VetoableChangeListener{
// implementieren des interface: VetoableChangeListener
public void vetoableChange(PropertyChangeEvent evt)
throws PropertyVetoException{
// die Limitierung wird getestet, liegt der Wert
// auch wirklich im Bereich (11 bis 33)
double value = ((Double)evt.getNewValue()).doubleValue();
if (value>33 || value<11){
throw new PropertyVetoException("VETO von Constrainer: Wert "
+value+" abgelehnt",evt);
}else{
System.out.println("Wert: "+value+" von Constrainer angenommen");
}
}
}