Class Reader<T>

java.lang.Object
io.jenetics.xml.stream.Reader<T>

public abstract class Reader<T> extends Object
XML reader class, used for reading objects in XML format. XML
 
 <int-chromosome length="3">
     <min>-2147483648</min>
     <max>2147483647</max>
     <alleles>
         <allele>-1878762439</allele>
         <allele>-957346595</allele>
         <allele>-88668137</allele>
     </alleles>
 </int-chromosome>
 
Reader definition
final Reader<IntegerChromosome> reader = elem( (Object[] v) -> { final int length = (int)v[0]; final int min = (int)v[1]; final int max = (int)v[2]; final List<Integer> alleles = (List<Integer>)v[3]; assert alleles.size() == length; return IntegerChromosome.of( alleles.stream() .map(value -> IntegerGene.of(value, min, max) .toArray(IntegerGene[]::new) ); }, "int-chromosome", attr("length").map(Integer::parseInt), elem("min", text().map(Integer::parseInt)), elem("max", text().map(Integer::parseInt)), elem("alleles", elems(elem("allele", text().map(Integer::parseInt))) ) );
Since:
3.9
Version:
3.9
  • Method Summary

    Modifier and Type
    Method
    Description
    static Reader<String>
    attr(String name)
    Return a Reader for reading an attribute of an element.
    static <T> Reader<T>
    elem(String name, Reader<? extends T> reader)
    Return a Reader which reads the value from the child elements of the given parent element name.
    static <T> Reader<T>
    elem(Function<Object[],T> generator, String name, Reader<?>... children)
    Return a Reader for reading an object of type T from the XML element with the given name.
    static <T> Reader<List<T>>
    elems(Reader<? extends T> reader)
    Return a Reader which collects the elements, read by the given child reader, and returns it as list of these elements.
    <B> Reader<B>
    map(Function<? super T,? extends B> mapper)
    Create a new reader for the new mapped type B.
    abstract T
    Read the given type from the underlying XML stream reader.
    static Reader<String>
    Return a Reader for reading the text of an element.
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Method Details

    • read

      public abstract T read(XMLStreamReader xml) throws XMLStreamException
      Read the given type from the underlying XML stream reader.
      try (AutoCloseableXMLStreamReader xml = XML.reader(in)) { // Move XML stream to first element. xml.next(); return reader.read(xml); }
      Parameters:
      xml - the underlying XML stream reader
      Returns:
      the data read from the XML stream, maybe null
      Throws:
      XMLStreamException - if an error occurs while reading the value
      NullPointerException - if the given xml stream reader is null
    • map

      public <B> Reader<B> map(Function<? super T,? extends B> mapper)
      Create a new reader for the new mapped type B.
      Type Parameters:
      B - the target type of the new reader
      Parameters:
      mapper - the mapper function
      Returns:
      a new reader
      Throws:
      NullPointerException - if the given mapper function is null
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • attr

      public static Reader<String> attr(String name)
      Return a Reader for reading an attribute of an element.

      XML

       <element length="3"/>
      Reader definition
      final Reader<Integer> reader = elem( v -> (Integer)v[0], "element", attr("length").map(Integer::parseInt) );
      Parameters:
      name - the attribute name
      Returns:
      an attribute reader
      Throws:
      NullPointerException - if the given name is null
    • text

      public static Reader<String> text()
      Return a Reader for reading the text of an element.

      XML

       <element>1234<element>
      Reader definition
      final Reader<Integer> reader = elem( v -> (Integer)v[0], "element", text().map(Integer::parseInt) );
      Returns:
      an element text reader
    • elem

      public static <T> Reader<T> elem(Function<Object[],T> generator, String name, Reader<?>... children)
      Return a Reader for reading an object of type T from the XML element with the given name.

      XML

       <property name="size">1234<property>
      Reader definition
      final Reader<Property> reader = elem( v -> { final String name = (String)v[0]; final Integer value = (Integer)v[1]; return Property.of(name, value); }, "property", attr("name"), text().map(Integer::parseInt) );
      Type Parameters:
      T - the reader result type
      Parameters:
      generator - the generator function, which build the result object from the given parameter array
      name - the name of the root (sub-tree) element
      children - the child element reader, which creates the values forwarded to the generator function
      Returns:
      a node reader
      Throws:
      NullPointerException - if one of the given arguments is null
      IllegalArgumentException - if the given child readers contains more than one text reader
    • elem

      public static <T> Reader<T> elem(String name, Reader<? extends T> reader)
      Return a Reader which reads the value from the child elements of the given parent element name.

      XML

       <min><property name="size">1234<property></min>
      Reader definition
      final Reader<Property> reader = elem("min", elem( v -> { final String name = (String)v[0]; final Integer value = (Integer)v[1]; return Property.of(name, value); }, "property", attr("name"), text().map(Integer::parseInt) ) );
      Type Parameters:
      T - the result type
      Parameters:
      name - the parent element name
      reader - the child elements reader
      Returns:
      a node reader
      Throws:
      NullPointerException - if one of the given arguments is null
    • elems

      public static <T> Reader<List<T>> elems(Reader<? extends T> reader)
      Return a Reader which collects the elements, read by the given child reader, and returns it as list of these elements.

      XML

       
       <properties length="3">
           <property>-1878762439</property>
           <property>-957346595</property>
           <property>-88668137</property>
       </properties>
       
      Reader definition
      Reader<List<Integer>> reader = elem( v -> (List<Integer>)v[0], "properties", elems(elem("property", text().map(Integer::parseInt))) );
      Type Parameters:
      T - the element type
      Parameters:
      reader - the child element reader
      Returns:
      a list reader