package net.refractions.udig.community.jody.tile;
import java.io.IOException;
import java.util.Collections;
import java.util.Set;
import javax.media.jai.util.Range;
import org.geotools.tile.TileMap;
import org.geotools.tile.TileServer;
import net.refractions.udig.project.ILayer;
import net.refractions.udig.project.internal.render.Renderer;
import net.refractions.udig.project.render.IRenderContext;
import net.refractions.udig.project.render.IRenderMetrics;
import net.refractions.udig.project.render.IRenderMetricsFactory;
import net.refractions.udig.project.render.IRenderer;
/**
* Will be chosen for TileService where the TileRange is not loaded.
*
* @author Jody Garnett
* @since 1.1.0
*/
public class DirectTileFactory implements IRenderMetricsFactory {
/**
* Use this renderer for TileServer.class.
*/
public boolean canRender( IRenderContext context ) throws IOException {
return context.getLayer().findGeoResource( TileMap.class ) != null;
}
public IRenderMetrics createMetrics( final IRenderContext context ) {
return new IRenderMetrics(){
/**
* This seems confused?
*/
public boolean canAddLayer( ILayer layer ) {
return context.getLayer() == layer;
}
/** Style not used by renderer */
public boolean canStyle( String styleID, Object value ) {
return false;
}
public Renderer createRenderer() {
return new DirectTileRenderer();
}
public IRenderContext getRenderContext() {
return context;
}
public IRenderMetricsFactory getRenderMetricsFactory() {
return DirectTileFactory.this;
}
/**
* This is not an optimized renderer - we need to
* actually inspect the TileRange before choosing
* if we are appropriate.
*/
public boolean isOptimized() {
return false;
}
public Set<Range> getValidScaleRanges() {
return Collections.emptySet();
}
};
}
public Class< ? extends IRenderer> getRendererType() {
return DirectTileRenderer.class;
}
}