/*
* 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.data.property;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.Set;
import org.geotools.data.AbstractFeatureSource;
import org.geotools.data.DataStore;
import org.geotools.data.FeatureListener;
import org.geotools.data.Query;
import org.geotools.data.QueryCapabilities;
import org.geotools.data.Transaction;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.filter.Filter;
public class PropertyFeatureSource extends AbstractFeatureSource {
String typeName;
SimpleFeatureType featureType;
PropertyDataStore store;
long cacheTimestamp = 0;
ReferencedEnvelope cacheBounds = null;
PropertyFeatureSource(PropertyDataStore propertyDataStore, String typeName)
throws IOException {
this.store = propertyDataStore;
this.typeName = typeName;
this.featureType = store.getSchema(typeName);
this.queryCapabilities = new QueryCapabilities() {
public boolean isUseProvidedFIDSupported() {
return true;
}
};
}
public PropertyDataStore getDataStore() {
return store;
}
public void addFeatureListener(FeatureListener listener) {
store.listenerManager.addFeatureListener(this, listener);
}
public void removeFeatureListener(FeatureListener listener) {
store.listenerManager.removeFeatureListener(this, listener);
}
public SimpleFeatureType getSchema() {
return featureType;
}
// constructor end
// getBounds start
public ReferencedEnvelope getBounds() {
File file = new File(store.directory, typeName + ".properties");
if (cacheBounds != null && file.lastModified() == cacheTimestamp) {
// we have the cache
return cacheBounds;
}
try {
// calculate and store in cache
cacheBounds = getFeatures().getBounds();
cacheTimestamp = file.lastModified();
return cacheBounds;
} catch (IOException e) {
}
// bounds are unavailable!
return null;
}
// getBounds end
}