Andrew Grant преди 6 месеца
родител
ревизия
8facbc07ac

+ 1 - 1
src/main/java/scot/carricksoftware/grants/constants/TextAttributeConstants.java

@@ -22,7 +22,7 @@ public class TextAttributeConstants {
     @SuppressWarnings({"unused"})
     public static final String PERSON_TEXTS = "personTexts";
     @SuppressWarnings({"unused"})
-    public static final String PERSON_TEXT_COMMAND = "documentTextCommand";
+    public static final String PERSON_TEXT_COMMAND = "personTextCommand";
 
     @SuppressWarnings({"unused"})
     public static final String PLACE_TEXTS = "placeTexts";

+ 106 - 0
src/main/java/scot/carricksoftware/grants/controllers/text/persontext/PersonTextFormControllerImpl.java

@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) Andrew Grant of Carrick Software 29/03/2025, 13:08. All rights reserved.
+ *
+ */
+
+package scot.carricksoftware.grants.controllers.text.persontext;
+
+import jakarta.validation.Valid;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import scot.carricksoftware.grants.commands.text.PersonTextCommand;
+import scot.carricksoftware.grants.commands.text.PersonTextCommandImpl;
+import scot.carricksoftware.grants.constants.*;
+import scot.carricksoftware.grants.converters.text.persontext.PersonTextCommandConverterImpl;
+import scot.carricksoftware.grants.converters.text.persontext.PersonTextConverterImpl;
+import scot.carricksoftware.grants.services.people.PersonService;
+import scot.carricksoftware.grants.services.text.persontext.PersonTextService;
+import scot.carricksoftware.grants.validators.text.PersonTextCommandValidator;
+
+@SuppressWarnings("LoggingSimilarMessage")
+@Controller
+public class PersonTextFormControllerImpl implements PersonTextFormController {
+
+    private static final Logger logger = LogManager.getLogger(PersonTextFormControllerImpl.class);
+    private final PersonTextService personTextService;
+    @SuppressWarnings({"FieldCanBeLocal", "unused"})
+    private final PersonTextCommandConverterImpl personTextCommandConverter;
+    private final PersonTextConverterImpl personTextConverter;
+    private final PersonTextCommandValidator personTextCommandValidator;
+    private final PersonService personService;
+
+
+    public PersonTextFormControllerImpl(PersonTextService personTextService,
+                                        PersonTextCommandConverterImpl personTextCommandConverter,
+                                        PersonTextConverterImpl personTextConverter,
+                                        PersonTextCommandValidator personTextCommandValidator,
+                                        PersonService personService) {
+        this.personTextService = personTextService;
+        this.personTextCommandConverter = personTextCommandConverter;
+
+
+        this.personTextConverter = personTextConverter;
+        this.personTextCommandValidator = personTextCommandValidator;
+        this.personService = personService;
+    }
+
+    @SuppressWarnings("SameReturnValue")
+    @GetMapping(TextMappingConstants.PERSON_TEXT_NEW)
+    public final String getNewPersonText(final Model model) {
+        logger.debug("PersonTextFormControllerImpl::getNewPersonText");
+        model.addAttribute(TextAttributeConstants.PERSON_TEXT_COMMAND, new PersonTextCommandImpl());
+        model.addAttribute(AttributeConstants.PEOPLE, personService.findAll());
+        return ViewConstants.PERSON_TEXT_FORM;
+    }
+
+    @SuppressWarnings("SameReturnValue")
+    @GetMapping(TextMappingConstants.PERSON_TEXT_EDIT)
+    public final String personTextEdit(@Valid @PathVariable final String id, Model model) {
+        logger.debug("PersonTextFormControllerImpl::personTextEdit");
+        model.addAttribute(TextAttributeConstants.PERSON_TEXT_COMMAND, personTextService.findById(Long.valueOf(id)));
+        model.addAttribute(AttributeConstants.PEOPLE, personService.findAll());
+        return ViewConstants.PERSON_TEXT_FORM;
+    }
+
+
+    @Override
+    @PostMapping(TextMappingConstants.PERSON_TEXT)
+    public String saveOrUpdate(@Valid @ModelAttribute PersonTextCommand personTextCommand, BindingResult bindingResult, Model model) {
+        logger.debug("PersonTextFormControllerImpl::saveOrUpdate");
+
+        personTextCommandValidator.validate(personTextCommand, bindingResult);
+
+
+        if (bindingResult.hasErrors()) {
+            bindingResult.getAllErrors().forEach(error -> logger.debug(error.getDefaultMessage()));
+            model.addAttribute(AttributeConstants.PEOPLE, personService.findAll());
+            return ViewConstants.PERSON_TEXT_FORM;
+        }
+
+        PersonTextCommand savedCommand = personTextService.savePersonTextCommand(personTextCommand);
+        model.addAttribute(TextAttributeConstants.PERSON_TEXT_COMMAND, savedCommand);
+        model.addAttribute(AttributeConstants.PEOPLE, personService.findAll());
+        return MappingConstants.REDIRECT + TextMappingConstants.PERSON_TEXT_SHOW.replace("{id}", "" + savedCommand.getId());
+    }
+
+
+
+    @SuppressWarnings("SameReturnValue")
+    @GetMapping(TextMappingConstants.PERSON_TEXT_SHOW)
+    public String showById(@PathVariable String id, Model model) {
+        logger.debug("PersonTextFormControllerImpl::saveOrUpdate");
+        PersonTextCommand savedCommand = personTextConverter.convert(personTextService.findById(Long.valueOf(id)));
+        model.addAttribute(TextAttributeConstants.PERSON_TEXT_COMMAND, savedCommand);
+        model.addAttribute(AttributeConstants.PEOPLE, personService.findAll());
+        return ViewConstants.PERSON_TEXT_FORM;
+    }
+
+
+}

