final FeatureSource<SimpleFeatureType, SimpleFeature> source = layers[i]
.getRemoteFeatureSource();
layer = new DefaultMapLayer(source, layerStyle);
layer.setTitle(layers[i].getRemoteFeatureSource().getSchema().getTypeName());
final DefaultQuery definitionQuery = new DefaultQuery(source.getSchema()
.getTypeName());
definitionQuery.setFilter(layerFilter);
definitionQuery.setVersion(featureVersion);
int maxFeatures = request.getMaxFeatures() != null ? request.getMaxFeatures()
: Integer.MAX_VALUE;
definitionQuery.setMaxFeatures(maxFeatures);
layer.setQuery(definitionQuery);
map.addLayer(layer);
} else if (layers[i].getType() == MapLayerInfo.TYPE_VECTOR) {
if (cachingPossible) {
if (layers[i].isCachingEnabled()) {
int nma = layers[i].getCacheMaxAge();
// suppose the map contains multiple cachable
// layers...we can only cache the combined map for
// the
// time specified by the shortest-cached layer.
if (nma < maxAge) {
maxAge = nma;
}
} else {
// if one layer isn't cachable, then we can't cache
// any of them. Disable caching.
cachingPossible = false;
}
}
FeatureSource<? extends FeatureType, ? extends Feature> source;
// /////////////////////////////////////////////////////////
//
// Adding a feature layer
//
// /////////////////////////////////////////////////////////
try {
source = layers[i].getFeatureSource(true);
// NOTE for the feature. Here there was some code that
// sounded like:
// * get the bounding box from feature source
// * eventually reproject it to the actual CRS used for
// map
// * if no intersection, don't bother adding the feature
// source to the map
// This is not an optimization, on the contrary,
// computing the bbox may be
// very expensive depending on the data size. Using
// sigma.openplans.org data
// and a tiled client like OpenLayers, it dragged the
// server to his knees
// and the client simply timed out
} catch (IOException exp) {
if (LOGGER.isLoggable(Level.SEVERE)) {
LOGGER.log(Level.SEVERE, new StringBuffer("Getting feature source: ")
.append(exp.getMessage()).toString(), exp);
}
throw new WmsException("Internal error", "", exp);
}
layer = new FeatureSourceMapLayer(source, layerStyle);
layer.setTitle(layers[i].getFeature().getName());
final DefaultQuery definitionQuery = new DefaultQuery(source.getSchema()
.getName().getLocalPart());
definitionQuery.setVersion(featureVersion);
definitionQuery.setFilter(layerFilter);
// check for startIndex + offset
final Integer startIndex = request.getStartIndex();
if (startIndex != null) {
QueryCapabilities queryCapabilities = source.getQueryCapabilities();
if (queryCapabilities.isOffsetSupported()) {
// fsource is required to support
// SortBy.NATURAL_ORDER so we don't bother checking
definitionQuery.setStartIndex(startIndex);
} else {
// source = new PagingFeatureSource(source,
// request.getStartIndex(), limit);
throw new WmsException("startIndex is not supported for the "
+ layers[i].getName() + " layer");
}
}
int maxFeatures = request.getMaxFeatures() != null ? request.getMaxFeatures()
: Integer.MAX_VALUE;
definitionQuery.setMaxFeatures(maxFeatures);
layer.setQuery(definitionQuery);
map.addLayer(layer);
} else if (layers[i].getType() == MapLayerInfo.TYPE_RASTER) {
// /////////////////////////////////////////////////////////