InputType
- Implementor pull-parser typeInputNodeType
- Implementor tree-parser node typepublic abstract class ValueDeserializerAdapter<InputType,InputNodeType> extends Object implements org.qi4j.api.value.ValueDeserializer
Among Plain values (see ValueDeserializer
) some are considered primitives to underlying serialization
mechanisms and by so handed/come without conversion to/from implementations. Primitive values can be one of:
Some other Plain values are expected in given formats:
ValueSerializer.Options
;LocalDateTime.LocalDateTime(java.lang.Object)
accept as instant;LocalDate.LocalDate(java.lang.Object)
accept as instant;Modifier and Type | Class and Description |
---|---|
static interface |
ValueDeserializerAdapter.ComplexDeserializer<T,InputType,InputNodeType> |
Modifier | Constructor and Description |
---|---|
protected |
ValueDeserializerAdapter(org.qi4j.api.structure.Application application,
org.qi4j.api.structure.Module module,
org.qi4j.functional.Function<org.qi4j.api.structure.Application,org.qi4j.api.structure.Module> valuesModuleFinder) |
|
ValueDeserializerAdapter(org.qi4j.api.structure.Application application,
org.qi4j.api.structure.Module module,
org.qi4j.api.service.ServiceReference<org.qi4j.api.value.ValueDeserializer> serviceRef) |
Modifier and Type | Method and Description |
---|---|
protected abstract InputType |
adaptInput(InputStream input)
This method is always called first, this is a chance to wrap the input type.
|
protected abstract Object |
asSimpleValue(InputNodeType inputNode) |
<T> org.qi4j.functional.Function2<org.qi4j.api.type.ValueType,String,T> |
deserialize() |
<T> T |
deserialize(Class<?> type,
InputStream input) |
<T> T |
deserialize(Class<?> type,
String input) |
<T> org.qi4j.functional.Function<String,T> |
deserialize(Class<T> type) |
<T> org.qi4j.functional.Function<String,T> |
deserialize(org.qi4j.api.type.ValueType valueType) |
<T> T |
deserialize(org.qi4j.api.type.ValueType valueType,
InputStream input) |
<T> T |
deserialize(org.qi4j.api.type.ValueType valueType,
String input) |
protected abstract <T> T |
getObjectFieldValue(InputNodeType inputNode,
String key,
org.qi4j.functional.Function<InputNodeType,T> valueDeserializer)
Return null if the field do not exists.
|
protected abstract boolean |
isObjectValue(InputNodeType inputNode) |
protected abstract boolean |
objectHasField(InputNodeType inputNode,
String key) |
protected void |
onDeserializationEnd(org.qi4j.api.type.ValueType valueType,
InputType input)
Called by the adapter on deserialization end.
|
protected void |
onDeserializationStart(org.qi4j.api.type.ValueType valueType,
InputType input)
Called by the adapter on deserialization start, after
adaptInput(java.io.InputStream) . |
protected abstract <T> void |
putArrayNodeInCollection(InputNodeType inputNode,
org.qi4j.functional.Function<InputNodeType,T> deserializer,
Collection<T> collection) |
protected abstract <K,V> void |
putArrayNodeInMap(InputNodeType inputNode,
org.qi4j.functional.Function<InputNodeType,K> keyDeserializer,
org.qi4j.functional.Function<InputNodeType,V> valueDeserializer,
Map<K,V> map) |
protected abstract <V> void |
putObjectNodeInMap(InputNodeType inputNode,
org.qi4j.functional.Function<InputNodeType,V> valueDeserializer,
Map<String,V> map) |
protected abstract <T> Collection<T> |
readArrayInCollection(InputType input,
org.qi4j.functional.Function<InputType,T> deserializer,
Collection<T> collection) |
protected abstract <K,V> Map<K,V> |
readMapInMap(InputType input,
org.qi4j.functional.Function<InputType,K> keyDeserializer,
org.qi4j.functional.Function<InputType,V> valueDeserializer,
Map<K,V> map)
A Map<K,V> is serialized in an array of entries objects.
|
protected abstract InputNodeType |
readObjectTree(InputType input) |
protected abstract Object |
readPlainValue(InputType input) |
protected <T> void |
registerComplexDeserializer(Class<T> type,
ValueDeserializerAdapter.ComplexDeserializer<T,InputType,InputNodeType> deserializer) |
protected <T> void |
registerDeserializer(Class<T> type,
org.qi4j.functional.Function<Object,T> deserializer)
Register a Plain Value type deserialization Function.
|
public ValueDeserializerAdapter(@Structure org.qi4j.api.structure.Application application, @Structure org.qi4j.api.structure.Module module, @Service org.qi4j.api.service.ServiceReference<org.qi4j.api.value.ValueDeserializer> serviceRef)
protected ValueDeserializerAdapter(org.qi4j.api.structure.Application application, org.qi4j.api.structure.Module module, org.qi4j.functional.Function<org.qi4j.api.structure.Application,org.qi4j.api.structure.Module> valuesModuleFinder)
protected final <T> void registerDeserializer(Class<T> type, org.qi4j.functional.Function<Object,T> deserializer)
T
- Plain Value parametrized Typetype
- Plain Value Typedeserializer
- Deserialization Functionprotected final <T> void registerComplexDeserializer(Class<T> type, ValueDeserializerAdapter.ComplexDeserializer<T,InputType,InputNodeType> deserializer)
public <T> org.qi4j.functional.Function<String,T> deserialize(Class<T> type)
deserialize
in interface org.qi4j.api.value.ValueDeserializer
public final <T> org.qi4j.functional.Function<String,T> deserialize(org.qi4j.api.type.ValueType valueType)
deserialize
in interface org.qi4j.api.value.ValueDeserializer
public final <T> org.qi4j.functional.Function2<org.qi4j.api.type.ValueType,String,T> deserialize()
deserialize
in interface org.qi4j.api.value.ValueDeserializer
public final <T> T deserialize(Class<?> type, String input) throws org.qi4j.api.value.ValueSerializationException
deserialize
in interface org.qi4j.api.value.ValueDeserializer
org.qi4j.api.value.ValueSerializationException
public final <T> T deserialize(org.qi4j.api.type.ValueType valueType, String input) throws org.qi4j.api.value.ValueSerializationException
deserialize
in interface org.qi4j.api.value.ValueDeserializer
org.qi4j.api.value.ValueSerializationException
public final <T> T deserialize(Class<?> type, InputStream input) throws org.qi4j.api.value.ValueSerializationException
deserialize
in interface org.qi4j.api.value.ValueDeserializer
org.qi4j.api.value.ValueSerializationException
public final <T> T deserialize(org.qi4j.api.type.ValueType valueType, InputStream input) throws org.qi4j.api.value.ValueSerializationException
deserialize
in interface org.qi4j.api.value.ValueDeserializer
org.qi4j.api.value.ValueSerializationException
protected void onDeserializationStart(org.qi4j.api.type.ValueType valueType, InputType input) throws Exception
adaptInput(java.io.InputStream)
.valueType
- ValueTypeinput
- InputException
- that will be wrapped in a ValueSerializationException
protected void onDeserializationEnd(org.qi4j.api.type.ValueType valueType, InputType input) throws Exception
valueType
- ValueTypeinput
- InputException
- that will be wrapped in a ValueSerializationException
protected abstract InputType adaptInput(InputStream input) throws Exception
input
- InputStream to adaptException
- that will be wrapped in a ValueSerializationException
protected abstract Object readPlainValue(InputType input) throws Exception
input
- InputException
- that will be wrapped in a ValueSerializationException
protected abstract <T> Collection<T> readArrayInCollection(InputType input, org.qi4j.functional.Function<InputType,T> deserializer, Collection<T> collection) throws Exception
T
- Parameterized collection typeinput
- Inputdeserializer
- Deserialization functioncollection
- CollectionException
- that will be wrapped in a ValueSerializationException
protected abstract <K,V> Map<K,V> readMapInMap(InputType input, org.qi4j.functional.Function<InputType,K> keyDeserializer, org.qi4j.functional.Function<InputType,V> valueDeserializer, Map<K,V> map) throws Exception
Here is an example in JSON:
[ { "key": "foo", "value": "bar" }, { "key": "cathedral", "value": "bazar" } ]
And an empty Map:
[]
This allow to use any type as keys and values while keeping the Map order at the cost of having non-predictible order of key/value inside an entry object.
K
- Parameterized map key typeV
- Parameterized map value typeinput
- InputkeyDeserializer
- Map key deserialization functionvalueDeserializer
- Map value deserialization functionmap
- MapException
- that will be wrapped in a ValueSerializationException
protected abstract InputNodeType readObjectTree(InputType input) throws Exception
input
- InputException
- that will be wrapped in a ValueSerializationException
protected abstract Object asSimpleValue(InputNodeType inputNode) throws Exception
Exception
protected abstract boolean isObjectValue(InputNodeType inputNode) throws Exception
Exception
protected abstract boolean objectHasField(InputNodeType inputNode, String key) throws Exception
Exception
protected abstract <T> T getObjectFieldValue(InputNodeType inputNode, String key, org.qi4j.functional.Function<InputNodeType,T> valueDeserializer) throws Exception
T
- Parameterized object field value typeinputNode
- Input Nodekey
- Object keyvalueDeserializer
- Deserialization functionException
- that will be wrapped in a ValueSerializationException
protected abstract <T> void putArrayNodeInCollection(InputNodeType inputNode, org.qi4j.functional.Function<InputNodeType,T> deserializer, Collection<T> collection) throws Exception
Exception
protected abstract <K,V> void putArrayNodeInMap(InputNodeType inputNode, org.qi4j.functional.Function<InputNodeType,K> keyDeserializer, org.qi4j.functional.Function<InputNodeType,V> valueDeserializer, Map<K,V> map) throws Exception
Exception
protected abstract <V> void putObjectNodeInMap(InputNodeType inputNode, org.qi4j.functional.Function<InputNodeType,V> valueDeserializer, Map<String,V> map) throws Exception
Exception