/*
* Beanfabrics Framework Copyright (C) by Michael Karneim, beanfabrics.org
* Use is subject to license terms. See license.txt.
*/
// TODO javadoc - remove this comment only when the class and all non-public
// methods and fields are documented
package org.beanfabrics;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.beanfabrics.validation.Validatable;
import org.beanfabrics.validation.ValidationState;
import org.beanfabrics.validation.Validator;
/**
* This is an implementation of <code>Validatable</code> that uses a
* <code>Validator</code> for producing a fresh <code>ValidationState</code>.
*
* @author Michael Karneim
*/
public class ValidatableBean extends AbstractBean implements Validatable {
private final Validator validator = new Validator();
private ValidationState validationState = null;
/**
* Constructs a new instance.
*/
public ValidatableBean() {
this.validator.addPropertyChangeListener("rules", new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
// whenever rules are changed, we have to revalidate
revalidate();
}
});
}
/** {@inheritDoc} */
public void revalidate() {
this.setValidationState(this.validator.validate());
}
/** {@inheritDoc} */
public final ValidationState getValidationState() {
return validationState;
}
/** {@inheritDoc} */
public final boolean isValid() {
return this.getValidationState() == null;
}
/** {@inheritDoc} */
public final Validator getValidator() {
return validator;
}
/**
* Replaces the validation state. This method should not be called directly
* since it is called from the {@link #revalidate()} method.
*/
protected final void setValidationState(ValidationState validationState) {
if (this.validationState == validationState || (this.validationState != null && this.validationState.equals(validationState))) {
return; // nothing has changed
}
ValidationState oldState = this.validationState;
this.validationState = validationState;
this.getPropertyChangeSupport().firePropertyChange("validationState", oldState, validationState);
}
}