Andrew Grant 6 meses atrás
pai
commit
a76abbb921

+ 106 - 0
src/main/java/scot/carricksoftware/grants/controllers/text/placetext/PlaceTextFormControllerImpl.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.placetext;
+
+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.PlaceTextCommand;
+import scot.carricksoftware.grants.commands.text.PlaceTextCommandImpl;
+import scot.carricksoftware.grants.constants.*;
+import scot.carricksoftware.grants.converters.text.placeText.PlaceTextCommandConverterImpl;
+import scot.carricksoftware.grants.converters.text.placeText.PlaceTextConverterImpl;
+import scot.carricksoftware.grants.services.places.places.PlaceService;
+import scot.carricksoftware.grants.services.text.placetext.PlaceTextService;
+import scot.carricksoftware.grants.validators.text.PlaceTextCommandValidator;
+
+@SuppressWarnings("LoggingSimilarMessage")
+@Controller
+public class PlaceTextFormControllerImpl implements PlaceTextFormController {
+
+    private static final Logger logger = LogManager.getLogger(PlaceTextFormControllerImpl.class);
+    private final PlaceTextService placeTextService;
+    @SuppressWarnings({"FieldCanBeLocal", "unused"})
+    private final PlaceTextCommandConverterImpl placeTextCommandConverter;
+    private final PlaceTextConverterImpl placeTextConverter;
+    private final PlaceTextCommandValidator placeTextCommandValidator;
+    private final PlaceService placeService;
+
+
+    public PlaceTextFormControllerImpl(PlaceTextService placeTextService,
+                                       PlaceTextCommandConverterImpl placeTextCommandConverter,
+                                       PlaceTextConverterImpl placeTextConverter,
+                                       PlaceTextCommandValidator placeTextCommandValidator,
+                                       PlaceService placeService) {
+        this.placeTextService = placeTextService;
+        this.placeTextCommandConverter = placeTextCommandConverter;
+
+
+        this.placeTextConverter = placeTextConverter;
+        this.placeTextCommandValidator = placeTextCommandValidator;
+        this.placeService = placeService;
+    }
+
+    @SuppressWarnings("SameReturnValue")
+    @GetMapping(TextMappingConstants.PLACE_TEXT_NEW)
+    public final String getNewPlaceText(final Model model) {
+        logger.debug("PlaceTextFormControllerImpl::getNewPlaceText");
+        model.addAttribute(TextAttributeConstants.PLACE_TEXT_COMMAND, new PlaceTextCommandImpl());
+        model.addAttribute(AttributeConstants.PEOPLE, placeService.findAll());
+        return ViewConstants.PLACE_TEXT_FORM;
+    }
+
+    @SuppressWarnings("SameReturnValue")
+    @GetMapping(TextMappingConstants.PLACE_TEXT_EDIT)
+    public final String placeTextEdit(@Valid @PathVariable final String id, Model model) {
+        logger.debug("PlaceTextFormControllerImpl::placeTextEdit");
+        model.addAttribute(TextAttributeConstants.PLACE_TEXT_COMMAND, placeTextService.findById(Long.valueOf(id)));
+        model.addAttribute(AttributeConstants.PLACES, placeService.findAll());
+        return ViewConstants.PLACE_TEXT_FORM;
+    }
+
+
+    @Override
+    @PostMapping(TextMappingConstants.PLACE_TEXT)
+    public String saveOrUpdate(@Valid @ModelAttribute PlaceTextCommand placeTextCommand, BindingResult bindingResult, Model model) {
+        logger.debug("PlaceTextFormControllerImpl::saveOrUpdate");
+
+        placeTextCommandValidator.validate(placeTextCommand, bindingResult);
+
+
+        if (bindingResult.hasErrors()) {
+            bindingResult.getAllErrors().forEach(error -> logger.debug(error.getDefaultMessage()));
+            model.addAttribute(AttributeConstants.PLACES, placeService.findAll());
+            return ViewConstants.PLACE_TEXT_FORM;
+        }
+
+        PlaceTextCommand savedCommand = placeTextService.savePlaceTextCommand(placeTextCommand);
+        model.addAttribute(TextAttributeConstants.PLACE_TEXT_COMMAND, savedCommand);
+        model.addAttribute(AttributeConstants.PLACES, placeService.findAll());
+        return MappingConstants.REDIRECT + TextMappingConstants.PLACE_TEXT_SHOW.replace("{id}", "" + savedCommand.getId());
+    }
+
+
+
+    @SuppressWarnings("SameReturnValue")
+    @GetMapping(TextMappingConstants.PLACE_TEXT_SHOW)
+    public String showById(@PathVariable String id, Model model) {
+        logger.debug("PlaceTextFormControllerImpl::saveOrUpdate");
+        PlaceTextCommand savedCommand = placeTextConverter.convert(placeTextService.findById(Long.valueOf(id)));
+        model.addAttribute(TextAttributeConstants.PLACE_TEXT_COMMAND, savedCommand);
+        model.addAttribute(AttributeConstants.PLACES, placeService.findAll());
+        return ViewConstants.PLACE_TEXT_FORM;
+    }
+
+
+}

