org.springframework.beans.propertyeditors

Class CustomCollectionEditor

  • java.lang.Object
    • java.beans.PropertyEditorSupport
      • org.springframework.beans.propertyeditors.CustomCollectionEditor
  • All Implemented Interfaces:
    java.beans.PropertyEditor


    public class CustomCollectionEditor
    extends java.beans.PropertyEditorSupport
    Property editor for Collections, converting any source Collection to a given target Collection type.

    By default registered for Set, SortedSet and List, to automatically convert any given Collection to one of those target types if the type does not match the target property.

    Since:
    1.1.3
    Author:
    Juergen Hoeller
    See Also:
    Collection, Set, SortedSet, List
    • Constructor Summary

      Constructors 
      Constructor and Description
      CustomCollectionEditor(java.lang.Class<? extends java.util.Collection> collectionType)
      Create a new CustomCollectionEditor for the given target type, keeping an incoming null as-is.
      CustomCollectionEditor(java.lang.Class<? extends java.util.Collection> collectionType, boolean nullAsEmptyCollection)
      Create a new CustomCollectionEditor for the given target type.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method and Description
      protected boolean alwaysCreateNewCollection()
      Return whether to always create a new Collection, even if the type of the passed-in Collection already matches.
      protected java.lang.Object convertElement(java.lang.Object element)
      Hook to convert each encountered Collection/array element.
      protected java.util.Collection<java.lang.Object> createCollection(java.lang.Class<? extends java.util.Collection> collectionType, int initialCapacity)
      Create a Collection of the given type, with the given initial capacity (if supported by the Collection type).
      java.lang.String getAsText()
      This implementation returns null to indicate that there is no appropriate text representation.
      void setAsText(java.lang.String text)
      Convert the given text value to a Collection with a single element.
      void setValue(java.lang.Object value)
      Convert the given value to a Collection of the target type.
      • Methods inherited from class java.beans.PropertyEditorSupport

        addPropertyChangeListener, firePropertyChange, getCustomEditor, getJavaInitializationString, getSource, getTags, getValue, isPaintable, paintValue, removePropertyChangeListener, setSource, supportsCustomEditor
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • CustomCollectionEditor

        public CustomCollectionEditor(java.lang.Class<? extends java.util.Collection> collectionType)
        Create a new CustomCollectionEditor for the given target type, keeping an incoming null as-is.
        Parameters:
        collectionType - the target type, which needs to be a sub-interface of Collection or a concrete Collection class
        See Also:
        Collection, ArrayList, TreeSet, LinkedHashSet
      • CustomCollectionEditor

        public CustomCollectionEditor(java.lang.Class<? extends java.util.Collection> collectionType,
                                      boolean nullAsEmptyCollection)
        Create a new CustomCollectionEditor for the given target type.

        If the incoming value is of the given type, it will be used as-is. If it is a different Collection type or an array, it will be converted to a default implementation of the given Collection type. If the value is anything else, a target Collection with that single value will be created.

        The default Collection implementations are: ArrayList for List, TreeSet for SortedSet, and LinkedHashSet for Set.

        Parameters:
        collectionType - the target type, which needs to be a sub-interface of Collection or a concrete Collection class
        nullAsEmptyCollection - whether to convert an incoming null value to an empty Collection (of the appropriate type)
        See Also:
        Collection, ArrayList, TreeSet, LinkedHashSet
    • Method Detail

      • setAsText

        public void setAsText(java.lang.String text)
                       throws java.lang.IllegalArgumentException
        Convert the given text value to a Collection with a single element.
        Specified by:
        setAsText in interface java.beans.PropertyEditor
        Overrides:
        setAsText in class java.beans.PropertyEditorSupport
        Throws:
        java.lang.IllegalArgumentException
      • setValue

        public void setValue(@Nullable
                             java.lang.Object value)
        Convert the given value to a Collection of the target type.
        Specified by:
        setValue in interface java.beans.PropertyEditor
        Overrides:
        setValue in class java.beans.PropertyEditorSupport
      • createCollection

        protected java.util.Collection<java.lang.Object> createCollection(java.lang.Class<? extends java.util.Collection> collectionType,
                                                                          int initialCapacity)
        Create a Collection of the given type, with the given initial capacity (if supported by the Collection type).
        Parameters:
        collectionType - a sub-interface of Collection
        initialCapacity - the initial capacity
        Returns:
        the new Collection instance
      • alwaysCreateNewCollection

        protected boolean alwaysCreateNewCollection()
        Return whether to always create a new Collection, even if the type of the passed-in Collection already matches.

        Default is "false"; can be overridden to enforce creation of a new Collection, for example to convert elements in any case.

        See Also:
        convertElement(java.lang.Object)
      • convertElement

        protected java.lang.Object convertElement(java.lang.Object element)
        Hook to convert each encountered Collection/array element. The default implementation simply returns the passed-in element as-is.

        Can be overridden to perform conversion of certain elements, for example String to Integer if a String array comes in and should be converted to a Set of Integer objects.

        Only called if actually creating a new Collection! This is by default not the case if the type of the passed-in Collection already matches. Override alwaysCreateNewCollection() to enforce creating a new Collection in every case.

        Parameters:
        element - the source element
        Returns:
        the element to be used in the target Collection
        See Also:
        alwaysCreateNewCollection()
      • getAsText

        @Nullable
        public java.lang.String getAsText()
        This implementation returns null to indicate that there is no appropriate text representation.
        Specified by:
        getAsText in interface java.beans.PropertyEditor
        Overrides:
        getAsText in class java.beans.PropertyEditorSupport