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

java.lang.Object
edu.uci.ics.jung.io.PajekNetReader<G,V,E>

public class PajekNetReader<G extends Graph<V,E>,V,E> extends 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"
  • Field Details

    • 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,String> vertex_labels
      The map for vertex labels (if any) created by this class.
    • vertex_locations

      protected SettableTransformer<V,Point2D> vertex_locations
      The map for vertex locations (if any) defined by this class.
    • edge_weights

      protected SettableTransformer<E,Number> edge_weights
    • v_pred

      private static final com.google.common.base.Predicate<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<String> a_pred
    • e_pred

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

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

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

      protected static final com.google.common.base.Predicate<String> l_pred
  • Constructor Details

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

    • load

      public G load(String filename, com.google.common.base.Supplier<? extends G> graph_factory) throws 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:
      IOException - if the graph cannot be loaded
    • load

      public G load(Reader reader, com.google.common.base.Supplier<? extends G> graph_factory) throws 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:
      IOException - if the graph cannot be loaded
    • load

      public G load(String filename, G g) throws 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:
      IOException - if the graph cannot be loaded
    • load

      public G load(Reader reader, G g) throws 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:
      IOException - if the graph cannot be loaded
    • readVertex

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

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

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

      protected String skip(BufferedReader br, com.google.common.base.Predicate<String> p) throws 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:
      IOException - if an error is encountered while reading from br
    • getVertexLocationTransformer

      public SettableTransformer<V,Point2D> getVertexLocationTransformer()
      Returns:
      the vertexLocationTransformer
    • setVertexLocationTransformer

      public void setVertexLocationTransformer(SettableTransformer<V,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,String> getVertexLabeller()
      Returns:
      a mapping from vertices to their labels
    • setVertexLabeller

      public void setVertexLabeller(SettableTransformer<V,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,Number> getEdgeWeightTransformer()
      Returns:
      a mapping from edges to their weights
    • setEdgeWeightTransformer

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