/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotools.graph.build;
import org.geotools.graph.structure.Graph;
import org.geotools.graph.structure.Graphable;
/**
* Contructs a graph based on relationships between the entities (objects)
* modelled by the graph. <BR>
* <BR>
* The underlying graph is generated by continually adding objects to the
* generator. The Generator determines the relationships between the objects
* and decides how to model the relationship and the objects themselves in the
* graph.<BR>
* <BR>
* The GraphGenerator is the upper level of the graph construction process.
* It is a wrapper around the GraphBuilder class that is intended to
* instruct the builder how to build the underyling graph structure.
*
* @see GraphBuilder
*
* @author Justin Deoliveira, Refractions Research Inc, jdeolive@refractions.net
* @source $URL$
*/
public interface GraphGenerator {
/**
* Adds an object to the graph.
*
* @param obj The object to be modelled in the graph.
*
* @return The graph component used to model the object.
*/
public Graphable add(Object obj);
/**
* Retrieves a component of the graph.
*
* @param obj The object modelled by the component.
*
* @return The graph component used to model the object.
*/
public Graphable get(Object obj);
/**
* Removes an object from the graph.
*
* @param obj The object modelled by the component.
*
* @return The graph component used to model the object.
*/
public Graphable remove(Object obj);
/**
* Sets the underlying builder used to physically construct the graph.
*
* @param builder The new underlying GraphBuilder.
*/
public void setGraphBuilder(GraphBuilder builder);
/**
* Returns the underlying builder.
*
* @return The underyling builder.
*/
public GraphBuilder getGraphBuilder();
/**
* Returns the graph being generated.
*
* @return The generated graph.
*/
public Graph getGraph();
// /**
// * Signals the generator that graph construction is about to begin.
// *
// */
// public void init();
//
// /**
// * Signals that generator that construction of the graph is complete.
// */
// public void finish();
}