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.beans;
18:
19: import java.beans.PropertyEditor;
20:
21: /**
22: * Encapsulates methods for registering JavaBeans {@link PropertyEditor PropertyEditors}.
23: * This is the central interface that a {@link PropertyEditorRegistrar} operates on.
24: *
25: * <p>Extended by {@link BeanWrapper}; implemented by {@link BeanWrapperImpl}
26: * and {@link org.springframework.validation.DataBinder}.
27: *
28: * @author Juergen Hoeller
29: * @since 1.2.6
30: * @see java.beans.PropertyEditor
31: * @see PropertyEditorRegistrar
32: * @see BeanWrapper
33: * @see org.springframework.validation.DataBinder
34: */
35: public interface PropertyEditorRegistry {
36:
37: /**
38: * Register the given custom property editor for all properties of the given type.
39: * @param requiredType the type of the property
40: * @param propertyEditor the editor to register
41: */
42: void registerCustomEditor(Class requiredType,
43: PropertyEditor propertyEditor);
44:
45: /**
46: * Register the given custom property editor for the given type and
47: * property, or for all properties of the given type.
48: * <p>If the property path denotes an array or Collection property,
49: * the editor will get applied either to the array/Collection itself
50: * (the {@link PropertyEditor} has to create an array or Collection value) or
51: * to each element (the <code>PropertyEditor</code> has to create the element type),
52: * depending on the specified required type.
53: * <p>Note: Only one single registered custom editor per property path
54: * is supported. In the case of a Collection/array, do not register an editor
55: * for both the Collection/array and each element on the same property.
56: * <p>For example, if you wanted to register an editor for "items[n].quantity"
57: * (for all values n), you would use "items.quantity" as the value of the
58: * 'propertyPath' argument to this method.
59: * @param requiredType the type of the property. This may be <code>null</code>
60: * if a property is given but should be specified in any case, in particular in
61: * case of a Collection - making clear whether the editor is supposed to apply
62: * to the entire Collection itself or to each of its entries. So as a general rule:
63: * <b>Do not specify <code>null</code> here in case of a Collection/array!</b>
64: * @param propertyPath the path of the property (name or nested path), or
65: * <code>null</code> if registering an editor for all properties of the given type
66: * @param propertyEditor editor to register
67: */
68: void registerCustomEditor(Class requiredType, String propertyPath,
69: PropertyEditor propertyEditor);
70:
71: /**
72: * Find a custom property editor for the given type and property.
73: * @param requiredType the type of the property (can be <code>null</code> if a property
74: * is given but should be specified in any case for consistency checking)
75: * @param propertyPath the path of the property (name or nested path), or
76: * <code>null</code> if looking for an editor for all properties of the given type
77: * @return the registered editor, or <code>null</code> if none
78: */
79: PropertyEditor findCustomEditor(Class requiredType,
80: String propertyPath);
81:
82: }
|