From c17d80514a8d6ea598cd74daa585a1817db498f5 Mon Sep 17 00:00:00 2001 From: Francesco Date: Tue, 10 Oct 2023 22:19:56 +0200 Subject: [PATCH] Highlighting inputs with errors --- .../controller/DefaultDbAdminController.java | 74 +++++++------------ .../dto/ValidationErrorsContainer.java | 4 + src/main/resources/static/css/dbadmin.css | 4 + .../resources/templates/fragments/inputs.html | 2 +- .../resources/templates/model/create.html | 3 +- 5 files changed, 37 insertions(+), 50 deletions(-) diff --git a/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java b/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java index 1b0009c..1bb0f90 100644 --- a/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java +++ b/src/main/java/tech/ailef/dbadmin/external/controller/DefaultDbAdminController.java @@ -439,68 +439,46 @@ public class DefaultDbAdminController { pkValue = null; } - if (pkValue == null) { - try { + try { + if (pkValue == null) { Object newPrimaryKey = repository.create(schema, params, files, pkValue); repository.attachManyToMany(schema, newPrimaryKey, multiValuedParams); pkValue = newPrimaryKey.toString(); attr.addFlashAttribute("message", "Item created successfully."); saveAction(new UserAction(schema.getTableName(), pkValue, "CREATE", schema.getClassName())); - } catch (DataIntegrityViolationException | UncategorizedSQLException | IdentifierGenerationException e) { - attr.addFlashAttribute("errorTitle", "Unable to INSERT row"); - attr.addFlashAttribute("error", e.getMessage()); - attr.addFlashAttribute("params", params); - } catch (ConstraintViolationException e) { - attr.addFlashAttribute("errorTitle", "Unable to INSERT row (validation error)"); - attr.addFlashAttribute("error", "See below for details"); - attr.addFlashAttribute("validationErrors", new ValidationErrorsContainer(e)); - attr.addFlashAttribute("params", params); - } - - } else { - Optional object = repository.findById(schema, pkValue); - - if (!object.isEmpty()) { - if (create) { - attr.addFlashAttribute("errorTitle", "Unable to create item"); - attr.addFlashAttribute("error", "Item with id " + object.get().getPrimaryKeyValue() + " already exists."); - attr.addFlashAttribute("params", params); - } else { - try { + } else { + Optional object = repository.findById(schema, pkValue); + + if (!object.isEmpty()) { + if (create) { + attr.addFlashAttribute("errorTitle", "Unable to create item"); + attr.addFlashAttribute("error", "Item with id " + object.get().getPrimaryKeyValue() + " already exists."); + attr.addFlashAttribute("params", params); + } else { repository.update(schema, params, files); repository.attachManyToMany(schema, pkValue, multiValuedParams); attr.addFlashAttribute("message", "Item saved successfully."); saveAction(new UserAction(schema.getTableName(), pkValue, "EDIT", schema.getClassName())); - } catch (DataIntegrityViolationException | UncategorizedSQLException | IdentifierGenerationException e) { - attr.addFlashAttribute("errorTitle", "Unable to UPDATE row (no changes applied)"); - attr.addFlashAttribute("error", e.getMessage()); - attr.addFlashAttribute("params", params); - } catch (ConstraintViolationException e) { - attr.addFlashAttribute("errorTitle", "Unable to INSERT row (validation error)"); - attr.addFlashAttribute("error", "See below for details"); - attr.addFlashAttribute("validationErrors", new ValidationErrorsContainer(e)); - attr.addFlashAttribute("params", params); } - } - } else { - try { - Object newPrimaryKey = repository.create(schema, params, files, pkValue); - repository.attachManyToMany(schema, newPrimaryKey, multiValuedParams); - attr.addFlashAttribute("message", "Item created successfully"); - saveAction(new UserAction(schema.getTableName(), pkValue, "CREATE", schema.getClassName())); - } catch (DataIntegrityViolationException | UncategorizedSQLException | IdentifierGenerationException e) { - attr.addFlashAttribute("errorTitle", "Unable to INSERT row (no changes applied)"); - attr.addFlashAttribute("error", e.getMessage()); - attr.addFlashAttribute("params", params); - } catch (ConstraintViolationException e) { - attr.addFlashAttribute("errorTitle", "Unable to INSERT row (validation error)"); - attr.addFlashAttribute("error", "See below for details"); - attr.addFlashAttribute("validationErrors", new ValidationErrorsContainer(e)); - attr.addFlashAttribute("params", params); + } else { + Object newPrimaryKey = repository.create(schema, params, files, pkValue); + repository.attachManyToMany(schema, newPrimaryKey, multiValuedParams); + attr.addFlashAttribute("message", "Item created successfully"); + saveAction(new UserAction(schema.getTableName(), pkValue, "CREATE", schema.getClassName())); } } + } catch (DataIntegrityViolationException | UncategorizedSQLException | IdentifierGenerationException e) { + attr.addFlashAttribute("errorTitle", "Error"); + attr.addFlashAttribute("error", e.getMessage()); + attr.addFlashAttribute("params", params); + } catch (ConstraintViolationException e) { + attr.addFlashAttribute("errorTitle", "Validation error"); + attr.addFlashAttribute("error", "See below for details"); + attr.addFlashAttribute("validationErrors", new ValidationErrorsContainer(e)); + attr.addFlashAttribute("params", params); } + if (attr.getFlashAttributes().containsKey("error")) { if (create) return "redirect:/" + properties.getBaseUrl() + "/model/" + schema.getClassName() + "/create"; diff --git a/src/main/java/tech/ailef/dbadmin/external/dto/ValidationErrorsContainer.java b/src/main/java/tech/ailef/dbadmin/external/dto/ValidationErrorsContainer.java index 069deb8..01265bd 100644 --- a/src/main/java/tech/ailef/dbadmin/external/dto/ValidationErrorsContainer.java +++ b/src/main/java/tech/ailef/dbadmin/external/dto/ValidationErrorsContainer.java @@ -22,6 +22,10 @@ public class ValidationErrorsContainer { return errors.getOrDefault(name, new ArrayList<>()); } + public boolean hasErrors(String name) { + return forField(name).size() > 0; + } + public boolean isEmpty() { return errors.isEmpty(); } diff --git a/src/main/resources/static/css/dbadmin.css b/src/main/resources/static/css/dbadmin.css index 5d7a35d..861a9ce 100644 --- a/src/main/resources/static/css/dbadmin.css +++ b/src/main/resources/static/css/dbadmin.css @@ -2,6 +2,10 @@ color: red; } +div.invalid input { + border-color: red !important; +} + .separator-light { opacity: 25%; } diff --git a/src/main/resources/templates/fragments/inputs.html b/src/main/resources/templates/fragments/inputs.html index 2ef2826..bac3049 100644 --- a/src/main/resources/templates/fragments/inputs.html +++ b/src/main/resources/templates/fragments/inputs.html @@ -34,7 +34,7 @@ type="text" th:value="${value}" th:name="${name}" - class="form-control " th:id="|__id_${field.getName()}|" + class="form-control" th:id="|__id_${field.getName()}|" th:classAppend="|${(field.isPrimaryKey() && object != null) || (field.isReadOnly() && !create) ? 'disable' : ''}|" diff --git a/src/main/resources/templates/model/create.html b/src/main/resources/templates/model/create.html index a661bf3..cb2ce6c 100644 --- a/src/main/resources/templates/model/create.html +++ b/src/main/resources/templates/model/create.html @@ -30,7 +30,8 @@

-
+