diff --git a/core/src/main/java/se/su/dsv/scipro/project/split/SplitOrRestartProjectService.java b/core/src/main/java/se/su/dsv/scipro/project/split/SplitOrRestartProjectService.java index 42c0a74b65..8231532181 100644 --- a/core/src/main/java/se/su/dsv/scipro/project/split/SplitOrRestartProjectService.java +++ b/core/src/main/java/se/su/dsv/scipro/project/split/SplitOrRestartProjectService.java @@ -23,7 +23,7 @@ public interface SplitOrRestartProjectService { } } - Pair<SplittableStatus, Project> getSplittableStatus(int projectId); + Pair<SplittableStatus, Project> getSplittableStatus(long projectId); - void splitProject(int projectId); + void splitProject(long projectId); } diff --git a/core/src/main/java/se/su/dsv/scipro/project/split/SplitOrRestartProjectServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/project/split/SplitOrRestartProjectServiceImpl.java index f750faa778..cd8fa7a87a 100644 --- a/core/src/main/java/se/su/dsv/scipro/project/split/SplitOrRestartProjectServiceImpl.java +++ b/core/src/main/java/se/su/dsv/scipro/project/split/SplitOrRestartProjectServiceImpl.java @@ -22,8 +22,8 @@ public class SplitOrRestartProjectServiceImpl implements SplitOrRestartProjectSe } @Override - public Pair<SplittableStatus, Project> getSplittableStatus(int projectId) { - Project project = projectService.findOne(Long.valueOf(projectId)); + public Pair<SplittableStatus, Project> getSplittableStatus(long projectId) { + Project project = projectService.findOne(projectId); if (project == null) return new Pair<>(SplittableStatus.NOT_EXIST, null); @@ -43,7 +43,7 @@ public class SplitOrRestartProjectServiceImpl implements SplitOrRestartProjectSe } @Override - public void splitProject(int projectId) { + public void splitProject(long projectId) { Pair<SplittableStatus, Project> result = getSplittableStatus(projectId); if (result.getHead() != SplittableStatus.OK) { throw new IllegalStateException("Project must to be verified to be able to split " + diff --git a/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminSplitProjectPanel.java b/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminSplitProjectPanel.java index 77811428df..15d15e457d 100644 --- a/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminSplitProjectPanel.java +++ b/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminSplitProjectPanel.java @@ -1,29 +1,40 @@ package se.su.dsv.scipro.admin.pages; +import jakarta.inject.Inject; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.AbstractLink; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; +import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.model.Model; import org.apache.wicket.request.mapper.parameter.PageParameters; import se.su.dsv.scipro.project.Project; -import se.su.dsv.scipro.project.ProjectStatus; +import se.su.dsv.scipro.project.split.SplitOrRestartProjectService; import se.su.dsv.scipro.security.auth.roles.Roles; import se.su.dsv.scipro.session.SciProSession; import se.su.dsv.scipro.util.PageParameterKeys; +import se.su.dsv.scipro.util.Pair; + +import static se.su.dsv.scipro.project.split.SplitOrRestartProjectService.SplittableStatus; public class AdminSplitProjectPanel extends Panel { - private enum SplittableStatus { - NOT_ACTIVE, NOT_TWO_PARTICIPANTS, FINAL_SEMINAR_PHASE_STARTED, OK - } + + @Inject + private SplitOrRestartProjectService splitOrRestartProjectService; public AdminSplitProjectPanel(String id, final IModel<Project> projectModel) { super(id, projectModel); Project project = projectModel.getObject(); - SplittableStatus splittableStatus = getSplitStatus(project); + + LoadableDetachableModel<SplittableStatus> ldModel = LoadableDetachableModel.of( + () -> { + Pair<SplittableStatus, Project > pair = splitOrRestartProjectService.getSplittableStatus(project.getId()); + return pair.getHead(); + } + ); final PageParameters pp = new PageParameters(); pp.set(PageParameterKeys.MAP.get(Project.class), project.getId()); @@ -33,7 +44,7 @@ public class AdminSplitProjectPanel extends Panel { protected void onConfigure() { super.onConfigure(); - if (splittableStatus == SplittableStatus.OK) { + if (ldModel.getObject() == SplittableStatus.OK) { setEnabled(true); this.add(new AttributeAppender("class", Model.of(" btn-success"))); } else { @@ -42,30 +53,10 @@ public class AdminSplitProjectPanel extends Panel { } } }; - add(splitProjectLink); - if (splittableStatus == SplittableStatus.NOT_TWO_PARTICIPANTS) { - add(new Label("splitInfo", Model.of("To be able to split a project, it needs to have 2 participants."))); - } else if (splittableStatus == SplittableStatus.NOT_ACTIVE) { - add(new Label("splitInfo", Model.of("Only active project can be split."))); - } else { - add(new Label("splitInfo", Model.of(""))); - } - - /* - Label splitInfoLabel = new Label("splitInfoLabel", dsModel) { - @Override - protected void onConfigure() { - super.onConfigure(); - - Project attachedProject = dsModel.getObject(); - if (attachedProject.getProjectParticipants().size() < 2) { - this - } - } - }; - */ + add(new Label("splitInfo", Model.of(ldModel.getObject() == SplittableStatus.OK ? "" : + ldModel.getObject().getMessage()))); } @Override @@ -73,14 +64,4 @@ public class AdminSplitProjectPanel extends Panel { super.onConfigure(); setVisibilityAllowed(SciProSession.get().authorizedForRole(Roles.ADMIN)); } - - private SplittableStatus getSplitStatus(final Project project) { - if (project.getProjectParticipants().size() != 2) { - return SplittableStatus.NOT_TWO_PARTICIPANTS; - } else if (project.getProjectStatus() != ProjectStatus.ACTIVE) { - return SplittableStatus.NOT_ACTIVE; - } else { - return SplittableStatus.OK; - } - } }