From 556abce7235baf7fe5d7bb1875916f052b78be46 Mon Sep 17 00:00:00 2001
From: Andreas Svanberg <andreass@dsv.su.se>
Date: Mon, 21 Oct 2024 15:04:09 +0200
Subject: [PATCH] Correctly mark everything as required

---
 .../EditingGradingTemplateComponentPanel.html | 12 +++----
 .../EditingGradingTemplateComponentPanel.java | 35 ++++++++++---------
 ...dingTemplateComponentPanel.utf8.properties |  5 +++
 3 files changed, 30 insertions(+), 22 deletions(-)

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 9737b1e4e4..ddac0bb533 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
@@ -13,7 +13,7 @@
         <label class="form-label" wicket:for="valid_from">
             Valid from
         </label>
-        <input type="text" class="form-control" wicket:id="valid_from">
+        <input required type="text" class="form-control" wicket:id="valid_from">
         <small class="text-muted">
             When does this grading template take effect.
         </small>
@@ -38,7 +38,7 @@
         </p>
         <div class="mb-3">
             <label class="form-label" wicket:for="default_grade">Default grade</label>
-            <input type="text" class="form-control" wicket:id="default_grade">
+            <input required type="text" class="form-control" wicket:id="default_grade">
             <small class="text-muted">The grade they receive if they do not meet the minimum points for any other grade.</small>
         </div>
 
@@ -72,13 +72,13 @@
                     <label class="form-label" wicket:for="title_en">
                         Title (english)
                     </label>
-                    <input class="form-control" wicket:id="title_en" type="text">
+                    <input required class="form-control" wicket:id="title_en" type="text">
                 </div>
                 <div class="col">
                     <label class="form-label" wicket:for="title_sv">
                         Title (swedish)
                     </label>
-                    <input class="form-control" wicket:id="title_sv" type="text">
+                    <input required class="form-control" wicket:id="title_sv" type="text">
                 </div>
             </div>
 
@@ -103,13 +103,13 @@
                                     <label wicket:for="requirement_en">
                                         Requirement (english)
                                     </label>
-                                    <textarea rows="4" class="form-control" wicket:id="requirement_en"></textarea>
+                                    <textarea required rows="4" class="form-control" wicket:id="requirement_en"></textarea>
                                 </div>
                                 <div>
                                     <label wicket:for="requirement_sv">
                                         Requirement (swedish)
                                     </label>
-                                    <textarea rows="4" class="form-control" wicket:id="requirement_sv"></textarea>
+                                    <textarea required rows="4" class="form-control" wicket:id="requirement_sv"></textarea>
                                 </div>
                             </div>
                         </fieldset>
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 212cc73d5e..13666a558c 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
@@ -9,6 +9,7 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.EnumChoiceRenderer;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.NumberTextField;
+import org.apache.wicket.markup.html.form.RequiredTextField;
 import org.apache.wicket.markup.html.form.TextArea;
 import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.markup.html.list.ListItem;
@@ -29,7 +30,7 @@ class EditingGradingTemplateComponentPanel extends GenericPanel<EditingGradingTe
     {
         super(id, editingGradingTemplateModel);
 
-        TextField<LocalDate> validFromField = new TextField<>("valid_from",
+        TextField<LocalDate> validFromField = new RequiredTextField<>("valid_from",
                 LambdaModel.of(editingGradingTemplateModel,
                         EditingGradingTemplate::getValidFrom,
                         EditingGradingTemplate::setValidFrom),
@@ -68,7 +69,7 @@ class EditingGradingTemplateComponentPanel extends GenericPanel<EditingGradingTe
 
             setOutputMarkupId(true);
 
-            add(new TextField<>("title_sv", LambdaModel.of(
+            add(new RequiredTextField<>("title_sv", LambdaModel.of(
                     model,
                     EditingGradingTemplate.Criteria::getTitleSv,
                     EditingGradingTemplate.Criteria::setTitleSv)) {
@@ -76,7 +77,7 @@ class EditingGradingTemplateComponentPanel extends GenericPanel<EditingGradingTe
                     add(new AutoSave());
                 }
             });
-            add(new TextField<>("title_en", LambdaModel.of(
+            add(new RequiredTextField<>("title_en", LambdaModel.of(
                     model,
                     EditingGradingTemplate.Criteria::getTitleEn,
                     EditingGradingTemplate.Criteria::setTitleEn)) {
@@ -106,6 +107,10 @@ class EditingGradingTemplateComponentPanel extends GenericPanel<EditingGradingTe
             add(flagChoice);
 
             add(new ListView<>("points", model.map(EditingGradingTemplate.Criteria::getPoints)) {
+                {
+                    setReuseItems(true);
+                }
+
                 @Override
                 protected void populateItem(ListItem<EditingGradingTemplate.Criteria.Point> item) {
                     item.add(new PointEditingPanel("point", item));
@@ -138,23 +143,21 @@ class EditingGradingTemplateComponentPanel extends GenericPanel<EditingGradingTe
 
                 add(new Label("point", () -> item.getIndex() + 1));
 
-                add(new TextArea<>("requirement_en", LambdaModel.of(
+                TextArea<String> englishRequirement = new TextArea<>("requirement_en", LambdaModel.of(
                         model,
                         EditingGradingTemplate.Criteria.Point::getRequirementEn,
-                        EditingGradingTemplate.Criteria.Point::setRequirementEn)) {
-                    {
-                        add(new AutoSave());
-                    }
-                });
+                        EditingGradingTemplate.Criteria.Point::setRequirementEn));
+                englishRequirement.setRequired(true);
+                englishRequirement.add(new AutoSave());
+                add(englishRequirement);
 
-                add(new TextArea<>("requirement_sv", LambdaModel.of(
+                TextArea<String> swedishRequirement = new TextArea<>("requirement_sv", LambdaModel.of(
                         model,
                         EditingGradingTemplate.Criteria.Point::getRequirementSv,
-                        EditingGradingTemplate.Criteria.Point::setRequirementSv)) {
-                    {
-                        add(new AutoSave());
-                    }
-                });
+                        EditingGradingTemplate.Criteria.Point::setRequirementSv));
+                swedishRequirement.setRequired(true);
+                swedishRequirement.add(new AutoSave());
+                add(swedishRequirement);
 
                 add(new AjaxLink<>("remove") {
                     @Override
@@ -174,7 +177,7 @@ class EditingGradingTemplateComponentPanel extends GenericPanel<EditingGradingTe
 
             setOutputMarkupId(true);
 
-            add(new TextField<>("default_grade", LambdaModel.of(
+            add(new RequiredTextField<>("default_grade", LambdaModel.of(
                     model,
                     GradeLimits::getDefaultGrade,
                     GradeLimits::setDefaultGrade)) {
diff --git a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplateComponentPanel.utf8.properties b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplateComponentPanel.utf8.properties
index e64928d8c4..c7eb81c353 100644
--- a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplateComponentPanel.utf8.properties
+++ b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/EditingGradingTemplateComponentPanel.utf8.properties
@@ -1,3 +1,8 @@
 Flag.OPPOSITION=Final seminar opposition
 Flag.REFLECTION=Reflection
 max_points_available=The maximum number of points available is ${max_points_available} with the below criteria.
+default_grade.Required=You must set the default grade.
+title_sv.Required=You must set the swedish title for all criteria
+title_en.Required=You must set the english title for all criteria
+requirement_sv.Required=You must set the swedish requirement for every criteria point
+requirement_en.Required=You must set the english requirement for every criteria point