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 a 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 the 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 (subtree) 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 a 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