public FeatureLayer( LayerMetadata md, FeatureStore featureStore, QName featureType, OperatorFilter filter, List<SortProperty> sortBy, List<SortProperty> sortByFeatureInfo ) { super( md ); this.featureStore = featureStore; this.featureType = featureType; this.filter = filter; if ( sortBy != null ) { this.sortBy = sortBy.toArray( new SortProperty[sortBy.size()] ); } if ( sortByFeatureInfo != null ) { this.sortByFeatureInfo = sortByFeatureInfo.toArray( new SortProperty[sortByFeatureInfo.size()] ); } dimFilterBuilder = new DimensionFilterBuilder( md.getDimensions() ); }
handleTime( dims, time, headers, ops ); vals = checkDefaultValue( vals, dim, headers, name ); findFilters( vals, dim, name, os, headers );
private void handleTime( Map<String, List<?>> dims, Dimension<?> time, List<String> headers, LinkedList<Operator> ops ) throws OWSException { List<?> vals = dims.get( "time" ); vals = checkDefaultValueTime( vals, time, headers ); Operator[] os = new Operator[vals.size()]; findTimeFilters( time, vals, os, headers ); if ( os.length > 1 ) { if ( !time.getMultipleValues() ) { String msg = "Multiple values are not allowed for TIME."; throw new OWSException( msg, "InvalidDimensionValue", "time" ); } try { ops.add( new Or( os ) ); } catch ( Throwable e ) { // will not happen, look at the if condition } } else { ops.add( os[0] ); } }
checkTimeValidity( time, o ); Date theVal = null; if ( o instanceof DimensionInterval<?, ?, ?> ) { theVal = checkNearestValueTime( theVal, time, headers ); Literal<PrimitiveValue> lit = new Literal<PrimitiveValue>( formatDateTime( theVal ) ); os[i++] = new PropertyIsEqualTo( property, lit, true, null );
checkValidity( dim, o, name ); new Literal<PrimitiveValue>( max ), true, null ); } else { o = checkNearestValue( o, headers, name, dim ); os[i++] = new PropertyIsEqualTo( new ValueReference( dim.getPropertyName() ), new Literal<PrimitiveValue>( o.toString() ), true, null );
static OperatorFilter buildFilterForMap(OperatorFilter filter, Style style, LayerQuery query, DimensionFilterBuilder dimFilterBuilder, List<String> headers) throws OWSException{ style = style.filter( query.getScale() ); filter = Filters.and( filter, Styles.getStyleFilters( style, query.getScale() ) ); filter = Filters.and( filter, query.getFilter() ); filter = Filters.and( filter, dimFilterBuilder.getDimensionFilter( query.getDimensions(), headers ) ); return filter; }
@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 ); }