01: /*
02: * Copyright 2002-2007 the original author or authors.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16:
17: package org.springframework.validation;
18:
19: /**
20: * A validator for application-specific objects.
21: *
22: * <p>This interface is totally divorced from any infrastructure
23: * or context; that is to say it is not coupled to validating
24: * only objects in the web tier, the data-access tier, or the
25: * whatever-tier. As such it is amenable to being used in any layer
26: * of an application, and supports the encapsulation of validation
27: * logic as first-class citizens in their own right.
28: *
29: * <p>Find below a simple but complete <code>Validator</code>
30: * implementation, which validates that the various {@link String}
31: * properties of a <code>UserLogin</code> instance are not empty
32: * (that is they are not <code>null</code> and do not consist
33: * wholly of whitespace), and that any password that is present is
34: * at least <code>'MINIMUM_PASSWORD_LENGTH'</code> characters in length.
35: *
36: * <pre class="code"> public class UserLoginValidator implements Validator {
37: *
38: * private static final int MINIMUM_PASSWORD_LENGTH = 6;
39: *
40: * public boolean supports(Class clazz) {
41: * return UserLogin.class.isAssignableFrom(clazz);
42: * }
43: *
44: * public void validate(Object target, Errors errors) {
45: * ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userName", "field.required");
46: * ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "field.required");
47: * UserLogin login = (UserLogin) target;
48: * if (login.getPassword() != null
49: * && login.getPassword().trim().length() < MINIMUM_PASSWORD_LENGTH) {
50: * errors.rejectValue("password", "field.min.length",
51: * new Object[]{Integer.valueOf(MINIMUM_PASSWORD_LENGTH)},
52: * "The password must be at least [" + MINIMUM_PASSWORD_LENGTH + "] characters in length.");
53: * }
54: * }
55: * }</pre>
56: *
57: * <p>See also the Spring reference manual for a fuller discussion of
58: * the <code>Validator</code> interface and it's role in a enterprise
59: * application.
60: *
61: * @author Rod Johnson
62: * @see Errors
63: * @see ValidationUtils
64: */
65: public interface Validator {
66:
67: /**
68: * Can this {@link Validator} {@link #validate(Object, Errors) validate}
69: * instances of the supplied <code>clazz</code>?
70: * <p>This method is <i>typically</i> implemented like so:
71: * <pre class="code">return Foo.class.isAssignableFrom(clazz);</pre>
72: * (Where <code>Foo</code> is the class (or superclass) of the actual
73: * object instance that is to be {@link #validate(Object, Errors) validated}.)
74: * @param clazz the {@link Class} that this {@link Validator} is
75: * being asked if it can {@link #validate(Object, Errors) validate}
76: * @return <code>true</code> if this {@link Validator} can indeed
77: * {@link #validate(Object, Errors) validate} instances of the
78: * supplied <code>clazz</code>
79: */
80: boolean supports(Class clazz);
81:
82: /**
83: * Validate the supplied <code>target</code> object, which must be
84: * of a {@link Class} for which the {@link #supports(Class)} method
85: * typically has (or would) return <code>true</code>.
86: * <p>The supplied {@link Errors errors} instance can be used to report
87: * any resulting validation errors.
88: * @param target the object that is to be validated (can be <code>null</code>)
89: * @param errors contextual state about the validation process (never <code>null</code>)
90: * @see ValidationUtils
91: */
92: void validate(Object target, Errors errors);
93:
94: }
|