public static UpdateElementType unadapt(Update update) { if (update instanceof WFS11) { return (UpdateElementType) update.getAdaptee(); } UpdateElementType ue = WfsFactory.eINSTANCE.createUpdateElementType(); ue.setHandle(update.getHandle()); ue.setTypeName(update.getTypeName()); ue.setFilter(update.getFilter()); for (Property p : update.getUpdateProperties()) { ue.getProperty().add(Property.WFS11.unadapt(p)); } return ue; } }
private SimpleFeatureSource getTransactionSource(Update update) throws IOException { QName typeName = update.getTypeName(); final String name = typeName.getLocalPart(); final String namespaceURI; if (typeName.getNamespaceURI() != null) { namespaceURI = typeName.getNamespaceURI(); } else { namespaceURI = catalog.getDefaultNamespace().getURI(); } final FeatureTypeInfo meta = catalog.getFeatureTypeByName(namespaceURI, name); if (meta == null) { String msg = "Feature type '" + name + "' is not available: "; throw new WFSTransactionException(msg, (String) null, update.getHandle()); } FeatureSource source = meta.getFeatureSource(null, null); return DataUtilities.simple(source); }
FeatureType featureType = meta.getFeatureType(); List<Property> props = update.getUpdateProperties(); for (Iterator<Property> prop = props.iterator(); prop.hasNext(); ) { Property property = prop.next(); "Could not locate feature type information for " + update.getTypeName(), e, update.getHandle());
public static TransactionRequest defaultTransformation( Catalog catalog, TransactionRequest request) { for (TransactionElement element : request.getElements()) { if (element instanceof Insert) { for (Object f : ((Insert) element).getFeatures()) { SimpleFeature sf = (SimpleFeature) f; if ("Points".equals(sf.getType().getTypeName())) { // check inserts can be modified sf.setAttribute("id", sf.getAttribute("id") + "-modified"); } } } else if (element instanceof Update) { Update update = (Update) element; List<Property> updateProperties = update.getUpdateProperties(); Property property = update.createProperty(); property.setName(new QName(null, "NAME")); property.setValue(FOLSOM_STREET); updateProperties.add(property); update.setUpdateProperties(updateProperties); } else if (element instanceof Delete) { try { // mass delete more than requested ((Delete) element).setFilter(CQL.toFilter("FID > 102")); } catch (CQLException e) { throw new WFSException(e); } } } return request; }
public static TransactionRequest replaceWithFixedRoadsUpdate( Catalog catalog, TransactionRequest request) { List<TransactionElement> transactionElements = new ArrayList<>(); // create an update Update update = request.createUpdate(); try { update.setTypeName( new QName( MockData.ROAD_SEGMENTS.getNamespaceURI(), MockData.ROAD_SEGMENTS.getLocalPart())); update.setFilter(CQL.toFilter("FID = 106")); Property property = update.createProperty(); property.setName(new QName(null, "NAME")); property.setValue("Clean Road"); update.setUpdateProperties(Arrays.asList(property)); } catch (Exception e) { throw new RuntimeException(e); } transactionElements.add(update); request.setElements(transactionElements); return request; }
private SimpleFeatureCollection getTransactionFeatures(Update update) throws IOException { QName typeName = update.getTypeName(); Filter filter = update.getFilter(); FeatureTypeInfo featureTypeInfo = getFeatureTypeInfo(new NameImpl(typeName)); SimpleFeatureSource source = getTransactionSource(update); try { Query query = new Query(); query.setFilter(VersioningFilterAdapter.adapt(featureTypeInfo, filter)); SortBy sort = FILTER_FACTORY.sort( TimeVersioning.getTimePropertyName(featureTypeInfo), SortOrder.DESCENDING); query.setSortBy(new SortBy[] {sort}); return source.getFeatures(query); } catch (Exception exception) { throw new RuntimeException( String.format("Error getting features of type '%s'.", typeName), exception); } }
private SimpleFeature prepareInsertFeature( SimpleFeature feature, Update update, Date referenceTime) { SimpleFeatureBuilder builder = new SimpleFeatureBuilder(feature.getFeatureType()); builder.init(feature); SimpleFeature versionedFeature = builder.buildFeature(null); // run the update for (Object o : update.getUpdateProperties()) { Property p = (Property) o; versionedFeature.setAttribute(p.getName().getLocalPart(), p.getValue()); } // set the time setTimeAttribute(versionedFeature, referenceTime); return versionedFeature; }
@Override public void setElements(List<TransactionElement> elements) { TransactionType tx = (TransactionType) adaptee; tx.getInsert().clear(); tx.getDelete().clear(); tx.getUpdate().clear(); for (TransactionElement element : elements) { if (element instanceof Insert) { tx.getInsert().add(((Insert) element).getAdaptee()); } else if (element instanceof Update) { tx.getUpdate().add(((Update) element).getAdaptee()); } else if (element instanceof Delete) { tx.getDelete().add(((Delete) element).getAdaptee()); } // no replace in wfs 1.1, cannot be there } }
/** * Takes an update and transforms it in an insert if the feature type is versioned, leave it as * is otherwise */ private TransactionElement transformUpdate( TransactionRequest request, Update update, Date referenceTime) throws IOException { FeatureTypeInfo featureTypeInfo = getFeatureTypeInfo(new NameImpl(update.getTypeName())); if (!TimeVersioning.isEnabled(featureTypeInfo)) { return update; } SimpleFeatureCollection features = getTransactionFeatures(update); List<SimpleFeature> recent = getMostRecentFeatures(features, featureTypeInfo); List<SimpleFeature> newFeatures = recent.stream() .map(f -> prepareInsertFeature(f, update, referenceTime)) .collect(Collectors.toList()); Insert insert = request.createInsert(); insert.setHandle(update.getHandle()); insert.getFeatures().addAll(newFeatures); return insert; }
final QName elementName = update.getTypeName(); String handle = update.getHandle(); Filter filter = update.getFilter(); List<Property> properties = update.getUpdateProperties(); AttributeDescriptor[] types = new AttributeDescriptor[properties.size()]; String[] names = new String[properties.size()];