From 1d3daa5226a1142d7fa573673d80d34de8f10587 Mon Sep 17 00:00:00 2001
From: Andreas Svanberg <andreass@dsv.su.se>
Date: Mon, 21 Oct 2024 15:31:40 +0200
Subject: [PATCH] Add new criteria to grading templates

---
 .../admin/pages/grading/EditingGradingTemplate.java    |  9 +++++++--
 .../grading/EditingGradingTemplateComponentPanel.html  |  4 ++++
 .../grading/EditingGradingTemplateComponentPanel.java  | 10 ++++++++++
 3 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplate.java b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplate.java
index d9c67bf6f0..29f6d272d5 100644
--- a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplate.java
+++ b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplate.java
@@ -56,6 +56,10 @@ class EditingGradingTemplate implements Serializable {
                 .sum();
     }
 
+    public void addCriteria() {
+        this.criteria.add(new Criteria());
+    }
+
     class Criteria implements Serializable {
         enum Flag {
             OPPOSITION, REFLECTION
@@ -63,13 +67,12 @@ class EditingGradingTemplate implements Serializable {
 
         private String titleSv;
         private String titleEn;
-        private List<Point> points;
+        private List<Point> points = new ArrayList<>();
         private Flag flag;
 
         Criteria(GradingCriterionTemplate criteria) {
             this.titleSv = criteria.getTitle();
             this.titleEn = criteria.getTitleEn();
-            this.points = new ArrayList<>();
             for (var point : criteria.getGradingCriterionPointTemplates()) {
                 if (point.getPoint() == 0) continue;;
                 Point editingPoint = new Point(point);
@@ -77,6 +80,8 @@ class EditingGradingTemplate implements Serializable {
             }
         }
 
+        private Criteria() {}
+
         public String getTitleSv() {
             return titleSv;
         }
diff --git a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplateComponentPanel.html b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplateComponentPanel.html
index bcb83d5840..ff2529f89c 100644
--- a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplateComponentPanel.html
+++ b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplateComponentPanel.html
@@ -130,6 +130,10 @@
             </fieldset>
         </div>
     </div>
+
+    <div class="mb-3">
+        <button class="btn btn-sm btn-outline-success" wicket:id="add_criteria">Add new criteria</button>
+    </div>
 </wicket:panel>
 </body>
 </html>
\ No newline at end of file
diff --git a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplateComponentPanel.java b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplateComponentPanel.java
index 73e3b61c6a..beba710b8c 100644
--- a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplateComponentPanel.java
+++ b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplateComponentPanel.java
@@ -28,6 +28,8 @@ class EditingGradingTemplateComponentPanel extends GenericPanel<EditingGradingTe
     {
         super(id, editingGradingTemplateModel);
 
+        setOutputMarkupId(true);
+
         TextField<LocalDate> validFromField = new RequiredTextField<>("valid_from",
                 LambdaModel.of(editingGradingTemplateModel,
                         EditingGradingTemplate::getValidFrom,
@@ -59,6 +61,14 @@ class EditingGradingTemplateComponentPanel extends GenericPanel<EditingGradingTe
                 item.add(new CriteriaEditingPanel("criteria", item.getModel()));
             }
         });
+
+        add(new AjaxLink<>("add_criteria") {
+            @Override
+            public void onClick(AjaxRequestTarget target) {
+                editingGradingTemplateModel.getObject().addCriteria();
+                target.add(EditingGradingTemplateComponentPanel.this);
+            }
+        });
     }
 
     class CriteriaEditingPanel extends GenericWebMarkupContainer<EditingGradingTemplate.Criteria> {