public AliasedQuery(Query query, List<String> originalAliases, List<String> aliases) { super(null); this.delegate = query; this.aliases = aliases; if (originalAliases != null && !originalAliases.isEmpty()) { Map<String, String> renameMap = buildRenameMap(originalAliases, aliases); this.filter = (Filter) query.getFilter().accept(new AliasRenameVisitor(renameMap), null); if (query.getPropertyNames() != null) { this.propertyNames = new ArrayList<>(); for (String name : query.getPropertyNames()) { this.propertyNames.add(rename(renameMap, name)); } } } else { // CITE tests hack, was is a self join query with no aliases? List<QName> typeNames = query.getTypeNames(); if (typeNames.size() == 2 && new HashSet<>(typeNames).size() == 1) { this.filter = (Filter) query.getFilter().accept(new SelfJoinRenameVisitor(aliases), null); } else { this.filter = query.getFilter(); } this.propertyNames = query.getPropertyNames(); } }
static void expandTypeNames( RequestObject request, List<Query> queries, boolean getFeatureById, Catalog catalog) { // do a check for FeatureId filters in the queries and update the type names for the // queries accordingly for (Query q : queries) { if (!q.getTypeNames().isEmpty()) continue; if (q.getFilter() != null) { TypeNameExtractingVisitor v = new TypeNameExtractingVisitor(catalog); q.getFilter().accept(v, null); q.getTypeNames().addAll(v.getTypeNames()); } if (q.getTypeNames().isEmpty()) { if (getFeatureById) { // by spec, a 404 should be returned in this case throw new WFSException( request, "Could not find feature with specified id", WFSException.NOT_FOUND); } else { String msg = "No feature types specified"; throw new WFSException(request, msg, ServiceException.INVALID_PARAMETER_VALUE); } } } }
lock.setFilter(query.getFilter()); lock.setHandle(query.getHandle()); Filter lockedFeatureFilter = toFeatureIdFilter(response.getLockedFeatures()); for (Query query : queries) { Filter filter = query.getFilter(); if (filter == null || filter == Filter.INCLUDE) { query.setFilter(lockedFeatureFilter); Filter filter = query.getFilter(); filter = query.getFilter();