package be.selckin.swu.validation;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;
import static com.google.common.base.Preconditions.checkNotNull;
public class CssFeedbackBehavior extends Behavior {
protected String validCssClass = "";
protected String invalidCssClass = "error";
@Override
public void onConfigure(Component component) {
super.onConfigure(component);
if (component instanceof Form)
((Form<?>) component).visitFormComponents(new IVisitor<FormComponent<?>, Void>() {
@Override
public void component(FormComponent<?> formComponent, IVisit<Void> visit) {
formComponent.add(AttributeAppender.append("class", new ValidFormComponentROM(formComponent)));
}
});
}
public CssFeedbackBehavior setValidCssClass(String validCssClass) {
this.validCssClass = checkNotNull(validCssClass);
return this;
}
public CssFeedbackBehavior setInvalidCssClass(String invalidCssClass) {
this.invalidCssClass = checkNotNull(invalidCssClass);
return this;
}
public class ValidFormComponentROM extends AbstractReadOnlyModel<String> {
private final FormComponent<?> formComponent;
public ValidFormComponentROM(FormComponent<?> formComponent) {
this.formComponent = formComponent;
}
@Override
public String getObject() {
return formComponent.isValid() ? validCssClass : invalidCssClass;
}
}
}