public FeatureLayerData( List<Query> queries, FeatureStore featureStore, int maxFeatures, Style style, QName ftName ) { this.queries = queries; this.featureStore = featureStore; this.maxFeatures = maxFeatures; this.style = style; Map<String, QName> bindings = new HashMap<String, QName>(); Set<QName> validNames = AppSchemas.collectProperyNames( featureStore.getSchema(), ftName ); for ( QName name : validNames ) { bindings.put( name.getLocalPart(), name ); } evaluator = new TypedObjectNodeXPathEvaluator( bindings ); }
filter = Filters.repair( filter, AppSchemas.collectProperyNames( featureStore.getSchema(), ftName ) );
@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 ); }