package br.com.caelum.stella.faces.validation; import javax.el.ELContext; import javax.el.ValueExpression; import javax.faces.context.FacesContext; import javax.faces.validator.Validator; import javax.faces.webapp.ValidatorELTag; import javax.servlet.jsp.JspException; @SuppressWarnings("serial") public class StellaIEValidatorTag extends ValidatorELTag { private ValueExpression formatted; private ValueExpression estado; private ValueExpression estadoComponentId; private ValueExpression binding; public StellaIEValidatorTag() { super.setId(StellaIEValidator.VALIDATOR_ID); } @Override protected Validator createValidator() throws JspException { ELContext elContext = getELContext(); StellaIEValidator validator = getBoundValidator(elContext); if (binding != null) { validator.setBinding(binding); } if (estado != null) { String estadoValue = estado.getValue(elContext).toString(); validator.setEstado(estadoValue); } if (estadoComponentId != null) { String componentId = estadoComponentId.getValue(elContext).toString(); validator.setEstadoComponentId(componentId); } if (formatted != null) { Boolean formattedValue = (Boolean) formatted.getValue(elContext); validator.setFormatted(formattedValue); } return validator; } protected ELContext getELContext() { FacesContext context = FacesContext.getCurrentInstance(); ELContext elContext = context.getELContext(); return elContext; } private StellaIEValidator getBoundValidator(ELContext elContext) { StellaIEValidator validator = null; if (binding != null) { validator = (StellaIEValidator) binding.getValue(elContext); } if (validator == null) { validator = new StellaIEValidator(); if (binding != null) { binding.setValue(elContext, validator); } } return validator; } public void setFormatted(ValueExpression formatted) { this.formatted = formatted; } public void setEstado(ValueExpression estado) { this.estado = estado; } public void setEstadoComponentId(ValueExpression estadoComponentId) { this.estadoComponentId = estadoComponentId; } public void setBinding(ValueExpression binding) { this.binding = binding; } public ValueExpression getBinding() { return binding; } public void release() { super.release(); this.formatted = null; this.estado = null; this.estadoComponentId = null; } }