package org.jboss.seam.ui.renderkit; import java.io.IOException; import javax.faces.component.EditableValueHolder; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; import javax.faces.validator.Validator; import org.jboss.seam.ui.component.UIEqualityValidator; import org.jboss.seam.ui.util.cdk.RendererBase; import org.jboss.seam.ui.validator.EqualityValidator; /** * This class mainly does some validation "hook-in" * * @author Daniel Roth * */ public class EqualityValidatorRendererBase extends RendererBase { @Override protected Class getComponentClass() { return UIEqualityValidator.class; } @Override protected void doEncodeChildren(ResponseWriter writer, FacesContext context, UIComponent component) throws IOException { UIEqualityValidator ev = (UIEqualityValidator) component; EditableValueHolder evh = null; if (ev != null && ev.getParent() instanceof EditableValueHolder) { evh = (EditableValueHolder) ev.getParent(); } if (evh == null) throw new IllegalArgumentException("validateEquality tag must be nested in an EditableValueHolder (\"input tag\")"); if (!hasEqualityValidator(evh)) { evh.addValidator(new EqualityValidator(ev.getFor(), ev.getMessage(), ev.getMessageId(), ev.getOperator())); evh.setRequired(ev.isRequired()); } renderChildren(context, component); } private boolean hasEqualityValidator(EditableValueHolder evh) { for (Validator validator : evh.getValidators()) { if (validator instanceof EqualityValidator) { return true; } } return false; } @Override public boolean getRendersChildren() { return true; } }