ICRS defaultCRS = determineDefaultCrs( insert, queryCRS ); GMLVersion inputFormat = determineFormat( request.getVersion(), insert.getInputFormat() ); try { XMLStreamReader xmlStream = insert.getFeatures(); FeatureCollection fc = parseFeaturesOrCollection( xmlStream, inputFormat, defaultCRS ); evaluateSrsNameForFeatureCollection( fc, queryCRS, insert.getHandle() ); FeatureStore fs = service.getStores()[0]; ta = acquireTransaction( fs ); IDGenMode mode = insert.getIdGen(); if ( mode == null ) {
private Pair<QName, Integer> trySimpleMultiProp( ValueReference valueReference, FeatureType ft ) throws OWSException { Expr expr = valueReference.getAsXPath(); if ( !( expr instanceof LocationPath ) ) { throw new OWSException( "Cannot update property on feature type '" + ft.getName() + "'. Complex property paths are not supported.", OPERATION_NOT_SUPPORTED ); } Object obj = ( (LocationPath) expr ).getSteps().get( 0 ); if ( !( obj instanceof NameStep ) ) { throw new OWSException( "Cannot update property on feature type '" + ft.getName() + "'. Complex property paths are not supported.", OPERATION_NOT_SUPPORTED ); } NameStep namestep = (NameStep) obj; obj = namestep.getPredicates().get( 0 ); if ( !( obj instanceof Predicate ) ) { throw new OWSException( "Cannot update property on feature type '" + ft.getName() + "'. Complex property paths are not supported.", OPERATION_NOT_SUPPORTED ); } Predicate pred = (Predicate) obj; expr = pred.getExpr(); if ( !( expr instanceof NumberExpr ) ) { throw new OWSException( "Cannot update property on feature type '" + ft.getName() + "'. Complex property paths are not supported.", OPERATION_NOT_SUPPORTED ); } NumberExpr ne = (NumberExpr) expr; int index = Math.round( Float.parseFloat( ne.getText() ) ); String namespaceUri = determineNamespaceUri( valueReference, ft, namestep ); return new Pair<QName, Integer>( new QName( namespaceUri, namestep.getLocalName() ), index - 1 ); }
switch ( operation.getType() ) { case DELETE: { doDelete( (Delete) operation, lock ); break; doInsert( (Insert) operation, queryCRS ); break; doNative( (Native) operation ); break; doUpdate( (Update) operation, lock ); break; doReplace( (Replace) operation, lock ); break; sendResponse100( request, response, true ); return; sendResponse100( request, response, true ); return; sendResponse100( request, response, false ); } else if ( VERSION_110.equals( request.getVersion() ) ) { sendResponse110( response ); } else if ( VERSION_200.equals( request.getVersion() ) ) { sendResponse200( response ); } else {
private void doUpdate( Update update, Lock lock ) throws OWSException { LOG.debug( "doUpdate: " + update ); QName ftName = update.getTypeName(); FeatureType ft = service.lookupFeatureType( ftName ); FeatureStore fs = service.getStore( ftName ); if ( fs == null ) { throw new OWSException( Messages.get( "WFS_FEATURE_TYPE_NOT_SERVED", ftName ), INVALID_PARAMETER_VALUE ); } GMLVersion inputFormat = determineFormat( request.getVersion(), update.getInputFormat() ); FeatureStoreTransaction ta = acquireTransaction( fs ); List<ParsedPropertyReplacement> replacementProps = getReplacementProps( update, ft, inputFormat ); Filter filter = null; try { filter = update.getFilter(); // superimpose default query CRS Filters.setDefaultCRS( filter, master.getDefaultQueryCrs() ); } catch ( Exception e ) { throw new OWSException( e.getMessage(), INVALID_PARAMETER_VALUE ); } try { List<String> updatedFids = ta.performUpdate( ftName, replacementProps, filter, lock ); for ( String updatedFid : updatedFids ) { this.updated.add( updatedFid, update.getHandle() ); } } catch ( FeatureStoreException e ) { throw new OWSException( "Error performing update: " + e.getMessage(), e, NO_APPLICABLE_CODE ); } }
new TransactionHandler( this, service, transaction, idGenMode, allowFeatureReferencesToDatastore ).doTransaction( response, queryCRS ); break; default:
private void doReplace( Replace replace, Lock lock ) throws OWSException { LOG.debug( "doReplace: " + replace ); XMLStreamReader xmlStream = replace.getReplacementFeatureStream(); QName ftName = xmlStream.getName(); FeatureStore fs = service.getStore( ftName ); if ( fs == null ) { throw new OWSException( Messages.get( "WFS_FEATURE_TYPE_NOT_SERVED", ftName ), INVALID_PARAMETER_VALUE ); } Feature replacementFeature = null; Filter filter = null; try { GMLStreamReader gmlReader = createGMLStreamReader( GML_32, xmlStream ); gmlReader.setApplicationSchema( fs.getSchema() ); replacementFeature = gmlReader.readFeature(); filter = replace.getFilter(); // superimpose default CRS Filters.setDefaultCRS( filter, master.getDefaultQueryCrs() ); } catch ( Exception e ) { throw new OWSException( e.getMessage(), INVALID_PARAMETER_VALUE ); } FeatureStoreTransaction ta = acquireTransaction( fs ); try { String newFid = ta.performReplace( replacementFeature, filter, lock, idGenMode ); replaced.add( newFid, replace.getHandle() ); } catch ( FeatureStoreException e ) { throw new OWSException( "Error performing replace: " + e.getMessage(), e, NO_APPLICABLE_CODE ); } }
TransactionXmlReader transactionReader = new TransactionXmlReaderFactory().createReader( requestVersion ); Transaction transaction = transactionReader.read( bodyXmlStream ); new TransactionHandler( this, service, transaction, idGenMode, allowFeatureReferencesToDatastore ).doTransaction( response, queryCRS ); break; default:
private void doDelete( Delete delete, Lock lock ) throws OWSException { LOG.debug( "doDelete: " + delete ); QName ftName = delete.getTypeName(); FeatureStore fs = service.getStore( ftName ); if ( fs == null ) { throw new OWSException( Messages.get( "WFS_FEATURE_TYPE_NOT_SERVED", ftName ), INVALID_PARAMETER_VALUE ); } FeatureStoreTransaction ta = acquireTransaction( fs ); Filter filter = delete.getFilter(); // superimpose default query CRS Filters.setDefaultCRS( filter, master.getDefaultQueryCrs() ); try { switch ( filter.getType() ) { case ID_FILTER: { deleted += ta.performDelete( (IdFilter) filter, lock ); break; } case OPERATOR_FILTER: { deleted += ta.performDelete( ftName, (OperatorFilter) filter, lock ); break; } } } catch ( FeatureStoreException e ) { throw new OWSException( Messages.get( "WFS_ERROR_PERFORMING_DELETE", e.getMessage() ), NO_APPLICABLE_CODE ); } }
TransactionXmlReader transactionReader = new TransactionXmlReaderFactory().createReader( xmlStream ); Transaction transaction = transactionReader.read( xmlStream ); new TransactionHandler( this, service, transaction, idGenMode, allowFeatureReferencesToDatastore ).doTransaction( response, queryCRS ); break; default: