You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@sling.apache.org by "Konrad Windszus (JIRA)" <ji...@apache.org> on 2014/11/06 11:25:33 UTC
[jira] [Commented] (SLING-4138) Allow validator to support
arbitrary types
[ https://issues.apache.org/jira/browse/SLING-4138?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14200054#comment-14200054 ]
Konrad Windszus commented on SLING-4138:
----------------------------------------
I would propose the following interface
{code}
/**
* A {@code Validator} is responsible for validating a single piece of information according to an internal constraint.
*/
public interface Validator<T> {
/**
* Validates the {@code data} according to the internal constraints of this validator.
*
* @param data the data to validate
* @return validation error message if validation was not successfull, {@code null} otherwise. In case an empty string is returned a generic validation error message is used.
* @throws org.apache.sling.validation.api.exceptions.SlingValidationException if the method is called with {@code null} arguments or
* some expected arguments are missing from the arguments map
*/
String validate(T data, Map<String, String> arguments) throws SlingValidationException;
}
{code}
The drawback is that the validate method can only be called through reflection (to ensure type safety here). Also I would rely on http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/ParameterizedType.html#getActualTypeArguments%28%29 to figure out which type is expected by the {{Validator.validate}} method. Are you fine with that approach or do you prefer something more explicit (not only relying on Generics as explained in this article: http://www.javacodegeeks.com/2013/12/advanced-java-generics-retreiving-generic-type-arguments.html)?
> Allow validator to support arbitrary types
> ------------------------------------------
>
> Key: SLING-4138
> URL: https://issues.apache.org/jira/browse/SLING-4138
> Project: Sling
> Issue Type: Improvement
> Components: Validation
> Reporter: Konrad Windszus
>
> Currently the {{Validator.validate}} method only act on String values.
> Since type conversion is already built into the ValueMap, it would be good to leverage that and to allow Validator to act on arbitrary types there!
> Also the type conversion from ValueMap should be leveraged to do the type check in {{ValidationServiceImpl.validatePropertyValue}} rather than implementing a new thing in {{Type.isValid()}}.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)