/*
* 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 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.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;
/**
* Provides resources related to the current parsing context.
*
* @author Nathan Mittler - nathan.mittler@gmail.com
*
* @param <G> The graph type
* @param <V> The vertex type
* @param <E> The edge type
*/
public class ParserContext<G extends Hypergraph<V, E>, V, E> {
private final KeyMap keyMap;
private final ElementParserRegistry<G,V,E> elementParserRegistry;
private final Transformer<GraphMetadata, G> graphTransformer;
private final Transformer<NodeMetadata, V> vertexTransformer;
private final Transformer<EdgeMetadata, E> edgeTransformer;
private final Transformer<HyperEdgeMetadata, E> hyperEdgeTransformer;
public ParserContext(ElementParserRegistry<G,V,E> elementParserRegistry,
KeyMap keyMap,
Transformer<GraphMetadata, G> graphTransformer,
Transformer<NodeMetadata, V> vertexTransformer,
Transformer<EdgeMetadata, E> edgeTransformer,
Transformer<HyperEdgeMetadata, E> hyperEdgeTransformer ) {
this.elementParserRegistry = elementParserRegistry;
this.keyMap = keyMap;
this.graphTransformer = graphTransformer;
this.vertexTransformer = vertexTransformer;
this.edgeTransformer = edgeTransformer;
this.hyperEdgeTransformer = hyperEdgeTransformer;
}
public ElementParserRegistry<G,V,E> getElementParserRegistry() {
return elementParserRegistry;
}
public KeyMap getKeyMap() {
return keyMap;
}
public G createGraph(GraphMetadata metadata) {
return graphTransformer.transform(metadata);
}
public V createVertex(NodeMetadata metadata) {
return vertexTransformer.transform(metadata);
}
public E createEdge(EdgeMetadata metadata) {
return edgeTransformer.transform(metadata);
}
public E createHyperEdge(HyperEdgeMetadata metadata) {
return hyperEdgeTransformer.transform(metadata);
}
}