+ 2 - 0
src/main/java/scot/carricksoftware/grants/validators/text/PersonTextCommandValidator.java

@@ -26,6 +26,8 @@ public class PersonTextCommandValidator {
                     null,
                     ValidationConstants.PERSON_IS_NULL);
         }
+
+
     }
 
 

+ 1 - 0
src/main/java/scot/carricksoftware/grants/validators/text/PlaceTextCommandValidator.java

@@ -21,6 +21,7 @@ public class PlaceTextCommandValidator {
 
     public void validate(PlaceTextCommand personTextCommand, BindingResult bindingResult) {
       logger.debug("PlaceTextCommandValidator::validate");
+
         if (personTextCommand.getPlace() == null) {
             bindingResult.rejectValue("place", ApplicationConstants.EMPTY_STRING,
                     null,

+ 17 - 2
src/main/resources/templates/text/personText/form.html

@@ -22,7 +22,7 @@
 <div th:insert="~{fragments/layout::banner}"></div>
 
 <div class="container border border-info rounded-3 text-center p-4">
-    <form th:object="${imageCommand}" th:action="@{/person}" method="post">
+    <form th:object="${personTextCommand}" th:action="@{/personText}" method="post">
         <div th:if="${#fields.hasErrors('*')}" class="alert alert-danger">
             <p>Please Correct The Errors Below</p>
         </div>
@@ -33,8 +33,23 @@
                        th:field="*{id}" type="text" readonly>
             </div>
         </div>
+        <div class="col-xs-4" style="margin-right:20px;">
+            <label for="person">Person</label>
+            <div>
+                <select id="person" style="width: 300px;" name="person" th:field="*{person}">
+                    <option th:value="${''}" th:text="${''}"></option>
+                    <option th:each="person : ${people}"
+                            th:value="${person.id}" th:text="${person.toString()}"></option>
+                </select>
+                <div th:if="${#fields.hasErrors('person')}">
+                    <ul class="text-danger">
+                        <li th:each="err : ${#fields.errors('person')}" th:text="${err}"/>
+                    </ul>
+                </div>
+            </div>
+        </div>
         <button type="submit" class="btn btn-primary">Commit</button>
-        <a class="btn btn-secondary" th:href="@{/people}" th:text="${'List all'}">List all</a>
+        <a class="btn btn-secondary" th:href="@{/personTexts}" th:text="${'List all'}">List all</a>
         <a class="btn btn-success" th:href="@{/}" th:text="${'Home'}">Home</a>
         <h6><span style="color: rgb(255,0,0);">*</span><span> Cannot be edited</span></h6>
     </form>

+ 2 - 2
src/main/resources/templates/text/personText/list.html

@@ -31,7 +31,7 @@
 
             <!--/*@thymesVar id="text" type="scot.carricksoftware.grants.domains.text.PersonText"*/-->
             <!--/*@thymesVar id="person" type="scot.carricksoftware.grants.domains.people.Person"*/-->
-            <tr th:each="text : ${document_texts}">
+            <tr th:each="text : ${personTexts}">
                 <td th:text="${text.id}">123</td>
                 <td th:text="${text.person.toString()}">123</td>
                 <td></td>
@@ -52,7 +52,7 @@
                          <a th:action="back" class="btn btn-secondary btn-sm"
                             th:href="@{/personTexts/prev}" th:text="'<'"></a>
                          <a th:action="new" class="btn btn-primary btn-sm" th:href="@{/personText/new}"
-                            th:text="'New Document'"></a>
+                            th:text="'New Person Text'"></a>
                          <a th:action="home" class="btn btn-success btn-sm"
                             th:href="@{/}" th:text="'Home'"></a>
                          <a th:action="forward" class="btn btn-secondary btn-sm"

+ 1 - 1
src/test/java/scot/carricksoftware/grants/validators/text/PersonTextCommandValidatorTest.java

@@ -45,7 +45,7 @@ class PersonTextCommandValidatorTest {
     }
 
     @Test
-    void validateNullPerson() {
+    void validateNullPersonTest() {
 
         validator.validate(personTextCommand, bindingResultMock);
 

+ 1 - 1
src/test/java/scot/carricksoftware/grants/validators/text/PlaceTextCommandValidatorTest.java

@@ -46,7 +46,7 @@ class PlaceTextCommandValidatorTest {
     }
 
     @Test
-    void validateNullPerson() {
+    void validateNullPlaceTest() {
         validator.validate(placeTextCommand, bindingResultMock);
 
         verify(bindingResultMock).rejectValue(stringArgumentCaptor.capture(),