/[schmitzm]/trunk/src/skrueger/geotools/StyledFeatureCollection.java
ViewVC logotype

Diff of /trunk/src/skrueger/geotools/StyledFeatureCollection.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2 by mojays, Tue Feb 24 22:43:52 2009 UTC revision 770 by alfonx, Sun Mar 21 11:36:11 2010 UTC
# Line 1  Line 1 
1  package skrueger.geotools;  /*******************************************************************************
2     * Copyright (c) 2009 Martin O. J. Schmitz.
3  import java.net.URL;   *
4  import java.util.Map;   * This file is part of the SCHMITZM library - a collection of utility
5  import java.util.HashMap;   * classes based on Java 1.6, focusing (not only) on Java Swing
6  import javax.swing.ImageIcon;   * and the Geotools library.
7     *
8  import org.geotools.styling.Style;   * The SCHMITZM project is hosted at:
9  import org.geotools.feature.FeatureCollection;   * http://wald.intevation.org/projects/schmitzm/
10  import org.geotools.feature.FeatureType;   *
11  import org.geotools.feature.AttributeType;   * This program is free software; you can redistribute it and/or
12     * modify it under the terms of the GNU Lesser General Public License
13  import schmitzm.geotools.feature.FeatureUtil;   * as published by the Free Software Foundation; either version 3
14     * of the License, or (at your option) any later version.
15  import skrueger.i8n.Translation;   *
16  import skrueger.AttributeMetaData;   * This program is distributed in the hope that it will be useful,
17     * but WITHOUT ANY WARRANTY; without even the implied warranty of
18     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  /**   * GNU General Public License for more details.
20   * This class provides a simple implementation of {@link StyledMapInterface}   *
21   * for {@link FeatureCollection}. The uncache functionality is not supported,   * You should have received a copy of the GNU Lesser General Public License (license.txt)
22   * because this class bases on an existing {@link FeatureCollection} object in   * along with this program; if not, write to the Free Software
23   * memory.   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
24   * @author <a href="mailto:[email protected]">Martin Schmitz</a> (University of Bonn/Germany)   * or try this link: http://www.gnu.org/licenses/lgpl.html
25   * @version 1.0   *
26   */   * Contributors:
27  public class StyledFeatureCollection extends AbstractStyledMap<FeatureCollection> implements StyledFeatureCollectionInterface {   *     Martin O. J. Schmitz - initial API and implementation
28     *     Stefan A. Krüger - additional utility classes
29    /** Holds the meta data for displaying a legend. */   ******************************************************************************/
30    protected Map<Integer,AttributeMetaData> attrMetaData = null;  package skrueger.geotools;
31    
32    /**  import java.io.IOException;
33     * Creates a styled {@link FeatureCollection} with language-specific informations.  import java.net.URL;
34     * @param fc the {@link FeatureCollection}  
35     * @param id a unique ID for the object  import javax.swing.ImageIcon;
36     * @param title a (language-specific) short description  
37     * @param desc a (language-specific) long description  import org.geotools.data.FeatureSource;
38     * @param keywords (language-specific) keywords for the geo objects  import org.geotools.data.collection.CollectionDataStore;
39     * @param style a display style (if {@code null}, a default style is created)  import org.geotools.data.store.EmptyFeatureCollection;
40     * @param attrMetaData meta data for displaying a legend  import org.geotools.feature.FeatureCollection;
41     * @param icon an icon for the object (can be {@code null})  import org.geotools.feature.NameImpl;
42     * @exception IllegalArgumentException if {@code null} is given as ID or geo object  import org.geotools.feature.collection.SubFeatureCollection;
43     */  import org.geotools.styling.Style;
44    public StyledFeatureCollection(FeatureCollection fc, String id, Translation title, Translation desc, Translation keywords, Style style, Map<Integer,AttributeMetaData> attrMetaData, ImageIcon icon) {  import org.opengis.feature.simple.SimpleFeature;
45      super(fc, fc.getBounds(), fc.getSchema().getDefaultGeometry().getCoordinateSystem(), id, title, desc, keywords, style, icon);  import org.opengis.feature.simple.SimpleFeatureType;
46      setAttributeMetaData( attrMetaData );  import org.opengis.feature.type.AttributeDescriptor;
47    }  import org.opengis.filter.Filter;
48    
49    /**  import schmitzm.geotools.feature.FeatureUtil;
50     * Creates a styled {@link FeatureCollection} with language-specific informations.  import skrueger.AttributeMetadataImpl;
51     * @param fc the {@link FeatureCollection}  import skrueger.i8n.Translation;
52     * @param id a unique ID for the object  
53     * @param title a (language-specific) short description  /**
54     * @param desc a (language-specific) long description   * This class provides a simple implementation of {@link StyledLayerInterface}
55     * @param keywords (language-specific) keywords for the geo objects   * for {@link FeatureCollection}. The uncache functionality is not supported,
56     * @param style a display style with attribute meta data information   * because this class bases on an existing {@link FeatureCollection} object in
57     * @param icon an icon for the object (can be {@code null})   * memory.
58     * @exception IllegalArgumentException if {@code null} is given as ID or geo object   *
59     */   * @author <a href="mailto:[email protected]">Martin Schmitz</a>
60    public StyledFeatureCollection(FeatureCollection fc, String id, Translation title, Translation desc, Translation keywords, StyledMapStyle<Map<Integer,AttributeMetaData>> style, ImageIcon icon) {   *         (University of Bonn/Germany)
61      super(fc, fc.getBounds(), fc.getSchema().getDefaultGeometry().getCoordinateSystem(), id, title, desc, keywords, style != null ? style.getGeoObjectStyle() : null, icon);   * @version 1.0
62      setAttributeMetaData( style != null ? style.getMetaData() : null );   */
63    }  public class StyledFeatureCollection
64                    extends
65    /**                  AbstractStyledLayer<FeatureCollection<SimpleFeatureType, SimpleFeature>>
66     * Creates a styled {@link FeatureCollection} with a language-specific title,                  implements StyledFeatureCollectionInterface {
67     * no long description, no keywords, default attribute meta data and no icon.  
68     * @param fc the {@link FeatureCollection}          /** Holds the meta data for displaying a legend. */
69     * @param id a unique ID for the object          protected AttributeMetadataMap<AttributeMetadataImpl> attrMetaData = null;
70     * @param title a short description  
71     * @param style a display style (if {@code null}, a default style is created)          /**
72     * @exception IllegalArgumentException if {@code null} is given as ID or geo object           * We be filled with a "virtual" {@link FeatureSource} on demand.
73     * @see #createDefaultAttributeMetaDataMap(FeatureCollection)           */
74     */          private FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = null;
75    public StyledFeatureCollection(FeatureCollection fc, String id, Translation title, Style style) {  
76      this(fc, id, title, null, null, style, null, null);          /**
77    }           * A Filter that will be applied internally applied to this
78             * FeatureCollection
79    /**           **/
80     * Creates a styled {@link FeatureCollection} with non-translated informations.          private Filter filter = Filter.INCLUDE;
81     * @param fc the {@link FeatureCollection}  
82     * @param id a unique ID for the object          /**
83     * @param title a short description           * Creates a styled {@link FeatureCollection} with language-specific
84     * @param desc a long description           * informations.
85     * @param keywords keywords for the geo objects           *
86     * @param style a display style (if {@code null}, a default style is created)           * @param fc
87     * @param attrMetaData meta data for displaying a legend           *            the {@link FeatureCollection}
88     * @param icon an icon for the object (can be {@code null})           * @param id
89     * @exception IllegalArgumentException if {@code null} is given as ID or geo object           *            a unique ID for the object
90     */           * @param title
91    public StyledFeatureCollection(FeatureCollection fc, String id, String title, String desc, String keywords, Style style, Map<Integer,AttributeMetaData> attrMetaData, ImageIcon icon) {           *            a (language-specific) short description
92      this(fc, id, (Translation)null, null, null, style, attrMetaData, icon);           * @param desc
93      setTitle(title);           *            a (language-specific) long description
94      setDesc(desc);           * @param keywords
95      setKeywords(keywords);           *            (language-specific) keywords for the geo objects
96    }           * @param style
97             *            a display style (if {@code null}, a default style is created)
98    /**           * @param attrMetaData
99     * Creates a styled {@link FeatureCollection} with non-translated informations.           *            meta data for displaying a legend
100     * @param fc the {@link FeatureCollection}           * @param icon
101     * @param id a unique ID for the object           *            an icon for the object (can be {@code null})
102     * @param title a short description           * @exception IllegalArgumentException
103     * @param desc a long description           *                if {@code null} is given as ID or geo object
104     * @param keywords keywords for the geo objects           */
105     * @param style a display style with attribute meta data information          public StyledFeatureCollection(
106     * @param icon an icon for the object (can be {@code null})                          FeatureCollection<SimpleFeatureType, SimpleFeature> fc, String id,
107     * @exception IllegalArgumentException if {@code null} is given as ID or geo object                          Translation title, Translation desc, Translation keywords,
108     */                          Style style, AttributeMetadataMap attrMetaData, ImageIcon icon) {
109    public StyledFeatureCollection(FeatureCollection fc, String id, String title, String desc, String keywords, StyledMapStyle<Map<Integer,AttributeMetaData>> style, ImageIcon icon) {                  super(fc, fc.getBounds(), fc.getSchema().getGeometryDescriptor()
110      this(fc,                                  .getCoordinateReferenceSystem(), id, title, desc, keywords,
111           id,                                  style, icon);
112           title,                  setAttributeMetaData(attrMetaData);
113           desc,          }
114           keywords,  
115           style != null ? style.getGeoObjectStyle() : null,          /**
116           style != null ? style.getMetaData() : null,           * Creates a styled {@link FeatureCollection} with language-specific
117           icon           * informations.
118      );           *
119    }           * @param fc
120             *            the {@link FeatureCollection}
121    /**           * @param id
122     * Creates a styled {@link FeatureCollection} with a non-translated title,           *            a unique ID for the object
123     * no long description, no keywords, default attribute meta data and no icon.           * @param title
124     * @param fc the {@link FeatureCollection}           *            a (language-specific) short description
125     * @param id a unique ID for the object           * @param desc
126     * @param title a short description           *            a (language-specific) long description
127     * @param style a display style (if {@code null}, a default style is created)           * @param keywords
128     * @exception IllegalArgumentException if {@code null} is given as ID or geo object           *            (language-specific) keywords for the geo objects
129     * @see #createDefaultAttributeMetaDataMap(FeatureCollection)           * @param style
130     */           *            a display style with attribute meta data information
131    public StyledFeatureCollection(FeatureCollection fc, String id, String title, Style style) {           * @param icon
132      this(fc, id, title, null, null, style, null, null);           *            an icon for the object (can be {@code null})
133    }           * @exception IllegalArgumentException
134             *                if {@code null} is given as ID or geo object
135    /**           */
136     * Creates a styled {@link FeatureCollection} with a non-translated title,          public StyledFeatureCollection(
137     * no long description, no keywords, default attribute meta data and no icon.                          FeatureCollection<SimpleFeatureType, SimpleFeature> fc, String id,
138     * @param fc the {@link FeatureCollection}                          Translation title, Translation desc, Translation keywords,
139     * @param id a unique ID for the object                          StyledLayerStyle<AttributeMetadataMap> style, ImageIcon icon) {
140     * @param title a short description                  super(fc, fc.getBounds(), fc.getSchema().getGeometryDescriptor()
141     * @param style a display style (if {@code null}, a default style is created)                                  .getCoordinateReferenceSystem(), id, title, desc, keywords,
142     * @exception IllegalArgumentException if {@code null} is given as ID or geo object                                  style != null ? style.getGeoObjectStyle() : null, icon);
143     * @see #createDefaultAttributeMetaDataMap(FeatureCollection)                  setAttributeMetaData(style != null ? style.getMetaData() : null);
144     */          }
145    public StyledFeatureCollection(FeatureCollection fc, String id, String title, StyledMapStyle<Map<Integer,AttributeMetaData>> style) {  
146      this(          /**
147        fc,           * Creates a styled {@link FeatureCollection} with a language-specific
148        id,           * title, no long description, no keywords, default attribute meta data and
149        title,           * no icon.
150        null,           *
151        null,           * @param fc
152        style != null ? style.getGeoObjectStyle() : null,           *            the {@link FeatureCollection}
153        style != null ? style.getMetaData() : null,           * @param id
154        null           *            a unique ID for the object
155      );           * @param title
156    }           *            a short description
157             * @param style
158    /**           *            a display style (if {@code null}, a default style is created)
159     * Creates a default style for the {@link FeatureCollection}.           * @exception IllegalArgumentException
160     * @see FeatureUtil#createDefaultStyle(FeatureCollection)           *                if {@code null} is given as ID or geo object
161     */           * @see #createDefaultAttributeMetaDataMap(FeatureCollection)
162    protected Style createDefaultStyle() {           */
163      return FeatureUtil.createDefaultStyle( geoObject );          public StyledFeatureCollection(
164    }                          FeatureCollection<SimpleFeatureType, SimpleFeature> fc, String id,
165                            Translation title, Style style) {
166    /**                  this(fc, id, title, null, null, style, null, null);
167     * Returns the meta data needed for displaying a legend.          }
168     */  
169    public Map<Integer,AttributeMetaData> getAttributeMetaDataMap() {          /**
170      return attrMetaData;           * Creates a styled {@link FeatureCollection} with non-translated
171    }           * informations.
172             *
173    /**           * @param fc
174     * Sets the meta data needed for displaying a legend.           *            the {@link FeatureCollection}
175     * If {@code legendData} is {@code null} an empty map is set, so           * @param id
176     * {@link #getAttributeMetaDataMap()} never returns {@code null}.           *            a unique ID for the object
177     * @param attrMetaData map of attribute meta data           * @param title
178     */           *            a short description
179    public void setAttributeMetaData(Map<Integer,AttributeMetaData> attrMetaData) {           * @param desc
180      this.attrMetaData = (attrMetaData != null) ? attrMetaData : createDefaultAttributeMetaDataMap(geoObject);           *            a long description
181    }           * @param keywords
182             *            keywords for the geo objects
183    /**           * @param style
184     * Creates non-translated default meta data for a {@link FeatureCollection}           *            a display style (if {@code null}, a default style is created)
185     * with all attributes visible and no unit set.           * @param attrMetaData
186     * @param fc a {@link FeatureCollection}           *            meta data for displaying a legend
187     */           * @param icon
188    public static Map<Integer,AttributeMetaData> createDefaultAttributeMetaDataMap(FeatureCollection fc) {           *            an icon for the object (can be {@code null})
189      HashMap<Integer,AttributeMetaData> metaDataMap = new HashMap<Integer,AttributeMetaData>();           * @exception IllegalArgumentException
190      FeatureType ftype = fc.getSchema();           *                if {@code null} is given as ID or geo object
191      for (int i=0; i<ftype.getAttributeCount(); i++) {           */
192        AttributeType aType = ftype.getAttributeType(i);          public StyledFeatureCollection(
193        if ( aType != ftype.getDefaultGeometry() )                          FeatureCollection<SimpleFeatureType, SimpleFeature> fc, String id,
194          metaDataMap.put(                          String title, String desc, String keywords, Style style,
195            i,                          AttributeMetadataMap attrMetaData, ImageIcon icon) {
196            new AttributeMetaData(                  this(fc, id, (Translation) null, null, null, style, attrMetaData, icon);
197              i,  // Column no.                  setTitle(title);
198              true, // visible                  setDesc(desc);
199              new Translation( aType.getName() ), // Column name                  setKeywords(keywords);
200              new Translation(), // description          }
201              "" // Unit  
202            )          /**
203          );           * Creates a styled {@link FeatureCollection} with non-translated
204      }           * informations.
205      return metaDataMap;           *
206    }           * @param fc
207             *            the {@link FeatureCollection}
208    /**           * @param id
209     * Simply sets the {@link #geoObject}, {@link #crs}, {@link #envelope} and           *            a unique ID for the object
210     * {@link #attrMetaData} to {@code null}.           * @param title
211     */           *            a short description
212    public void dispose() {           * @param desc
213      this.geoObject    = null;           *            a long description
214      this.envelope     = null;           * @param keywords
215      this.crs          = null;           *            keywords for the geo objects
216      this.attrMetaData = null;           * @param style
217    }           *            a display style with attribute meta data information
218             * @param icon
219    /**           *            an icon for the object (can be {@code null})
220     * Tests whether the geo object is disposed.           * @exception IllegalArgumentException
221     */           *                if {@code null} is given as ID or geo object
222    public boolean isDisposed() {           */
223      return geoObject == null;          public StyledFeatureCollection(
224    }                          FeatureCollection<SimpleFeatureType, SimpleFeature> fc, String id,
225                            String title, String desc, String keywords,
226    /**                          StyledLayerStyle<AttributeMetadataMap> style, ImageIcon icon) {
227     * Does nothing, because the {@link AbstractStyledMap} bases on existing                  this(fc, id, title, desc, keywords, style != null ? style
228     * objects (in memory) which can not be uncached and reloaded.                                  .getGeoObjectStyle() : null, style != null ? style
229     */                                  .getMetaData() : null, icon);
230    public void uncache() {          }
231      LOGGER.warn("Uncache functionality is not supported. Object remains in memory.");  
232    }          /**
233             * Creates a styled {@link FeatureCollection} with a non-translated title,
234             * no long description, no keywords, default attribute meta data and no
235    /*           * icon.
236     * (non-Javadoc)           *
237     * @see skrueger.geotools.StyledMapInterface#getInfoURL()           * @param fc
238     */           *            the {@link FeatureCollection}
239          public URL getInfoURL() {           * @param id
240                  return null;           *            a unique ID for the object
241          }           * @param title
242             *            a short description
243          public boolean isHideInLegend() {           * @param style
244                  return false;           *            a display style (if {@code null}, a default style is created)
245          }           * @exception IllegalArgumentException
246  }           *                if {@code null} is given as ID or geo object
247             * @see #createDefaultAttributeMetaDataMap(FeatureCollection)
248             */
249            public StyledFeatureCollection(
250                            FeatureCollection<SimpleFeatureType, SimpleFeature> fc, String id,
251                            String title, Style style) {
252                    this(fc, id, title, null, null, style, null, null);
253            }
254    
255            /**
256             * Creates a styled {@link FeatureCollection} with a non-translated title,
257             * no long description, no keywords, default attribute meta data and no
258             * icon.
259             *
260             * @param fc
261             *            the {@link FeatureCollection}
262             * @param id
263             *            a unique ID for the object
264             * @param title
265             *            a short description
266             * @param style
267             *            a display style (if {@code null}, a default style is created)
268             * @exception IllegalArgumentException
269             *                if {@code null} is given as ID or geo object
270             * @see #createDefaultAttributeMetaDataMap(FeatureCollection)
271             */
272            public StyledFeatureCollection(
273                            FeatureCollection<SimpleFeatureType, SimpleFeature> fc, String id,
274                            String title, StyledLayerStyle<AttributeMetadataMap> style) {
275                    this(fc, id, title, null, null, style != null ? style
276                                    .getGeoObjectStyle() : null, style != null ? style
277                                    .getMetaData() : null, null);
278            }
279    
280            /**
281             * Creates a default style for the {@link FeatureCollection}.
282             *
283             * @see FeatureUtil#createDefaultStyle(FeatureCollection)
284             */
285            protected Style createDefaultStyle() {
286                    return FeatureUtil.createDefaultStyle(geoObject);
287            }
288    
289            /**
290             * Returns the meta data needed for displaying a legend.
291             */
292            public AttributeMetadataMap getAttributeMetaDataMap() {
293                    return attrMetaData;
294            }
295    
296            /**
297             * Sets the meta data needed for displaying a legend. If {@code legendData}
298             * is {@code null} an empty map is set, so
299             * {@link #getAttributeMetaDataMap()} never returns {@code null}.
300             *
301             * @param attrMetaData
302             *            map of attribute meta data
303             */
304            public void setAttributeMetaData(AttributeMetadataMap attrMetaData) {
305                    this.attrMetaData = (attrMetaData != null) ? attrMetaData
306                                    : createDefaultAttributeMetaDataMap(geoObject);
307            }
308    
309            /**
310             * Creates non-translated default meta data for a {@link FeatureCollection}
311             * with all attributes visible and no unit set.
312             *
313             * @param fc
314             *            a {@link FeatureCollection}
315             */
316            public static AttributeMetadataMap createDefaultAttributeMetaDataMap(
317                            FeatureCollection<SimpleFeatureType, SimpleFeature> fc) {
318                    AttributeMetadataMap metaDataMap = new AttributeMetadataImplMap();
319                    SimpleFeatureType ftype = fc.getSchema();
320                    for (int i = 0; i < ftype.getAttributeCount(); i++) {
321                            AttributeDescriptor aDesc = ftype.getAttributeDescriptors().get(i);
322                            if (aDesc != ftype.getGeometryDescriptor())
323                                    metaDataMap.put(aDesc.getName(), new AttributeMetadataImpl( new NameImpl( aDesc.getName().getNamespaceURI(), aDesc.getName().getLocalPart()),
324                                                    true, // visible
325                                                    new Translation(aDesc.getLocalName()), // Column name
326                                                    new Translation(aDesc.getLocalName()), // description
327                                                    "" // Unit
328                                    ));
329                    }
330                    return metaDataMap;
331            }
332    
333            /**
334             * Simply sets the {@link #geoObject}, {@link #crs}, {@link #envelope} and
335             * {@link #attrMetaData} to {@code null}.
336             */
337            public void dispose() {
338                    this.geoObject = null;
339                    this.envelope = null;
340                    this.crs = null;
341                    this.attrMetaData = null;
342            }
343    
344            /**
345             * Tests whether the geo object is disposed.
346             */
347            public boolean isDisposed() {
348                    return geoObject == null;
349            }
350    
351            /**
352             * Does nothing, because the {@link AbstractStyledLayer} bases on existing
353             * objects (in memory) which can not be uncached and reloaded.
354             */
355            public void uncache() {
356    
357                    /** It will be recreated on the next getFetureSource() **/
358                    featureSource = null;
359    
360                    LOGGER
361                                    .warn("Uncache onyl uncached any virtual FeatureSource. Object remains in memory.");
362            }
363    
364            /*
365             * (non-Javadoc)
366             *
367             * @see skrueger.geotools.StyledLayerInterface#getInfoURL()
368             */
369            public URL getInfoURL() {
370                    return null;
371            }
372    
373            /**
374             * Same as {@link #getGeoObject()} method, but complies to the
375             * {@link StyledFeaturesInterface}. The associated {@link Filter} is NOT
376             * automatically applied.
377             *
378             * @see {@link StyledFeaturesInterface}
379             * @see #getFeatureCollectionFiltered()
380             */
381            @Override
382            public FeatureCollection<SimpleFeatureType, SimpleFeature> getFeatureCollection() {
383                    return getGeoObject();
384            }
385    
386            /**
387             * Same as {@link #getGeoObject()} method, but complies to the
388             * {@link StyledFeaturesInterface}. The associated {@link Filter} is
389             * automatically applied by creating a {@link SubFeatureCollection}.
390             *
391             * @see {@link StyledFeaturesInterface}
392             * @see #getFeatureCollectionFiltered()
393             */
394            @Override
395            public FeatureCollection<SimpleFeatureType, SimpleFeature> getFeatureCollectionFiltered() {
396                    final FeatureCollection<SimpleFeatureType, SimpleFeature> fc = getFeatureCollection();
397                    if (filter == Filter.EXCLUDE)
398                            return new EmptyFeatureCollection(fc.getSchema());
399                    if (filter == Filter.INCLUDE)
400                            return fc;
401                    return fc.subCollection(filter);
402            }
403    
404            /**
405             * Returns a virtual {@link FeatureSource} to access the
406             * {@link FeatureCollection}. Once created, it will be reused until
407             * {@link #uncache()} is called.<br/>
408             *
409             * @see {@link StyledFeaturesInterface}
410             */
411            @Override
412            public FeatureSource<SimpleFeatureType, SimpleFeature> getFeatureSource() {
413                    if (featureSource == null) {
414                            CollectionDataStore store = new CollectionDataStore(getGeoObject());
415                            try {
416                                    featureSource = store.getFeatureSource(store.getTypeNames()[0]);
417                            } catch (IOException e) {
418                                    throw new RuntimeException(
419                                                    "Could not create a FeatureSource from the CollectionDataStore:",
420                                                    e);
421                            }
422                    }
423                    return featureSource;
424            }
425    
426            @Override
427            public Filter getFilter() {
428                    return filter;
429            }
430    
431            @Override
432            public void setFilter(Filter filter) {
433                    this.filter = filter;
434            }
435    
436            @Override
437            public SimpleFeatureType getSchema() {
438                    return getGeoObject().getSchema();
439            }
440    
441    
442    }

Legend:
Removed from v.2  
changed lines
  Added in v.770

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26