blob: 736493f8a3f288f5a2cb7a869ee4fde95a2bbebf [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.validator;
import org.apache.commons.validator.util.ValidatorUtils;
/**
* Contains validation methods for different unit tests.
*
* @version $Revision$
*/
public class GenericValidatorImpl {
/**
* Throws a runtime exception if the value of the argument is "RUNTIME",
* an exception if the value of the argument is "CHECKED", and a
* ValidatorException otherwise.
*
* @throws RuntimeException with "RUNTIME-EXCEPTION as message"
* if value is "RUNTIME"
* @throws Exception with "CHECKED-EXCEPTION" as message
* if value is "CHECKED"
* @throws ValidatorException with "VALIDATOR-EXCEPTION" as message
* otherwise
*/
public static boolean validateRaiseException(
final Object bean,
final Field field)
throws Exception {
final String value =
ValidatorUtils.getValueAsString(bean, field.getProperty());
if ("RUNTIME".equals(value)) {
throw new RuntimeException("RUNTIME-EXCEPTION");
} else if ("CHECKED".equals(value)) {
throw new Exception("CHECKED-EXCEPTION");
} else {
throw new ValidatorException("VALIDATOR-EXCEPTION");
}
}
/**
* Checks if the field is required.
*
* @return boolean If the field isn't <code>null</code> and
* has a length greater than zero, <code>true</code> is returned.
* Otherwise <code>false</code>.
*/
public static boolean validateRequired(Object bean, Field field) {
String value = ValidatorUtils.getValueAsString(bean, field.getProperty());
return !GenericValidator.isBlankOrNull(value);
}
/**
* Checks if the field can be successfully converted to a <code>byte</code>.
*
* @param bean The value validation is being performed on.
* @param field the field to use
* @return boolean If the field can be successfully converted
* to a <code>byte</code> <code>true</code> is returned.
* Otherwise <code>false</code>.
*/
public static boolean validateByte(Object bean, Field field) {
String value = ValidatorUtils.getValueAsString(bean, field.getProperty());
return GenericValidator.isByte(value);
}
/**
* Checks if the field can be successfully converted to a <code>short</code>.
*
* @param bean The value validation is being performed on.
* @param field the field to use
* @return boolean If the field can be successfully converted
* to a <code>short</code> <code>true</code> is returned.
* Otherwise <code>false</code>.
*/
public static boolean validateShort(Object bean, Field field) {
String value = ValidatorUtils.getValueAsString(bean, field.getProperty());
return GenericValidator.isShort(value);
}
/**
* Checks if the field can be successfully converted to a <code>int</code>.
*
* @param bean The value validation is being performed on.
* @param field the field to use
* @return boolean If the field can be successfully converted
* to a <code>int</code> <code>true</code> is returned.
* Otherwise <code>false</code>.
*/
public static boolean validateInt(Object bean, Field field) {
String value = ValidatorUtils.getValueAsString(bean, field.getProperty());
return GenericValidator.isInt(value);
}
/**
* Checks if field is positive assuming it is an integer
*
* @param bean The value validation is being performed on.
* @param field Description of the field to be evaluated
* @return boolean If the integer field is greater than zero, returns
* true, otherwise returns false.
*/
public static boolean validatePositive(Object bean , Field field) {
String value = ValidatorUtils.getValueAsString(bean, field.getProperty());
return GenericTypeValidator.formatInt(value).intValue() > 0;
}
/**
* Checks if the field can be successfully converted to a <code>long</code>.
*
* @param bean The value validation is being performed on.
* @param field the field to use
* @return boolean If the field can be successfully converted
* to a <code>long</code> <code>true</code> is returned.
* Otherwise <code>false</code>.
*/
public static boolean validateLong(Object bean, Field field) {
String value = ValidatorUtils.getValueAsString(bean, field.getProperty());
return GenericValidator.isLong(value);
}
/**
* Checks if the field can be successfully converted to a <code>float</code>.
*
* @param bean The value validation is being performed on.
* @param field the field to use
* @return boolean If the field can be successfully converted
* to a <code>float</code> <code>true</code> is returned.
* Otherwise <code>false</code>.
*/
public static boolean validateFloat(Object bean, Field field) {
String value = ValidatorUtils.getValueAsString(bean, field.getProperty());
return GenericValidator.isFloat(value);
}
/**
* Checks if the field can be successfully converted to a <code>double</code>.
*
* @param bean The value validation is being performed on.
* @param field the field to use
* @return boolean If the field can be successfully converted
* to a <code>double</code> <code>true</code> is returned.
* Otherwise <code>false</code>.
*/
public static boolean validateDouble(Object bean, Field field) {
String value = ValidatorUtils.getValueAsString(bean, field.getProperty());
return GenericValidator.isDouble(value);
}
/**
* Checks if the field is an e-mail address.
*
* @param bean The value validation is being performed on.
* @param field the field to use
* @return boolean If the field is an e-mail address
* <code>true</code> is returned.
* Otherwise <code>false</code>.
*/
public static boolean validateEmail(Object bean, Field field) {
String value = ValidatorUtils.getValueAsString(bean, field.getProperty());
return GenericValidator.isEmail(value);
}
public final static String FIELD_TEST_NULL = "NULL";
public final static String FIELD_TEST_NOTNULL = "NOTNULL";
public final static String FIELD_TEST_EQUAL = "EQUAL";
public static boolean validateRequiredIf(
Object bean,
Field field,
Validator validator) {
Object form = validator.getParameterValue(Validator.BEAN_PARAM);
String value = null;
boolean required = false;
if (isStringOrNull(bean)) {
value = (String) bean;
} else {
value = ValidatorUtils.getValueAsString(bean, field.getProperty());
}
int i = 0;
String fieldJoin = "AND";
if (!GenericValidator.isBlankOrNull(field.getVarValue("fieldJoin"))) {
fieldJoin = field.getVarValue("fieldJoin");
}
if (fieldJoin.equalsIgnoreCase("AND")) {
required = true;
}
while (!GenericValidator.isBlankOrNull(field.getVarValue("field[" + i + "]"))) {
String dependProp = field.getVarValue("field[" + i + "]");
String dependTest = field.getVarValue("fieldTest[" + i + "]");
String dependTestValue = field.getVarValue("fieldValue[" + i + "]");
String dependIndexed = field.getVarValue("fieldIndexed[" + i + "]");
if (dependIndexed == null) {
dependIndexed = "false";
}
boolean this_required = false;
if (field.isIndexed() && dependIndexed.equalsIgnoreCase("true")) {
String key = field.getKey();
if ((key.contains("[")) && (key.contains("]"))) {
String ind = key.substring(0, key.indexOf(".") + 1);
dependProp = ind + dependProp;
}
}
String dependVal = ValidatorUtils.getValueAsString(form, dependProp);
if (dependTest.equals(FIELD_TEST_NULL)) {
if ((dependVal != null) && (!dependVal.isEmpty())) {
this_required = false;
} else {
this_required = true;
}
}
if (dependTest.equals(FIELD_TEST_NOTNULL)) {
if ((dependVal != null) && (!dependVal.isEmpty())) {
this_required = true;
} else {
this_required = false;
}
}
if (dependTest.equals(FIELD_TEST_EQUAL)) {
this_required = dependTestValue.equalsIgnoreCase(dependVal);
}
if (fieldJoin.equalsIgnoreCase("AND")) {
required = required && this_required;
} else {
required = required || this_required;
}
i++;
}
if (required) {
if ((value != null) && (!value.isEmpty())) {
return true;
} else {
return false;
}
}
return true;
}
private static boolean isStringOrNull(Object o) {
if (o == null) {
return true; // TODO this condition is not exercised by any tests currently
}
return (o instanceof String);
}
}