package au.gov.ga.earthsci.model.render;
import au.gov.ga.earthsci.common.util.IDescribed;
import au.gov.ga.earthsci.common.util.INamed;
import au.gov.ga.earthsci.model.geometry.IModelGeometry;
/**
* A creator interface that can create {@link IModelGeometryRenderer} instances for given
* {@link IModelGeometry} instances.
*
* <p/>
*
* Provides a human-readable name and description of the renderer that can be used to populate UI
* elements etc.
*
* @author James Navin (james.navin@ga.gov.au)
*/
public interface IModelGeometryRendererCreator extends INamed, IDescribed
{
/**
* Return whether this creator can be used to create a renderer for the
* supplied geometry.
*
* @param geometry The geometry a renderer is required for
*
* @return <code>true</code> if this creator can be used to create a renderer
* for the supplied geometry; <code>false</code> otherwise.
*/
boolean supports(IModelGeometry geometry);
/**
* Create and return a renderer to use for the given geometry.
*
* @param geometry The geometry to create a renderer for
*
* @return A new renderer to use for the provided geometry.
*
* @throws IllegalArgumentException if this creator cannot be used for the provided geometry.
*
* @see #supports(IModelGeometry)
*/
IModelGeometryRenderer createRenderer(IModelGeometry geometry) throws IllegalArgumentException;
}