Преглед на файлове

Person Texts List Controller

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

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

@@ -19,6 +19,11 @@ public class TextAttributeConstants {
     @SuppressWarnings({"unused"})
     public static final String DOCUMENT_TEXT_COMMAND = "document_text_Command";
 
+    @SuppressWarnings({"unused"})
+    public static final String PERSON_TEXTS = "document_texts";
+    @SuppressWarnings({"unused"})
+    public static final String PERSON_TEXT_COMMAND = "document_text_Command";
+
     @SuppressWarnings("unused")
     public static final String PERSON_IMAGES = "personImages";
     @SuppressWarnings({"unused"})

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

@@ -36,7 +36,25 @@ public class TextMappingConstants {
     @SuppressWarnings({"unused"})
     public static final String DOCUMENT_TEXT_EDIT = "documentText/{id}/edit";
 
-
+    public static final String PERSON_TEXT_LIST = "/personTexts";
+    @SuppressWarnings({"unused"})
+    public static final String PERSON_TEXT_NEXT = "/personTexts/next";
+    @SuppressWarnings({"unused"})
+    public static final String PERSON_TEXT_PREVIOUS = "/personTexts/prev";
+    @SuppressWarnings({"unused"})
+    public static final String PERSON_TEXT_REWIND = "/personTexts/rewind";
+    @SuppressWarnings({"unused"})
+    public static final String PERSON_TEXT_FF = "/personTexts/ff";
+    @SuppressWarnings({"unused"})
+    public static final String PERSON_TEXT_NEW = "/personText/new";
+    @SuppressWarnings({"unused"})
+    public static final String PERSON_TEXT = "/personText";
+    @SuppressWarnings({"unused"})
+    public static final String PERSON_TEXT_SHOW = "/personText/{id}/show";
+    @SuppressWarnings({"unused"})
+    public static final String PERSON_TEXT_DELETE = "/personTexts/{id}/delete";
+    @SuppressWarnings({"unused"})
+    public static final String PERSON_TEXT_EDIT = "personText/{id}/edit";
   
 }
 

+ 5 - 0
src/main/java/scot/carricksoftware/grants/constants/ViewConstants.java

@@ -59,5 +59,10 @@ public class ViewConstants {
 
     public static final String DOCUMENT_TEXT_LIST = "text/documentText/list";
     public static final String DOCUMENT_TEXT_FORM = "text/documentText/form";
+
+    public static final String PERSON_TEXT_LIST = "text/personText/list";
+    public static final String PERSON_TEXT_FORM = "text/personText/form";
+
 }
 
+

+ 29 - 0
src/main/java/scot/carricksoftware/grants/controllers/text/persontext/PersonTextListController.java

@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) Andrew Grant of Carrick Software 29/03/2025, 13:08. All rights reserved.
+ *
+ */
+
+package scot.carricksoftware.grants.controllers.text.persontext;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PathVariable;
+
+@SuppressWarnings("unused")
+@Controller
+public interface PersonTextListController {
+
+    String getListPage(final Model model);
+
+    String getNextPage(final Model model);
+
+    String getPreviousPage(final Model model);
+
+    String getFirstPage(final Model model);
+
+    String getLastPage(final Model model);
+
+    String PersonTextDelete(@PathVariable String id);
+
+    int getPageNumber();
+}

+ 105 - 0
src/main/java/scot/carricksoftware/grants/controllers/text/persontext/PersonTextListControllerImpl.java

