From be29e38e972427fb70c2469dbf9a875fe339b559 Mon Sep 17 00:00:00 2001
From: Tom Zhao <tom.zhao@dsv.su.se>
Date: Thu, 20 Feb 2025 12:53:43 +0100
Subject: [PATCH] 97: Using record and improve GradingReportTemplateService

---
 .../grading/GradingReportTemplateService.java |  2 +
 .../report/GradingReportServiceImpl.java      |  5 ++
 .../su/dsv/scipro/grading/TemplatePanel.java  | 47 ++++---------------
 3 files changed, 15 insertions(+), 39 deletions(-)

diff --git a/core/src/main/java/se/su/dsv/scipro/grading/GradingReportTemplateService.java b/core/src/main/java/se/su/dsv/scipro/grading/GradingReportTemplateService.java
index 6b5daf224b..b0fa118411 100644
--- a/core/src/main/java/se/su/dsv/scipro/grading/GradingReportTemplateService.java
+++ b/core/src/main/java/se/su/dsv/scipro/grading/GradingReportTemplateService.java
@@ -14,6 +14,8 @@ public interface GradingReportTemplateService {
 
     GradingReportTemplate getCurrentTemplate(ProjectType projectType);
 
+    GradingReportTemplate getCurrentTemplate(ProjectType projectType, LocalDate startDate);
+
     GradingReportTemplate getTemplate(long templateId);
 
     /**
diff --git a/core/src/main/java/se/su/dsv/scipro/report/GradingReportServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/report/GradingReportServiceImpl.java
index bc945b6443..ea9363d06c 100644
--- a/core/src/main/java/se/su/dsv/scipro/report/GradingReportServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/report/GradingReportServiceImpl.java
@@ -216,6 +216,11 @@ public class GradingReportServiceImpl implements GradingReportTemplateService, G
         return gradingReportTemplateRepo.getCurrentTemplate(projectType, LocalDate.now(clock));
     }
 
+    @Override
+    public GradingReportTemplate getCurrentTemplate(ProjectType projectType, LocalDate startDate) {
+        return gradingReportTemplateRepo.getCurrentTemplate(projectType, startDate);
+    }
+
     @Override
     public GradingReportTemplate getTemplate(long templateId) {
         return gradingReportTemplateRepo.findOne(templateId);
diff --git a/view/src/main/java/se/su/dsv/scipro/grading/TemplatePanel.java b/view/src/main/java/se/su/dsv/scipro/grading/TemplatePanel.java
index 212053270e..4e8686484e 100644
--- a/view/src/main/java/se/su/dsv/scipro/grading/TemplatePanel.java
+++ b/view/src/main/java/se/su/dsv/scipro/grading/TemplatePanel.java
@@ -117,8 +117,9 @@ public class TemplatePanel extends Panel {
         );
     }
 
-    private List<GradeWithPointRange> getGradeWithPointRanges(ProjectType projectType) {
-        GradingReportTemplate grt = gradingReportTemplateService.getCurrentTemplate(projectType);
+    private List<GradeWithPointRange> getGradeWithPointRanges(Project project) {
+        GradingReportTemplate grt = gradingReportTemplateService.getCurrentTemplate(project.getProjectType(),
+                project.getStartDate());
         GradeLimit[] gradeLimits = grt.getGradeLimits().toArray(GradeLimit[]::new);
         List<GradeWithPointRange> list = new ArrayList<>();
 
@@ -126,53 +127,21 @@ public class TemplatePanel extends Panel {
             GradeLimit gradeLimit = gradeLimits[i];
             int lowerLimit = gradeLimit.getLowerLimit();
             int upperLimit = i == 0 ? grt.getMaxPoints() : gradeLimits[i - 1].getLowerLimit() - 1;
-            GradeWithPointRange gradeWithPointRange = new GradeWithPointRange(gradeLimit.getGrade(), lowerLimit);
-            gradeWithPointRange.setUpperLimit(upperLimit);
-            list.add(gradeWithPointRange);
+
+            list.add(new GradeWithPointRange(gradeLimit.getGrade(), lowerLimit, upperLimit));
         }
 
         return list;
     }
 
-    private class GradeWithPointRange implements Serializable {
-
-        private String grade;
-        private int lowerLimit;
-        private int upperLimit;
-
-        public GradeWithPointRange(String grade, int lowerLimit) {
-            this.grade = grade;
-            this.lowerLimit = lowerLimit;
-        }
-
-        public String getGrade() {
-            return grade;
-        }
-
-        public int getLowerLimit() {
-            return lowerLimit;
-        }
-
-        public int getUpperLimit() {
-            return upperLimit;
-        }
-
-        public void setUpperLimit(int upperLimit) {
-            this.upperLimit = upperLimit;
-        }
-
-        @Override
-        public String toString() {
-            return "[" + grade + "]: " + lowerLimit + " - " + upperLimit;
-        }
-    }
+    private record GradeWithPointRange (String grade, int lowerLimit, int upperLimit) { }
 
     private class GradeLimitsContainer extends WebMarkupContainer {
 
         public GradeLimitsContainer(String id, IModel<Project> projectIModel) {
             super(id, projectIModel);
             IModel<List<GradeWithPointRange>> list = projectIModel.map(project ->
-                getGradeWithPointRanges(project.getProjectType())
+                getGradeWithPointRanges(project)
             );
 
             add(
@@ -182,7 +151,7 @@ public class TemplatePanel extends Panel {
                         IModel<String> s = item
                             .getModel()
                             .map(
-                                gpr -> "[" + gpr.getGrade() + "] " + gpr.getLowerLimit() + " - " + gpr.getUpperLimit()
+                                gpr -> "[" + gpr.grade() + "] " + gpr.lowerLimit() + " - " + gpr.upperLimit()
                             );
                         item.add(new Label("gradewithlimits", s));
                         add(item);