Package org.richfaces.validator

Source Code of org.richfaces.validator.FacesBeanValidator

/**
* License Agreement.
*
* Rich Faces - Natural Ajax for Java Server Faces (JSF)
*
* Copyright (C) 2007 Exadel, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1 as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
*/
package org.richfaces.validator;

import java.io.Serializable;
import java.text.MessageFormat;
import java.util.Collection;
import java.util.Locale;
import java.util.Set;

import javax.el.ELException;
import javax.el.ValueExpression;
import javax.faces.FacesException;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.EditableValueHolder;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

import org.ajax4jsf.renderkit.AjaxRendererUtils;

/**
* Implementation of the JSF validator to use with Bean Validation / Hibernate
* validator
*
* @author asmirnov
*
*/
public class FacesBeanValidator implements NullValueValidator,Serializable, GraphValidator {

  /**
   *
   */
  private static final long serialVersionUID = -264568176252121853L;
  public static final String BEAN_VALIDATOR_TYPE = "org.richfaces.BeanValidator";

  private ValueExpression summaryExpression = null;
 
  private String summary = null;
 
  private ValueExpression profilesExpression = null;

  private Object profiles = null;
  /**
   * @return the summary
   */
  public String getSummary() {
    String summaryString = null;
    if(null != summaryExpression){
        summaryString = (String) summaryExpression.getValue(FacesContext.getCurrentInstance().getELContext());
    }else {
      summaryString = this.summary;
    }
    return summaryString;
  }
 
  /**
   * @param summary the summary to set
   */
  public void setSummary(ValueExpression summary) {
    this.summaryExpression = summary;
  }

 
  /**
   * @param summary the summary to set
   */
  public void setSummary(String summary) {
    this.summary = summary;
  }
  /*
   * (non-Javadoc)
   *
   * @see javax.faces.validator.Validator#validate(javax.faces.context.FacesContext,
   *      javax.faces.component.UIComponent, java.lang.Object)
   */
  public void validate(FacesContext context, UIComponent component,
      Object convertedValue) throws ValidatorException {
    if (component instanceof EditableValueHolder) {
      // Validate input component
      EditableValueHolder input = (EditableValueHolder) component;
      try {
        ValueExpression valueExpression = component
            .getValueExpression("value");
        if (null != valueExpression) {
          Collection<String> messages = ObjectValidator.getInstance(context)
              .validate(context, valueExpression, convertedValue, getProfiles());
          if (null != messages) {
            input.setValid(false);
            Object label = getLabel(context, component);
            Locale locale = context.getViewRoot().getLocale();
            // send all validation messages.
            for (String msg : messages) {
              // https://jira.jboss.org/jira/browse/RF-7636 -
              // format values.
              msg = formatMessage(msg, locale, label,convertedValue); // create Summary message ?
              String summaryString = getSummary() != null ? getSummary()
                  : msg;
              summaryString = formatMessage(summaryString, locale, label,convertedValue);
              context.addMessage(component.getClientId(context), new FacesMessage(
                  FacesMessage.SEVERITY_ERROR, summaryString , msg));
            }
          }
        }
      } catch (ELException e) {
        throw new FacesException(e);
      }
    }
  }

  static String formatMessage(String msg, Locale locale, Object... messageParams) {
    if (msg.contains("{")) {
      try {
      MessageFormat messageFormat = new MessageFormat(
          msg, locale);
      msg = messageFormat.format(messageParams);
      } catch (IllegalArgumentException e) {
        // Do nothing, use original string unchanged.
      }
    }
    return msg;
  }

  static Object getLabel(FacesContext context, UIComponent component) {
    Object label = component.getAttributes().get("label");
    if(null == label || 0 == label.toString().length()){
      label = component.getClientId(context);
    }
    return label;
  }

  public Collection<String> validateGraph(FacesContext context, UIComponent component,
      Object value, Object profilesthrows ValidatorException {
    ObjectValidator beanValidator = ObjectValidator.getInstance(context);
    Collection<String> messages = beanValidator.validateGraph(context, value,AjaxRendererUtils.asSet(profiles));
    return messages;
  }

  /**
   * @return the profiles
   */
  public Set<String> getProfiles() {
    Object profiles;
    if(null != profilesExpression){
        profiles = profilesExpression.getValue(FacesContext.getCurrentInstance().getELContext());
    }else {
      profiles = this.profiles;
    }
    return AjaxRendererUtils.asSet(profiles);
  }

  /**
   * @param profiles the profiles to set
   */
  public void setProfiles(Object profiles) {
    this.profiles = profiles;
  }
 
  public void setProfiles(ValueExpression profilesExpression) {
    this.profilesExpression = profilesExpression;
  }
}
TOP

Related Classes of org.richfaces.validator.FacesBeanValidator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.