public Goal execute() throws Failure { class ObserverEqualValue extends Observer { @Override public Object master() { return ConstraintExpEqualsValue.this; } @Override public int subscriberMask() { return EventOfInterest.VALUE | EventOfInterest.MIN | EventOfInterest.MAX; } @Override public String toString() { return "ObserverEqualValue"; } @Override public void update(Subject exp, EventOfInterest interest) throws Failure { // Debug.on();Debug.print("ObserverEqualValue: // "+interest);Debug.off(); IntEvent event = (IntEvent) interest; if ((event.isValueEvent() && event.min() != _value) || (event.isMaxEvent() && event.max() < _value) || (event.isMinEvent() && event.min() > _value)) { exp.constrainer().fail("from ObserverEqualValue"); } _exp.setValue(_value); } } // ~ ObserverEqualValue _exp.setValue(_value); // may fail _exp.attachObserver(new ObserverEqualValue()); return null; }