/* * Copyright (c) 2008, the JUNG Project and the Regents of the University * of California * All rights reserved. * * This software is open-source under the BSD license; see either * "license.txt" or * http://jung.sourceforge.net/license.txt for a description. */ package edu.uci.ics.jung.io.graphml.parser; import java.util.HashMap; import java.util.Map; import org.apache.commons.collections15.Transformer; import edu.uci.ics.jung.graph.Hypergraph; import edu.uci.ics.jung.io.graphml.EdgeMetadata; import edu.uci.ics.jung.io.graphml.GraphMLConstants; import edu.uci.ics.jung.io.graphml.GraphMetadata; import edu.uci.ics.jung.io.graphml.HyperEdgeMetadata; import edu.uci.ics.jung.io.graphml.KeyMap; import edu.uci.ics.jung.io.graphml.NodeMetadata; /** * Registry for all element parsers. * * @author Nathan Mittler - nathan.mittler@gmail.com */ public class ElementParserRegistry<G extends Hypergraph<V, E>, V, E> { final private Map<String, ElementParser> parserMap = new HashMap<String, ElementParser>(); final private ElementParser unknownElementParser = new UnknownElementParser(); public ElementParserRegistry(KeyMap keyMap, Transformer<GraphMetadata, G> graphTransformer, Transformer<NodeMetadata, V> vertexTransformer, Transformer<EdgeMetadata, E> edgeTransformer, Transformer<HyperEdgeMetadata, E> hyperEdgeTransformer) { // Create the parser context. ParserContext<G,V,E> context = new ParserContext<G,V,E>(this, keyMap, graphTransformer, vertexTransformer, edgeTransformer, hyperEdgeTransformer); parserMap.put(GraphMLConstants.DEFAULT_NAME, new StringElementParser<G,V,E>(context)); parserMap.put(GraphMLConstants.DESC_NAME, new StringElementParser<G,V,E>(context)); parserMap.put(GraphMLConstants.KEY_NAME, new KeyElementParser<G,V,E>(context)); parserMap.put(GraphMLConstants.DATA_NAME, new DataElementParser<G,V,E>(context)); parserMap.put(GraphMLConstants.PORT_NAME, new PortElementParser<G,V,E>(context)); parserMap.put(GraphMLConstants.NODE_NAME, new NodeElementParser<G,V,E>(context)); parserMap.put(GraphMLConstants.GRAPH_NAME, new GraphElementParser<G,V,E>(context)); parserMap.put(GraphMLConstants.ENDPOINT_NAME, new EndpointElementParser<G,V,E>(context)); parserMap.put(GraphMLConstants.EDGE_NAME, new EdgeElementParser<G,V,E>(context)); parserMap.put(GraphMLConstants.HYPEREDGE_NAME, new HyperEdgeElementParser<G,V,E>(context)); } public ElementParser getUnknownElementParser() { return unknownElementParser; } public ElementParser getParser(String localName) { ElementParser parser = parserMap.get(localName); if (parser == null) { parser = unknownElementParser; } return parser; } }