View Javadoc
1   /*
2    * Copyright (c) 2008, The JUNG Authors
3    *
4    * All rights reserved.
5    *
6    * This software is open-source under the BSD license; see either
7    * "license.txt" or
8    * https://github.com/jrtom/jung/blob/master/LICENSE for a description.
9    */
10  
11  package edu.uci.ics.jung.io.graphml.parser;
12  
13  import com.google.common.base.Function;
14  
15  import edu.uci.ics.jung.graph.Hypergraph;
16  import edu.uci.ics.jung.io.graphml.EdgeMetadata;
17  import edu.uci.ics.jung.io.graphml.GraphMetadata;
18  import edu.uci.ics.jung.io.graphml.HyperEdgeMetadata;
19  import edu.uci.ics.jung.io.graphml.KeyMap;
20  import edu.uci.ics.jung.io.graphml.NodeMetadata;
21  
22  /**
23   * Provides resources related to the current parsing context. 
24   * 
25   * @author Nathan Mittler - nathan.mittler@gmail.com
26   *
27   * @param <G> The graph type
28   * @param <V> The vertex type
29   * @param <E> The edge type
30   */
31  public class ParserContext<G extends Hypergraph<V, E>, V, E> {
32  
33      private final KeyMap keyMap;
34      private final ElementParserRegistry<G,V,E> elementParserRegistry;
35      private final Function<GraphMetadata, G> graphTransformer;
36      private final Function<NodeMetadata, V> vertexTransformer;
37      private final Function<EdgeMetadata, E> edgeTransformer;
38      private final Function<HyperEdgeMetadata, E> hyperEdgeTransformer;
39      
40      public ParserContext(ElementParserRegistry<G,V,E> elementParserRegistry, 
41              KeyMap keyMap,
42              Function<GraphMetadata, G> graphTransformer,
43              Function<NodeMetadata, V> vertexTransformer,
44              Function<EdgeMetadata, E> edgeTransformer,                        
45              Function<HyperEdgeMetadata, E> hyperEdgeTransformer ) {
46          this.elementParserRegistry = elementParserRegistry;
47          this.keyMap = keyMap;
48          this.graphTransformer = graphTransformer;
49          this.vertexTransformer = vertexTransformer;
50          this.edgeTransformer = edgeTransformer;                
51          this.hyperEdgeTransformer = hyperEdgeTransformer;                
52      }
53  
54      public ElementParserRegistry<G,V,E> getElementParserRegistry() {
55          return elementParserRegistry;
56      }
57      
58      public KeyMap getKeyMap() {
59          return keyMap;
60      }
61      
62      public G createGraph(GraphMetadata metadata) {
63          return graphTransformer.apply(metadata);
64      }
65      
66      public V createVertex(NodeMetadata metadata) {
67          return vertexTransformer.apply(metadata);
68      }
69      
70      public E createEdge(EdgeMetadata metadata) {
71          return edgeTransformer.apply(metadata);
72      }
73      
74      public E createHyperEdge(HyperEdgeMetadata metadata) {
75          return hyperEdgeTransformer.apply(metadata);
76      }
77  }