97: Using LoadableDetachableModel to cache GradingReportTemplate

This commit is contained in:
Tom Zhao 2025-02-20 13:27:00 +01:00
parent be29e38e97
commit 3912ba7f32

@ -11,6 +11,7 @@ import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel; import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import se.su.dsv.scipro.project.Project; import se.su.dsv.scipro.project.Project;
import se.su.dsv.scipro.report.GradeLimit; import se.su.dsv.scipro.report.GradeLimit;
import se.su.dsv.scipro.report.GradingReportTemplate; import se.su.dsv.scipro.report.GradingReportTemplate;
@ -45,13 +46,18 @@ public class TemplatePanel extends Panel {
public TemplatePanel(String id, final IModel<Project> projectIModel) { public TemplatePanel(String id, final IModel<Project> projectIModel) {
super(id, projectIModel); super(id, projectIModel);
final DegreeType degreeType = projectIModel.getObject().getProjectType().getDegreeType(); Project project = projectIModel.getObject();
final DegreeType degreeType = project.getProjectType().getDegreeType();
IModel<GradingReportTemplate> grtModel = LoadableDetachableModel.of(() ->
gradingReportTemplateService.getCurrentTemplate(projectIModel.getObject().getProjectType(),
projectIModel.getObject().getStartDate()));
final WebMarkupContainer upto16 = new WebMarkupContainer("upto2016") { final WebMarkupContainer upto16 = new WebMarkupContainer("upto2016") {
@Override @Override
protected void onConfigure() { protected void onConfigure() {
super.onConfigure(); super.onConfigure();
setVisibilityAllowed( setVisibilityAllowed(grtModel.getObject() == null &&
GradingCategory.fromProjectStartDate(projectIModel.getObject().getStartDate()) == GradingCategory.fromProjectStartDate(projectIModel.getObject().getStartDate()) ==
GradingCategory.UP_TO_2016 GradingCategory.UP_TO_2016
); );
@ -64,7 +70,7 @@ public class TemplatePanel extends Panel {
@Override @Override
protected void onConfigure() { protected void onConfigure() {
super.onConfigure(); super.onConfigure();
setVisibilityAllowed( setVisibilityAllowed(grtModel.getObject() == null &&
GradingCategory.fromProjectStartDate(projectIModel.getObject().getStartDate()) == GradingCategory.fromProjectStartDate(projectIModel.getObject().getStartDate()) ==
GradingCategory.BETWEEN_2017_202410 GradingCategory.BETWEEN_2017_202410
); );
@ -73,15 +79,11 @@ public class TemplatePanel extends Panel {
addTemplates(degreeType, between2017_202410); addTemplates(degreeType, between2017_202410);
add(between2017_202410); add(between2017_202410);
final GradeLimitsContainer from202411 = new GradeLimitsContainer("from202411", projectIModel) { final GradeLimitsContainer from202411 = new GradeLimitsContainer("from202411", grtModel) {
@Override @Override
protected void onConfigure() { protected void onConfigure() {
super.onConfigure(); super.onConfigure();
setVisibilityAllowed(grtModel.getObject() != null);
setVisibilityAllowed(
GradingCategory.fromProjectStartDate(projectIModel.getObject().getStartDate()) ==
GradingCategory.FROM_202411
);
} }
}; };
add(from202411); add(from202411);
@ -117,9 +119,7 @@ public class TemplatePanel extends Panel {
); );
} }
private List<GradeWithPointRange> getGradeWithPointRanges(Project project) { private List<GradeWithPointRange> getGradeWithPointRanges(GradingReportTemplate grt) {
GradingReportTemplate grt = gradingReportTemplateService.getCurrentTemplate(project.getProjectType(),
project.getStartDate());
GradeLimit[] gradeLimits = grt.getGradeLimits().toArray(GradeLimit[]::new); GradeLimit[] gradeLimits = grt.getGradeLimits().toArray(GradeLimit[]::new);
List<GradeWithPointRange> list = new ArrayList<>(); List<GradeWithPointRange> list = new ArrayList<>();
@ -138,11 +138,9 @@ public class TemplatePanel extends Panel {
private class GradeLimitsContainer extends WebMarkupContainer { private class GradeLimitsContainer extends WebMarkupContainer {
public GradeLimitsContainer(String id, IModel<Project> projectIModel) { public GradeLimitsContainer(String id, IModel<GradingReportTemplate> grtModel) {
super(id, projectIModel); super(id, grtModel);
IModel<List<GradeWithPointRange>> list = projectIModel.map(project -> IModel<List<GradeWithPointRange>> list = grtModel.map(TemplatePanel.this::getGradeWithPointRanges);
getGradeWithPointRanges(project)
);
add( add(
new ListView<>("gradewithlimits_list", list) { new ListView<>("gradewithlimits_list", list) {