Class IterableAdapter

All Implemented Interfaces:
Serializable
Direct Known Subclasses:
ArrayAdapter, CollectionAdapter, MapAdapter, PrimitiveArrayAdapter

public abstract class IterableAdapter extends PropertyAdapter
An IterableAdapter is the base class for any data type that must be iterated over to serialize/deserialize, such as arrays, collections and maps.

 <property>
   <name>People</name>
   <xml-name>people</xml-name>         <!-- optional, empty name indicates anonymous element -->
   <adapter>...</adapter>              <!-- optional -->
   <type>...</type>                    <!-- defaults via reflection -->
   <class>...</class>                  <!-- defaults to <type> -->
   <sparse>true</sparse>               <!-- defaults to false -->
   <empty-is-null>true</empty-is-null> <!-- defaults to false -->
   <element>                       <!-- optional, depends on the adapter -->
     <xml-name>person</xml-name>   <!-- optional, nests the elements -->
   </element>
 <property>

 Example of collection/array nested within collection tags:

   <doc>
     <people>
       <person>...</person>
       <person>...</person>
       ...
     </people>
   </doc>

 Example of collection/array nested directly within the document:

   <doc>
     <person>...</person>
     <person>...</person>
     ...
   </doc>

 Example of map nested within collection tags:

   <doc>
     <people>
       <person>
         <name>...</name>
         <number>...</number>
       </person>
       <person>
         <name>...</name>
         <number>...</number>
       </person>
       ...
     </people>
   </doc>

 Example of map nested directly within the document:

   <doc>
     <person>
       <name>...</name>
       <number>...</number>
     </person>
     <person>
       <name>...</name>
       <number>...</number>
     </person>
     ...
   </doc>
 
Version:
1.00 2001.03.18
Author:
cp
See Also:
  • Field Details

    • m_fSparse

      protected boolean m_fSparse
      Sparse array storage option.
    • m_fEmptyIsNull

      protected boolean m_fEmptyIsNull
      Empty-is-null option: Empty iterable values are not stored in the serialized form of the XmlBean nor in the XML form of the XmlBean.
    • m_sElement

      protected String m_sElement
      Name used for each element of the array when formatted into XML. If null, then the elements are placed directly into the document using the adapter's XML name.
  • Constructor Details

    • IterableAdapter

      public IterableAdapter(XmlBean.BeanInfo infoBean, Class clzType, String sName, String sXml, XmlElement xml)
      Construct a IterableAdapter.
      Parameters:
      infoBean - BeanInfo for a bean containing this property
      clzType - the type of the property
      sName - the property name
      sXml - the XML tag name
      xml - additional XML information
  • Method Details

    • isCloneRequired

      public boolean isCloneRequired()
      Description copied from class: PropertyAdapter
      Determine if the property value must be deep-cloned. Typically, a property value must be deep-cloned if it is a mutable reference type, e.g. StringBuffer, Date, byte[].
      Specified by:
      isCloneRequired in class PropertyAdapter
      Returns:
      true if the property value must be "deep" cloned when the containing object is cloned
    • isSparse

      public boolean isSparse()
      Returns:
      true if the iterable data should be stored in a sparse format in XML
    • isEmptyIsNull

      public boolean isEmptyIsNull()
      Returns:
      true if the iterable data should not be stored at all if it is empty, such as a zero-length array or empty collection
    • getElementName

      public String getElementName()
      Returns:
      the local XML name of the individual array elements (null if the array elements are nested directly within the document)
    • isNested

      public boolean isNested()
      Returns:
      true only if this adapter creates a single XML element on writeXml and reads from a single XML element on readXml
    • fromXml

      public Object fromXml(XmlElement xml)
      Deserialize an object from an XML element.
      Overrides:
      fromXml in class PropertyAdapter
      Parameters:
      xml - the XML element to deserialize from
      Returns:
      the object deserialized from the XML element
      Throws:
      UnsupportedOperationException - if the property cannot be read from a single XML element
    • toXml

      public XmlElement toXml(Object o)
      Serialize an object into an XML element.
      Overrides:
      toXml in class PropertyAdapter
      Parameters:
      o - the object to serialize
      Returns:
      the XML element representing the serialized form of the passed object
      Throws:
      UnsupportedOperationException - if the property cannot be written to a single XML element
    • readElements

      protected abstract Object readElements(XmlElement xml)
      Parameters:
      xml - the XML element containing the XML elements to deserialize from
      Returns:
      the object deserialized from the XML (not null)
    • writeElements

      protected abstract void writeElements(XmlElement xml, Object o)
      Parameters:
      xml - the XML element to which the iterable elements are written
      o - the object to serialize (not null)
    • findAdapter

      protected PropertyAdapter findAdapter(XmlBean.BeanInfo infoBean, XmlElement xml)
      Obtain a PropertyAdapapter for a map entry key or value
      Parameters:
      infoBean - BeanInfo for a bean containing this property
      xml - the information about the map entry key or value
      Returns:
      a PropertyAdapter for the map entry key or value