String expectedList = elemNames( LogicalOperator.SubType.class, logicalOperatorTypeToElementName ) + ", " + elemNames( SpatialOperator.SubType.class, spatialOperatorTypeToElementName ) + ", " + elemNames( ComparisonOperator.SubType.class, comparisonOperatorTypeToElementName ) + "," + elemNames( TemporalOperator.SubType.class, temporalOperatorTypeToElementName ); String msg = Messages.getMessage( "FILTER_PARSER_UNEXPECTED_ELEMENT", xmlStream.getName(), expectedList ); throw new XMLParsingException( xmlStream, msg ); case COMPARISON: LOG.debug( "Building comparison operator" ); operator = parseComparisonOperator( xmlStream ); break; case LOGICAL: LOG.debug( "Building logical operator" ); operator = parseLogicalOperator( xmlStream ); break; case SPATIAL: LOG.debug( "Building spatial operator" ); operator = parseSpatialOperator( xmlStream ); break; case TEMPORAL: { LOG.debug( "Building temporal operator" ); operator = parseTemporalOperator( xmlStream ); break;
@Override public Filter readFilter( XMLStreamReader xmlStream ) throws XMLParsingException, XMLStreamException { return Filter200XMLDecoder.parse( xmlStream ); }
private static IdFilter parseIdFilter( XMLStreamReader xmlStream ) throws XMLStreamException { List<ResourceId> selectedIds = new ArrayList<ResourceId>(); while ( xmlStream.getEventType() == START_ELEMENT ) { selectedIds.add( parseAbstractId( xmlStream ) ); nextElement( xmlStream ); } return new IdFilter( selectedIds ); }
private static GenericXMLElement parseElement( XMLStreamReader xmlStream ) throws IllegalArgumentException, XMLStreamException { Map<QName, PrimitiveValue> attrs = parseAttrs( xmlStream ); List<TypedObjectNode> children = new ArrayList<TypedObjectNode>(); while ( xmlStream.next() != END_ELEMENT ) { int eventType = xmlStream.getEventType(); if ( eventType == START_ELEMENT ) { children.add( parseElement( xmlStream ) ); } else if ( eventType == CHARACTERS || eventType == CDATA ) { children.add( new PrimitiveValue( xmlStream.getText() ) ); } } return new GenericXMLElement( xmlStream.getName(), null, attrs, children ); }
String msg = Messages.getMessage( "FILTER_PARSER_UNEXPECTED_ELEMENT", xmlStream.getName(), elemNames( ComparisonOperator.SubType.class, comparisonOperatorTypeToElementName ) ); throw new XMLParsingException( xmlStream, msg ); case PROPERTY_IS_LESS_THAN_OR_EQUAL_TO: case PROPERTY_IS_NOT_EQUAL_TO: comparisonOperator = parseBinaryComparisonOperator( xmlStream, type ); break; case PROPERTY_IS_BETWEEN: comparisonOperator = parsePropertyIsBetweenOperator( xmlStream ); break; case PROPERTY_IS_LIKE: comparisonOperator = parsePropertyIsLikeOperator( xmlStream ); break; case PROPERTY_IS_NULL: comparisonOperator = parsePropertyIsNullOperator( xmlStream ); break; case PROPERTY_IS_NIL: comparisonOperator = parsePropertyIsNilOperator( xmlStream ); break;
if ( type == null ) { String msg = Messages.getMessage( "FILTER_PARSER_UNEXPECTED_ELEMENT", xmlStream.getName(), elemNames( Expression.Type.class, expressionTypeToElementName ) ); throw new XMLParsingException( xmlStream, msg ); expression = parseValueReference( xmlStream, false ); break; expression = parseLiteral( xmlStream ); break; expression = parseFunction( xmlStream ); break; expression = parseCustomExpression( xmlStream ); break;
private static Literal<?> parseLiteral( XMLStreamReader xmlStream ) throws XMLStreamException { QName type = getAttributeValueAsQName( xmlStream, null, "type", null ); if ( type != null ) { LOG.warn( "Literal with type attribute. Not respecting type hint (needs implementation)." ); } Map<QName, PrimitiveValue> attrs = parseAttrs( xmlStream ); List<TypedObjectNode> children = new ArrayList<TypedObjectNode>(); while ( xmlStream.next() != END_ELEMENT ) { int eventType = xmlStream.getEventType(); if ( eventType == START_ELEMENT ) { checkIfCurrentStartElementIsGmlGeometry( xmlStream ); children.add( parseElement( xmlStream ) ); } else if ( eventType == CHARACTERS || eventType == CDATA ) { children.add( new PrimitiveValue( xmlStream.getText() ) ); } } // TODO what about well-known complex elements (e.g. geometries)? TypedObjectNode value = null; if ( attrs.isEmpty() && children.size() == 1 ) { value = children.get( 0 ); } else if ( attrs.isEmpty() && children.isEmpty() ) { value = new PrimitiveValue( "" ); } else { value = new GenericXMLElement( null, null, attrs, children ); } return new Literal<TypedObjectNode>( value, type ); }
String msg = Messages.getMessage( "FILTER_PARSER_UNEXPECTED_ELEMENT", xmlStream.getName(), elemNames( SpatialOperator.SubType.class, spatialOperatorTypeToElementName ) ); throw new XMLParsingException( xmlStream, msg ); param1 = parseExpression( xmlStream ); nextElement( xmlStream ); Geometry param2 = parseGeomOrEnvelope( xmlStream ); spatialOperator = new BBOX( param1, (Envelope) param2 ); break; param1 = parseExpression( xmlStream ); nextElement( xmlStream ); Geometry param2 = parseGeomOrEnvelope( xmlStream ); param1 = parseExpression( xmlStream ); nextElement( xmlStream ); Geometry param2 = parseGeomOrEnvelope( xmlStream ); spatialOperator = new Intersects( param1, param2 ); break; param1 = parseExpression( xmlStream ); nextElement( xmlStream ); Geometry param2 = parseGeomOrEnvelope( xmlStream );
String msg = Messages.getMessage( "FILTER_PARSER_UNEXPECTED_ELEMENT", xmlStream.getName(), elemNames( LogicalOperator.SubType.class, logicalOperatorTypeToElementName ) ); throw new XMLParsingException( xmlStream, msg ); List<Operator> innerOperators = new ArrayList<Operator>(); while ( nextElement( xmlStream ) == START_ELEMENT ) { innerOperators.add( parseOperator( xmlStream ) ); List<Operator> innerOperators = new ArrayList<Operator>(); while ( nextElement( xmlStream ) == START_ELEMENT ) { innerOperators.add( parseOperator( xmlStream ) ); Operator parameter = parseOperator( xmlStream ); logicalOperator = new Not( parameter ); nextElement( xmlStream );
final TemporalOperator.SubType type = checkTemporalOperatorName( xmlStream ); requireNextTag( xmlStream, START_ELEMENT ); final Expression param1 = parseExpression( xmlStream ); requireNextTag( xmlStream, START_ELEMENT ); Expression param2 = null; param2 = new Literal<TimeObject>( to, elName ); } else { param2 = parseExpression( xmlStream );
private static TemporalOperator.SubType checkTemporalOperatorName( final XMLStreamReader xmlStream ) { TemporalOperator.SubType type = elementNameToTemporalOperatorType.get( xmlStream.getName() ); if ( type == null ) { String msg = Messages.getMessage( "FILTER_PARSER_UNEXPECTED_ELEMENT", xmlStream.getName(), elemNames( TemporalOperator.SubType.class, temporalOperatorTypeToElementName ) ); throw new XMLParsingException( xmlStream, msg ); } return type; }
protected static Filter parseFilter200( String filter ) throws XMLStreamException, FactoryConfigurationError { String bindingPreamble = "<nsbindings xmlns=\"" + FES_20_NS + "\" xmlns:fes=\"" + FES_20_NS + "\" xmlns:gml=\"" + GML3_2_NS + "\">"; String bindingEpilog = "</nsbindings>"; StringReader sr = new StringReader( bindingPreamble + filter + bindingEpilog ); XMLStreamReader xmlStream = XMLInputFactory.newInstance().createXMLStreamReader( sr ); skipStartDocument( xmlStream ); nextElement( xmlStream ); return Filter200XMLDecoder.parse( xmlStream ); }
private Filter parseFilter200( OMElement filterEl ) { Filter filter = null; try { // TODO remove usage of wrapper (necessary at the moment to work around problems with AXIOM's // XMLStreamReader) XMLStreamReader xmlStream = new XMLStreamReaderWrapper( filterEl.getXMLStreamReaderWithoutCaching(), null ); // skip START_DOCUMENT xmlStream.nextTag(); filter = Filter200XMLDecoder.parse( xmlStream ); } catch ( XMLStreamException e ) { e.printStackTrace(); throw new XMLParsingException( this, filterEl, e.getMessage() ); } return filter; }
/** * Return the filter that determines the feature instance to be replaced. * <p> * NOTE: Before calling this method, the feature element encoded in the XMLStream returned by * {@link #getReplacementFeatureStream()} must be fully read. The stream must be positioned at the * <code>END_ELEMENT</code> of the replacement feature. After a call to this method, the stream points at the * <code>END_ELEMENT</code> event of the <code>wfs:Replace</code> action. * </p> * * @return the filter that determines the feature instance to be replaced, never <code>null</code> * @throws XMLStreamException * @throws XMLParsingException */ public Filter getFilter() throws XMLParsingException, XMLStreamException { XMLStreamUtils.nextElement( xmlStream ); try { xmlStream.require( START_ELEMENT, FES_20_NS, "Filter" ); } catch ( XMLStreamException e ) { String msg = "Mandatory 'fes:Filter' element is missing in Replace or stream has not been correctly positioned."; throw new MissingParameterException( msg ); } Filter filter = Filter200XMLDecoder.parse( xmlStream ); XMLStreamUtils.nextElement( xmlStream ); return filter; } }