# HG changeset patch # User Tom Gottfried # Date 1481886394 -3600 # Node ID 86ef81592f67abe22be5a4e2c69236cfaa5a97bd # Parent b652f4c9b75c50eefc308744bf14131346fa162e Implement negation of query filter closer to underlying API. Previously andNot() negated the whole filter and it's usage in IsUnique was actually a misunderstanding. Having not() as in javax.persistence.criteria.Predicate seems to be more intuitive for negating the whole filter and more flexible. diff -r b652f4c9b75c -r 86ef81592f67 src/main/java/de/intevation/lada/rest/stamm/DeskriptorService.java --- a/src/main/java/de/intevation/lada/rest/stamm/DeskriptorService.java Thu Dec 15 16:16:32 2016 +0100 +++ b/src/main/java/de/intevation/lada/rest/stamm/DeskriptorService.java Fri Dec 16 12:06:34 2016 +0100 @@ -104,7 +104,7 @@ QueryBuilder builder = new QueryBuilder( repository.entityManager("stamm"), Deskriptoren.class); - builder.andNot("sn", 0); + builder.and("sn", 0).not(); if (params.containsKey("layer") && !params.containsKey("parents")) { String layer = params.getFirst("layer"); diff -r b652f4c9b75c -r 86ef81592f67 src/main/java/de/intevation/lada/util/data/QueryBuilder.java --- a/src/main/java/de/intevation/lada/util/data/QueryBuilder.java Thu Dec 15 16:16:32 2016 +0100 +++ b/src/main/java/de/intevation/lada/util/data/QueryBuilder.java Fri Dec 16 12:06:34 2016 +0100 @@ -79,20 +79,14 @@ } /** - * Logical AND NOT operation. + * Negate filter. * - * @param id The database column name. - * @param value The filter value - * @return The builder itself. */ - public QueryBuilder andNot(String id, Object value) { - Predicate p = this.builder.equal(this.root.get(id), value); - if (this.filter != null) { - this.filter = this.builder.and(this.filter, p).not(); + public QueryBuilder not() { + if (this.filter == null) { + return this; } - else { - this.filter = this.builder.and(p).not(); - } + this.filter = this.filter.not(); return this; } diff -r b652f4c9b75c -r 86ef81592f67 src/main/java/de/intevation/lada/validation/rules/ort/IsUnique.java --- a/src/main/java/de/intevation/lada/validation/rules/ort/IsUnique.java Thu Dec 15 16:16:32 2016 +0100 +++ b/src/main/java/de/intevation/lada/validation/rules/ort/IsUnique.java Fri Dec 16 12:06:34 2016 +0100 @@ -31,12 +31,12 @@ QueryBuilder builder = new QueryBuilder( repository.entityManager("stamm"), Ort.class); + if (ort.getId() != null) { + // Consider UPDATE + builder.and("id", ort.getId()).not(); + } builder.and("netzbetreiberId", ort.getNetzbetreiberId()); builder.and("ortId", ort.getOrtId()); - if (ort.getId() != null) { - // Consider UPDATE - builder.andNot("id", ort.getId()); - } if (!repository.filterPlain(builder.getQuery(), "stamm").isEmpty()) { Violation violation = new Violation(); violation.addError("ortId", 672);