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 java.util.HashMap;
14  import java.util.Map;
15  
16  import com.google.common.base.Function;
17  
18  import edu.uci.ics.jung.graph.Hypergraph;
19  import edu.uci.ics.jung.io.graphml.EdgeMetadata;
20  import edu.uci.ics.jung.io.graphml.GraphMLConstants;
21  import edu.uci.ics.jung.io.graphml.GraphMetadata;
22  import edu.uci.ics.jung.io.graphml.HyperEdgeMetadata;
23  import edu.uci.ics.jung.io.graphml.KeyMap;
24  import edu.uci.ics.jung.io.graphml.NodeMetadata;
25  
26  /**
27   * Registry for all element parsers.
28   * 
29   * @author Nathan Mittler - nathan.mittler@gmail.com
30   */
31  public class ElementParserRegistry<G extends Hypergraph<V, E>, V, E> {
32  
33      final private Map<String, ElementParser> parserMap = new HashMap<String, ElementParser>();
34  
35      final private ElementParser unknownElementParser = new UnknownElementParser();
36  
37      public ElementParserRegistry(KeyMap keyMap, 
38              Function<GraphMetadata, G> graphTransformer,
39              Function<NodeMetadata, V> vertexTransformer,
40              Function<EdgeMetadata, E> edgeTransformer,
41              Function<HyperEdgeMetadata, E> hyperEdgeTransformer) {
42          
43          // Create the parser context.
44          ParserContext<G,V,E> context = new ParserContext<G,V,E>(this, keyMap, graphTransformer, 
45                  vertexTransformer, edgeTransformer, hyperEdgeTransformer);
46      
47          parserMap.put(GraphMLConstants.DEFAULT_NAME, new StringElementParser<G,V,E>(context));
48          parserMap.put(GraphMLConstants.DESC_NAME, new StringElementParser<G,V,E>(context));
49          parserMap.put(GraphMLConstants.KEY_NAME, new KeyElementParser<G,V,E>(context));
50          parserMap.put(GraphMLConstants.DATA_NAME, new DataElementParser<G,V,E>(context));
51          parserMap.put(GraphMLConstants.PORT_NAME, new PortElementParser<G,V,E>(context));
52          parserMap.put(GraphMLConstants.NODE_NAME, new NodeElementParser<G,V,E>(context));
53          parserMap.put(GraphMLConstants.GRAPH_NAME, new GraphElementParser<G,V,E>(context));
54          parserMap.put(GraphMLConstants.ENDPOINT_NAME, new EndpointElementParser<G,V,E>(context));
55          parserMap.put(GraphMLConstants.EDGE_NAME, new EdgeElementParser<G,V,E>(context));
56          parserMap.put(GraphMLConstants.HYPEREDGE_NAME, new HyperEdgeElementParser<G,V,E>(context));
57      }
58  
59      public ElementParser getUnknownElementParser() {
60          return unknownElementParser;
61      }
62  
63      public ElementParser getParser(String localName) {
64          ElementParser parser = parserMap.get(localName);
65          if (parser == null) {
66              parser = unknownElementParser;
67          }
68  
69          return parser;
70      }
71  }