public class CustomCollectionEditor
extends java.beans.PropertyEditorSupport
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.
Collection
,
Set
,
SortedSet
,
List
Modifier and Type | Field and Description |
---|---|
private java.lang.Class<? extends java.util.Collection> |
collectionType |
private boolean |
nullAsEmptyCollection |
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.
|
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.
|
private final java.lang.Class<? extends java.util.Collection> collectionType
private final boolean nullAsEmptyCollection
public CustomCollectionEditor(java.lang.Class<? extends java.util.Collection> collectionType)
null
as-is.collectionType
- the target type, which needs to be a
sub-interface of Collection or a concrete Collection classCollection
,
ArrayList
,
TreeSet
,
LinkedHashSet
public CustomCollectionEditor(java.lang.Class<? extends java.util.Collection> collectionType, boolean nullAsEmptyCollection)
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.
collectionType
- the target type, which needs to be a
sub-interface of Collection or a concrete Collection classnullAsEmptyCollection
- whether to convert an incoming null
value to an empty Collection (of the appropriate type)Collection
,
ArrayList
,
TreeSet
,
LinkedHashSet
public void setAsText(java.lang.String text) throws java.lang.IllegalArgumentException
setAsText
in interface java.beans.PropertyEditor
setAsText
in class java.beans.PropertyEditorSupport
java.lang.IllegalArgumentException
public void setValue(java.lang.Object value)
setValue
in interface java.beans.PropertyEditor
setValue
in class java.beans.PropertyEditorSupport
protected java.util.Collection<java.lang.Object> createCollection(java.lang.Class<? extends java.util.Collection> collectionType, int initialCapacity)
collectionType
- a sub-interface of CollectioninitialCapacity
- the initial capacityprotected boolean alwaysCreateNewCollection()
Default is "false"; can be overridden to enforce creation of a new Collection, for example to convert elements in any case.
convertElement(java.lang.Object)
protected java.lang.Object convertElement(java.lang.Object element)
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.
element
- the source elementalwaysCreateNewCollection()
public java.lang.String getAsText()
null
to indicate that
there is no appropriate text representation.getAsText
in interface java.beans.PropertyEditor
getAsText
in class java.beans.PropertyEditorSupport