Open Source Repository

Home /spring/spring-beans-3.0.5 | Repository Home


org/springframework/beans/PropertyEditorRegistry.java
/*
 * Copyright 2002-2007 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.beans;

import java.beans.PropertyEditor;

/**
 * Encapsulates methods for registering JavaBeans {@link PropertyEditor PropertyEditors}.
 * This is the central interface that a {@link PropertyEditorRegistrar} operates on.
 *
 <p>Extended by {@link BeanWrapper}; implemented by {@link BeanWrapperImpl}
 * and {@link org.springframework.validation.DataBinder}.
 *
 @author Juergen Hoeller
 @since 1.2.6
 @see java.beans.PropertyEditor
 @see PropertyEditorRegistrar
 @see BeanWrapper
 @see org.springframework.validation.DataBinder
 */
public interface PropertyEditorRegistry {

  /**
   * Register the given custom property editor for all properties of the given type.
   @param requiredType the type of the property
   @param propertyEditor the editor to register
   */
  void registerCustomEditor(Class requiredType, PropertyEditor propertyEditor);

  /**
   * Register the given custom property editor for the given type and
   * property, or for all properties of the given type.
   <p>If the property path denotes an array or Collection property,
   * the editor will get applied either to the array/Collection itself
   * (the {@link PropertyEditor} has to create an array or Collection value) or
   * to each element (the <code>PropertyEditor</code> has to create the element type),
   * depending on the specified required type.
   <p>Note: Only one single registered custom editor per property path
   * is supported. In the case of a Collection/array, do not register an editor
   * for both the Collection/array and each element on the same property.
   <p>For example, if you wanted to register an editor for "items[n].quantity"
   * (for all values n), you would use "items.quantity" as the value of the
   * 'propertyPath' argument to this method.
   @param requiredType the type of the property. This may be <code>null</code>
   * if a property is given but should be specified in any case, in particular in
   * case of a Collection - making clear whether the editor is supposed to apply
   * to the entire Collection itself or to each of its entries. So as a general rule:
   <b>Do not specify <code>null</code> here in case of a Collection/array!</b>
   @param propertyPath the path of the property (name or nested path), or
   <code>null</code> if registering an editor for all properties of the given type
   @param propertyEditor editor to register
   */
  void registerCustomEditor(Class requiredType, String propertyPath, PropertyEditor propertyEditor);

  /**
   * Find a custom property editor for the given type and property.
   @param requiredType the type of the property (can be <code>null</code> if a property
   * is given but should be specified in any case for consistency checking)
   @param propertyPath the path of the property (name or nested path), or
   <code>null</code> if looking for an editor for all properties of the given type
   @return the registered editor, or <code>null</code> if none
   */
  PropertyEditor findCustomEditor(Class requiredType, String propertyPath);

}