All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.andromda.cartridges.jsf.validator.ParameterChecks Maven / Gradle / Ivy

The newest version!
package org.andromda.cartridges.jsf.validator;

import java.io.Serializable;
import java.net.URL;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;

import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.validator.Field;
import org.apache.commons.validator.GenericTypeValidator;
import org.apache.commons.validator.GenericValidator;
import org.apache.commons.validator.ValidatorAction;
import org.apache.commons.validator.ValidatorException;

/**
 * 

* This class contains the default validations that are used in the * validator-rules.xml file. *

*

* In general passing in a null or blank will return a null Object or a false * boolean. However, nulls and blanks do not result in an error being added to * the errors. *

*/ public class ParameterChecks implements Serializable { /** * */ private static final long serialVersionUID = 1L; /** NULL */ public static final String FIELD_TEST_NULL = "NULL"; /** NOTNULL */ public static final String FIELD_TEST_NOTNULL = "NOTNULL"; /** EQUAL */ public static final String FIELD_TEST_EQUAL = "EQUAL"; /** * Checks if the field isn't null and length of the field is greater than * zero not including whitespace. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateRequired( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { String value = null; if (object instanceof String) { value = (String)object; } else { value = ObjectUtils.toString(object); } if (StringUtils.isBlank(value)) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } /** * Checks if the parameter isn't null based on the values of other fields. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateRequiredIf( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { boolean required = false; final String value = ObjectUtils.toString(object); int ctr = 0; String fieldJoin = "AND"; if (!StringUtils.isBlank(field.getVarValue("fieldJoin"))) { fieldJoin = field.getVarValue("fieldJoin"); } if ("AND".equalsIgnoreCase(fieldJoin)) { required = true; } while (!StringUtils.isBlank(field.getVarValue("field[" + ctr + ']'))) { String dependProp = field.getVarValue("field[" + ctr + ']'); String dependTest = field.getVarValue("fieldTest[" + ctr + ']'); String dependTestValue = field.getVarValue("fieldValue[" + ctr + ']'); String dependIndexed = field.getVarValue("fieldIndexed[" + ctr + ']'); if (dependIndexed == null) { dependIndexed = "false"; } String dependVal = null; boolean thisRequired = false; if (field.isIndexed() && "true".equalsIgnoreCase(dependIndexed)) { String key = field.getKey(); if ((key.indexOf('[') > -1) && (key.indexOf(']') > -1)) { String ind = key.substring( 0, key.indexOf('.') + 1); dependProp = ind + dependProp; } } dependVal = (String)parameters.get(dependProp); if (dependTest.equals(FIELD_TEST_NULL)) { if ((dependVal != null) && (dependVal.length() > 0)) { thisRequired = false; } else { thisRequired = true; } } if (dependTest.equals(FIELD_TEST_NOTNULL)) { if ((dependVal != null) && (dependVal.length() > 0)) { thisRequired = true; } else { thisRequired = false; } } if (dependTest.equals(FIELD_TEST_EQUAL)) { thisRequired = dependTestValue.equalsIgnoreCase(dependVal); } if ("AND".equalsIgnoreCase(fieldJoin)) { required = required && thisRequired; } else { required = required || thisRequired; } ctr++; } if (required) { if (StringUtils.isBlank(value)) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } /** * Checks if the parameter matches the regular expression in the field's * mask attribute. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateMask( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { final String mask = field.getVarValue("mask"); final String value = ObjectUtils.toString(object); if (StringUtils.isNotBlank(value) && !GenericValidator.matchRegexp( value, mask)) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } /** * Checks if the field can safely be converted to a byte primitive. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateByte( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { Byte result = null; String value = ObjectUtils.toString(object); if (StringUtils.isNotBlank(value)) { result = GenericTypeValidator.formatByte(value); if (result == null) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } /** * Checks if the field can safely be converted to a short primitive. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateShort( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { Short result = null; String value = ObjectUtils.toString(object); if (StringUtils.isNotBlank(value)) { result = GenericTypeValidator.formatShort(value); if (result == null) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } /** * Checks if the field can safely be converted to an int primitive. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateInteger( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { Integer result = null; String value = ObjectUtils.toString(object); if (StringUtils.isNotBlank(value)) { result = GenericTypeValidator.formatInt(value); if (result == null) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } /** * Checks if the field can safely be converted to a long primitive. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateLong( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { Long result = null; String value = ObjectUtils.toString(object); if (StringUtils.isNotBlank(value)) { result = GenericTypeValidator.formatLong(value); if (result == null) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } /** * Checks if the field can safely be converted to a float primitive. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateFloat( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { Float result = null; String value = ObjectUtils.toString(object); if (StringUtils.isNotBlank(value)) { result = GenericTypeValidator.formatFloat(value); if (result == null) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } /** * Checks if the field can safely be converted to a double primitive. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateDouble( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { Double result = null; String value = ObjectUtils.toString(object); if (StringUtils.isNotBlank(value)) { result = GenericTypeValidator.formatDouble(value); if (result == null) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } /** * Checks if the field is a valid date. If the field has a datePattern * variable, that will be used to format * java.text.SimpleDateFormat. If the field has a * datePatternStrict variable, that will be used to format * java.text.SimpleDateFormat and the length will be checked * so '2/12/1999' will not pass validation with the format 'MM/dd/yyyy' * because the month isn't two digits. If no datePattern variable is * specified, then the field gets the DateFormat.SHORT format for the * locale. The setLenient method is set to false for all * variations. If the object is a date instance, then validation is not performed. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateDate( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { // - only validate if the object is not already a date or calendar if (!(object instanceof Date) && ! (object instanceof Calendar)) { Date result = null; String value = ObjectUtils.toString(object); String datePattern = field.getVarValue("datePattern"); String datePatternStrict = field.getVarValue("datePatternStrict"); Locale locale = Locale.getDefault(); if (StringUtils.isNotBlank(value)) { if (StringUtils.isNotBlank(datePattern)) { result = GenericTypeValidator.formatDate( value, datePattern, false); } else if (StringUtils.isNotBlank(datePatternStrict)) { result = GenericTypeValidator.formatDate( value, datePatternStrict, true); } else { result = GenericTypeValidator.formatDate( value, locale); } if (result == null) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } } /** * Checks if a fields value is within a range (min & max specified in * the vars attribute). * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateLongRange( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { final String value = ObjectUtils.toString(object); if (StringUtils.isNotBlank(value)) { try { long intValue = Long.parseLong(value); long min = Long.parseLong(field.getVarValue("min")); long max = Long.parseLong(field.getVarValue("max")); if (!GenericValidator.isInRange( intValue, min, max)) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } catch (Exception exception) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } /** * Checks if a fields value is within a range (min & max specified in * the vars attribute). * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateDoubleRange( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { final String value = ObjectUtils.toString(object); if (StringUtils.isNotBlank(value)) { try { double doubleValue = Double.parseDouble(value); double min = Double.parseDouble(field.getVarValue("min")); double max = Double.parseDouble(field.getVarValue("max")); if (!GenericValidator.isInRange( doubleValue, min, max)) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } catch (Exception exception) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } /** * Checks if a fields value is within a range (min & max specified in * the vars attribute). * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateFloatRange( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { final String value = ObjectUtils.toString(object); if (StringUtils.isNotBlank(value)) { try { float floatValue = Float.parseFloat(value); float min = Float.parseFloat(field.getVarValue("min")); float max = Float.parseFloat(field.getVarValue("max")); if (!GenericValidator.isInRange( floatValue, min, max)) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } catch (Exception exception) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } /** * Checks if the field is a valid credit card number. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateCreditCard( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { Long result = null; final String value = ObjectUtils.toString(object); if (StringUtils.isNotBlank(value)) { result = GenericTypeValidator.formatCreditCard(value); if (result == null) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } /** * Checks if a field has a valid exception-mail address. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateEmail( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { final String value = ObjectUtils.toString(object); if (StringUtils.isNotBlank(value) && !GenericValidator.isEmail(value)) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } /** * Checks if the field's length is less than or equal to the maximum value. * A Null will be considered an error. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateMaxLength( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { final String value = ObjectUtils.toString(object); if (StringUtils.isNotBlank(value)) { try { int max = Integer.parseInt(field.getVarValue("maxlength")); if (!GenericValidator.maxLength( value, max)) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } catch (Exception exception) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } /** * Checks if the field's length is greater than or equal to the minimum * value. A Null will be considered an error. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateMinLength( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { String value = ObjectUtils.toString(object); if (!StringUtils.isBlank(value)) { try { int min = Integer.parseInt(field.getVarValue("minlength")); if (!GenericValidator.minLength( value, min)) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } catch (Exception exception) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } /** *

* Validates whether the URL string passed in is a valid URL or not. Does * this by attempting to construct a java.net.URL instance and checking * whether or not, it's valid. *

* * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ @SuppressWarnings("unused") public static void validateUrl( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { boolean valid = true; String urlString = ObjectUtils.toString(object); try { new URL(urlString); } catch (Exception exception) { valid = false; } if (!valid) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } /** * Checks if the field is a valid time. If the field has a timePattern variable, * that will be used to format java.text.SimpleDateFormat. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. */ public static void validateTime( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) { // - only validate if the object is not already a date if (!(object instanceof Date) && !(object instanceof Calendar)) { final String value = ObjectUtils.toString(object); final String timePattern = field.getVarValue("timePattern"); if (StringUtils.isNotBlank(value)) { try { if (StringUtils.isNotBlank(timePattern)) { final java.text.DateFormat timeFormatter = new SimpleDateFormat(timePattern); timeFormatter.parse(value); } else { DateFormat.getTimeInstance().parse(value); } } catch (Exception exception) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } } /** * Checks if the field's value is equal to another field's value on the same form. * * @param context the faces context * @param object the value of the field being validated. * @param parameters Any field parameters from the validation.xml. * @param errors The Map object to add errors to if any * validation errors occur. * @param action The ValidatorAction that is currently being * performed. * @param field The Field object associated with the current * field being validated. * @throws Exception */ public static void validateEqual( FacesContext context, Object object, Map parameters, Collection errors, ValidatorAction action, Field field) throws Exception { final String value = ObjectUtils.toString(object); if (StringUtils.isNotBlank(value)) { final String equalFieldName = field.getVarValue("fieldName"); final EditableValueHolder equalField = (EditableValueHolder)findComponent(context, equalFieldName); final Object equalFieldValue = equalField.getSubmittedValue() != null ? equalField.getSubmittedValue() : equalField.getValue(); if (equalFieldValue != null && !equalFieldValue.equals(value)) { errors.add(ValidatorMessages.getMessage( action, field, context)); } } } /** * @param context * @param componentId * @return component * @throws ValidatorException */ public static UIComponent findComponent(final FacesContext context, final String componentId) throws ValidatorException { UIComponent component = null; final int index = componentId.indexOf(':'); if (index != -1) { final String parentId = componentId.substring(0, index); UIComponent parent = context.getViewRoot().findComponent(parentId); if (parent == null) { throw new ValidatorException("No component with id: " + parentId + " could be found on view!"); } final String restOfId = componentId.substring(index + 1, componentId.length()); component = findComponent(context, parent, restOfId); } return component; } private static final char COMPONENT_NAME_SEPARATOR = ':'; /** * @param context * @param parent * @param componentId * @return component */ public static UIComponent findComponent(final FacesContext context, final UIComponent parent, String componentId) { UIComponent component = null; final int index = componentId.indexOf(COMPONENT_NAME_SEPARATOR); if (index != -1) { final String firstId = componentId.substring(0, index); component = findChildComponent(parent, firstId); componentId = componentId.substring(index + 1, componentId.length()); } else if (StringUtils.isNotBlank(componentId)) { component = findChildComponent(parent, componentId); } if (component != null && componentId.indexOf(COMPONENT_NAME_SEPARATOR) != -1) { component = findComponent(context, component, componentId); } return component; } /** * @param component * @param id * @return child */ public static UIComponent findChildComponent(final UIComponent component, final String id) { UIComponent child = null; if (component != null) { if (component.getId().equals(id)) { child = component; } else { for (final Iterator iterator = component.getFacetsAndChildren(); iterator.hasNext();) { child = findChildComponent((UIComponent)iterator.next(), id); if (child != null) { break; } } } } return child; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy