Simplified gathering of grading boundries

This commit is contained in:
Andreas Svanberg 2025-02-20 10:47:48 +01:00
parent 411908fb72
commit 7e79e0c5d0
2 changed files with 13 additions and 16 deletions
core/src/main/java/se/su/dsv/scipro/report
view/src/main/java/se/su/dsv/scipro/grading

@ -81,6 +81,10 @@ public class GradingReportTemplate extends DomainObject {
this.validFrom = validFrom;
}
public int getMaxPoints() {
return getCriteria().stream().mapToInt(GradingCriterionTemplate::getMaxPoints).sum();
}
// ----------------------------------------------------------------------------------
// Properties (Getters and Setters)
// ----------------------------------------------------------------------------------

@ -3,9 +3,8 @@ package se.su.dsv.scipro.grading;
import jakarta.inject.Inject;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
@ -14,7 +13,6 @@ import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import se.su.dsv.scipro.project.Project;
import se.su.dsv.scipro.report.GradeLimit;
import se.su.dsv.scipro.report.GradingCriterionTemplate;
import se.su.dsv.scipro.report.GradingReportTemplate;
import se.su.dsv.scipro.system.DegreeType;
import se.su.dsv.scipro.system.ProjectType;
@ -122,20 +120,15 @@ public class TemplatePanel extends Panel {
private List<GradeWithPointRange> getGradeWithPointRanges(ProjectType projectType) {
GradingReportTemplate grt = gradingReportTemplateService.getCurrentTemplate(projectType);
GradeLimit[] gradeLimits = grt.getGradeLimits().toArray(GradeLimit[]::new);
List<GradeWithPointRange> list = Arrays.stream(gradeLimits)
.map(gradeLimit -> new GradeWithPointRange(gradeLimit.getGrade(), gradeLimit.getLowerLimit()))
.collect(Collectors.toList());
List<GradeWithPointRange> list = new ArrayList<>();
for (int i = 1; i < list.size(); i++) {
list.get(i).setUpperLimit(gradeLimits[i - 1].getLowerLimit() - 1);
}
if (!list.isEmpty()) {
list
.get(0)
.setUpperLimit(
grt.getCriteria().stream().map(GradingCriterionTemplate::getMaxPoints).reduce(0, Integer::sum)
);
for (int i = 0; i < gradeLimits.length; i++) {
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);
}
return list;