if (!(action instanceof ActionSupport)) {
log.warn("Full Hibernate Plugin Validation Allowed only in Actions that 'ISA' ActionSupport");
return invocation.invoke();
}
ActionSupport actionAs = (ActionSupport) action;
log.debug("Full Hibernate Plugin Validation in "+actionAs.getClass());
Locale clientLocale = actionAs.getLocale();
// List<InvalidValue> invalidValuesFromRequest = new ArrayList<InvalidValue>();
Collection invalidValuesFromRequest = validator.validate(actionAs, clientLocale,getClass().getClassLoader());
/*
ResourceBundle clientResourceBundle = ResourceBundle.getBundle("org.hibernate.validator.resources.DefaultValidatorMessages", clientLocale, this.getClass().getClassLoader());
InputStream stream = getClass().getResourceAsStream("/ValidatorMessages.properties");
ClassValidator actionValidator = null;
if (stream!=null) {
PluginValidatorMessages validatorMessages = new PluginValidatorMessages(stream);
validatorMessages.setParent(clientResourceBundle);
actionValidator = new ClassValidator(action.getClass(),validatorMessages);
} else {
actionValidator = new ClassValidator(action.getClass(),clientResourceBundle);
}
// take all errors but discard when the field do not came from the request
// Only the first validation error by field is used.
InvalidValue[] invalidValues = actionValidator.getInvalidValues(action);
List<String> invalidFieldNames = new ArrayList<String>();
Map parameters = ActionContext.getContext().getParameters();
for (InvalidValue invalidValue : invalidValues) {
String fieldFullName = invalidValue.getPropertyPath();
if (invalidFieldNames.contains(fieldFullName))
continue;
if (parameters.containsKey(fieldFullName)) {
invalidValuesFromRequest.add(invalidValue);
invalidFieldNames.add(fieldFullName);
}
}
invalidValues=null;
invalidFieldNames.clear();
invalidFieldNames=null;
actionValidator=null;
*/
if (invalidValuesFromRequest.isEmpty()) {
log.debug("Full Hibernate Plugin Validation found no erros.");
actionAs.validate();
if (actionAs.hasActionErrors() || actionAs.hasFieldErrors()) {
log.debug("Full Hibernate Plugin found custom validation errors: "+actionAs.getFieldErrors()+" "+actionAs.getActionErrors());
return actionAs.input();
}
else {
return invocation.invoke();
}
} else {
validator.addFieldErrors(actionAs, invalidValuesFromRequest);
/*for (InvalidValue invalidValue : invalidValuesFromRequest) {
StringBuilder sbMessage = new StringBuilder(actionAs.getText(invalidValue.getPropertyPath(),""));
if (sbMessage.length()>0)
sbMessage.append(" - ");
sbMessage.append(actionAs.getText(invalidValue.getMessage()));
actionAs.addFieldError(invalidValue.getPropertyPath(), sbMessage.toString());
}*/
log.debug("Full Hibernate Plugin Validation found "+actionAs.getFieldErrors().size()+" validation Errors.");
actionAs.validate();
if (action instanceof Preparable) {
Method methodPrepare = Preparable.class.getDeclaredMethod("prepare");
methodPrepare.invoke(action);
}
return actionAs.input();
}
}