changeset 919:e5a9c27047a4

Updated stammdaten services: allow multiselect filters and check duplicates before update or insert
author Raimund Renkert <raimund.renkert@intevation.de>
date Wed, 13 Apr 2016 17:37:12 +0200
parents 9f6b1df4b1e6
children edb014e8045d
files src/main/java/de/intevation/lada/rest/stamm/DatensatzErzeugerService.java src/main/java/de/intevation/lada/rest/stamm/MessprogrammKategorieService.java src/main/java/de/intevation/lada/rest/stamm/OrtService.java src/main/java/de/intevation/lada/rest/stamm/ProbenehmerService.java
diffstat 4 files changed, 225 insertions(+), 52 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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
--- 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();
-                }
-                else if (start + limit > orte.size()) {
-                    end = orte.size();
-                }
-                orte = orte.subList(start, end);
+        List<Ort> orte = repository.getAllPlain(Ort.class, "stamm");
+        if (params.containsKey("ortId")) {
+            Integer id;
+            try {
+                id = Integer.valueOf(params.getFirst("qid"));
             }
-            for (Ort o : orte) {
-                o.setReadonly(
-                    !authorization.isAuthorized(
-                        request,
-                        o,
-                        RequestMethod.POST,
-                        Ort.class));
+            catch (NumberFormatException e) {
+                return new Response(false, 603, "Not a valid filter id");
             }
-            return new Response(true, 200, orte, size);
+
+            Ort o = repository.getByIdPlain(Ort.class, id, "stamm");
+            o.setReadonly(
+                !authorization.isAuthorized(
+                    request,
+                    o,
+                    RequestMethod.POST,
+                    Ort.class));
+            return new Response(true, 200, o);
         }
-        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");
+        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;
+                }
+                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);
+                }
+            }
+
+            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();
+            }
+            else if (start + limit > orte.size()) {
+                end = orte.size();
+            }
+            orte = orte.subList(start, end);
+        }
+        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");
     }
 }
--- 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
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)