[Schmitzm-commits] r438 - in branches/1.0-gt2-2.6/src: gtmig/org/geotools/swing org/geotools/renderer/shape schmitzm/geotools schmitzm/geotools/gui skrueger/geotools skrueger/geotools/selection
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Mon Oct 5 15:04:03 CEST 2009
Author: alfonx
Date: 2009-10-05 15:04:01 +0200 (Mon, 05 Oct 2009)
New Revision: 438
Removed:
branches/1.0-gt2-2.6/src/org/geotools/renderer/shape/TransitionShapefileRenderer.java
Modified:
branches/1.0-gt2-2.6/src/gtmig/org/geotools/swing/JMapPane.java
branches/1.0-gt2-2.6/src/schmitzm/geotools/GTUtil.java
branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/GeoMapPane.java
branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/JEditorPane.java
branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/JMapPane.java
branches/1.0-gt2-2.6/src/skrueger/geotools/Copyable.java
branches/1.0-gt2-2.6/src/skrueger/geotools/selection/FeatureMapLayerSelectionSynchronizer.java
Log:
* Using GTUtil.createGTRenderer wherever GP/AS/AV/SchmitzM needs a GTRenderer
Modified: branches/1.0-gt2-2.6/src/gtmig/org/geotools/swing/JMapPane.java
===================================================================
--- branches/1.0-gt2-2.6/src/gtmig/org/geotools/swing/JMapPane.java 2009-10-05 12:48:14 UTC (rev 437)
+++ branches/1.0-gt2-2.6/src/gtmig/org/geotools/swing/JMapPane.java 2009-10-05 13:04:01 UTC (rev 438)
@@ -58,7 +58,6 @@
import javax.swing.JPanel;
import org.apache.log4j.Logger;
-import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.map.MapContext;
import org.geotools.map.event.MapLayerListEvent;
import org.geotools.map.event.MapLayerListListener;
@@ -251,14 +250,6 @@
renderer.setRendererHints(hints);
}
- // this.highlightRenderer = new StreamingRenderer();
- // this.selectionRenderer = new StreamingRenderer();
-
- // highlightRenderer.setRendererHints(hints);
- // selectionRenderer.setRendererHints(hints);
-
- // renderer.setRendererHints(hints);
-
if (this.context != null) {
this.renderer.setContext(this.context);
}
@@ -1002,13 +993,13 @@
.getMaxX(), newArea.getMaxY() - divY));
if (newArea.getMaxY() > maxAllowedExtend.getMaxY()) {
- LOGGER.debug("Now it exeeds the top border.. cut!");
+// LOGGER.debug("Now it exeeds the top border.. cut!");
// And cut the bottom if it moved out of the area
newArea = new Envelope(new Coordinate(newArea.getMinX(),
newArea.getMinY()), new Coordinate(newArea
.getMaxX(), maxAllowedExtend.getMaxY()));
- LOGGER.debug("and fix aspect ratio");
+// LOGGER.debug("and fix aspect ratio");
newArea = fixAspectRatio(this.getBounds(), newArea, false);
}
@@ -1026,13 +1017,13 @@
- divX, newArea.getMaxY()));
if (newArea.getMinX() < maxAllowedExtend.getMinX()) {
- LOGGER.debug("Now it exeeds the left border.. cut!");
+// LOGGER.debug("Now it exeeds the left border.. cut!");
// And cut the left if it moved out of the area
newArea = new Envelope(new Coordinate(maxAllowedExtend.getMinX(),
newArea.getMinY()), new Coordinate(newArea
.getMaxX(), newArea.getMaxY()));
- LOGGER.debug("and fix aspect ratio");
+// LOGGER.debug("and fix aspect ratio");
newArea = fixAspectRatio(this.getBounds(), newArea, false);
}
@@ -1050,13 +1041,13 @@
- divX, newArea.getMaxY()));
if (newArea.getMaxX() > maxAllowedExtend.getMaxX()) {
- LOGGER.debug("Now it exeeds the right border.. cut!");
+// LOGGER.debug("Now it exeeds the right border.. cut!");
// And cut the left if it moved out of the area
newArea = new Envelope(new Coordinate(newArea.getMinX(),
newArea.getMinY()), new Coordinate(maxAllowedExtend
.getMaxX(), newArea.getMaxY()));
- LOGGER.debug("and fix aspect ratio");
+// LOGGER.debug("and fix aspect ratio");
newArea = fixAspectRatio(this.getBounds(), newArea, false);
}
Deleted: branches/1.0-gt2-2.6/src/org/geotools/renderer/shape/TransitionShapefileRenderer.java
===================================================================
--- branches/1.0-gt2-2.6/src/org/geotools/renderer/shape/TransitionShapefileRenderer.java 2009-10-05 12:48:14 UTC (rev 437)
+++ branches/1.0-gt2-2.6/src/org/geotools/renderer/shape/TransitionShapefileRenderer.java 2009-10-05 13:04:01 UTC (rev 438)
@@ -1,1551 +0,0 @@
-///*
-// * 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.renderer.shape;
-//
-//import static org.geotools.data.shapefile.ShpFileType.QIX;
-//import static org.geotools.data.shapefile.ShpFileType.SHX;
-//
-//import java.awt.Graphics2D;
-//import java.awt.Rectangle;
-//import java.awt.RenderingHints;
-//import java.awt.Shape;
-//import java.awt.font.GlyphVector;
-//import java.awt.geom.AffineTransform;
-//import java.awt.geom.NoninvertibleTransformException;
-//import java.io.IOException;
-//import java.util.ArrayList;
-//import java.util.Collections;
-//import java.util.HashMap;
-//import java.util.HashSet;
-//import java.util.Iterator;
-//import java.util.LinkedHashSet;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.NoSuchElementException;
-//import java.util.Set;
-//import java.util.concurrent.CopyOnWriteArrayList;
-//import java.util.logging.Level;
-//import java.util.logging.Logger;
-//
-//import javax.xml.parsers.FactoryConfigurationError;
-//
-//import org.geotools.data.DataStore;
-//import org.geotools.data.DefaultQuery;
-//import org.geotools.data.Diff;
-//import org.geotools.data.FIDReader;
-//import org.geotools.data.FeatureStore;
-//import org.geotools.data.Query;
-//import org.geotools.data.Transaction;
-//import org.geotools.data.TransactionStateDiff;
-//import org.geotools.data.shapefile.ShapefileDataStore;
-//import org.geotools.data.shapefile.ShapefileRendererUtil;
-//import org.geotools.data.shapefile.ShpFiles;
-//import org.geotools.data.shapefile.dbf.DbaseFileHeader;
-//import org.geotools.data.shapefile.dbf.DbaseFileReader;
-//import org.geotools.data.shapefile.dbf.IndexedDbaseFileReader;
-//import org.geotools.data.shapefile.indexed.IndexType;
-//import org.geotools.data.shapefile.shp.ShapeType;
-//import org.geotools.data.shapefile.shp.ShapefileReader;
-//import org.geotools.data.shapefile.shp.ShapefileReader.Record;
-//import org.geotools.feature.FeatureTypes;
-//import org.geotools.feature.SchemaException;
-//import org.geotools.feature.simple.SimpleFeatureBuilder;
-//import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
-//import org.geotools.filter.FilterAttributeExtractor;
-//import org.geotools.geometry.jts.Decimator;
-//import org.geotools.geometry.jts.LiteCoordinateSequenceFactory;
-//import org.geotools.geometry.jts.LiteShape2;
-//import org.geotools.geometry.jts.ReferencedEnvelope;
-//import org.geotools.index.quadtree.StoreException;
-//import org.geotools.map.DefaultMapContext;
-//import org.geotools.map.MapContext;
-//import org.geotools.map.MapLayer;
-//import org.geotools.referencing.CRS;
-//import org.geotools.referencing.ReferencingFactoryFinder;
-//import org.geotools.referencing.crs.DefaultGeographicCRS;
-//import org.geotools.referencing.operation.matrix.GeneralMatrix;
-//import org.geotools.referencing.operation.matrix.XAffineTransform;
-//import org.geotools.renderer.GTRenderer;
-//import org.geotools.renderer.RenderListener;
-//import org.geotools.renderer.label.LabelCacheImpl;
-//import org.geotools.renderer.lite.LabelCache;
-//import org.geotools.renderer.lite.LabelCacheDefault;
-//import org.geotools.renderer.lite.RendererUtilities;
-//import org.geotools.renderer.lite.StreamingRenderer;
-//import org.geotools.renderer.style.SLDStyleFactory;
-//import org.geotools.renderer.style.Style2D;
-//import org.geotools.styling.FeatureTypeStyle;
-//import org.geotools.styling.LineSymbolizer;
-//import org.geotools.styling.PointSymbolizer;
-//import org.geotools.styling.PolygonSymbolizer;
-//import org.geotools.styling.Rule;
-//import org.geotools.styling.Style;
-//import org.geotools.styling.StyleAttributeExtractor;
-//import org.geotools.styling.Symbolizer;
-//import org.geotools.styling.TextSymbolizer;
-//import org.geotools.styling.visitor.DuplicatingStyleVisitor;
-//import org.geotools.util.NumberRange;
-//import org.opengis.feature.simple.SimpleFeature;
-//import org.opengis.feature.simple.SimpleFeatureType;
-//import org.opengis.feature.type.AttributeDescriptor;
-//import org.opengis.feature.type.GeometryDescriptor;
-//import org.opengis.filter.Filter;
-//import org.opengis.referencing.FactoryException;
-//import org.opengis.referencing.crs.CoordinateReferenceSystem;
-//import org.opengis.referencing.operation.CoordinateOperation;
-//import org.opengis.referencing.operation.MathTransform;
-//import org.opengis.referencing.operation.TransformException;
-//
-//import com.vividsolutions.jts.geom.Coordinate;
-//import com.vividsolutions.jts.geom.Envelope;
-//import com.vividsolutions.jts.geom.Geometry;
-//import com.vividsolutions.jts.geom.GeometryFactory;
-//import com.vividsolutions.jts.geom.LineString;
-//import com.vividsolutions.jts.geom.LinearRing;
-//import com.vividsolutions.jts.geom.MultiLineString;
-//import com.vividsolutions.jts.geom.MultiPoint;
-//import com.vividsolutions.jts.geom.MultiPolygon;
-//import com.vividsolutions.jts.geom.Point;
-//import com.vividsolutions.jts.geom.Polygon;
-//
-///**
-// * A LiteRenderer Implementations that is optimized for shapefiles.
-// *
-// * @author jeichar
-// * @since 2.1.x
-// * @source $URL:
-// * http://svn.geotools.org/geotools/branches/2.2.x/ext/shaperenderer/src/org/geotools/renderer/shape/ShapefileRenderer.java $
-// */
-//public class TransitionShapefileRenderer implements GTRenderer {
-// public static final Logger LOGGER = org.geotools.util.logging.Logging.getLogger("org.geotools.renderer.shape");
-//
-// /** Tolerance used to compare doubles for equality */
-// private static final double TOLERANCE = 1e-6;
-// private static final GeometryFactory geomFactory = new GeometryFactory(
-// new LiteCoordinateSequenceFactory());
-// private static final Coordinate[] COORDS;
-// private static final MultiPolygon MULTI_POLYGON_GEOM;
-// private static final Polygon POLYGON_GEOM;
-// private static final LinearRing LINE_GEOM;
-// private static final MultiLineString MULTI_LINE_GEOM;
-// private static final Point POINT_GEOM;
-// private static final MultiPoint MULTI_POINT_GEOM;
-//
-// /**
-// * Computes the scale as the ratio between map distances and real world distances,
-// * assuming 90dpi and taking into consideration projection deformations and actual
-// * earth shape. <br>
-// * Use this method only when in need of accurate computation. Will break if the
-// * data extent is outside of the currenct projection definition area.
-// */
-// public static final String SCALE_ACCURATE = "ACCURATE";
-//
-// /**
-// * Very simple and lenient scale computation method that conforms to the OGC SLD
-// * specification 1.0, page 26. <br>This method is quite approximative, but should
-// * never break and ensure constant scale even on lat/lon unprojected maps (because
-// * in that case scale is computed as if the area was along the equator no matter
-// * what the real position is).
-// */
-// public static final String SCALE_OGC = "OGC";
-//
-// private String scaleComputationMethodDEFAULT = SCALE_ACCURATE;
-// static {
-// COORDS = new Coordinate[5];
-// COORDS[0] = new Coordinate(0.0, 0.0);
-// COORDS[1] = new Coordinate(5.0, 0.0);
-// COORDS[2] = new Coordinate(5.0, 5.0);
-// COORDS[3] = new Coordinate(0.0, 5.0);
-// COORDS[4] = new Coordinate(0.0, 0.0);
-// LINE_GEOM = geomFactory.createLinearRing(COORDS);
-// MULTI_LINE_GEOM = geomFactory.createMultiLineString(new LineString[]{LINE_GEOM});
-// POLYGON_GEOM = geomFactory.createPolygon(LINE_GEOM, new LinearRing[0]);
-// MULTI_POLYGON_GEOM = geomFactory.createMultiPolygon(new Polygon[]{POLYGON_GEOM});
-// POINT_GEOM = geomFactory.createPoint(COORDS[2]);
-// MULTI_POINT_GEOM = geomFactory.createMultiPoint(COORDS);
-// }
-//
-// /**
-// * This listener is added to the list of listeners automatically. It should be removed if the
-// * default logging is not needed.
-// */
-// public static final DefaultRenderListener DEFAULT_LISTENER = new DefaultRenderListener();
-//
-// private static final IndexInfo STREAMING_RENDERER_INFO = new IndexInfo(IndexType.NONE,null);
-// static int NUM_SAMPLES = 200;
-// private RenderingHints hints;
-//
-// /** Factory that will resolve symbolizers into rendered styles */
-// private SLDStyleFactory styleFactory = new SLDStyleFactory();
-// private boolean renderingStopRequested;
-// private boolean concatTransforms;
-// private MapContext context;
-// LabelCache labelCache = new LabelCacheImpl();
-// private List<RenderListener> renderListeners = new CopyOnWriteArrayList<RenderListener>();
-// /** If we are caching styles; by default this is false */
-// boolean caching = false;
-// private double scaleDenominator;
-// DbaseFileHeader dbfheader;
-// private Object defaultGeom;
-// IndexInfo[] layerIndexInfo;
-// StreamingRenderer delegate;
-//
-// /**
-// * Maps between the AttributeType index of the new generated FeatureType and the real
-// * attributeType
-// */
-// int[] attributeIndexing;
-//
-// /** The painter class we use to depict shapes onto the screen */
-// private StyledShapePainter painter = new StyledShapePainter(labelCache);
-// private Map decimators = new HashMap();
-//
-// /**
-// * Text will be rendered using the usual calls gc.drawString/drawGlyphVector.
-// * This is a little faster, and more consistent with how the platform renders
-// * the text in other applications. The downside is that on most platform the label
-// * and its eventual halo are not properly centered.
-// */
-// public static final String TEXT_RENDERING_STRING = "STRING";
-//
-// /**
-// * Text will be rendered using the associated {@link GlyphVector} outline, that is, a {@link Shape}.
-// * This ensures perfect centering between the text and the halo, but introduces more text aliasing.
-// */
-// public static final String TEXT_RENDERING_OUTLINE = "OUTLINE";
-//
-// /**
-// * The text rendering method, either TEXT_RENDERING_OUTLINE or TEXT_RENDERING_STRING
-// */
-// public static final String TEXT_RENDERING_KEY = "textRenderingMethod";
-// private String textRenderingModeDEFAULT = TEXT_RENDERING_STRING;
-//
-// public static final String LABEL_CACHE_KEY = "labelCache";
-// public static final String FORCE_CRS_KEY = "forceCRS";
-// public static final String DPI_KEY = "dpi";
-// public static final String DECLARED_SCALE_DENOM_KEY = "declaredScaleDenominator";
-// public static final String MEMORY_PRE_LOADING_KEY = "memoryPreloadingEnabled";
-// public static final String OPTIMIZED_DATA_LOADING_KEY = "optimizedDataLoadingEnabled";
-// public static final String SCALE_COMPUTATION_METHOD_KEY = "scaleComputationMethod";
-//
-// /**
-// * "optimizedDataLoadingEnabled" - Boolean yes/no (see default optimizedDataLoadingEnabledDEFAULT)
-// * "memoryPreloadingEnabled" - Boolean yes/no (see default memoryPreloadingEnabledDEFAULT)
-// * "declaredScaleDenominator" - Double the value of the scale denominator to use by the renderer.
-// * by default the value is calculated based on the screen size
-// * and the displayed area of the map.
-// * "dpi" - Integer number of dots per inch of the display 90 DPI is the default (as declared by OGC)
-// * "forceCRS" - CoordinateReferenceSystem declares to the renderer that all layers are of the CRS declared in this hint
-// * "labelCache" - Declares the label cache that will be used by the renderer.
-// */
-// private Map rendererHints = null;
-//
-// public TransitionShapefileRenderer( MapContext context ) {
-// setContext(context);
-// }
-//
-// public TransitionShapefileRenderer() {
-// }
-//
-// public void paint( Graphics2D graphics, Rectangle paintArea, ReferencedEnvelope mapArea ) {
-// if (mapArea == null || paintArea == null) {
-// LOGGER.info("renderer passed null arguments");
-// return;
-// } // Other arguments get checked later
-// paint(graphics, paintArea, mapArea, RendererUtilities.worldToScreenTransform(mapArea,
-// paintArea));
-// }
-//
-// private DbaseFileHeader getDBFHeader( ShapefileDataStore ds ) {
-// DbaseFileReader reader = null;
-//
-// try {
-// reader = ShapefileRendererUtil.getDBFReader(ds);
-//
-// return reader.getHeader();
-// } catch (IOException e) {
-// e.printStackTrace();
-// } finally {
-// if (reader != null) {
-// try {
-// reader.close();
-// } catch (IOException e) {
-// // TODO Auto-generated catch block
-// e.printStackTrace();
-// }
-// }
-// }
-//
-// return null;
-// }
-//
-// private void processStylers( Graphics2D graphics, ShapefileDataStore datastore,
-// Query query, Envelope bbox, Rectangle screenSize, MathTransform mt, Style style, IndexInfo info,
-// Transaction transaction, String layerId) throws IOException {
-// if (LOGGER.isLoggable(Level.FINE)) {
-// LOGGER.fine("processing " + style.getFeatureTypeStyles().length + " stylers");
-// }
-//
-// FeatureTypeStyle[] featureStylers = style.getFeatureTypeStyles();
-// SimpleFeatureType type;
-//
-// try {
-// type = createFeatureType(query, style, datastore);
-// } catch (Exception e) {
-// fireErrorEvent(e);
-// LOGGER.logp(Level.WARNING, "org.geotools.renderer.shape.ShapefileRenderer", "processStylers", "Could not prep style for rendering", e);
-// return;
-// }
-//
-// for( int i = 0; i < featureStylers.length; i++ ) {
-// if (LOGGER.isLoggable(Level.FINE)) {
-// LOGGER.fine("processing style " + i);
-// }
-//
-// FeatureTypeStyle fts = featureStylers[i];
-// String typeName = datastore.getSchema().getTypeName();
-//
-// if ((typeName != null) &&
-// ( FeatureTypes.isDecendedFrom(datastore.getSchema(), null, fts.getFeatureTypeName())
-// || typeName .equalsIgnoreCase(fts.getFeatureTypeName()))) {
-// // get applicable rules at the current scale
-// Rule[] rules = fts.getRules();
-// List ruleList = new ArrayList();
-// List elseRuleList = new ArrayList();
-//
-// // TODO process filter for geometry expressions and restrict bbox further based on
-// // the result
-//
-// for( int j = 0; j < rules.length; j++ ) {
-// if (LOGGER.isLoggable(Level.FINE)) {
-// LOGGER.fine("processing rule " + j);
-// }
-//
-// Rule r = rules[j];
-// Filter f = r.getFilter();
-// if(f != null) {
-// GeometryFilterChecker checker = new GeometryFilterChecker();
-// f.accept(checker, null);
-// // geometry filters are quite unlikely in SLD, but if we have any,
-// // we need to reproject it to screen space since geometries are
-// // read directly in screen space
-// if(checker.isGeometryFilterPresent()) {
-// // make copy so we don't modify the style
-// DuplicatingStyleVisitor duplicator = new DuplicatingStyleVisitor();
-// r.accept(duplicator);
-// r=(Rule) duplicator.getCopy();
-//
-// FilterTransformer transformer= new FilterTransformer(mt);
-// r.setFilter((Filter) r.getFilter().accept(transformer, null));
-// }
-// }
-// if (isWithInScale(r)) {
-// if (r.hasElseFilter()) {
-// elseRuleList.add(r);
-// } else {
-// ruleList.add(r);
-// }
-// }
-// }
-//
-// // process the features according to the rules
-// // TODO: find a better way to declare the scale ranges so that
-// // we
-// // get style caching also between multiple rendering runs
-// NumberRange scaleRange = new NumberRange(scaleDenominator, scaleDenominator);
-//
-// Set modifiedFIDs = processTransaction(graphics, bbox, mt, datastore, transaction,
-// typeName, query, ruleList, elseRuleList, scaleRange, layerId);
-//
-// // don't try to read the shapefile if there is nothing to draw
-// if(ruleList.size() > 0 || elseRuleList.size() > 0)
-// processShapefile(graphics, datastore, bbox,screenSize, mt, info, type, query, ruleList,
-// elseRuleList, modifiedFIDs, scaleRange, layerId);
-// }
-// }
-// }
-//
-// private Set processTransaction( Graphics2D graphics, Envelope bbox, MathTransform transform,
-// DataStore ds, Transaction transaction, String typename, Query query, List ruleList,
-// List elseRuleList, NumberRange scaleRange, String layerId ) {
-// if (transaction == Transaction.AUTO_COMMIT) {
-// return Collections.EMPTY_SET;
-// }
-//
-// TransactionStateDiff state = (TransactionStateDiff) transaction.getState(ds);
-//
-// if (state == null) {
-// return Collections.EMPTY_SET;
-// }
-// // set of fids that has been modified (ie updated or deleted)
-// Set fids = new HashSet();
-// Map modified = null;
-// Map added = null;
-// Diff diff=null;
-//
-// try {
-// diff = state.diff(typename);
-// modified = diff.modified2;
-// added = diff.added;
-// fids = new HashSet();
-// } catch (IOException e) {
-// fids = Collections.EMPTY_SET;
-// return fids;
-// }
-//
-// if (!diff.isEmpty()) {
-// SimpleFeature feature;
-//
-// for( Iterator modifiedIter = modified.keySet().iterator(),
-// addedIter=added.values().iterator();
-// modifiedIter.hasNext() || addedIter.hasNext(); ) {
-// try {
-// if (renderingStopRequested) {
-// break;
-// }
-// boolean doElse = true;
-// if( modifiedIter.hasNext() ){
-// String fid= (String) modifiedIter.next();
-// feature = (SimpleFeature) modified.get(fid);
-// fids.add(fid);
-// } else {
-// feature = (SimpleFeature) addedIter.next();
-// }
-// if( feature == TransactionStateDiff.NULL){
-// continue; // skip this feature as it is removed
-// }
-// if (!query.getFilter().evaluate(feature)){
-// // currently this is failing for TransactionStateDiff.NULL
-// continue;
-// }
-//
-// // applicable rules
-// for( Iterator it = ruleList.iterator(); it.hasNext(); ) {
-// Rule r = (Rule) it.next();
-//
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("applying rule: " + r.toString());
-// }
-//
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("this rule applies ...");
-// }
-//
-// Filter filter = r.getFilter();
-//
-// if ((filter == null) || filter.evaluate(feature)) {
-// doElse = false;
-//
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("processing Symobolizer ...");
-// }
-//
-// Symbolizer[] symbolizers = r.getSymbolizers();
-//
-// try {
-// processSymbolizers(graphics, feature, symbolizers, scaleRange,
-// transform, layerId);
-// } catch (Exception e) {
-// fireErrorEvent(e);
-//
-// continue;
-// }
-//
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("... done!");
-// }
-// }
-// }
-//
-// if (doElse) {
-// // rules with an else filter
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("rules with an else filter");
-// }
-//
-// for( Iterator it = elseRuleList.iterator(); it.hasNext(); ) {
-// Rule r = (Rule) it.next();
-// Symbolizer[] symbolizers = r.getSymbolizers();
-//
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("processing Symobolizer ...");
-// }
-//
-// try {
-// processSymbolizers(graphics, feature, symbolizers, scaleRange,
-// transform, layerId);
-// } catch (Exception e) {
-// fireErrorEvent(e);
-//
-// continue;
-// }
-//
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("... done!");
-// }
-// }
-// }
-//
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("feature rendered event ...");
-// }
-// }
-// catch (RuntimeException e) {
-// fireErrorEvent(e);
-// }
-// }
-// }
-// return fids;
-// }
-//
-// private void processShapefile( Graphics2D graphics, ShapefileDataStore datastore,
-// Envelope bbox, Rectangle screenSize, MathTransform mt, IndexInfo info, SimpleFeatureType type, Query query,
-// List ruleList, List elseRuleList, Set modifiedFIDs, NumberRange scaleRange, String layerId )
-// throws IOException {
-// IndexedDbaseFileReader dbfreader = null;
-//
-// // don't waste time processing the dbf file if the only attribute loades is the geometry
-// if(type.getAttributeCount() > 1) {
-// try {
-// dbfreader = ShapefileRendererUtil.getDBFReader(datastore);
-// } catch (Exception e) {
-// fireErrorEvent(e);
-// }
-// }
-//
-// OpacityFinder opacityFinder = new OpacityFinder(getAcceptableSymbolizers(type
-// .getGeometryDescriptor()));
-//
-// for( Iterator iter = ruleList.iterator(); iter.hasNext(); ) {
-// Rule rule = (Rule) iter.next();
-// rule.accept(opacityFinder);
-// }
-//
-// IndexInfo.Reader shpreader = null;
-// boolean useJTS=true;
-//
-// try {
-// shpreader = new IndexInfo.Reader(info, ShapefileRendererUtil.getShpReader(datastore,
-// bbox, screenSize, mt, opacityFinder.hasOpacity, useJTS), bbox);
-// } catch (Exception e) {
-// fireErrorEvent(e);
-// return;
-// }
-//
-// FIDReader fidReader = null;
-// try {
-// fidReader = ShapefileRendererUtil.getFidReader(datastore,shpreader);
-// } catch (Exception e) {
-// fireErrorEvent(e);
-// return;
-// }
-//
-// SimpleFeatureBuilder fbuilder = new SimpleFeatureBuilder(type);
-//
-// try {
-// while( true ) {
-// try {
-// if (renderingStopRequested) {
-// break;
-// }
-//
-// if (!shpreader.hasNext()) {
-// break;
-// }
-//
-// boolean doElse = true;
-//
-// String nextFid = null;
-// if( fidReader.hasNext() ){
-// try {
-// nextFid = fidReader.next();
-// }
-// catch( NoSuchElementException invalidIndex){
-// fireErrorEvent(new IllegalStateException("Skipping invalid FID; Please regenerate your index.", invalidIndex));
-// // TODO: mark index as needing regeneration
-// }
-// }
-// else {
-// fireErrorEvent(new IllegalStateException("Skipping invalid FID; shape and index are out of sync please regenerate index."));
-// // TODO: mark index as needing regeneration
-// }
-// if(LOGGER.isLoggable(Level.FINER))
-// LOGGER.finer("trying to read geometry ...");
-// if (nextFid == null || modifiedFIDs.contains(nextFid)) {
-// // this one is modified we will get it when we processTransaction
-// shpreader.next();
-// if( dbfreader != null && !dbfreader.IsRandomAccessEnabled() ){
-// dbfreader.skip();
-// }
-// continue;
-// }
-//
-// if( dbfreader != null && dbfreader.IsRandomAccessEnabled() ){
-// dbfreader.goTo(shpreader.getRecordNumber());
-// }
-// ShapefileReader.Record record = shpreader.next();
-//
-// Object geom = record.shape();
-// if (geom == null) {
-// if(LOGGER.isLoggable(Level.FINEST))
-// LOGGER.finest("skipping geometry");
-// if( dbfreader != null && !dbfreader.IsRandomAccessEnabled() )
-// dbfreader.skip();
-// continue;
-// }
-//
-// SimpleFeature feature = createFeature(fbuilder, record, dbfreader, nextFid);
-// if (!query.getFilter().evaluate(feature))
-// continue;
-//
-// if (renderingStopRequested) {
-// break;
-// }
-//
-// if (LOGGER.isLoggable(Level.FINEST)) {
-// LOGGER.finest("... done: " + geom.toString());
-// }
-//
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.fine("... done: " + type.getTypeName());
-// }
-//
-// // applicable rules
-// for( Iterator it = ruleList.iterator(); it.hasNext(); ) {
-// Rule r = (Rule) it.next();
-//
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("applying rule: " + r.toString());
-// }
-//
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("this rule applies ...");
-// }
-//
-// Filter filter = r.getFilter();
-//
-// if ((filter == null) || filter.evaluate(feature)) {
-// doElse = false;
-//
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("processing Symobolizer ...");
-// }
-//
-// Symbolizer[] symbolizers = r.getSymbolizers();
-//
-// processSymbolizers(graphics, feature, geom, symbolizers, scaleRange, useJTS, layerId);
-//
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("... done!");
-// }
-// }
-// }
-//
-// if (doElse) {
-// // rules with an else filter
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("rules with an else filter");
-// }
-//
-// for( Iterator it = elseRuleList.iterator(); it.hasNext(); ) {
-// Rule r = (Rule) it.next();
-// Symbolizer[] symbolizers = r.getSymbolizers();
-//
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("processing Symobolizer ...");
-// }
-//
-// processSymbolizers(graphics, feature, geom, symbolizers, scaleRange, useJTS, layerId);
-//
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("... done!");
-// }
-// }
-// }
-//
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("feature rendered event ...");
-// }
-// } catch (Exception e) {
-// fireErrorEvent(e);
-// }
-// }
-// } finally {
-// try {
-// if (dbfreader != null) {
-// dbfreader.close();
-// }
-// } finally {
-// try {
-// if (shpreader != null) {
-// shpreader.close();
-// }
-// } finally {
-// if (fidReader != null)
-// fidReader.close();
-// }
-// }
-// }
-// }
-//
-// private Class[] getAcceptableSymbolizers( GeometryDescriptor defaultGeometry ) {
-// Class binding = defaultGeometry.getType().getBinding();
-// if (Polygon.class.isAssignableFrom(binding)
-// || MultiPolygon.class.isAssignableFrom(binding)) {
-// return new Class[]{PointSymbolizer.class, LineSymbolizer.class, PolygonSymbolizer.class};
-// }
-//
-// return new Class[]{PointSymbolizer.class, LineSymbolizer.class};
-// }
-//
-// SimpleFeature createFeature(SimpleFeatureBuilder builder, Record record, DbaseFileReader dbfreader, String id )
-// throws Exception {
-// SimpleFeatureType type = builder.getFeatureType();
-// if (type.getAttributeCount() == 1) {
-// builder.add(getGeom(record.shape(), type.getGeometryDescriptor()));
-// return builder.buildFeature(id);
-// } else {
-// dbfreader.read();
-// for( int i = 0; i < (type.getAttributeCount() - 1); i++ ) {
-// builder.add(dbfreader.readField(attributeIndexing[i]));
-// }
-// builder.add(getGeom(record.shape(), type.getGeometryDescriptor()));
-// return builder.buildFeature(id);
-// }
-// }
-//
-// /**
-// * Return provided geom; or use a default value if null.
-// *
-// * @param geom Provided Geometry as read from record.shape()
-// * @param defaultGeometry GeometryDescriptor used to determine default value
-// * @return provided geom or default value if null
-// */
-// private Object getGeom( Object geom, GeometryDescriptor defaultGeometry ) {
-// if( geom instanceof Geometry){
-// return geom;
-// }
-// return getGeom( defaultGeometry );
-// }
-//
-// /**
-// * This class keeps a couple of default geometries on hand to use
-// * when making a feature with default values.
-// *
-// * @param defaultGeometry
-// * @return placeholder to use as a default while waiting for a real geometry.
-// */
-// private Object getGeom(GeometryDescriptor defaultGeometry) {
-// Class binding = defaultGeometry.getType().getBinding();
-// if (MultiPolygon.class.isAssignableFrom(binding)) {
-// return MULTI_POLYGON_GEOM;
-// }
-// else if (MultiLineString.class.isAssignableFrom(binding)) {
-// return MULTI_LINE_GEOM;
-// }
-// else if (Point.class.isAssignableFrom(binding)) {
-// return POINT_GEOM;
-// }
-// else if (MultiPoint.class.isAssignableFrom(binding)) {
-// return MULTI_POINT_GEOM;
-// }
-// return null; // we don't have a good default value - null will need to do
-// }
-//
-// /**
-// * DOCUMENT ME!
-// *
-// * @param query
-// * @param style
-// * @param schema DOCUMENT ME!
-// * @return
-// * @throws FactoryConfigurationError
-// * @throws SchemaException
-// */
-// SimpleFeatureType createFeatureType( Query query, Style style, ShapefileDataStore ds)
-// throws SchemaException, IOException {
-// SimpleFeatureType schema = ds.getSchema();
-// String[] attributes = findStyleAttributes((query == null) ? Query.ALL : query, style,
-// schema);
-// AttributeDescriptor[] types = new AttributeDescriptor[attributes.length];
-// attributeIndexing = new int[attributes.length];
-//
-// if(attributes.length == 1 && attributes[0].equals(schema.getGeometryDescriptor().getLocalName())) {
-// types[0] = schema.getDescriptor(attributes[0]);
-// } else {
-// dbfheader = getDBFHeader(ds);
-// for( int i = 0; i < types.length; i++ ) {
-// types[i] = schema.getDescriptor(attributes[i]);
-//
-// for( int j = 0; j < dbfheader.getNumFields(); j++ ) {
-// if (dbfheader.getFieldName(j).equals(attributes[i])) {
-// attributeIndexing[i] = j;
-//
-// break;
-// }
-// }
-// }
-// }
-//
-// SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder();
-// tb.setName( schema.getName() );
-// tb.addAll( types );
-// tb.setDefaultGeometry( schema.getGeometryDescriptor().getLocalName() );
-//
-// return tb.buildFeatureType();
-// }
-//
-// /**
-// * Inspects the <code>MapLayer</code>'s style and retrieves it's needed attribute names,
-// * returning at least the default geometry attribute name.
-// *
-// * @param query DOCUMENT ME!
-// * @param style the <code>Style</code> to determine the needed attributes from
-// * @param schema the FeatureSource<SimpleFeatureType, SimpleFeature> schema
-// * @return the minimun set of attribute names needed to render <code>layer</code>
-// */
-// private String[] findStyleAttributes( final Query query, Style style, SimpleFeatureType schema ) {
-// StyleAttributeExtractor sae = new StyleAttributeExtractor();
-// sae.visit(style);
-//
-//
-// FilterAttributeExtractor qae = new FilterAttributeExtractor();
-// query.getFilter().accept(qae,null);
-// Set ftsAttributes = new LinkedHashSet(sae.getAttributeNameSet());
-// ftsAttributes.addAll(qae.getAttributeNameSet());
-// if (sae.getDefaultGeometryUsed()
-// && (!ftsAttributes.contains(schema.getGeometryDescriptor().getLocalName()))) {
-// ftsAttributes.add(schema.getGeometryDescriptor().getLocalName());
-// } else {
-// // the code following assumes the geometry column is the last one
-// // make sure it's the last for good
-// ftsAttributes.remove(schema.getGeometryDescriptor().getLocalName());
-// ftsAttributes.add(schema.getGeometryDescriptor().getLocalName());
-// }
-// return (String[]) ftsAttributes.toArray(new String[0]);
-// }
-//
-// /**
-// * DOCUMENT ME!
-// *
-// * @param graphics
-// * @param feature DOCUMENT ME!
-// * @param geom
-// * @param symbolizers
-// * @param scaleRange
-// * @param layerId
-// */
-// private void processSymbolizers( Graphics2D graphics, SimpleFeature feature, Object geom,
-// Symbolizer[] symbolizers, NumberRange scaleRange, boolean isJTS, String layerId ) {
-// for( int m = 0; m < symbolizers.length; m++ ) {
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("applying symbolizer " + symbolizers[m]);
-// }
-//
-// if (renderingStopRequested) {
-// break;
-// }
-//
-// if (symbolizers[m] instanceof TextSymbolizer) {
-// try {
-// labelCache.put(layerId,(TextSymbolizer) symbolizers[m],
-// feature,
-// new LiteShape2((Geometry)feature.getDefaultGeometry(), null, null, false, false),
-// scaleRange);
-// } catch (Exception e) {
-// fireErrorEvent(e);
-// }
-// } else {
-// Shape shape;
-// try {
-// Style2D style = styleFactory.createStyle(feature, symbolizers[m], scaleRange);
-// if( isJTS ){
-// Geometry g;
-// if(symbolizers[m] instanceof PointSymbolizer) {
-// g = RendererUtilities.getCentroid((Geometry) geom);
-// } else {
-// g = (Geometry) geom;
-// }
-// shape = new LiteShape2(g, null, null, false, false);
-// painter.paint(graphics, shape, style, scaleDenominator);
-// }else{
-// if(symbolizers[m] instanceof PointSymbolizer) {
-// shape = new LiteShape2(RendererUtilities.getCentroid((Geometry) feature.getDefaultGeometry()), null, null, false, false);
-// } else {
-// shape = getShape((SimpleGeometry) geom);
-// }
-//
-// painter.paint(graphics, shape, style, scaleDenominator);
-// }
-// } catch (Exception e) {
-// fireErrorEvent(e);
-// }
-// }
-//
-// }
-// fireFeatureRenderedEvent(feature);
-// }
-//
-// /**
-// * Applies each of a set of symbolizers in turn to a given feature.
-// * <p>
-// * This is an internal method and should only be called by processStylers.
-// * </p>
-// *
-// * @param graphics
-// * @param feature The feature to be rendered
-// * @param symbolizers An array of symbolizers which actually perform the rendering.
-// * @param scaleRange The scale range we are working on... provided in order to make the style
-// * factory happy
-// * @param transform DOCUMENT ME!
-// * @param layerId
-// * @throws TransformException
-// * @throws FactoryException
-// */
-// private void processSymbolizers( final Graphics2D graphics, final SimpleFeature feature,
-// final Symbolizer[] symbolizers, NumberRange scaleRange, MathTransform transform, String layerId )
-// throws TransformException, FactoryException {
-// LiteShape2 shape;
-//
-// for( int m = 0; m < symbolizers.length; m++ ) {
-// if (LOGGER.isLoggable(Level.FINER)) {
-// LOGGER.finer("applying symbolizer " + symbolizers[m]);
-// }
-//
-// Geometry g = (Geometry) feature.getDefaultGeometry();
-// if(symbolizers[m] instanceof PointSymbolizer)
-// g = RendererUtilities.getCentroid(g);
-// shape = new LiteShape2(g, transform, getDecimator(transform), false);
-//
-// if (symbolizers[m] instanceof TextSymbolizer) {
-// labelCache.put(layerId, (TextSymbolizer) symbolizers[m], feature, shape, scaleRange);
-// } else {
-// Style2D style = styleFactory.createStyle(feature, symbolizers[m], scaleRange);
-// painter.paint(graphics, shape, style, scaleDenominator);
-// }
-// }
-//
-// fireFeatureRenderedEvent(feature);
-// }
-//
-// /**
-// * DOCUMENT ME!
-// *
-// * @param mathTransform DOCUMENT ME!
-// * @return
-// * @throws org.opengis.referencing.operation.NoninvertibleTransformException
-// */
-// private Decimator getDecimator( MathTransform mathTransform )
-// throws org.opengis.referencing.operation.NoninvertibleTransformException {
-// Decimator decimator=null;
-//
-// if( mathTransform!=null )
-// decimator = (Decimator) decimators.get(mathTransform);
-//
-// if (decimator == null) {
-// decimator = new Decimator(mathTransform.inverse());
-//
-// decimators.put(mathTransform, decimator);
-// }
-//
-// return decimator;
-// }
-////
-//// /**
-//// * Creates a JTS shape that is an approximation of the SImpleGeometry. This is ONLY use for
-//// * labelling and is only created if a text symbolizer is part of the current style.
-//// *
-//// * @param geom the geometry to wrap
-//// * @return
-//// * @throws TransformException
-//// * @throws FactoryException
-//// * @throws RuntimeException DOCUMENT ME!
-//// */
-//// LiteShape2 getLiteShape2( SimpleGeometry geom ) throws TransformException, FactoryException {
-//// Geometry jtsGeom;
-//// if ((geom.type == ShapeType.POLYGON) || (geom.type == ShapeType.POLYGONM)
-//// || (geom.type == ShapeType.POLYGONZ)) {
-//// double[] points = getPointSample(geom, true);
-//// CoordinateSequence seq = new LiteCoordinateSequence(points);
-//// Polygon poly;
-////
-//// try {
-//// poly = geomFactory.createPolygon(geomFactory.createLinearRing(seq),
-//// new LinearRing[]{});
-//// } catch (Exception e) {
-//// throw new RuntimeException(e);
-//// }
-////
-//// jtsGeom = geomFactory.createMultiPolygon(new Polygon[]{poly});
-//// } else if ((geom.type == ShapeType.ARC) || (geom.type == ShapeType.ARCM)
-//// || (geom.type == ShapeType.ARCZ)) {
-//// double[] points = getPointSample(geom, false);
-//// CoordinateSequence seq = new LiteCoordinateSequence(points);
-//// jtsGeom = geomFactory.createMultiLineString(new LineString[]{geomFactory
-//// .createLineString(seq)});
-//// } else if ((geom.type == ShapeType.MULTIPOINT) || (geom.type == ShapeType.MULTIPOINTM)
-//// || (geom.type == ShapeType.MULTIPOINTZ)) {
-//// double[] points = getPointSample(geom, false);
-//// CoordinateSequence seq = new LiteCoordinateSequence(points);
-//// jtsGeom = geomFactory.createMultiPoint(seq);
-//// } else {
-//// jtsGeom = geomFactory.createPoint(new Coordinate(geom.coords[0][0], geom.coords[0][1]));
-//// }
-////
-//// LiteShape2 shape = new LiteShape2(jtsGeom, null, null, false);
-////
-//// return shape;
-//// }
-//
-//// /**
-//// * takes a random sampling from the geometry. Only uses the larges part of the geometry.
-//// *
-//// * @param geom
-//// * @param isPolygon DOCUMENT ME!
-//// * @return
-//// */
-//// private double[] getPointSample( SimpleGeometry geom, boolean isPolygon ) {
-//// int largestPart = 0;
-////
-//// for( int i = 0; i < geom.coords.length; i++ ) {
-//// if (geom.coords[i].length > geom.coords[largestPart].length) {
-//// largestPart = i;
-//// }
-//// }
-////
-//// return geom.coords[largestPart];
-//// }
-//
-// /**
-// * DOCUMENT ME!
-// *
-// * @param geom
-// * @return
-// */
-// private Shape getShape( SimpleGeometry geom ) {
-// if ((geom.type == ShapeType.ARC) || (geom.type == ShapeType.ARCM)
-// || (geom.type == ShapeType.ARCZ)) {
-// return new MultiLineShape(geom);
-// }
-//
-// if ((geom.type == ShapeType.POLYGON) || (geom.type == ShapeType.POLYGONM)
-// || (geom.type == ShapeType.POLYGONZ)) {
-// return new PolygonShape(geom);
-// }
-//
-// if ((geom.type == ShapeType.POINT) || (geom.type == ShapeType.POINTM)
-// || (geom.type == ShapeType.POINTZ) || (geom.type == ShapeType.MULTIPOINT)
-// || (geom.type == ShapeType.MULTIPOINTM) || (geom.type == ShapeType.MULTIPOINTZ)) {
-// return new MultiPointShape(geom);
-// }
-//
-//
-//
-// return null;
-// }
-//
-// /**
-// * Checks if a rule can be triggered at the current scale level
-// *
-// * @param r The rule
-// * @return true if the scale is compatible with the rule settings
-// */
-// private boolean isWithInScale( Rule r ) {
-// return ((r.getMinScaleDenominator() - TOLERANCE) <= scaleDenominator)
-// && ((r.getMaxScaleDenominator() + TOLERANCE) > scaleDenominator);
-// }
-//
-// /**
-// * adds a listener that responds to error events of feature rendered events.
-// *
-// * @param listener the listener to add.
-// * @see RenderListener
-// */
-// public void addRenderListener( RenderListener listener ) {
-// renderListeners.add(listener);
-// }
-//
-// /**
-// * Removes a render listener.
-// *
-// * @param listener the listener to remove.
-// * @see RenderListener
-// */
-// public void removeRenderListener( RenderListener listener ) {
-// renderListeners.remove(listener);
-// }
-//
-// private void fireFeatureRenderedEvent( SimpleFeature feature ) {
-// if (renderListeners.size() > 0) {
-// RenderListener listener;
-// for (int i = 0; i < renderListeners.size(); i++) {
-// listener = renderListeners.get(i);
-// listener.featureRenderer((SimpleFeature) feature);
-// }
-// }
-// }
-//
-// private void fireErrorEvent(Exception e) {
-// if (renderListeners.size() > 0) {
-// RenderListener listener;
-// for (int i = 0; i < renderListeners.size(); i++) {
-// try {
-// listener = renderListeners.get(i);
-// listener.errorOccurred(e);
-// } catch (RuntimeException ignore) {
-// LOGGER.fine("Provided RenderListener could not handle error message:" + ignore);
-// LOGGER.throwing(getClass().getName(), "fireErrorEvent", ignore);
-// }
-// }
-// }
-// }
-//
-// /**
-// * Setter for property scaleDenominator.
-// *
-// * @param scaleDenominator New value of property scaleDenominator.
-// */
-// protected void setScaleDenominator( double scaleDenominator ) {
-// this.scaleDenominator = scaleDenominator;
-// }
-//
-// /**
-// * If you call this method from another thread than the one that called <code>paint</code> or
-// * <code>render</code> the rendering will be forcefully stopped before termination
-// */
-// public void stopRendering() {
-// try {
-// if(delegate != null)
-// delegate.stopRendering();
-// } catch(NullPointerException e) {
-// // Since stopRendering is called by another thread the null check may
-// // pass, and the method call can NPE nevertheless. It's ok, in that
-// // case rendering is done anyways
-// }
-// renderingStopRequested = true;
-// labelCache.stop();
-// }
-//
-// /**
-// * True if we are caching styles.
-// *
-// * @return <code>ture </code>if caching
-// */
-// public boolean isCaching() {
-// return caching;
-// }
-//
-// /**
-// * Set to true to cache styles.
-// *
-// * @param caching The caching to set.
-// */
-// public void setCaching( boolean caching ) {
-// this.caching = caching;
-// }
-//
-// public MapContext getContext() {
-// return context;
-// }
-//
-// public boolean isConcatTransforms() {
-// return concatTransforms;
-// }
-//
-// public void setConcatTransforms( boolean concatTransforms ) {
-// this.concatTransforms = concatTransforms;
-// }
-//
-// public IndexInfo useIndex( ShapefileDataStore ds ) throws IOException, StoreException {
-// IndexInfo info;
-//
-// ShpFiles shpFiles = ShapefileRendererUtil.getShpFiles(ds);
-// if (ds.isLocal()) {
-//
-// if (!shpFiles.exists(SHX)) {
-// info = new IndexInfo(IndexType.NONE, shpFiles);
-// LOGGER.fine("No indexing");
-// } else if (shpFiles.exists(QIX)) {
-// info = new IndexInfo(IndexType.QIX, shpFiles);
-// LOGGER.fine("Using quad tree");
-// } else {
-// info = new IndexInfo(IndexType.NONE, shpFiles);
-// LOGGER.fine("No indexing");
-// }
-// } else {
-// info = new IndexInfo(IndexType.NONE, shpFiles);
-// LOGGER.fine("No indexing");
-// }
-//
-// return info;
-// }
-//
-// /**
-// * By default ignores all feature renderered events and logs all exceptions as severe.
-// */
-// private static class DefaultRenderListener implements RenderListener {
-// /**
-// * @see org.geotools.renderer.lite.RenderListener#featureRenderer(org.geotools.feature.Feature)
-// */
-// public void featureRenderer( SimpleFeature feature ) {
-// // do nothing.
-// }
-//
-// /**
-// * @see org.geotools.renderer.lite.RenderListener#errorOccurred(java.lang.Exception)
-// */
-// public void errorOccurred( Exception e ) {
-// LOGGER.log(Level.SEVERE, e.getMessage(), e);
-// }
-// }
-//
-// public void setJava2DHints( RenderingHints hints ) {
-// this.hints = hints;
-// }
-//
-// public RenderingHints getJava2DHints() {
-// return hints;
-// }
-//
-// public void setRendererHints(Map hints) {
-// if( hints!=null && hints.containsKey(LABEL_CACHE_KEY) ){
-// LabelCache cache=(LabelCache) hints.get(LABEL_CACHE_KEY);
-// if( cache==null )
-// throw new NullPointerException("Label_Cache_Hint has a null value for the labelcache");
-//
-// this.labelCache=cache;
-// this.painter=new StyledShapePainter(cache);
-// }
-// if(hints != null && hints.containsKey(StreamingRenderer.LINE_WIDTH_OPTIMIZATION_KEY)) {
-// styleFactory.setLineOptimizationEnabled(Boolean.TRUE.equals(hints.get(StreamingRenderer.LINE_WIDTH_OPTIMIZATION_KEY)));
-// }
-// rendererHints = hints;
-// }
-//
-// public Map getRendererHints() {
-// return rendererHints;
-// }
-//
-// public void setContext( MapContext context ) {
-// if (context == null) {
-// context = new DefaultMapContext(DefaultGeographicCRS.WGS84);
-// }
-//
-// // TODO Hack missing!
-//
-// this.context = context;
-//
-// MapLayer[] layers = context.getLayers();
-// layerIndexInfo = new IndexInfo[layers.length];
-//
-// int i=0;
-// for(MapLayer layer:layers ) {
-// DataStore ds = (DataStore) layer.getFeatureSource().getDataStore();
-// if( ds instanceof ShapefileDataStore ){
-// ShapefileDataStore sds = (ShapefileDataStore) ds;
-// try {
-// layerIndexInfo[i] = useIndex(sds);
-// } catch (Exception e) {
-// layerIndexInfo[i] = new IndexInfo(IndexType.NONE, ShapefileRendererUtil.getShpFiles(sds));
-// if(LOGGER.isLoggable(Level.FINE))
-// LOGGER.fine("Exception while trying to use index" + e.getLocalizedMessage());
-// }
-// }else{
-// layerIndexInfo[i]=STREAMING_RENDERER_INFO;
-// }
-// i++;
-// }
-// }
-//
-// public void paint( Graphics2D graphics, Rectangle paintArea, AffineTransform worldToScreen ) {
-// if (worldToScreen == null || paintArea == null) {
-// LOGGER.info("renderer passed null arguments");
-// return;
-// } // Other arguments get checked later
-// // First, create the bbox in real world coordinates
-// ReferencedEnvelope mapArea;
-// try {
-// mapArea = RendererUtilities.createMapEnvelope(paintArea, worldToScreen, getContext().getCoordinateReferenceSystem());
-// paint(graphics, paintArea, mapArea, worldToScreen);
-// } catch (NoninvertibleTransformException e) {
-// fireErrorEvent(new Exception("Can't create pixel to world transform", e));
-// }
-// }
-//
-// public void paint( Graphics2D graphics, Rectangle paintArea, ReferencedEnvelope envelope,
-// AffineTransform transform ) {
-//
-// if (hints != null) {
-// graphics.setRenderingHints(hints);
-// }
-//
-// if ((graphics == null) || (paintArea == null)) {
-// LOGGER.info("renderer passed null arguments");
-//
-// return;
-// }
-//
-// // reset the abort flag
-// renderingStopRequested = false;
-//
-// if (LOGGER.isLoggable(Level.FINE)) {
-// LOGGER.fine("Affine Transform is " + transform);
-// }
-//
-// /*
-// * If we are rendering to a component which has already set up some form of transformation
-// * then we can concatenate our transformation to it. An example of this is the ZoomPane
-// * component of the swinggui module.
-// */
-// if (concatTransforms) {
-// AffineTransform atg = graphics.getTransform();
-//
-// // graphics.setTransform(new AffineTransform());
-// atg.concatenate(transform);
-// transform = atg;
-// }
-//
-// try {
-// setScaleDenominator(
-// computeScale(
-// envelope,
-// context.getCoordinateReferenceSystem(),
-// paintArea,
-// transform,
-// this.rendererHints));
-// } catch (Exception e) // probably either (1) no CRS (2) error xforming
-// {
-// LOGGER.throwing("RendererUtilities", "calculateScale(envelope, coordinateReferenceSystem, imageWidth, imageHeight, hints)", e);
-// setScaleDenominator(1 / transform.getScaleX()); // DJB old method - the best we can do
-// }
-//
-// MapLayer[] layers = context.getLayers();
-//
-// // get detstination CRS
-// CoordinateReferenceSystem destinationCrs = context.getCoordinateReferenceSystem();
-// labelCache.start();
-// labelCache.clear();
-// if(labelCache instanceof LabelCacheDefault) {
-// boolean outlineEnabled = TEXT_RENDERING_OUTLINE.equals(getTextRenderingMethod());
-// ((LabelCacheDefault) labelCache).setOutlineRenderingEnabled(outlineEnabled);
-// }
-// for( int i = 0; i < layers.length; i++ ) {
-// MapLayer currLayer = layers[i];
-//
-// if (!currLayer.isVisible()) {
-// // Only render layer when layer is visible
-// continue;
-// }
-//
-// if (renderingStopRequested) {
-// return;
-// }
-//
-// if( layerIndexInfo[i]==STREAMING_RENDERER_INFO ){
-// renderWithStreamingRenderer(currLayer, graphics, paintArea, envelope, transform);
-// continue;
-// }
-// labelCache.startLayer(""+i);
-//
-// ReferencedEnvelope bbox = envelope;
-//
-// try {
-// GeometryDescriptor geom = currLayer.getFeatureSource().getSchema().getGeometryDescriptor();
-//
-// CoordinateReferenceSystem dataCRS;
-// if( getForceCRSHint()==null )
-// dataCRS = geom.getCoordinateReferenceSystem();
-// else
-// dataCRS=getForceCRSHint();
-//
-// MathTransform mt;
-// CoordinateOperation op;
-//
-// try {
-// op = CRS.getCoordinateOperationFactory(true).createOperation(dataCRS, destinationCrs);
-// mt = op.getMathTransform();
-// bbox = bbox.transform(dataCRS, true, 10);
-// } catch (Exception e) {
-// fireErrorEvent(e);
-// LOGGER.log(Level.WARNING, "Could not reproject the bounding boxes, proceeding in non reprojecting mode", e);
-// op = null;
-// mt = null;
-// }
-//
-// MathTransform at = ReferencingFactoryFinder.getMathTransformFactory(null)
-// .createAffineTransform(new GeneralMatrix(transform));
-//
-// if (mt == null) {
-// mt = at;
-// } else {
-// mt = ReferencingFactoryFinder.getMathTransformFactory(null).createConcatenatedTransform(
-// mt, at);
-// }
-//
-// // dbfheader must be set so that the attributes required for theming can be read in.
-// ShapefileDataStore ds = (ShapefileDataStore) currLayer.getFeatureSource().getDataStore();
-//
-// // graphics.setTransform(transform);
-// // extract the feature type stylers from the style object
-// // and process them
-//
-// Transaction transaction = Transaction.AUTO_COMMIT;
-//
-// if (currLayer.getFeatureSource() instanceof FeatureStore) {
-// transaction = ((FeatureStore<SimpleFeatureType, SimpleFeature>) currLayer.getFeatureSource()).getTransaction();
-// }
-//
-// DefaultQuery query = new DefaultQuery(currLayer.getQuery());
-// if( query.getFilter() !=null ){
-// // now reproject the geometries in filter because geoms are retrieved projected to screen space
-// FilterTransformer transformer= new FilterTransformer(mt);
-// Filter transformedFilter = (Filter) query.getFilter().accept(transformer, null);
-// query.setFilter(transformedFilter);
-// }
-//
-// // by processing the filter we can further restrict the maximum bounds that are
-// // required. For example if a filter
-// //BoundsExtractor extractor=new BoundsExtractor(bbox);
-// //if( query.getFilter()!=null )
-// // query.getFilter().accept(extractor);
-// //
-// //processStylers(graphics, ds, query, extractor.getIntersection(), paintArea,
-// // mt, currLayer.getStyle(), layerIndexInfo[i], transaction);
-// processStylers(graphics, ds, query, bbox, paintArea,
-// mt, currLayer.getStyle(), layerIndexInfo[i], transaction, ""+i);
-// } catch (Exception exception) {
-// fireErrorEvent(new Exception("Exception rendering layer " + currLayer, exception));
-// }
-//
-// labelCache.endLayer(""+i, graphics, paintArea);
-// }
-//
-// labelCache.end(graphics, paintArea);
-// if(LOGGER.isLoggable(Level.FINE))
-// LOGGER.fine("Style cache hit ratio: " + styleFactory.getHitRatio() + " , hits "
-// + styleFactory.getHits() + ", requests " + styleFactory.getRequests());
-// }
-//
-// /**
-// * Returns the text rendering method
-// */
-// private String getTextRenderingMethod() {
-// if (rendererHints == null)
-// return textRenderingModeDEFAULT;
-// String result = (String) rendererHints.get(TEXT_RENDERING_KEY);
-// if (result == null)
-// return textRenderingModeDEFAULT;
-// return result;
-// }
-//
-// /**
-// * <p>
-// * Returns scale computation algorithm to be used.
-// * </p>
-// */
-// private String getScaleComputationMethod() {
-// if (rendererHints == null)
-// return scaleComputationMethodDEFAULT;
-// String result = (String) rendererHints.get(SCALE_COMPUTATION_METHOD_KEY);
-// if (result == null)
-// return scaleComputationMethodDEFAULT;
-// return result;
-// }
-//
-// private double computeScale(ReferencedEnvelope envelope, CoordinateReferenceSystem crs, Rectangle paintArea,
-// AffineTransform worldToScreen, Map hints) {
-// if(getScaleComputationMethod().equals(SCALE_ACCURATE)) {
-// try {
-// return RendererUtilities.calculateScale(envelope, paintArea.width, paintArea.height, hints);
-// } catch (Exception e) // probably either (1) no CRS (2) error xforming
-// {
-// LOGGER.log(Level.WARNING, e.getLocalizedMessage(), e);
-// }
-// }
-// if (XAffineTransform.getRotation(worldToScreen) != 0.0) {
-// return RendererUtilities.calculateOGCScaleAffine(envelope.getCoordinateReferenceSystem(),
-// worldToScreen, hints);
-// }
-// return RendererUtilities.calculateOGCScale(envelope, paintArea.width, hints);
-// }
-//
-// private void renderWithStreamingRenderer(MapLayer layer, Graphics2D graphics, Rectangle paintArea, ReferencedEnvelope envelope, AffineTransform transform) {
-// MapContext context = null;
-// RenderListener listener = null;;
-// try {
-// context = new DefaultMapContext(new MapLayer[]{layer}, envelope.getCoordinateReferenceSystem());
-// delegate = new StreamingRenderer();
-// delegate.setContext(context);
-// delegate.setJava2DHints(getJava2DHints());
-// Map rendererHints2 = new HashMap(getRendererHints() != null ? getRendererHints() : Collections.EMPTY_MAP);
-// rendererHints2.put(LABEL_CACHE_KEY, new IntegratingLabelCache(labelCache));
-// delegate.setRendererHints(rendererHints2);
-//
-// // cascade events, provided there is anyone listening
-// listener = new RenderListener() {
-//
-// public void featureRenderer(SimpleFeature feature) {
-// fireFeatureRenderedEvent(feature);
-// }
-//
-// public void errorOccurred(Exception e) {
-// fireErrorEvent(e);
-// }
-// };
-// delegate.addRenderListener(listener);
-//
-// delegate.paint(graphics, paintArea, envelope, transform);
-// } finally {
-// // cleanups to avoid circular references
-// if(context != null)
-// context.clearLayerList();
-// if(listener != null && delegate != null)
-// delegate.removeRenderListener(listener);
-//
-//
-// delegate = null;
-// }
-// }
-//
-// /**
-// * If the forceCRS hint is set then return the value.
-// * @return the value of the forceCRS hint or null
-// */
-// private CoordinateReferenceSystem getForceCRSHint() {
-// if ( rendererHints==null )
-// return null;
-// Object crs=this.rendererHints.get("forceCRS");
-// if( crs instanceof CoordinateReferenceSystem )
-// return (CoordinateReferenceSystem) crs;
-//
-// return null;
-// }
-//
-// /**
-// * @deprecated
-// */
-// public void paint(Graphics2D graphics, Rectangle paintArea, Envelope mapArea) {
-// paint(graphics, paintArea, new ReferencedEnvelope(mapArea, context.getCoordinateReferenceSystem()));
-// }
-//
-// /**
-// * @deprecated
-// */
-// public void paint(Graphics2D graphics, Rectangle paintArea, Envelope mapArea, AffineTransform worldToScreen) {
-// paint(graphics, paintArea, new ReferencedEnvelope(mapArea, context.getCoordinateReferenceSystem()), worldToScreen);
-// }
-//}
Modified: branches/1.0-gt2-2.6/src/schmitzm/geotools/GTUtil.java
===================================================================
--- branches/1.0-gt2-2.6/src/schmitzm/geotools/GTUtil.java 2009-10-05 12:48:14 UTC (rev 437)
+++ branches/1.0-gt2-2.6/src/schmitzm/geotools/GTUtil.java 2009-10-05 13:04:01 UTC (rev 438)
@@ -41,6 +41,7 @@
import org.geotools.map.MapContext;
import org.geotools.referencing.CRS;
import org.geotools.renderer.GTRenderer;
+import org.geotools.renderer.lite.StreamingRenderer;
import org.geotools.renderer.shape.ShapefileRenderer;
import org.opengis.geometry.Envelope;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
@@ -192,7 +193,7 @@
* @param mapContext a {@link MapContext} (can be {@code null})
*/
public static GTRenderer createGTRenderer(MapContext mapContext) {
- GTRenderer renderer = new ShapefileRenderer();
+ GTRenderer renderer = new StreamingRenderer();
if ( mapContext != null )
renderer.setContext(mapContext);
Modified: branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/GeoMapPane.java
===================================================================
--- branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/GeoMapPane.java 2009-10-05 12:48:14 UTC (rev 437)
+++ branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/GeoMapPane.java 2009-10-05 13:04:01 UTC (rev 438)
@@ -43,6 +43,7 @@
import org.geotools.renderer.lite.StreamingRenderer;
import org.geotools.renderer.shape.ShapefileRenderer;
+import schmitzm.geotools.GTUtil;
import schmitzm.geotools.map.event.JMapPaneEvent;
import schmitzm.geotools.map.event.JMapPaneListener;
import schmitzm.geotools.map.event.MapAreaChangedEvent;
@@ -144,7 +145,7 @@
* @param renderer
* Allows you to choose between the {@link StreamingRenderer}
* which is cool for creating PDF, SVG.. And the much faster
- * {@link ShapefileRenderer}.
+ * {@link ShapefileRenderer}. Defaults to {@link GTUtil#createGTRenderer(MapContext)}
*/
public GeoMapPane(JMapPane mapPane, GridPanel vGrid, GridPanel hGrid,
ScalePane scalePane, GTRenderer renderer) {
Modified: branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/JEditorPane.java
===================================================================
--- branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/JEditorPane.java 2009-10-05 12:48:14 UTC (rev 437)
+++ branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/JEditorPane.java 2009-10-05 13:04:01 UTC (rev 438)
@@ -58,6 +58,7 @@
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.feature.type.AttributeDescriptor;
+import schmitzm.geotools.GTUtil;
import schmitzm.geotools.feature.FeatureUtil;
import schmitzm.geotools.feature.FeatureUtil.GeometryForm;
import schmitzm.geotools.map.event.FeatureModifiedEvent;
@@ -183,7 +184,7 @@
public JEditorPane() {
this( new BorderLayout(),
true,
- new ShapefileRenderer(),
+ GTUtil.createGTRenderer(null),
new DefaultMapContext(DefaultGeographicCRS.WGS84)
);
}
@@ -208,7 +209,7 @@
// special map context for the editor layers, so the
// editor layers are not shown in "normal" layer list
this.editorMapContext = new DefaultMapContext( mapContext.getCoordinateReferenceSystem() );
- this.editorRenderer = new ShapefileRenderer(this.editorMapContext);
+ this.editorRenderer = GTUtil.createGTRenderer(this.editorMapContext);
// listen to CRS/Area changes on the "normal" Context to
// synchronize the editor context
this.mapContext.addMapBoundsListener( new MapContextSynchronizer(editorMapContext) );
Modified: branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/JMapPane.java
===================================================================
--- branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/JMapPane.java 2009-10-05 12:48:14 UTC (rev 437)
+++ branches/1.0-gt2-2.6/src/schmitzm/geotools/gui/JMapPane.java 2009-10-05 13:04:01 UTC (rev 438)
@@ -79,7 +79,6 @@
import org.geotools.renderer.GTRenderer;
import org.geotools.renderer.lite.RendererUtilities;
import org.geotools.renderer.lite.StreamingRenderer;
-import org.geotools.renderer.shape.ShapefileRenderer;
import org.geotools.resources.coverage.FeatureUtilities;
import org.geotools.resources.image.ImageUtilities;
import org.geotools.styling.Style;
@@ -99,6 +98,7 @@
import org.opengis.referencing.operation.TransformException;
import schmitzm.geotools.FilterUtil;
+import schmitzm.geotools.GTUtil;
import schmitzm.geotools.JTSUtil;
import schmitzm.geotools.feature.FeatureUtil;
import schmitzm.geotools.grid.GridUtil;
@@ -378,8 +378,7 @@
}
/**
- * Erzeugt ein neues MapPane. Benutzt einen
- * {@link TransitionShapefileRenderer} als default!
+ * Erzeugt ein neues MapPane.
*
* @param layout
* Layout-Manager fuer die GUI-Komponente (z.B.
@@ -401,7 +400,7 @@
GTRenderer renderer, MapContext context, Map<Object, Object> rendererHints) {
super(layout != null ? layout : new BorderLayout(),
isDoubleBuffered != null ? isDoubleBuffered : true,
- renderer != null ? renderer : new ShapefileRenderer(context),
+ renderer != null ? renderer : GTUtil.createGTRenderer(context),
// renderer != null ? renderer : new StreamingRenderer(),
context != null ? context : new DefaultMapContext(GeoImportUtil.getDefaultCRS()));
Modified: branches/1.0-gt2-2.6/src/skrueger/geotools/Copyable.java
===================================================================
--- branches/1.0-gt2-2.6/src/skrueger/geotools/Copyable.java 2009-10-05 12:48:14 UTC (rev 437)
+++ branches/1.0-gt2-2.6/src/skrueger/geotools/Copyable.java 2009-10-05 13:04:01 UTC (rev 438)
@@ -1,19 +1,18 @@
package skrueger.geotools;
-
public interface Copyable<T> {
/**
- * Deep copy this obejct to the target object. The target object has to be of the same
+ * Deep copy this object to the target object. The target object has to be of the same
* @param t
*/
- T copyTo (T t);
+ public T copyTo (T t);
/**
* Creates a new instance of T and copies all values.
* @param t
*/
- T copy();
+ public T copy();
}
Modified: branches/1.0-gt2-2.6/src/skrueger/geotools/selection/FeatureMapLayerSelectionSynchronizer.java
===================================================================
--- branches/1.0-gt2-2.6/src/skrueger/geotools/selection/FeatureMapLayerSelectionSynchronizer.java 2009-10-05 12:48:14 UTC (rev 437)
+++ branches/1.0-gt2-2.6/src/skrueger/geotools/selection/FeatureMapLayerSelectionSynchronizer.java 2009-10-05 13:04:01 UTC (rev 438)
@@ -67,6 +67,7 @@
import org.opengis.filter.identity.FeatureId;
import schmitzm.geotools.FilterUtil;
+import schmitzm.geotools.GTUtil;
import schmitzm.geotools.gui.JMapPane;
import schmitzm.geotools.map.event.FeatureSelectedEvent;
import schmitzm.geotools.map.event.JMapPaneEvent;
@@ -181,15 +182,7 @@
*/
private void changeLayerStyle(final Vector<String> newSelection) {
try {
-// GTRenderer r = mapPane.getRenderer();
-// if (r instanceof ShapefileRenderer) {
-// ShapefileRenderer sfr = (ShapefileRenderer)r;
-// sfr.setCaching(false);
-// }
-//
-
-
Style originalStyle = mapLayer.getStyle();
if (newSelection.isEmpty()) {
@@ -279,13 +272,7 @@
replaceRenderer();
}
-//
-// if (r instanceof ShapefileRenderer) {
-// ShapefileRenderer sfr = (ShapefileRenderer)r;
-// sfr.setCaching(true);
-// }
-
} catch (Exception e) {
LOGGER.error("Error while trying to create a selection style", e);
}
@@ -305,7 +292,7 @@
* SK 9.7.09: It's not enought to user LabelCache.clear(). We can not
* reuse the old Renderer - better to create a new one!
*/
- final GTRenderer newRenderer = new ShapefileRenderer();
+ final GTRenderer newRenderer = GTUtil.createGTRenderer(oldRenderer.getContext());
final HashMap<Object, Object> rendererHints = defaultGTRenderingHints;
rendererHints.put(StreamingRenderer.LABEL_CACHE_KEY,
More information about the Schmitzm-commits
mailing list