@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) Andrew Grant of Carrick Software 29/03/2025, 13:08. All rights reserved.
+ *
+ */
+
+package scot.carricksoftware.grants.controllers.text.persontext;
+
+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.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import scot.carricksoftware.grants.constants.*;
+import scot.carricksoftware.grants.controllers.ControllerHelper;
+import scot.carricksoftware.grants.services.text.persontext.PersonTextService;
+
+
+import static java.lang.Integer.max;
+
+@Controller
+public class PersonTextListControllerImpl implements PersonTextListController {
+
+    private static final Logger logger = LogManager.getLogger(PersonTextListControllerImpl.class);
+
+
+    private int currentPage = 0;
+    private final ControllerHelper controllerHelper;
+    private final PersonTextService personTextService;
+
+    public PersonTextListControllerImpl(ControllerHelper controllerHelper,
+                                        PersonTextService personTextService) {
+        this.controllerHelper = controllerHelper;
+        this.personTextService = personTextService;
+    }
+
+
+    @SuppressWarnings("SameReturnValue")
+    @GetMapping(TextMappingConstants.PERSON_TEXT_LIST)
+    @Override
+    public final String getListPage(final Model model) {
+        logger.debug("PersonTextListControllerImpl::getImagePage");
+        currentPage = 0;
+        return sendAttributesAndReturn(model);
+    }
+
+    @SuppressWarnings("SameReturnValue")
+    private String sendAttributesAndReturn(Model model) {
+        model.addAttribute(TextAttributeConstants.PERSON_TEXTS, personTextService.getPagedPersonTexts(currentPage));
+        controllerHelper.addAttributes(model);
+        return ViewConstants.PERSON_TEXT_LIST;
+    }
+
+    @SuppressWarnings("SameReturnValue")
+    @GetMapping(TextMappingConstants.PERSON_TEXT_NEXT)
+    @Override
+    public final String getNextPage(final Model model) {
+        logger.debug("PersonTextListControllerImpl::getNextPage");
+        currentPage++;
+        return sendAttributesAndReturn(model);
+    }
+
+    @SuppressWarnings("SameReturnValue")
+    @GetMapping(TextMappingConstants.PERSON_TEXT_PREVIOUS)
+    @Override
+    public final String getPreviousPage(final Model model) {
+        logger.debug("PersonTextListControllerImpl::getPreviousPage");
+        currentPage = max(0, currentPage - 1);
+        return sendAttributesAndReturn(model);
+    }
+
+    @SuppressWarnings("SameReturnValue")
+    @GetMapping(TextMappingConstants.PERSON_TEXT_REWIND)
+    public final String getFirstPage(final Model model) {
+        logger.debug("PersonTextListControllerImpl::getFirstPage");
+        currentPage = 0;
+        return sendAttributesAndReturn(model);
+    }
+
+    @SuppressWarnings("SameReturnValue")
+    @GetMapping(TextMappingConstants.PERSON_TEXT_FF)
+    @Override
+    public final String getLastPage(final Model model) {
+        logger.debug("PersonTextListControllerImpl::getLastPage");
+        long imageCount = personTextService.count();
+        currentPage = (int) (imageCount / ApplicationConstants.DEFAULT_PAGE_SIZE);
+        return sendAttributesAndReturn(model);
+    }
+
+
+    @SuppressWarnings("SameReturnValue")
+    @GetMapping(TextMappingConstants.PERSON_TEXT_DELETE)
+    @Override
+    public final String PersonTextDelete(@PathVariable final String id) {
+        logger.debug("PersonTextListControllerImpl::imageDelete");
+        personTextService.deleteById(Long.valueOf(id));
+        return MappingConstants.REDIRECT + TextMappingConstants.PERSON_TEXT_LIST;
+    }
+
+    @Override
+    public int getPageNumber() {
+        return currentPage;
+    }
+    
+}

+ 1 - 1
src/main/resources/templates/index.html

@@ -108,7 +108,7 @@
             <td>
             </td>
             <td>
-
+                <a class="btn btn-outline-secondary btn-sm btn-block" href="personTexts">Person Texts</a>
             </td>
 
         </tr>

+ 43 - 0
src/main/resources/templates/text/personText/form.html

@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<!--suppress XmlHighlighting -->
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head>
+    <!-- Required meta tags -->
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+
+    <!-- Bootstrap CSS -->
+    <!--suppress SpellCheckingInspection -->
+    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
+          integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
+
+    <!--suppress SpellCheckingInspection -->
+    <script src="https://code.jquery.com/jquery-3.6.0.min.js"
+            integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
+    <title>Grants - images</title>
+
+</head>
+<body>
+<!--/*@thymesVar id="personTextCommand" type="scot.carricksoftware.grants.commands.text.PersonTextCommand"*/-->
+<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">
+        <div th:if="${#fields.hasErrors('*')}" class="alert alert-danger">
+            <p>Please Correct The Errors Below</p>
+        </div>
+        <div class="form-group row justify-content-center">
+            <div class="col-xs-2">
+                <label for="id">Database Id<span style="color: rgb(255,0,0);">*</span></label>
+                <input class="form-control" id="id"
+                       th:field="*{id}" type="text" readonly>
+            </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>
+        <h6><span style="color: rgb(255,0,0);">*</span><span> Cannot be edited</span></h6>
+    </form>
+</div>
+</body>
+</html>

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

@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+
+<!--
+  ~ Copyright (c) 2025 Andrew Grant of Carrick Software .
+  ~ All rights reserved.
+  -->
+<html lang="en" xmlns:th="http://www.thymeleaf.org">
+<head>
+    <meta charset="UTF-8"/>
+    <title>People </title>
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet"
+          integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
+</head>
+<body>
+<div th:insert="~{fragments/layout::banner}"></div>
+
+
+<div class="container text-center">
+    <div class="container border border-info
+                    rounded-3 text-center p-4">
+        <h3>Person Texts</h3>
+        <table class="table table-striped table-bordered">
+            <thead class="table-dark">
+            <tr>
+                <th>ID</th>
+                <th></th>
+                <th></th>
+                <th></th>
+            </tr>
+            </thead>
+
+            <!--/*@thymesVar id="text" type="scot.carricksoftware.grants.domains.text.PersonText"*/-->
+            <tr th:each="text : ${document_texts}">
+                <td th:text="${text.id}">123</td>
+                <td></td>
+                <td></td>
+                <td><span>
+                        <a th:action="delete" class="btn btn-danger btn-sm" href=""
+                           th:href="'personTexts/' + ${text.id} + '/delete'"
+                           th:text="Delete"></a>
+                    <a th:action="edit" class="btn btn-warning btn-sm"
+                       th:href="'personText/' + ${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}"
+                           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: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}"
+                            th:text="'>>'"></a>
+                        </span></td>
+            </tr>
+            </tfoot>
+        </table>
+    </div>
+</div>
+</body>
+</html>
+