1
2
3
4
5
6
7
8
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
28
29
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
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 }