# TreeStrategy
Date: 2013-02-18

## org.simpleframework.xml.strategy
Class TreeStrategy

    java.lang.Object
      org.simpleframework.xml.strategy.TreeStrategy

All Implemented Interfaces:
  Strategy

    public class TreeStrategy

extends java.lang.Object
implements Strategy

The `TreeStrategy` object is used to provide a simple strategy for handling object graphs in a tree structure. This does not resolve cycles in the object graph. This will make use of the specified class attribute to resolve the class to use for a given element during the deserialization process. For the serialization process the "class" attribute will be added to the element specified. If there is a need to use an attribute name other than "class" then the name of the attribute to use can be specified.

Author:
  Niall Gallagher
See Also:
  `CycleStrategy`

Constructor Summary
`TreeStrategy()` Constructor for the `TreeStrategy` object.
`TreeStrategy(java.lang.String label, java.lang.String length)` Constructor for the `TreeStrategy` object.

Method Summary
`Value` `read(Type type, NodeMap node, java.util.Map map)` This is used to resolve and load a class for the given element.
`boolean` `write(Type type, java.lang.Object value, NodeMap node, java.util.Map map)` This is used to attach a attribute to the provided element that is used to identify the class.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### TreeStrategy

    public TreeStrategy()

  Constructor for the `TreeStrategy` object. This is used to create a strategy that can resolve and load class objects for deserialization using a "class" attribute. Also for serialization this will add the appropriate "class" value.

### TreeStrategy

    public TreeStrategy(java.lang.String label,
                        java.lang.String length)

  Constructor for the `TreeStrategy` object. This is used to create a strategy that can resolve and load class objects for deserialization using the specified attribute. The attribute value can be any legal XML attribute name.

  Parameters:
    `label` - this is the name of the attribute to use
    `length` - this is used to determine the array length

Method Detail

### read

    public Value read(Type type,
                      NodeMap node,
                      java.util.Map map)
               throws java.lang.Exception

  This is used to resolve and load a class for the given element. Resolution of the class to used is done by inspecting the XML element provided. If there is a "class" attribute on the element then its value is used to resolve the class to use. If no such attribute exists on the element this returns null.

  Specified by:
    `read` in interface `Strategy`
  Parameters:
    `type` - this is the type of the XML element expected
    `node` - this is the element used to resolve an override
    `map` - this is used to maintain contextual information
  Returns:
    returns the class that should be used for the object
  Throws:
    `java.lang.Exception` - thrown if the class cannot be resolved

### write

    public boolean write(Type type,
                         java.lang.Object value,
                         NodeMap node,
                         java.util.Map map)

  This is used to attach a attribute to the provided element that is used to identify the class. The attribute name is "class" and has the value of the fully qualified class name for the object provided. This will only be invoked if the object class is different from the field class.

  Specified by:
    `write` in interface `Strategy`
  Parameters:
    `type` - this is the declared class for the field used
    `value` - this is the instance variable being serialized
    `node` - this is the element used to represent the value
    `map` - this is used to maintain contextual information
  Returns:
    this returns true if serialization is complete