@Override
public FeatureLayerData infoQuery( final LayerQuery query, List<String> headers )
throws OWSException {
OperatorFilter filter = this.filter;
filter = Filters.and( filter, dimFilterBuilder.getDimensionFilter( query.getDimensions(), headers ) );
StyleRef ref = query.getStyle();
if ( !ref.isResolved() ) {
ref.resolve( getMetadata().getStyles().get( ref.getName() ) );
}
Style style = ref.getStyle();
style = style.filter( query.getScale() );
filter = Filters.and( filter, getStyleFilters( style, query.getScale() ) );
filter = Filters.and( filter, query.getFilter() );
int layerRadius = -1;
if ( getMetadata().getMapOptions() != null ) {
layerRadius = getMetadata().getMapOptions().getFeatureInfoRadius();
}
final Envelope clickBox = query.calcClickBox( layerRadius > -1 ? layerRadius : query.getLayerRadius() );
filter = (OperatorFilter) addBBoxConstraint( clickBox, filter, null, false );
QName featureType = this.featureType == null ? style.getFeatureType() : this.featureType;
filter = Filters.repair( filter, AppSchemas.collectProperyNames( featureStore.getSchema(), featureType ) );
LOG.debug( "Querying the feature store(s)..." );
QueryBuilder builder = new QueryBuilder( featureStore, filter, featureType, clickBox, query, null,
sortByFeatureInfo, getMetadata().getName() );
List<Query> queries = builder.buildInfoQueries();
LOG.debug( "Finished querying the feature store(s)." );
return new FeatureLayerData( queries, featureStore, query.getFeatureCount(), style, featureType );
}