public class mxObjectCodec extends Object
Modifier and Type | Field and Description |
---|---|
protected Map<String,Method> |
accessors
Caches accessors for the given method names.
|
protected Set<String> |
exclude
Array containing the variable names that should be ignored by the codec.
|
protected Map<Class,Map<String,Field>> |
fields
Caches fields for faster access.
|
protected Set<String> |
idrefs
Array containing the variable names that should be turned into or
converted from references.
|
protected Map<String,String> |
mapping
Maps from from fieldnames to XML attribute names.
|
protected Map<String,String> |
reverse
Maps from from XML attribute names to fieldnames.
|
protected Object |
template
Holds the template object associated with this codec.
|
Constructor and Description |
---|
mxObjectCodec(Object template)
Constructs a new codec for the specified template object.
|
mxObjectCodec(Object template,
String[] exclude,
String[] idrefs,
Map<String,String> mapping)
Constructs a new codec for the specified template object.
|
Modifier and Type | Method and Description |
---|---|
protected void |
addObjectValue(Object obj,
String fieldname,
Object value,
Object template)
Sets the decoded child node as a value of the given object.
|
Object |
afterDecode(mxCodec dec,
Node node,
Object obj)
Hook for subclassers to post-process the object after decoding.
|
Node |
afterEncode(mxCodec enc,
Object obj,
Node node)
Hook for subclassers to post-process the node for the given object after
encoding and return the post-processed node.
|
Node |
beforeDecode(mxCodec dec,
Node node,
Object obj)
Hook for subclassers to pre-process the node for the specified object
and return the node to be used for further processing by
decode(mxCodec, Node) . |
Object |
beforeEncode(mxCodec enc,
Object obj,
Node node)
Hook for subclassers to pre-process the object before encoding.
|
protected Object |
cloneTemplate(Node node)
Returns a new instance of the template object for representing the given
node.
|
protected Object |
convertValueFromXml(Class<?> type,
Object value)
Converts XML attribute values to object of the given type.
|
protected Object |
convertValueToXml(Object value)
Converts true to "1" and false to "0".
|
Object |
decode(mxCodec dec,
Node node)
Parses the given node into the object or returns a new object
representing the given node.
|
Object |
decode(mxCodec dec,
Node node,
Object into)
Parses the given node into the object or returns a new object
representing the given node.
|
protected void |
decodeAttribute(mxCodec dec,
Node attr,
Object obj)
Reads the given attribute into the specified object.
|
protected void |
decodeAttributes(mxCodec dec,
Node node,
Object obj)
Decodes all attributes of the given node using decodeAttribute.
|
protected void |
decodeChild(mxCodec dec,
Node child,
Object obj)
Reads the specified child into the given object.
|
protected void |
decodeChildren(mxCodec dec,
Node node,
Object obj)
Decodec all children of the given node using decodeChild.
|
protected void |
decodeNode(mxCodec dec,
Node node,
Object obj)
Calls decodeAttributes and decodeChildren for the given node.
|
Node |
encode(mxCodec enc,
Object obj)
Encodes the specified object and returns a node representing then given
object.
|
protected void |
encodeElements(mxCodec enc,
Object obj,
Node node)
Encodes the child objects of arrays, maps and collections.
|
protected void |
encodeFields(mxCodec enc,
Object obj,
Node node)
Encodes the declared fields of the given object into the given node.
|
protected void |
encodeObject(mxCodec enc,
Object obj,
Node node)
Encodes the value of each member in then given obj
into the given node using
encodeFields(mxCodec, Object, Node)
and encodeElements(mxCodec, Object, Node) . |
protected void |
encodeValue(mxCodec enc,
Object obj,
String fieldname,
Object value,
Node node)
Converts the given value according to the mappings
and id-refs in this codec and uses
writeAttribute(mxCodec, Object, String, Object, Node)
to write the attribute into the given node. |
protected Method |
getAccessor(Object obj,
Field field,
boolean isGetter)
Returns the accessor (getter, setter) for the specified field.
|
protected String |
getAttributeName(String fieldname)
Returns the XML node attribute name for the given Java field name.
|
protected Field |
getField(Object obj,
String fieldname)
Returns the field with the specified name.
|
protected String |
getFieldName(String attributename)
Returns the Java field name for the given XML attribute name.
|
protected Object |
getFieldTemplate(Object obj,
String fieldname,
Node child)
Returns the template instance for the given field.
|
protected Object |
getFieldValue(Object obj,
String fieldname)
Returns the value of the field with the specified name in the specified
object instance.
|
protected Object |
getFieldValueWithAccessor(Object obj,
Field field)
Returns the value of the field using the accessor for the field if one exists.
|
protected Method |
getMethod(Object obj,
String methodname,
Class[] params)
Returns the method with the specified signature.
|
String |
getName()
Returns the name used for the nodenames and lookup of the codec when
classes are encoded and nodes are decoded.
|
Object |
getTemplate()
Returns the template object associated with this codec.
|
boolean |
isExcluded(Object obj,
String attr,
Object value,
boolean write)
Returns true if the given attribute is to be ignored by the codec.
|
protected boolean |
isPrimitiveValue(Object value)
Returns true if the given object is a primitive value.
|
boolean |
isReference(Object obj,
String attr,
Object value,
boolean isWrite)
Returns true if the given fieldname is to be treated as a textual
reference (ID).
|
boolean |
processInclude(mxCodec dec,
Node node,
Object into)
Returns true if the given node is an include directive and executes the
include by decoding the XML document.
|
protected void |
setFieldValue(Object obj,
String fieldname,
Object value)
Sets the value of the field with the specified name
in the specified object instance.
|
protected void |
setFieldValueWithAccessor(Object obj,
Field field,
Object value)
Sets the value of the given field using the accessor if one exists.
|
protected void |
writeAttribute(mxCodec enc,
Object obj,
String attr,
Object value,
Node node)
Writes the given value into node using writePrimitiveAttribute
or writeComplexAttribute depending on the type of the value.
|
protected void |
writeComplexAttribute(mxCodec enc,
Object obj,
String attr,
Object value,
Node node)
Writes the given value as a child node of the given node.
|
protected void |
writePrimitiveAttribute(mxCodec enc,
Object obj,
String attr,
Object value,
Node node)
Writes the given value as an attribute of the given node.
|
protected Object template
protected Set<String> exclude
protected Set<String> idrefs
public mxObjectCodec(Object template)
public mxObjectCodec(Object template, String[] exclude, String[] idrefs, Map<String,String> mapping)
template
- Prototypical instance of the object to be encoded/decoded.exclude
- Optional array of fieldnames to be ignored.idrefs
- Optional array of fieldnames to be converted to/from references.mapping
- Optional mapping from field- to attributenames.public String getName()
mxCodecRegistry.register(new mxCellCodec()
{
public String getName()
{
return "anotherName";
}
});
public Object getTemplate()
protected Object cloneTemplate(Node node)
node
- XML node that the object is going to represent.public boolean isExcluded(Object obj, String attr, Object value, boolean write)
exclude
.obj
- Object instance that contains the field.attr
- Fieldname of the field.value
- Value of the field.write
- Boolean indicating if the field is being encoded or
decoded. write is true if the field is being encoded, else it is
being decoded.public boolean isReference(Object obj, String attr, Object value, boolean isWrite)
idrefs
.obj
- Object instance that contains the field.attr
- Fieldname of the field.value
- Value of the field.isWrite
- Boolean indicating if the field is being encoded or
decoded. isWrite is true if the field is being encoded, else it is being
decoded.public Node encode(mxCodec enc, Object obj)
exclude
then it is ignored.idrefs
then
mxCodec.getId(Object)
is used to replace the object with its ID.
mapping
.mxCodec.isEncodeDefaults()
is true or
the value differs from the template value, then ...
idrefs
or if an object cannot be
encoded, a warning is printed to System.err.enc
- Codec that controls the encoding process.obj
- Object to be encoded.protected void encodeObject(mxCodec enc, Object obj, Node node)
encodeFields(mxCodec, Object, Node)
and encodeElements(mxCodec, Object, Node)
.enc
- Codec that controls the encoding process.obj
- Object to be encoded.node
- XML node that contains the encoded object.protected void encodeFields(mxCodec enc, Object obj, Node node)
enc
- Codec that controls the encoding process.obj
- Object whose fields should be encoded.node
- XML node that contains the encoded object.protected void encodeElements(mxCodec enc, Object obj, Node node)
enc
- Codec that controls the encoding process.obj
- Object whose child objects should be encoded.node
- XML node that contains the encoded object.protected void encodeValue(mxCodec enc, Object obj, String fieldname, Object value, Node node)
writeAttribute(mxCodec, Object, String, Object, Node)
to write the attribute into the given node.enc
- Codec that controls the encoding process.obj
- Object whose field is going to be encoded.fieldname
- Name if the field to be encoded.value
- Value of the property to be encoded.node
- XML node that contains the encoded object.protected boolean isPrimitiveValue(Object value)
value
- Object that should be checked.protected void writeAttribute(mxCodec enc, Object obj, String attr, Object value, Node node)
protected void writePrimitiveAttribute(mxCodec enc, Object obj, String attr, Object value, Node node)
protected void writeComplexAttribute(mxCodec enc, Object obj, String attr, Object value, Node node)
protected Object convertValueToXml(Object value)
protected Object convertValueFromXml(Class<?> type, Object value)
protected String getAttributeName(String fieldname)
protected String getFieldName(String attributename)
attributename
- The attribute name to be mapped.protected Field getField(Object obj, String fieldname)
protected Method getAccessor(Object obj, Field field, boolean isGetter)
protected Method getMethod(Object obj, String methodname, Class[] params)
protected Object getFieldValue(Object obj, String fieldname)
protected Object getFieldValueWithAccessor(Object obj, Field field)
protected void setFieldValue(Object obj, String fieldname, Object value)
protected void setFieldValueWithAccessor(Object obj, Field field, Object value)
public Object beforeEncode(mxCodec enc, Object obj, Node node)
enc
- Codec that controls the encoding process.obj
- Object to be encoded.node
- XML node to encode the object into.public Node afterEncode(mxCodec enc, Object obj, Node node)
enc
- Codec that controls the encoding process.obj
- Object to be encoded.node
- XML node that represents the default encoding.public Object decode(mxCodec dec, Node node)
dec
- Codec that controls the encoding process.node
- XML node to be decoded.public Object decode(mxCodec dec, Node node, Object into)
dec
- Codec that controls the encoding process.node
- XML node to be decoded.into
- Optional object to encode the node into.protected void decodeNode(mxCodec dec, Node node, Object obj)
protected void decodeAttributes(mxCodec dec, Node node, Object obj)
protected void decodeAttribute(mxCodec dec, Node attr, Object obj)
protected void decodeChildren(mxCodec dec, Node node, Object obj)
protected void decodeChild(mxCodec dec, Node child, Object obj)
protected Object getFieldTemplate(Object obj, String fieldname, Node child)
protected void addObjectValue(Object obj, String fieldname, Object value, Object template)
public boolean processInclude(mxCodec dec, Node node, Object into)
dec
- Codec that controls the encoding/decoding process.node
- XML node to be checked.into
- Optional object to pass-thru to the codec.public Node beforeDecode(mxCodec dec, Node node, Object obj)
decode(mxCodec, Node)
. The object is created based on the
template in the calling method and is never null.
This implementation returns the input node. The return value of this
function is used in decode(mxCodec, Node)
to perform the
default decoding into the given object.dec
- Codec that controls the decoding process.node
- XML node to be decoded.obj
- Object to encode the node into.public Object afterDecode(mxCodec dec, Node node, Object obj)
decode(mxCodec, Node)
.dec
- Codec that controls the decoding process.node
- XML node to be decoded.obj
- Object that represents the default decoding.Copyright (c) 2010 Gaudenz Alder, David Benson. All rights reserved.