org.springframework.beans.propertyeditors

## Class CustomMapEditor

- java.lang.Object
- - java.beans.PropertyEditorSupport
  - - org.springframework.beans.propertyeditors.CustomMapEditor

- All Implemented Interfaces:
    PropertyEditor

      public class CustomMapEditor
      extends PropertyEditorSupport

  Property editor for Maps, converting any source Map to a given target Map type.
  Since:
    2.0.1
  Author:
    Juergen Hoeller
  See Also:
    `Map`, `SortedMap`

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `CustomMapEditor(Class<? extends Map> mapType)` Create a new CustomMapEditor for the given target type, keeping an incoming `null` as-is.
    `CustomMapEditor(Class<? extends Map> mapType, boolean nullAsEmptyMap)` Create a new CustomMapEditor for the given target type.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected boolean` | `alwaysCreateNewMap()` Return whether to always create a new Map, even if the type of the passed-in Map already matches.
    `protected Object` | `convertKey(Object key)` Hook to convert each encountered Map key.
    `protected Object` | `convertValue(Object value)` Hook to convert each encountered Map value.
    `protected Map<Object,Object>` | `createMap(Class<? extends Map> mapType, int initialCapacity)` Create a Map of the given type, with the given initial capacity (if supported by the Map type).
    `String` | `getAsText()` This implementation returns `null` to indicate that there is no appropriate text representation.
    `void` | `setAsText(String text)` Convert the given text value to a Map with a single element.
    `void` | `setValue(Object value)` Convert the given value to a Map 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

    - #### CustomMapEditor

          public CustomMapEditor(Class<? extends Map> mapType)

      Create a new CustomMapEditor for the given target type, keeping an incoming `null` as-is.
      Parameters:
        `mapType` - the target type, which needs to be a sub-interface of Map or a concrete Map class
      See Also:
        `Map`, `HashMap`, `TreeMap`, `LinkedHashMap`

    - #### CustomMapEditor

          public CustomMapEditor(Class<? extends Map> mapType,
                                 boolean nullAsEmptyMap)

      Create a new CustomMapEditor 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 Map type or an array, it will be converted to a default implementation of the given Map type. If the value is anything else, a target Map with that single value will be created.

      The default Map implementations are: TreeMap for SortedMap, and LinkedHashMap for Map.

      Parameters:
        `mapType` - the target type, which needs to be a sub-interface of Map or a concrete Map class
        `nullAsEmptyMap` - ap whether to convert an incoming `null` value to an empty Map (of the appropriate type)
      See Also:
        `Map`, `TreeMap`, `LinkedHashMap`

  - ### Method Detail

    - #### setAsText

          public void setAsText(String text)
                         throws IllegalArgumentException

      Convert the given text value to a Map with a single element.
      Specified by:
        `setAsText` in interface `PropertyEditor`
      Overrides:
        `setAsText` in class `PropertyEditorSupport`
      Throws:
        `IllegalArgumentException`

    - #### setValue

          public void setValue(Object value)

      Convert the given value to a Map of the target type.
      Specified by:
        `setValue` in interface `PropertyEditor`
      Overrides:
        `setValue` in class `PropertyEditorSupport`

    - #### createMap

          protected Map<Object,Object> createMap(Class<? extends Map> mapType,
                                                 int initialCapacity)

      Create a Map of the given type, with the given initial capacity (if supported by the Map type).
      Parameters:
        `mapType` - a sub-interface of Map
        `initialCapacity` - the initial capacity
      Returns:
        the new Map instance

    - #### alwaysCreateNewMap

          protected boolean alwaysCreateNewMap()

      Return whether to always create a new Map, even if the type of the passed-in Map already matches.

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

      See Also:
        `convertKey(java.lang.Object)`, `convertValue(java.lang.Object)`

    - #### convertKey

          protected Object convertKey(Object key)

      Hook to convert each encountered Map key. The default implementation simply returns the passed-in key as-is.

      Can be overridden to perform conversion of certain keys, for example from String to Integer.

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

      Parameters:
        `key` - the source key
      Returns:
        the key to be used in the target Map
      See Also:
        `alwaysCreateNewMap()`

    - #### convertValue

          protected Object convertValue(Object value)

      Hook to convert each encountered Map value. The default implementation simply returns the passed-in value as-is.

      Can be overridden to perform conversion of certain values, for example from String to Integer.

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

      Parameters:
        `value` - the source value
      Returns:
        the value to be used in the target Map
      See Also:
        `alwaysCreateNewMap()`

    - #### getAsText

          public String getAsText()

      This implementation returns `null` to indicate that there is no appropriate text representation.
      Specified by:
        `getAsText` in interface `PropertyEditor`
      Overrides:
        `getAsText` in class `PropertyEditorSupport`