public abstract class AbstractConverter<I,O> extends AbstractHandlerPlugin<ConversionRequest> implements Converter<I,O>
Converter
plugins. Performs appropriate
dispatching of canConvert(ConversionRequest)
and
convert(ConversionRequest)
calls based on the actual state of the
given ConversionRequest
.
Note that the supports(ConversionRequest)
method is overridden as
well, to delegate to the appropriate canConvert(org.scijava.convert.ConversionRequest)
.
NB: by default, the populateInputCandidates(Collection)
method has a
dummy implementation. Effectively, this is opt-in behavior. If a converter
implementation would like to suggest candidates for conversion, this method
can be overridden.
NB: by default, the provied canConvert(org.scijava.convert.ConversionRequest)
methods will return
false
if the input is null
. This allows Converter
implementors to assume any input is non-null
- but this behavior is
overridden. Casting null Object
inputs is handled by the
NullConverter
, while null class
inputs are handled by the
DefaultConverter
.
Constructor and Description |
---|
AbstractConverter() |
Modifier and Type | Method and Description |
---|---|
boolean |
canConvert(Class<?> src,
Class<?> dest)
Checks whether objects of the given class can be converted to the specified
type.
|
boolean |
canConvert(Class<?> src,
Type dest)
Deprecated.
|
boolean |
canConvert(ConversionRequest request)
Checks whether a given
ConversionRequest can be processed, by
converting the desired ConversionRequest.sourceClass() to its
ConversionRequest.destClass() or
ConversionRequest.destType() . |
boolean |
canConvert(Object src,
Class<?> dest)
Checks whether the given object's type can be converted to the specified
type.
|
boolean |
canConvert(Object src,
Type dest)
Checks whether the given object's type can be converted to the specified
type.
|
Object |
convert(ConversionRequest request)
Converts the given
ConversionRequest.sourceObject() to the
specified ConversionRequest.destClass() or
ConversionRequest.destType() . |
Object |
convert(Object src,
Type dest)
As
Converter.convert(Object, Class) but capable of creating and populating
multi-element objects (Collection s and array types). |
Class<ConversionRequest> |
getType()
Gets the type associated with the object.
|
void |
populateInputCandidates(Collection<Object> objects)
Populates the given collection with objects which are known to exist, and
which are usable as inputs for this converter.
|
boolean |
supports(ConversionRequest request)
Gets whether this object is compatible with the given data object.
|
getInfo, getPriority, setInfo, setPriority, toString
context, getContext
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
convert, getInputType, getOutputType
getIdentifier, log
context, getContext, setContext
compareTo, getPriority, setPriority
getInfo, setInfo
getLocation
getVersion
public boolean canConvert(ConversionRequest request)
Converter
ConversionRequest
can be processed, by
converting the desired ConversionRequest.sourceClass()
to its
ConversionRequest.destClass()
or
ConversionRequest.destType()
.canConvert
in interface Converter<I,O>
Converter.convert(ConversionRequest)
public boolean canConvert(Object src, Type dest)
Converter
Note that this does not necessarily entail that
Converter.convert(Object, Type)
on that specific object will succeed. For
example: canConvert("5.1", int.class)
will return true
because a String
can in general be converted to an int
, but
calling convert("5.1", int.class)
will throw a
NumberFormatException
when the conversion is actually attempted via
the Integer(String)
constructor.
canConvert
in interface Converter<I,O>
Converter.convert(Object, Type)
public boolean canConvert(Object src, Class<?> dest)
Converter
Note that this does not necessarily entail that
Converter.convert(Object, Class)
on that specific object will succeed. For
example: canConvert("5.1", int.class)
will return true
because a String
can in general be converted to an int
, but
calling convert("5.1", int.class)
will throw a
NumberFormatException
when the conversion is actually attempted via
the Integer(String)
constructor.
canConvert
in interface Converter<I,O>
Converter.convert(Object, Class)
public boolean canConvert(Class<?> src, Class<?> dest)
Converter
canConvert
in interface Converter<I,O>
Converter.convert(Object, Class)
public Object convert(Object src, Type dest)
Converter
Converter.convert(Object, Class)
but capable of creating and populating
multi-element objects (Collection
s and array types). If a single
element type is provided, it will be converted the same as
Converter.convert(Object, Class)
. If a multi-element type is detected, then
the value parameter will be interpreted as potential collection of values.
An appropriate container will be created, and the full set of values will
be type converted and added.
NB: This method should be capable of creating any array type, but if a
Collection
interface or abstract class is provided we can only make
a best guess as to what container type to instantiate. Defaults are
provided for Set
and List
subclasses.
public Object convert(ConversionRequest request)
Converter
ConversionRequest.sourceObject()
to the
specified ConversionRequest.destClass()
or
ConversionRequest.destType()
.convert
in interface Converter<I,O>
request
- ConversionRequest
to process.Converter.convert(Object, Class)
,
Converter.convert(Object, Type)
public void populateInputCandidates(Collection<Object> objects)
Converter
That is: each such object added to the collection would return true
if queried with converter.canConvert(object)
, and hence would
produce an output of type Converter.getOutputType()
if passed to
converter.convert(object)
.
The means by which "known objects" are determined is implementation
dependent, although the most typical use case is to query the
ObjectService
for known objects of type Converter.getInputType()
,
and return those. But other behaviors are possible, depending on the
converter implementation.
populateInputCandidates
in interface Converter<I,O>
objects
- an initialized collection into which appropriate objects
will be inserted.public boolean supports(ConversionRequest request)
Typed
By default, this method will return true
iff the data is assignable
to the associated type given by Typed.getType()
. But individual
implementations may have other requirements beyond class assignability.
supports
in interface Typed<ConversionRequest>
supports
in class AbstractTypedPlugin<ConversionRequest>
public Class<ConversionRequest> getType()
Typed
getType
in interface Typed<ConversionRequest>
@Deprecated public boolean canConvert(Class<?> src, Type dest)
Converter
canConvert
in interface Converter<I,O>
Converter.convert(Object, Type)
Copyright © 2015–2022 SciJava. All rights reserved.