[Lada-commits] [PATCH] Updated stammdaten services: allow multiselect filters and check duplicates
Wald Commits
scm-commit at wald.intevation.org
Wed Apr 13 18:42:17 CEST 2016
# HG changeset patch
# User Raimund Renkert <raimund.renkert at intevation.de>
# Date 1460561832 -7200
# Node ID e5a9c27047a4fb2eacff475588bdf46e3196776c
# Parent 9f6b1df4b1e6e5494b61c652952d6e821badb68e
Updated stammdaten services: allow multiselect filters and check duplicates
before update or insert
diff -r 9f6b1df4b1e6 -r e5a9c27047a4 src/main/java/de/intevation/lada/rest/stamm/DatensatzErzeugerService.java
--- a/src/main/java/de/intevation/lada/rest/stamm/DatensatzErzeugerService.java Fri Apr 08 19:36:25 2016 +0200
+++ b/src/main/java/de/intevation/lada/rest/stamm/DatensatzErzeugerService.java Wed Apr 13 17:37:12 2016 +0200
@@ -121,7 +121,16 @@
if (param == null || param.isEmpty()) {
continue;
}
- builder.or(filter.getDataIndex(), param);
+ if (filter.getMultiselect()) {
+ param = param.trim();
+ String[] parts = param.split(",");
+ for (String part: parts) {
+ builder.or(filter.getDataIndex(), part);
+ }
+ }
+ else {
+ builder.or(filter.getDataIndex(), param);
+ }
}
erzeuger = repository.filterPlain(builder.getQuery(), "stamm");
@@ -189,8 +198,20 @@
) {
return new Response(false, 699, datensatzerzeuger);
}
+ QueryBuilder<DatensatzErzeuger> builder =
+ new QueryBuilder<DatensatzErzeuger>(
+ repository.entityManager("stamm"),
+ DatensatzErzeuger.class
+ );
+ builder.and("daErzeugerId", datensatzerzeuger.getDaErzeugerId());
+ builder.and("netzbetreiberId", datensatzerzeuger.getNetzbetreiberId());
- return repository.create(datensatzerzeuger, "stamm");
+ List<DatensatzErzeuger> erzeuger =
+ repository.filterPlain(builder.getQuery(), "stamm");
+ if (erzeuger.isEmpty()) {
+ return repository.create(datensatzerzeuger, "stamm");
+ }
+ return new Response(false, 672, null);
}
@PUT
@@ -208,8 +229,21 @@
) {
return new Response(false, 699, datensatzerzeuger);
}
+ QueryBuilder<DatensatzErzeuger> builder =
+ new QueryBuilder<DatensatzErzeuger>(
+ repository.entityManager("stamm"),
+ DatensatzErzeuger.class
+ );
+ builder.and("daErzeugerId", datensatzerzeuger.getDaErzeugerId());
+ builder.and("netzbetreiberId", datensatzerzeuger.getNetzbetreiberId());
- return repository.update(datensatzerzeuger, "stamm");
+ List<DatensatzErzeuger> erzeuger =
+ repository.filterPlain(builder.getQuery(), "stamm");
+ if (erzeuger.isEmpty() ||
+ erzeuger.get(0).getId() == datensatzerzeuger.getId()) {
+ return repository.update(datensatzerzeuger, "stamm");
+ }
+ return new Response(false, 672, null);
}
@DELETE
diff -r 9f6b1df4b1e6 -r e5a9c27047a4 src/main/java/de/intevation/lada/rest/stamm/MessprogrammKategorieService.java
--- a/src/main/java/de/intevation/lada/rest/stamm/MessprogrammKategorieService.java Fri Apr 08 19:36:25 2016 +0200
+++ b/src/main/java/de/intevation/lada/rest/stamm/MessprogrammKategorieService.java Wed Apr 13 17:37:12 2016 +0200
@@ -120,7 +120,16 @@
if (param == null || param.isEmpty()) {
continue;
}
- mBuilder.or(filter.getDataIndex(), param);
+ if (filter.getMultiselect()) {
+ param = param.trim();
+ String[] parts = param.split(",");
+ for (String part: parts) {
+ mBuilder.or(filter.getDataIndex(), part);
+ }
+ }
+ else {
+ mBuilder.or(filter.getDataIndex(), param);
+ }
}
kategorie = repository.filterPlain(mBuilder.getQuery(), "stamm");
@@ -187,8 +196,21 @@
) {
return new Response(false, 699, kategorie);
}
+ QueryBuilder<MessprogrammKategorie> builder =
+ new QueryBuilder<MessprogrammKategorie>(
+ repository.entityManager("stamm"),
+ MessprogrammKategorie.class
+ );
+ builder.and("ortId", kategorie.getMplId());
+ builder.and("netzbetreiberId", kategorie.getNetzbetreiberId());
- return repository.create(kategorie, "stamm");
+ List<MessprogrammKategorie> kategorien =
+ repository.filterPlain(builder.getQuery(), "stamm");
+ if (kategorien.isEmpty() ||
+ kategorien.get(0).getId() == kategorie.getId()) {
+ return repository.create(kategorie, "stamm");
+ }
+ return new Response(false, 672, null);
}
@PUT
@@ -206,8 +228,21 @@
) {
return new Response(false, 699, kategorie);
}
+ QueryBuilder<MessprogrammKategorie> builder =
+ new QueryBuilder<MessprogrammKategorie>(
+ repository.entityManager("stamm"),
+ MessprogrammKategorie.class
+ );
+ builder.and("ortId", kategorie.getMplId());
+ builder.and("netzbetreiberId", kategorie.getNetzbetreiberId());
- return repository.update(kategorie, "stamm");
+ List<MessprogrammKategorie> kategorien =
+ repository.filterPlain(builder.getQuery(), "stamm");
+ if (kategorien.isEmpty() ||
+ kategorien.get(0).getId() == kategorie.getId()) {
+ return repository.update(kategorie, "stamm");
+ }
+ return new Response(false, 672, null);
}
@DELETE
diff -r 9f6b1df4b1e6 -r e5a9c27047a4 src/main/java/de/intevation/lada/rest/stamm/OrtService.java
--- a/src/main/java/de/intevation/lada/rest/stamm/OrtService.java Fri Apr 08 19:36:25 2016 +0200
+++ b/src/main/java/de/intevation/lada/rest/stamm/OrtService.java Wed Apr 13 17:37:12 2016 +0200
@@ -25,6 +25,7 @@
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriInfo;
+import de.intevation.lada.model.stamm.Filter;
import de.intevation.lada.model.stamm.Ort;
import de.intevation.lada.util.annotation.AuthorizationConfig;
import de.intevation.lada.util.annotation.RepositoryConfig;
@@ -83,7 +84,7 @@
*/
@Inject
@RepositoryConfig(type=RepositoryType.RW)
- private Repository defaultRepo;
+ private Repository repository;
@Inject
@AuthorizationConfig(type=AuthorizationType.HEADER)
@@ -107,38 +108,86 @@
@Context UriInfo info
) {
MultivaluedMap<String, String> params = info.getQueryParameters();
- if (params.isEmpty() || !params.containsKey("ortId")) {
- List<Ort> orte = defaultRepo.getAllPlain(Ort.class, "stamm");
- int size = orte.size();
- if (params.containsKey("start") && params.containsKey("limit")) {
- int start = Integer.valueOf(params.getFirst("start"));
- int limit = Integer.valueOf(params.getFirst("limit"));
- int end = limit + start;
- if (limit == 0) {
- end = orte.size();
+ List<Ort> orte = repository.getAllPlain(Ort.class, "stamm");
+ if (params.containsKey("ortId")) {
+ Integer id;
+ try {
+ id = Integer.valueOf(params.getFirst("qid"));
+ }
+ catch (NumberFormatException e) {
+ return new Response(false, 603, "Not a valid filter id");
+ }
+
+ Ort o = repository.getByIdPlain(Ort.class, id, "stamm");
+ o.setReadonly(
+ !authorization.isAuthorized(
+ request,
+ o,
+ RequestMethod.POST,
+ Ort.class));
+ return new Response(true, 200, o);
+ }
+ if (params.containsKey("qid")) {
+ Integer id = null;
+ try {
+ id = Integer.valueOf(params.getFirst("qid"));
+ }
+ catch (NumberFormatException e) {
+ return new Response(false, 603, "Not a valid filter id");
+ }
+ QueryBuilder<Filter> fBuilder = new QueryBuilder<Filter>(
+ repository.entityManager("stamm"),
+ Filter.class
+ );
+ fBuilder.and("query", id);
+ List<Filter> filters = repository.filterPlain(fBuilder.getQuery(), "stamm");
+ QueryBuilder<Ort> builder =
+ new QueryBuilder<Ort>(
+ repository.entityManager("stamm"),
+ Ort.class
+ );
+ for (Filter filter: filters) {
+ String param = params.get(filter.getDataIndex()).get(0);
+ if (param == null || param.isEmpty()) {
+ continue;
}
- else if (start + limit > orte.size()) {
- end = orte.size();
+ if (filter.getMultiselect()) {
+ param = param.trim();
+ String[] parts = param.split(",");
+ for (String part: parts) {
+ builder.or(filter.getDataIndex(), part);
+ }
}
- orte = orte.subList(start, end);
+ else {
+ builder.or(filter.getDataIndex(), param);
+ }
}
- for (Ort o : orte) {
- o.setReadonly(
- !authorization.isAuthorized(
- request,
- o,
- RequestMethod.POST,
- Ort.class));
+
+ orte = repository.filterPlain(builder.getQuery(), "stamm");
+ }
+
+ int size = orte.size();
+ if (params.containsKey("start") && params.containsKey("limit")) {
+ int start = Integer.valueOf(params.getFirst("start"));
+ int limit = Integer.valueOf(params.getFirst("limit"));
+ int end = limit + start;
+ if (limit == 0) {
+ end = orte.size();
}
- return new Response(true, 200, orte, size);
+ else if (start + limit > orte.size()) {
+ end = orte.size();
+ }
+ orte = orte.subList(start, end);
}
- String ortId = params.getFirst("ortId");
- QueryBuilder<Ort> builder =
- new QueryBuilder<Ort>(
- defaultRepo.entityManager("stamm"),
- Ort.class);
- builder.and("id", ortId);
- return defaultRepo.filter(builder.getQuery(), "stamm");
+ for (Ort o : orte) {
+ o.setReadonly(
+ !authorization.isAuthorized(
+ request,
+ o,
+ RequestMethod.POST,
+ Ort.class));
+ }
+ return new Response(true, 200, orte, size);
}
/**
@@ -157,7 +206,7 @@
@Context HttpHeaders headers,
@PathParam("id") String id
) {
- return defaultRepo.getById(
+ return repository.getById(
Ort.class,
Integer.valueOf(id),
"stamm");
@@ -204,8 +253,21 @@
) {
return new Response(false, 699, ort);
}
- /* Persist the new object*/
- return defaultRepo.create(ort, "stamm");
+ QueryBuilder<Ort> builder =
+ new QueryBuilder<Ort>(
+ repository.entityManager("stamm"),
+ Ort.class
+ );
+ builder.and("ortId", ort.getOrtId());
+ builder.and("netzbetreiberId", ort.getNetzbetreiberId());
+
+ List<Ort> orte =
+ repository.filterPlain(builder.getQuery(), "stamm");
+ if (orte.isEmpty() ||
+ orte.get(0).getId() == ort.getId()) {
+ return repository.create(ort, "stamm");
+ }
+ return new Response(false, 672, null);
}
/**
@@ -250,11 +312,21 @@
) {
return new Response(false, 699, ort);
}
- Response response = defaultRepo.update(ort, "stamm");
- Response updated = defaultRepo.getById(
- Ort.class,
- ((Ort)response.getData()).getId(), "stamm");
- return updated;
+ QueryBuilder<Ort> builder =
+ new QueryBuilder<Ort>(
+ repository.entityManager("stamm"),
+ Ort.class
+ );
+ builder.and("ortId", ort.getOrtId());
+ builder.and("netzbetreiberId", ort.getNetzbetreiberId());
+
+ List<Ort> orte =
+ repository.filterPlain(builder.getQuery(), "stamm");
+ if (orte.isEmpty() ||
+ orte.get(0).getId() == ort.getId()) {
+ return repository.update(ort, "stamm");
+ }
+ return new Response(false, 672, null);
}
/**
@@ -275,7 +347,7 @@
) {
/* Get the object by id*/
Ort ort =
- defaultRepo.getByIdPlain(Ort.class, Integer.valueOf(id), "stamm");
+ repository.getByIdPlain(Ort.class, Integer.valueOf(id), "stamm");
if (!authorization.isAuthorized(
request,
ort,
@@ -285,6 +357,6 @@
return new Response(false, 699, ort);
}
/* Delete the object*/
- return defaultRepo.delete(ort, "stamm");
+ return repository.delete(ort, "stamm");
}
}
diff -r 9f6b1df4b1e6 -r e5a9c27047a4 src/main/java/de/intevation/lada/rest/stamm/ProbenehmerService.java
--- a/src/main/java/de/intevation/lada/rest/stamm/ProbenehmerService.java Fri Apr 08 19:36:25 2016 +0200
+++ b/src/main/java/de/intevation/lada/rest/stamm/ProbenehmerService.java Wed Apr 13 17:37:12 2016 +0200
@@ -25,6 +25,7 @@
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriInfo;
+import de.intevation.lada.model.stamm.DatensatzErzeuger;
import de.intevation.lada.model.stamm.Filter;
import de.intevation.lada.model.stamm.Probenehmer;
import de.intevation.lada.util.annotation.AuthorizationConfig;
@@ -118,14 +119,20 @@
if (param == null || param.isEmpty()) {
continue;
}
- builder.or(filter.getDataIndex(), param);
+ if (filter.getMultiselect()) {
+ param = param.trim();
+ String[] parts = param.split(",");
+ for (String part: parts) {
+ builder.or(filter.getDataIndex(), part);
+ }
+ }
+ else {
+ builder.or(filter.getDataIndex(), param);
+ }
}
nehmer = repository.filterPlain(builder.getQuery(), "stamm");
}
- else {
- nehmer = repository.getAllPlain(Probenehmer.class, "stamm");
- }
int size = nehmer.size();
if (params.containsKey("start") && params.containsKey("limit")) {
@@ -186,8 +193,20 @@
) {
return new Response(false, 699, probenehmer);
}
+ QueryBuilder<Probenehmer> builder =
+ new QueryBuilder<Probenehmer>(
+ repository.entityManager("stamm"),
+ Probenehmer.class
+ );
+ builder.and("prnId", probenehmer.getPrnId());
+ builder.and("netzbetreiberId", probenehmer.getNetzbetreiberId());
- return repository.create(probenehmer, "stamm");
+ List<Probenehmer> nehmer=
+ repository.filterPlain(builder.getQuery(), "stamm");
+ if (nehmer.isEmpty()) {
+ return repository.create(probenehmer, "stamm");
+ }
+ return new Response(false, 672, null);
}
@PUT
@@ -205,8 +224,21 @@
) {
return new Response(false, 699, probenehmer);
}
+ QueryBuilder<Probenehmer> builder =
+ new QueryBuilder<Probenehmer>(
+ repository.entityManager("stamm"),
+ Probenehmer.class
+ );
+ builder.and("prnId", probenehmer.getPrnId());
+ builder.and("netzbetreiberId", probenehmer.getNetzbetreiberId());
- return repository.update(probenehmer, "stamm");
+ List<Probenehmer> nehmer=
+ repository.filterPlain(builder.getQuery(), "stamm");
+ if (nehmer.isEmpty() ||
+ nehmer.get(0).getId() == probenehmer.getId()) {
+ return repository.update(probenehmer, "stamm");
+ }
+ return new Response(false, 672, null);
}
@DELETE
More information about the Lada-commits
mailing list