Class 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 Detail

      • 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
      • attr

        public static Reader<Stringattr​(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<Stringtext()
        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