Hi,
I'm not sure which list to post this to so I apologize if this should
have gone to the user-list.

I'm having trouble in GeoTools 2.4.1 with my OGC-filter not being sent
to the WFS Server when using the WFSDataStore.
The filter is a simple PropertyIsEqualTo. Looking at the code it seems
that the filter always is pushed on the post-filter stack.

When debugging the actual server capabilities it seems that the server
does the right thing:

Server Capabilities
ops = 4128769
[0] = [EMAIL PROTECTED]"interface org.opengis.filter.PropertyIsNotEqualTo"
[1] = [EMAIL PROTECTED]"interface
org.opengis.filter.PropertyIsGreaterThanOrEqualTo"
[2] = [EMAIL PROTECTED]"interface org.opengis.filter.PropertyIsLessThan"
[3] = [EMAIL PROTECTED]"interface
org.opengis.filter.PropertyIsLessThanOrEqualTo"
[4] = [EMAIL PROTECTED]"interface org.opengis.filter.spatial.BBOX"
[5] = [EMAIL PROTECTED]"interface org.opengis.filter.PropertyIsGreaterThan"
[6] = [EMAIL PROTECTED]"interface org.opengis.filter.PropertyIsEqualTo"

Looking at the mask for the servers capabilities it seems like its
capable of the combined mask:

FilterCapabilities.SIMPLE_COMPARISONS (= 4128768) | SPATIAL_BBOX (=
0x01) => ops = 4128769


In PostPreProcessFilterSplittingVisitor.java (Line 428) the
filterCapabilities is compared to the SIMPLE_COMPARISONS_OPENGIS

private void visitBinaryComparisonOperator(BinaryComparisonOperator filter) {
       if( original==null )
           original=filter;

         // supports it as a group -- no need to check the type
         if (!fcs.supports(FilterCapabilities.SIMPLE_COMPARISONS_OPENGIS) ) {
               postStack.push(filter);
               return;
         }
         ....
}       

FilterCapabilities.SIMPLE_COMPARISONS_OPENGIS  has ops=32768    <=
shouldn't this be == FilterCapabilities.SIMPLE_COMPARISONS = 4128768??

[0] = [EMAIL PROTECTED]"interface org.opengis.filter.PropertyIsNotEqualTo"
[1] = [EMAIL PROTECTED]"interface
org.opengis.filter.PropertyIsGreaterThanOrEqualTo"
[2] = [EMAIL PROTECTED]"interface org.opengis.filter.PropertyIsLessThan"
[3] = [EMAIL PROTECTED]"interface
org.opengis.filter.PropertyIsLessThanOrEqualTo"
[4] = [EMAIL PROTECTED]"interface org.opengis.filter.PropertyIsGreaterThan"
[5] = [EMAIL PROTECTED]"interface org.opengis.filter.PropertyIsEqualTo"

The actual comparison that fails is:

return (ops & type.ops) == type.ops && functions.containsAll(type.functions);

The second part of the expression correctly returns true

       functions.containsAll(type.functions) => true

however the first part of the expression should be (I guess)

((FilterCapabilities.SPATIAL_BBOX |
FilterCapabilities.SIMPLE_COMPARISONS) &
FilterCapabilities.SIMPLE_COMPARISONS) ==
FilterCapabilities.SIMPLE_COMPARISONS => true

but looking at the debug values:

ops for the WFS Server = 4128769 and type.ops = 32768

(4128769 & 32768) == 32768 => false

I suspect that the addType(Class type) in FilterCapabilities is the
culprit but could someone with some more knowledge about the code
enlighten me to what is going on?

/regards Mats

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to