private static LogicalOperator repair( LogicalOperator o, Map<String, QName> bindings, Set<QName> validNames ) { Operator[] os = o.getParams(); for ( int i = 0; i < os.length; ++i ) { os[i] = repair( os[i], bindings, validNames ); } switch ( o.getSubType() ) { case AND: return new And( os ); case NOT: return new Not( os[0] ); case OR: return new Or( os ); } return o; }
@Override public String toString( String indent ) { String s = indent + "-And\n"; for ( int i = 0; i < getSize(); i++ ) { s += params.get( i ).toString( indent + " " ); } return s; }
private static OperatorFilter combine( boolean and, OperatorFilter f1, OperatorFilter f2 ) { if ( f1 == null || f2 == null ) { return f1 == null ? f2 : f1; } Operator o1 = f1.getOperator(); Operator o2 = f2.getOperator(); if ( and ) { return new OperatorFilter( new And( o1, o2 ) ); } return new OperatorFilter( new Or( o1, o2 ) ); }
throw new XMLParsingException( xmlStream, msg ); logicalOperator = new And( innerOperators.toArray( new Operator[innerOperators.size()] ) ); break; throw new XMLParsingException( xmlStream, msg ); logicalOperator = new Or( innerOperators.toArray( new Operator[innerOperators.size()] ) ); break; nextElement( xmlStream ); Operator parameter = parseOperator( xmlStream ); logicalOperator = new Not( parameter ); nextElement( xmlStream ); break;
throws XMLStreamException, UnknownCRSException, TransformationException { QName elementName = logicalOperatorTypeToElementName.get( operator.getSubType() ); writer.writeStartElement( elementName.getNamespaceURI(), elementName.getLocalPart() ); switch ( operator.getSubType() ) { case AND: And andOp = (And) operator; for ( int i = 0; i < andOp.getSize(); i++ ) { export( andOp.getParameter( i ), writer ); for ( int i = 0; i < orOp.getSize(); i++ ) { export( orOp.getParameter( i ), writer ); export( ( (Not) operator ).getParameter(), writer ); break;
switch ( logical.getSubType() ) { case AND: BBOX env = null; for ( Operator child : logical.getParams() ) { BBOX childEnv = extractBBox( child ); if ( childEnv != null ) {
Operator op1 = sldFilter.getOperator(); Operator op2 = ( (OperatorFilter) contn.filter ).getOperator(); sldFilter = new OperatorFilter( new Or( op1, op2 ) );
/** * @param filter * can be null * @return the reverse of #addBBoxConstraint */ public static Pair<Filter, Envelope> splitOffBBoxConstraint( Filter filter ) { Pair<Filter, Envelope> p = new Pair<Filter, Envelope>(); if ( filter instanceof OperatorFilter ) { OperatorFilter f = (OperatorFilter) filter; if ( f.getOperator() instanceof BBOX ) { p.second = ( (BBOX) f.getOperator() ).getBoundingBox(); } else if ( f.getOperator() instanceof And && ( (And) f.getOperator() ).getParams()[0] instanceof BBOX ) { Operator[] ops = ( (And) f.getOperator() ).getParams(); p.second = ( (BBOX) ops[0] ).getBoundingBox(); if ( ops.length == 2 ) { p.first = new OperatorFilter( ops[1] ); } else { p.first = new OperatorFilter( new And( Arrays.copyOfRange( ops, 1, ops.length - 1 ) ) ); } } else { p.first = filter; } } else { p.first = filter; } return p; }
private static void export( LogicalOperator operator, XMLStreamWriter writer ) throws XMLStreamException, UnknownCRSException, TransformationException { switch ( operator.getSubType() ) { case AND: export( writer, (And) operator ); break; case OR: export( writer, (Or) operator ); break; case NOT: export( writer, (Not) operator ); break; default: throw new IllegalArgumentException( "Encoding of logical operator subtype " + operator.getSubType() + " is not supported yet!" ); } }
bboxFilter = new OperatorFilter( bboxOperator ); } else { And andOperator = new And( bboxOperator, ( (OperatorFilter) filter ).getOperator() ); bboxFilter = new OperatorFilter( andOperator );
private static void addGeometries( Operator operator, List<Geometry> geometries ) { Operator.Type type = operator.getType(); switch ( type ) { case LOGICAL: LogicalOperator logicalOper = (LogicalOperator) operator; for ( Operator param : logicalOper.getParams() ) { addGeometries( param, geometries ); } break; case SPATIAL: SpatialOperator spatialOper = (SpatialOperator) operator; for ( Object param : spatialOper.getParams() ) { if ( param instanceof Geometry ) { geometries.add( (Geometry) param ); } } break; case COMPARISON: // nothing to do break; } }
private static void export( XMLStreamWriter writer, Or orOp ) throws XMLStreamException, UnknownCRSException, TransformationException { writer.writeStartElement( FES_20_NS, "Or" ); for ( int i = 0; i < orOp.getSize(); i++ ) { export( orOp.getParameter( i ), writer ); } writer.writeEndElement(); }
private static void export( XMLStreamWriter writer, And andOp ) throws XMLStreamException, UnknownCRSException, TransformationException { writer.writeStartElement( FES_20_NS, "And" ); for ( int i = 0; i < andOp.getSize(); i++ ) { export( andOp.getParameter( i ), writer ); } writer.writeEndElement(); }
private static void export( XMLStreamWriter writer, Not not ) throws XMLStreamException, UnknownCRSException, TransformationException { writer.writeStartElement( FES_20_NS, "Not" ); export( not.getParameter(), writer ); writer.writeEndElement(); }
@Override public String toString( String indent ) { String s = indent + "-Or\n"; for ( int i = 0; i < getSize(); i++ ) { s += params.get( i ).toString( indent + " " ); } return s; }
throw new XMLParsingException( xmlStream, msg ); logicalOperator = new And( innerOperators.toArray( new Operator[innerOperators.size()] ) ); break; throw new XMLParsingException( xmlStream, msg ); logicalOperator = new Or( innerOperators.toArray( new Operator[innerOperators.size()] ) ); break; nextElement( xmlStream ); Operator parameter = parseOperator( xmlStream ); logicalOperator = new Not( parameter ); nextElement( xmlStream ); break;
static OperatorFilter buildFilter( Operator operator, FeatureType ft, Envelope clickBox ) { if ( ft == null ) { if ( operator == null ) { return null; } return new OperatorFilter( operator ); } LinkedList<Operator> list = findOperators( ft, clickBox ); if ( list.size() > 1 ) { Or or = new Or( list.toArray( new Operator[list.size()] ) ); if ( operator == null ) { return new OperatorFilter( or ); } return new OperatorFilter( new And( operator, or ) ); } if ( list.isEmpty() ) { // obnoxious case where feature has no geometry properties (but features may have extra geometry props) if ( operator == null ) { return new OperatorFilter( new Intersects( null, clickBox ) ); } return new OperatorFilter( new And( operator, new Intersects( null, clickBox ) ) ); } if ( operator == null ) { return new OperatorFilter( list.get( 0 ) ); } return new OperatorFilter( new And( operator, list.get( 0 ) ) ); }
switch ( op.getSubType() ) { case AND: { builder.add( "(" ); builder.add( toProtoSQL( op.getParams()[0] ) ); for ( int i = 1; i < op.getParams().length; i++ ) { builder.add( " AND " ); builder.add( toProtoSQL( op.getParams()[i] ) ); builder.add( toProtoSQL( op.getParams()[0] ) ); for ( int i = 1; i < op.getParams().length; i++ ) { builder.add( " OR " ); builder.add( toProtoSQL( op.getParams()[i] ) ); builder.add( toProtoSQL( op.getParams()[0] ) ); builder.add( ")" ); break;
private static void addPropertyNames( Operator operator, List<ValueReference> propNames ) { Operator.Type type = operator.getType(); switch ( type ) { case COMPARISON: ComparisonOperator compOper = (ComparisonOperator) operator; for ( Expression expr : compOper.getParams() ) { addPropertyNames( expr, propNames ); } break; case LOGICAL: LogicalOperator logicalOper = (LogicalOperator) operator; for ( Operator param : logicalOper.getParams() ) { addPropertyNames( param, propNames ); } break; case SPATIAL: SpatialOperator spatialOper = (SpatialOperator) operator; for ( Object param : spatialOper.getParams() ) { if ( param instanceof Expression ) { addPropertyNames( (Expression) param, propNames ); } } break; } }
throw new XMLParsingException( xmlStream, msg ); logicalOperator = new And( innerOperators.toArray( new Operator[innerOperators.size()] ) ); break; throw new XMLParsingException( xmlStream, msg ); logicalOperator = new Or( innerOperators.toArray( new Operator[innerOperators.size()] ) ); break; nextElement( xmlStream ); Operator parameter = parseOperator( xmlStream ); logicalOperator = new Not( parameter ); nextElement( xmlStream ); break;