final protected void doSetValue(Object value) { Object currentValue = doGetValue(); ValueDiff diff = Diffs.createValueDiff(currentValue, value); boolean okToProceed = fireValueChanging(diff); if (!okToProceed) { throw new ChangeVetoException("Change not permitted"); //$NON-NLS-1$ } doSetApprovedValue(value); if (!Util.equals(diff.getOldValue(), diff.getNewValue())) { fireValueChange(diff); } }