WIP
authorKai Moritz <kai@juplo.de>
Tue, 21 Jan 2020 20:31:40 +0000 (21:31 +0100)
committerKai Moritz <kai@juplo.de>
Fri, 7 Apr 2023 11:21:44 +0000 (13:21 +0200)
src/main/java/de/juplo/demo/DemoController.java
src/main/java/de/juplo/demo/Form.java
src/main/resources/templates/form.html

index 7a23173..7c65a60 100644 (file)
@@ -2,6 +2,7 @@ package de.juplo.demo;
 
 
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.Map;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -41,8 +42,15 @@ public class DemoController
             .stream()
             .reduce(0, (a, b) -> a > b ? a : b) + 1;
 
-    LOG.info("Adding new card #{}", next);
-    form.cards.put(next, new HashMap<>());
+    Map<String, Boolean> content = new LinkedHashMap<>();
+    content.put(form.names.get(0), Boolean.FALSE);
+    LOG.info("Adding new card #{} with content: {}", next, content);
+    form.cards.put(next, content);
+
+    for (Integer id : form.cards.keySet())
+      for (String entry : form.cards.get(id).keySet())
+        LOG.info("{} - {}: {}", id, entry, form.cards.get(id).get(entry));
+
     return "form";
   }
 
@@ -51,14 +59,24 @@ public class DemoController
   {
     Map<String, Boolean> content = form.cards.remove(card);
     LOG.info("Removed card #{} with content: {}", card, content);
+
+    for (Integer id : form.cards.keySet())
+      for (String entry : form.cards.get(id).keySet())
+        LOG.info("{} - {}: {}", id, entry, form.cards.get(id).get(entry));
+
     return "form";
   }
 
   @RequestMapping(path = "/", params = "add")
   public String addRow(@ModelAttribute Form form, @RequestParam Integer add)
   {
-    LOG.info("Adding row {} to card #{}", form.row.get(add), add);
-    form.cards.get(add).put(form.row.get(add), Boolean.FALSE);
+    LOG.info("Adding row {} to card #{}", form.names.get(add), add);
+    form.cards.get(add).put(form.names.get(add), Boolean.FALSE);
+
+    for (Integer id : form.cards.keySet())
+      for (String entry : form.cards.get(id).keySet())
+        LOG.info("{} - {}: {}", id, entry, form.cards.get(id).get(entry));
+
     return "form";
   }
 
@@ -70,6 +88,17 @@ public class DemoController
     String row = parts[1];
     Boolean value = form.cards.get(card).remove(row);
     LOG.info("Removed row {} with value {} from card #{}", row, value, card);
+
+    if (form.cards.get(card).isEmpty())
+    {
+      LOG.info("Card #{} is empty: Removing card!", card);
+      form.cards.remove(card);
+    }
+
+    for (Integer id : form.cards.keySet())
+      for (String entry : form.cards.get(id).keySet())
+        LOG.info("{} - {}: {}", id, entry, form.cards.get(id).get(entry));
+
     return "form";
   }
 }
index 7dceac3..38ac7a5 100644 (file)
@@ -13,7 +13,7 @@ import java.util.TreeMap;
 public class Form
 {
   Map<Integer, Map<String, Boolean>> cards = new TreeMap<>();
-  Map<Integer, String> row = new HashMap<>();
+  Map<Integer, String> names = new HashMap<>();
 
 
   public Map<Integer, Map<String, Boolean>> getCards()
@@ -26,13 +26,13 @@ public class Form
     this.cards = cards;
   }
 
-  public Map<Integer, String> getRow()
+  public Map<Integer, String> getNames()
   {
-    return row;
+    return names;
   }
 
-  public void setRow(Map<Integer, String> row)
+  public void setNames(Map<Integer, String> names)
   {
-    this.row = row;
+    this.names = names;
   }
 }
index 4105325..eb6fb24 100644 (file)
@@ -8,12 +8,12 @@
   </head>
   <body>
     <nav class="navbar navbar-dark bg-primary navbar-expand navbar-dark flex-column">
-      <h2 class="navbar-brand">Demo: Multidimensional Map With Dynamic Binding</h2>
+      <h1 class="navbar-brand">Demo: Multidimensional Map With Dynamic Binding</h1>
     </nav>
     <main class="container mt-5">
       <form action="#" th:action="@{/}" th:object="${form}" method="get">
-        <div class="card" th:each="card : *{cards.entrySet()}">
-          <div class="card-header"><h1 th:text="|Card #${card.key}|">Card #X</h1></div>
+        <div class="card my-3" th:each="card : *{cards.entrySet()}">
+          <div class="card-header"><h2 th:text="|Card #${card.key}|">Card #X</h2></div>
           <div class="card-body">
             <div class="card-text">
               <div class="form-group" th:each="row : ${card.value.entrySet()}">
@@ -22,7 +22,7 @@
                 <button type="submit" name="remove" class="btn btn-primary" th:value="|${card.key}:${row.key}|">Remove</button>
               </div>
               <div class="form-group">
-                <input type="text" th:field="*{row[__${card.key}__]}" />
+                <input type="text" th:field="*{names[__${card.key}__]}" />
                 <button type="submit" name="add" th:value="${card.key}" class="btn btn-primary">Add Row</button>
               </div>
             </div>
             </div>
           </div>
         </div>
-        <p><button type="submit" name="card" value="add" class="btn btn-primary">Add Card</button></p>
+        <div class="card my-3">
+          <div class="card-header"><h2>Add A New Card...</h2></div>
+          <div class="card-body">
+            <div class="card-text">
+              <input type="text" th:field="*{names[0]}" />
+              <button type="submit" name="card" value="add" class="btn btn-primary my-3">Add Card</button>
+            </div>
+          </div>
+        </div>
       </form>
     </main>
   </body>