package com.vividsolutions.jump.workbench.ui.renderer; //[sstein] : 30.07.2005 added variable maxFeatures with getters and setters import java.awt.Graphics2D; import java.util.Collection; import java.util.Iterator; import java.util.Map; import com.vividsolutions.jump.workbench.ui.LayerViewPanel; public abstract class FeatureCollectionRenderer implements Renderer { private int maxFeatures = 100; private ImageCachingFeatureCollectionRenderer imageCachingFeatureCollectionRenderer; private SimpleFeatureCollectionRenderer simpleFeatureCollectionRenderer; private Renderer currentFeatureCollectionRenderer; public FeatureCollectionRenderer(Object contentID, LayerViewPanel panel) { this(contentID, panel, new ImageCachingFeatureCollectionRenderer( contentID, panel)); } public FeatureCollectionRenderer( Object contentID, LayerViewPanel panel, ImageCachingFeatureCollectionRenderer imageCachingFeatureCollectionRenderer) { this.imageCachingFeatureCollectionRenderer = imageCachingFeatureCollectionRenderer; simpleFeatureCollectionRenderer = new SimpleFeatureCollectionRenderer( contentID, panel); currentFeatureCollectionRenderer = simpleFeatureCollectionRenderer; } public void clearImageCache() { imageCachingFeatureCollectionRenderer.clearImageCache(); simpleFeatureCollectionRenderer.clearImageCache(); } public boolean isRendering() { return currentFeatureCollectionRenderer.isRendering(); } public Object getContentID() { return currentFeatureCollectionRenderer.getContentID(); } public void copyTo(Graphics2D graphics) { currentFeatureCollectionRenderer.copyTo(graphics); } public Runnable createRunnable() { Map layerToFeaturesMap = layerToFeaturesMap(); Collection styles = styles(); imageCachingFeatureCollectionRenderer .setLayerToFeaturesMap(layerToFeaturesMap); imageCachingFeatureCollectionRenderer.setStyles(styles); simpleFeatureCollectionRenderer .setLayerToFeaturesMap(layerToFeaturesMap); simpleFeatureCollectionRenderer.setStyles(styles); currentFeatureCollectionRenderer = useImageCaching(layerToFeaturesMap) ? (Renderer) imageCachingFeatureCollectionRenderer : simpleFeatureCollectionRenderer; return currentFeatureCollectionRenderer.createRunnable(); } protected boolean useImageCaching(Map layerToFeaturesMap) { return featureCount(layerToFeaturesMap) >= this.maxFeatures; } private int featureCount(Map layerToFeaturesMap) { int count = 0; for (Iterator i = layerToFeaturesMap.values().iterator(); i.hasNext();) { Collection features = (Collection) i.next(); count += features.size(); } return count; } protected abstract Map layerToFeaturesMap(); protected abstract Collection styles(); public void cancel() { imageCachingFeatureCollectionRenderer.cancel(); simpleFeatureCollectionRenderer.cancel(); } /** * @return Returns the number of maxFeatures to render * as vector graphic. */ public int getMaxFeatures() { return maxFeatures; } /** * @param maxFeatures The maximum number of Features to render * as vector graphic. */ public void setMaxFeatures(int maxFeatures) { this.maxFeatures = maxFeatures; } /** * @return Returns the simpleFeatureCollectionRenderer. */ public SimpleFeatureCollectionRenderer getSimpleFeatureCollectionRenderer() { return simpleFeatureCollectionRenderer; } }