package kcg.faics.comn.validator;
import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.validator.Field;
import org.apache.commons.validator.GenericValidator;
import org.apache.commons.validator.ValidatorAction;
import org.apache.commons.validator.util.ValidatorUtils;
import org.apache.oro.text.perl.Perl5Util;
import org.springframework.validation.Errors;
import org.springframework.web.multipart.MultipartFile;
import org.springmodules.validation.commons.FieldChecks;
/**
* 유효성 검사 클래스.
*
* @author kimnomin
*
*/
public class KcgFieldChecks extends FieldChecks {
/**
* sericalVersion UID.
*/
private static final long serialVersionUID = -2911390948016164140L;
/**
* Log used by this class.
*/
private static final Log LOGGER = LogFactory.getLog(FieldChecks.class);
/**
* 파일 확장자 체크.
*
* @param bean
* The bean validation is being performed on.
* @param va
* The ValidatorAction that is currently being
* performed.
* @param field
* field The Field object associated with the
* current field being validated.
* @param errors
* Errors The Errors object to add errors to if any
* validation errors occur.
* @return true Valid. false inValid.
*/
public static boolean validateFileExt(final Object bean,
final ValidatorAction va, final Field field, final Errors errors) {
String value = extractValue(bean, field);
String extStr = field.getVarValue("ext");
try {
String[] validExts;
String regexp = "";
if (!GenericValidator.isBlankOrNull(extStr)) {
int loopIdx = 0;
validExts = extStr.split(",");
regexp = "\\.(";
for (String s : validExts) {
if (loopIdx > 0) {
regexp += "|";
}
regexp += s;
loopIdx++;
}
regexp += ")$";
}
Perl5Util matcher = null;
try {
matcher = new Perl5Util();
} catch (Exception e) {
e.printStackTrace();
}
if (value != null) {
boolean isValid = matcher.match("/" + regexp + "/i", value);
if (!GenericValidator.isBlankOrNull(value) && !isValid) {
FieldChecks.rejectValue(errors, field, va);
return false;
} else {
return true;
}
} else {
return true;
}
} catch (Exception e) {
e.printStackTrace();
KcgFieldChecks.LOGGER.error(e.getMessage(), e);
}
return true;
}
public static boolean validateStrRegex(final Object bean,
final ValidatorAction va, final Field field, final Errors errors) {
String value = FieldChecks.extractValue(bean, field);
String idRegex = field.getVarValue("regex");
if (!value.matches(idRegex)) {
FieldChecks.rejectValue(errors, field, va);
return false;
} else {
return true;
}
}
/**
* 객체 내 프로퍼티의 값을 추출하여 반환한다.
*
*
* FieldCheck.extractValue 메소드 Override. ** * @param bean * 값을 추출할 대상 객체 * @param field * 실제 값을 추출할 대상 객체의 프로퍼티 * @return bean.field가 갖고 있는 값 */ protected static String extractValue(final Object bean, final Field field) { String value = null; if (bean == null) { return null; } else if (bean instanceof String) { value = (String) bean; } else { value = getValueAsString(bean, field.getProperty()); } return value; } /** * 객체 내 프로퍼티의 값을 추출하여 반환한다. * *
* ValidatorUtils.getValueAsString 메소드 커스터 마이징. ** * @param bean * bean 값을 추출할 대상 객체 * @param property * 실제 값을 추출할 대상 객체의 프로퍼티 * @return bean.field가 갖고 있는 값 */ public static String getValueAsString(final Object bean, final String property) { Object value = null; try { value = PropertyUtils.getProperty(bean, property); } catch (IllegalAccessException e) { Log log = LogFactory.getLog(ValidatorUtils.class); log.error(e.getMessage(), e); } catch (InvocationTargetException e) { Log log = LogFactory.getLog(ValidatorUtils.class); log.error(e.getMessage(), e); } catch (NoSuchMethodException e) { Log log = LogFactory.getLog(ValidatorUtils.class); log.error(e.getMessage(), e); } if (value == null) { return null; } if (value instanceof String[]) { return ((String[]) value).length > 0 ? value.toString() : ""; } else if (value instanceof Collection) { return ((Collection) value).isEmpty() ? "" : value.toString(); } else if (value instanceof MultipartFile) { MultipartFile file = (MultipartFile) value; if (file.isEmpty()) { return ""; } else { return file.getOriginalFilename(); } } else { return value.toString(); } } }