+ 20 - 2
src/main/resources/templates/text/placeText/form.html

@@ -18,11 +18,12 @@
 
 </head>
 <body>
-<!--/*@thymesVar id="personTextCommand" type="scot.carricksoftware.grants.commands.text.PersonTextCommand"*/-->
+<!--/*@thymesVar id="placeTextCommand" type="scot.carricksoftware.grants.commands.text.PlaceTextCommand"*/-->
+<!--/*@thymesVar id="place" type="scot.carricksoftware.grants.domains.places.Place"*/-->
 <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="${placeTextCommand}" th:action="@{/placeText}" method="post">
         <div th:if="${#fields.hasErrors('*')}" class="alert alert-danger">
             <p>Please Correct The Errors Below</p>
         </div>
@@ -33,6 +34,23 @@
                        th:field="*{id}" type="text" readonly>
             </div>
         </div>
+
+        <div class="col-xs-4" style="margin-right:20px;">
+            <label for="place">Place</label>
+            <div>
+                <select id="place" style="width: 300px;" name="place" th:field="*{place}">
+                    <option th:value="${''}" th:text="${''}"></option>
+                    <option th:each="place : ${places}"
+                            th:value="${place.id}" th:text="${place.toString()}"></option>
+                </select>
+                <div th:if="${#fields.hasErrors('place')}">
+                    <ul class="text-danger">
+                        <li th:each="err : ${#fields.errors('place')}" 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-success" th:href="@{/}" th:text="${'Home'}">Home</a>

+ 7 - 7
src/main/resources/templates/text/placeText/list.html

@@ -32,33 +32,33 @@
             <!--/*@thymesVar id="text" type="scot.carricksoftware.grants.domains.text.PlaceText"*/-->
             <!--/*@thymesVar id="place" type="scot.carricksoftware.grants.domains.places.Place"*/-->
 
-            <tr th:each="text : ${place_texts}">
+            <tr th:each="text : ${placeTexts}">
                 <td th:text="${text.id}">123</td>
                 <td th:text="${text.place.toString()}">123</td>
                 <td></td>
                 <td><span>
                         <a th:action="delete" class="btn btn-danger btn-sm" href=""
-                           th:href="'personTexts/' + ${text.id} + '/delete'"
+                           th:href="'placeTexts/' + ${text.id} + '/delete'"
                            th:text="Delete"></a>
                     <a th:action="edit" class="btn btn-warning btn-sm"
-                       th:href="'personText/' + ${text.id} + '/edit'"
+                       th:href="'placedText/' + ${text.id} + '/edit'"
                        th:text="Edit"></a>
                     </span></td>
             </tr>
             <tfoot>
             <tr>
                 <td colspan="4"><span>
-                        <a th:action="rewind" class="btn btn-secondary btn-sm" th:href="@{/personTexts/rewind}"
+                        <a th:action="rewind" class="btn btn-secondary btn-sm" th:href="@{/placeTexts/rewind}"
                            th:text="'<<'"></a>
                          <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:href="@{/placeTexts/prev}" th:text="'<'"></a>
+                         <a th:action="new" class="btn btn-primary btn-sm" th:href="@{/placeText/new}"
                             th:text="'New Document'"></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"
                             th:href="@{/personTexts/next}" th:text="'>'"></a>
-                         <a th:action="end" class="btn btn-secondary btn-sm" th:href="@{/personTexts/ff}"
+                         <a th:action="end" class="btn btn-secondary btn-sm" th:href="@{/placeTexts/ff}"
                             th:text="'>>'"></a>
                         </span></td>
             </tr>