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.ValueDeserializerpublic final <T> org.qi4j.functional.Function<String,T> deserialize(org.qi4j.api.type.ValueType valueType)
deserialize in interface org.qi4j.api.value.ValueDeserializerpublic final <T> org.qi4j.functional.Function2<org.qi4j.api.type.ValueType,String,T> deserialize()
deserialize in interface org.qi4j.api.value.ValueDeserializerpublic final <T> T deserialize(Class<?> type, String input) throws org.qi4j.api.value.ValueSerializationException
deserialize in interface org.qi4j.api.value.ValueDeserializerorg.qi4j.api.value.ValueSerializationExceptionpublic 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.ValueDeserializerorg.qi4j.api.value.ValueSerializationExceptionpublic final <T> T deserialize(Class<?> type, InputStream input) throws org.qi4j.api.value.ValueSerializationException
deserialize in interface org.qi4j.api.value.ValueDeserializerorg.qi4j.api.value.ValueSerializationExceptionpublic 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.ValueDeserializerorg.qi4j.api.value.ValueSerializationExceptionprotected 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 ValueSerializationExceptionprotected void onDeserializationEnd(org.qi4j.api.type.ValueType valueType,
InputType input)
throws Exception
valueType - ValueTypeinput - InputException - that will be wrapped in a ValueSerializationExceptionprotected abstract InputType adaptInput(InputStream input) throws Exception
input - InputStream to adaptException - that will be wrapped in a ValueSerializationExceptionprotected abstract Object readPlainValue(InputType input) throws Exception
input - InputException - that will be wrapped in a ValueSerializationExceptionprotected 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 ValueSerializationExceptionprotected 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 ValueSerializationExceptionprotected abstract InputNodeType readObjectTree(InputType input) throws Exception
input - InputException - that will be wrapped in a ValueSerializationExceptionprotected abstract Object asSimpleValue(InputNodeType inputNode) throws Exception
Exceptionprotected abstract boolean isObjectValue(InputNodeType inputNode) throws Exception
Exceptionprotected abstract boolean objectHasField(InputNodeType inputNode, String key) throws Exception
Exceptionprotected 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 ValueSerializationExceptionprotected abstract <T> void putArrayNodeInCollection(InputNodeType inputNode, org.qi4j.functional.Function<InputNodeType,T> deserializer, Collection<T> collection) throws Exception
Exceptionprotected 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
Exceptionprotected abstract <V> void putObjectNodeInMap(InputNodeType inputNode, org.qi4j.functional.Function<InputNodeType,V> valueDeserializer, Map<String,V> map) throws Exception
Exception