public StrictFeatureReader(Transaction transaction, Query query, Integer level) throws IOException {
init(transaction, query, level);
}
protected void init( Transaction transaction, Query query, Integer level ) throws IOException {
FilterEncodingPreProcessor visitor = new FilterEncodingPreProcessor(level);
query.getFilter().accept(visitor,null);
this.transaction=transaction;
if( visitor.requiresPostProcessing() && query.getPropertyNames()!=Query.ALL_NAMES){
FilterAttributeExtractor attributeExtractor=new FilterAttributeExtractor();
query.getFilter().accept( attributeExtractor, null );
Set<String> properties = new HashSet<String>(attributeExtractor.getAttributeNameSet());
properties.addAll(Arrays.asList(query.getPropertyNames()));
this.query = new Query(query);
this.query.setPropertyNames((String[]) properties.toArray(new String[0]));
} else {
this.query=query;
}
this.filter=visitor.getFilter();
Query nonFidQuery=new Query(query);
Id fidFilter = visitor.getFidFilter();
nonFidQuery.setFilter(fidFilter);
if( fidFilter.getIDs().size()>0 ){
delegate = StrictWFSStrategy.super.createFeatureReader(transaction, nonFidQuery);
}else{
delegate=nextReader();