87: Use service method in AdminSplitProjectPanel

This commit is contained in:
Tom Zhao 2025-03-26 10:04:40 +01:00
parent e59178a540
commit f2e19b686d
3 changed files with 24 additions and 43 deletions
core/src/main/java/se/su/dsv/scipro/project/split
view/src/main/java/se/su/dsv/scipro/admin/pages

@ -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);
}

@ -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 " +

@ -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;
}
}
}