Class PajekNetReader<G extends Graph<V,​E>,​V,​E>


  • public class PajekNetReader<G extends Graph<V,​E>,​V,​E>
    extends java.lang.Object
    Reads a Graph from a Pajek NET formatted source.

    If the edge constraints specify that the graph is strictly undirected, and an "*Arcs" section is encountered, or if the edge constraints specify that the graph is strictly directed, and an "*Edges" section is encountered, an IllegalArgumentException is thrown.

    If the edge constraints do not permit parallel edges, only the first encountered of a set of parallel edges will be read; subsequent edges in that set will be ignored.

    More restrictive edge constraints will cause vertices to be generated that are more time- and space-efficient. At the moment, only supports the part of the specification that defines:

    • vertex ids (each must have a value from 1 to n, where n is the number of vertices)
    • vertex labels (must be in quotes if interrupted by whitespace)
    • directed edge connections (single or list)
    • undirected edge connections (single or list)
    • edge weights (not compatible with edges specified in list form)
      note: this version of PajekNetReader does not support multiple edge weights, as PajekNetFile does; this behavior is consistent with the NET format.
    • vertex locations (x and y; z coordinate is ignored)

    Here is an example format for a directed graph without edge weights and edges specified in list form:

     *vertices [# of vertices] 
     1 "a" 
     2 "b" 
     3 "c" 
     *arcslist 
     1 2 3 
     2 3  
     
    Here is an example format for an undirected graph with edge weights and edges specified in non-list form:
     *vertices [# of vertices] 
     1 "a" 
     2 "b" 
     3 "c" 
     *edges 
     1 2 0.1 
     1 3 0.9 
     2 3 1.0 
     
    See Also:
    "'Pajek - Program for Analysis and Visualization of Large Networks', Vladimir Batagelj and Andrej Mrvar, http://vlado.fmf.uni-lj.si/pub/networks/pajek/doc/pajekman.pdf"
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      protected static class  PajekNetReader.ListTagPred
      A Predicate which evaluates to true if the argument ends with the string "list".
      protected static class  PajekNetReader.StartsWithPredicate
      A Predicate which evaluates to true if the argument starts with the constructor-specified String.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private static com.google.common.base.Predicate<java.lang.String> a_pred  
      private static com.google.common.base.Predicate<java.lang.String> c_pred  
      private static com.google.common.base.Predicate<java.lang.String> e_pred  
      protected com.google.common.base.Supplier<E> edge_factory  
      protected SettableTransformer<E,​java.lang.Number> edge_weights  
      protected static com.google.common.base.Predicate<java.lang.String> l_pred  
      private static com.google.common.base.Predicate<java.lang.String> t_pred  
      private static com.google.common.base.Predicate<java.lang.String> v_pred
      Used to specify whether the most recently read line is a Pajek-specific tag.
      protected com.google.common.base.Supplier<V> vertex_factory  
      protected SettableTransformer<V,​java.lang.String> vertex_labels
      The map for vertex labels (if any) created by this class.
      protected SettableTransformer<V,​java.awt.geom.Point2D> vertex_locations
      The map for vertex locations (if any) defined by this class.
    • Constructor Summary

      Constructors 
      Constructor Description
      PajekNetReader​(com.google.common.base.Supplier<E> edge_factory)
      Creates a PajekNetReader instance with the specified edge Supplier, and whose vertex objects correspond to the integer IDs assigned in the file.
      PajekNetReader​(com.google.common.base.Supplier<V> vertex_factory, com.google.common.base.Supplier<E> edge_factory)
      Creates a PajekNetReader instance with the specified vertex and edge factories.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected E createAddEdge​(java.util.StringTokenizer st, V v1, EdgeType directed, Graph<V,​E> g, java.util.List<V> id, com.google.common.base.Supplier<E> edge_factory)  
      SettableTransformer<E,​java.lang.Number> getEdgeWeightTransformer()  
      SettableTransformer<V,​java.lang.String> getVertexLabeller()  
      SettableTransformer<V,​java.awt.geom.Point2D> getVertexLocationTransformer()  
      G load​(java.io.Reader reader, com.google.common.base.Supplier<? extends G> graph_factory)
      Returns the graph created by parsing the specified reader, as created by the specified Supplier.
      G load​(java.io.Reader reader, G g)
      Populates the graph g with the graph represented by the Pajek-format data supplied by reader.
      G load​(java.lang.String filename, com.google.common.base.Supplier<? extends G> graph_factory)
      Returns the graph created by parsing the specified file, as created by the specified Supplier.
      G load​(java.lang.String filename, G g)
      Returns the graph created by parsing the specified file, by populating the specified graph.
      private java.lang.String readArcsOrEdges​(java.lang.String curLine, java.io.BufferedReader br, Graph<V,​E> g, java.util.List<V> id, com.google.common.base.Supplier<E> edge_factory)  
      private void readVertex​(java.lang.String curLine, java.util.List<V> id, int num_vertices)
      Parses curLine as a reference to a vertex, and optionally assigns label and location information.
      void setEdgeWeightTransformer​(SettableTransformer<E,​java.lang.Number> edge_weights)
      Provides a Function which will be used to write out edge weights.
      void setVertexLabeller​(SettableTransformer<V,​java.lang.String> vertex_labels)
      Provides a Function which will be used to write out the vertex labels.
      void setVertexLocationTransformer​(SettableTransformer<V,​java.awt.geom.Point2D> vertex_locations)
      Provides a Function which will be used to write out the vertex locations.
      protected java.lang.String skip​(java.io.BufferedReader br, com.google.common.base.Predicate<java.lang.String> p)
      Returns the first line read from br for which p returns true, or null if there is no such line.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • vertex_factory

        protected com.google.common.base.Supplier<V> vertex_factory
      • edge_factory

        protected com.google.common.base.Supplier<E> edge_factory
      • vertex_labels

        protected SettableTransformer<V,​java.lang.String> vertex_labels
        The map for vertex labels (if any) created by this class.
      • vertex_locations

        protected SettableTransformer<V,​java.awt.geom.Point2D> vertex_locations
        The map for vertex locations (if any) defined by this class.
      • v_pred

        private static final com.google.common.base.Predicate<java.lang.String> v_pred
        Used to specify whether the most recently read line is a Pajek-specific tag.
      • a_pred

        private static final com.google.common.base.Predicate<java.lang.String> a_pred
      • e_pred

        private static final com.google.common.base.Predicate<java.lang.String> e_pred
      • t_pred

        private static final com.google.common.base.Predicate<java.lang.String> t_pred
      • c_pred

        private static final com.google.common.base.Predicate<java.lang.String> c_pred
      • l_pred

        protected static final com.google.common.base.Predicate<java.lang.String> l_pred
    • Constructor Detail

      • PajekNetReader

        public PajekNetReader​(com.google.common.base.Supplier<V> vertex_factory,
                              com.google.common.base.Supplier<E> edge_factory)
        Creates a PajekNetReader instance with the specified vertex and edge factories.
        Parameters:
        vertex_factory - the Supplier to use to create vertex objects
        edge_factory - the Supplier to use to create edge objects
      • PajekNetReader

        public PajekNetReader​(com.google.common.base.Supplier<E> edge_factory)
        Creates a PajekNetReader instance with the specified edge Supplier, and whose vertex objects correspond to the integer IDs assigned in the file. Note that this requires V to be assignment-compatible with an Integer value.
        Parameters:
        edge_factory - the Supplier to use to create edge objects
    • Method Detail

      • load

        public G load​(java.lang.String filename,
                      com.google.common.base.Supplier<? extends G> graph_factory)
               throws java.io.IOException
        Returns the graph created by parsing the specified file, as created by the specified Supplier.
        Parameters:
        filename - the file from which the graph is to be read
        graph_factory - used to provide a graph instance
        Returns:
        a graph parsed from the specified file
        Throws:
        java.io.IOException - if the graph cannot be loaded
      • load

        public G load​(java.io.Reader reader,
                      com.google.common.base.Supplier<? extends G> graph_factory)
               throws java.io.IOException
        Returns the graph created by parsing the specified reader, as created by the specified Supplier.
        Parameters:
        reader - the reader instance from which the graph is to be read
        graph_factory - used to provide a graph instance
        Returns:
        a graph parsed from the specified reader
        Throws:
        java.io.IOException - if the graph cannot be loaded
      • load

        public G load​(java.lang.String filename,
                      G g)
               throws java.io.IOException
        Returns the graph created by parsing the specified file, by populating the specified graph.
        Parameters:
        filename - the file from which the graph is to be read
        g - the graph instance to populate
        Returns:
        a graph parsed from the specified file
        Throws:
        java.io.IOException - if the graph cannot be loaded
      • load

        public G load​(java.io.Reader reader,
                      G g)
               throws java.io.IOException
        Populates the graph g with the graph represented by the Pajek-format data supplied by reader. Stores edge weights, if any, according to nev (if non-null).

        Any existing vertices/edges of g, if any, are unaffected.

        The edge data are filtered according to g's constraints, if any; thus, if g only accepts directed edges, any undirected edges in the input are ignored.

        Parameters:
        reader - the reader from which the graph is to be read
        g - the graph instance to populate
        Returns:
        a graph parsed from the specified reader
        Throws:
        java.io.IOException - if the graph cannot be loaded
      • readVertex

        private void readVertex​(java.lang.String curLine,
                                java.util.List<V> id,
                                int num_vertices)
        Parses curLine as a reference to a vertex, and optionally assigns label and location information.
      • readArcsOrEdges

        private java.lang.String readArcsOrEdges​(java.lang.String curLine,
                                                 java.io.BufferedReader br,
                                                 Graph<V,​E> g,
                                                 java.util.List<V> id,
                                                 com.google.common.base.Supplier<E> edge_factory)
                                          throws java.io.IOException
        Throws:
        java.io.IOException
      • createAddEdge

        protected E createAddEdge​(java.util.StringTokenizer st,
                                  V v1,
                                  EdgeType directed,
                                  Graph<V,​E> g,
                                  java.util.List<V> id,
                                  com.google.common.base.Supplier<E> edge_factory)
      • skip

        protected java.lang.String skip​(java.io.BufferedReader br,
                                        com.google.common.base.Predicate<java.lang.String> p)
                                 throws java.io.IOException
        Returns the first line read from br for which p returns true, or null if there is no such line.
        Parameters:
        br - the reader from which the graph is being read
        p - predicate specifying what line to accept
        Returns:
        the first line from br that matches p, or null
        Throws:
        java.io.IOException - if an error is encountered while reading from br
      • getVertexLocationTransformer

        public SettableTransformer<V,​java.awt.geom.Point2D> getVertexLocationTransformer()
        Returns:
        the vertexLocationTransformer
      • setVertexLocationTransformer

        public void setVertexLocationTransformer​(SettableTransformer<V,​java.awt.geom.Point2D> vertex_locations)
        Provides a Function which will be used to write out the vertex locations.
        Parameters:
        vertex_locations - a container for the vertex locations
      • getVertexLabeller

        public SettableTransformer<V,​java.lang.String> getVertexLabeller()
        Returns:
        a mapping from vertices to their labels
      • setVertexLabeller

        public void setVertexLabeller​(SettableTransformer<V,​java.lang.String> vertex_labels)
        Provides a Function which will be used to write out the vertex labels.
        Parameters:
        vertex_labels - a container for the vertex labels
      • getEdgeWeightTransformer

        public SettableTransformer<E,​java.lang.Number> getEdgeWeightTransformer()
        Returns:
        a mapping from edges to their weights
      • setEdgeWeightTransformer

        public void setEdgeWeightTransformer​(SettableTransformer<E,​java.lang.Number> edge_weights)
        Provides a Function which will be used to write out edge weights.
        Parameters:
        edge_weights - a container for the edge weights