package edu.ualberta.med.biobank.mvp.presenter.validation; import com.google.gwt.event.shared.GwtEvent; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.event.shared.HandlerRegistration; import com.pietschy.gwt.pectin.client.binding.Disposable; import com.pietschy.gwt.pectin.client.form.validation.EmptyValidationResult; import com.pietschy.gwt.pectin.client.form.validation.HasValidation; import com.pietschy.gwt.pectin.client.form.validation.ValidationEvent; import com.pietschy.gwt.pectin.client.form.validation.ValidationHandler; import com.pietschy.gwt.pectin.client.form.validation.ValidationResult; import com.pietschy.gwt.pectin.client.form.validation.component.ValidationDisplay; import edu.ualberta.med.biobank.mvp.util.HandlerRegistry; public abstract class AbstractValidation implements HasValidation, Disposable { protected final HandlerRegistry handlerRegistry = new HandlerRegistry(); private final HandlerManager handlerManager = new HandlerManager(this); private ValidationResult validationResult = EmptyValidationResult.INSTANCE; public void bindValidationTo(ValidationDisplay validationDisplay) { ValidationBinding binding = new ValidationBinding(validationDisplay); handlerRegistry.add(addValidationHandler(binding)); } @Override public ValidationResult getValidationResult() { return validationResult; } @Override public HandlerRegistration addValidationHandler(ValidationHandler handler) { return handlerManager.addHandler(ValidationEvent.getType(), handler); } @Override public void fireEvent(GwtEvent<?> event) { handlerManager.fireEvent(event); } @Override public void clear() { setValidationResult(EmptyValidationResult.INSTANCE); } @Override public void dispose() { handlerRegistry.dispose(); } protected void setValidationResult(ValidationResult result) { if (result == null) { throw new NullPointerException("validationResult is null"); } this.validationResult = result; fireValidationChanged(); } private void fireValidationChanged() { ValidationEvent.fire(this, validationResult); } }