87: Add support for split project confirmation page

This commit is contained in:
Tom Zhao 2025-03-24 14:31:58 +01:00
parent f33956068d
commit 739bf1c0bd
5 changed files with 114 additions and 2 deletions

@ -294,6 +294,7 @@ public class SciProApplication extends LifecycleManagedWebApplication {
mountPage("admin/maintenance", SystemMaintenancePage.class);
mountPage("admin/project", ProjectManagementPage.class);
mountPage("admin/project/create", AdminCreateProjectPage.class);
mountPage("admin/project/split", AdminSplitProjectPage.class);
mountPage("admin/project/survey", AdminSurveyPage.class);
mountPage("admin/project/reviewer", AdminAssignReviewerPage.class);
mountPage("admin/project/reviewer/capacity", AdminReviewerCapacityManagementPage.class);

@ -0,0 +1,30 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org" lang="en">
<body>
<wicket:extend>
<div class="row">
<div class="col-lg-5">
<h4 wicket:id="projectTitle"></h4>
<p wicket:id="errorInfo"></p>
<form class="form-horizontal" wicket:id="splitProjectForm">
<p>This project will be split between following authors:</p>
<div class="mb-3">
<ul wicket:id="authorList">
<li wicket:id="author"></li>
</ul>
</div>
<button class="btn btn-success" type="submit">Split Project</button>
</form>
<div class="mt-5">
<a class="btn btn-success" wicket:id="cancelLink">Cancel</a>
</div>
</div>
</div>
</wicket:extend>
</body>
</html>

@ -0,0 +1,75 @@
package se.su.dsv.scipro.admin.pages;
import jakarta.inject.Inject;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import se.su.dsv.scipro.components.menuhighlighting.MenuHighlightAdminProjectManagement;
import se.su.dsv.scipro.data.DetachableServiceModel;
import se.su.dsv.scipro.project.Project;
import se.su.dsv.scipro.project.ProjectService;
import se.su.dsv.scipro.security.auth.Authorization;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.util.PageParameterKeys;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.AbstractLink;
import java.util.ArrayList;
@Authorization(authorizedRoles = { Roles.SYSADMIN })
public class AdminSplitProjectPage extends AbstractAdminProjectPage implements MenuHighlightAdminProjectManagement {
@Inject
private ProjectService projectService;
public AdminSplitProjectPage(PageParameters pp) {
final long id = pp.get(PageParameterKeys.MAP.get(Project.class)).toLong(0);
final Project project = projectService.findOne(id);
if (project == null) {
throw new RestartResponseException(AdminCreateProjectPage.class);
}
DetachableServiceModel<Project> dsModel = new DetachableServiceModel<>(projectService, project);
add(new Label("projectTitle", dsModel.map(Project::getTitle)));
add(new Label("errorInfo", Model.of("error Info!!")) {
@Override
protected void onConfigure() {
super.onConfigure();
setVisibilityAllowed(false);
}
}
);
add(new SplitProjectForm("splitProjectForm", dsModel));
add(new BookmarkablePageLink<Void>("cancelLink", ProjectManagementPage.class));
}
private class SplitProjectForm extends Form<Project> {
public SplitProjectForm(String id, final IModel<Project> model) {
super(id, model);
add(new ListView<>("authorList", model.map(Project::getProjectParticipants).map(ArrayList::new)) {
@Override
protected void populateItem(ListItem<User> item) {
item.add(new Label("author", item.getModel().map(User::getFullName)));
}
});
}
@Override
protected void onSubmit() {
Long projectId = getModel().getObject().getId();
}
}
}

@ -7,10 +7,12 @@ 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.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.security.auth.roles.Roles;
import se.su.dsv.scipro.session.SciProSession;
import se.su.dsv.scipro.util.PageParameterKeys;
public class AdminSplitProjectPanel extends Panel {
private enum SplittableStatus {
@ -23,7 +25,10 @@ public class AdminSplitProjectPanel extends Panel {
Project project = projectModel.getObject();
SplittableStatus splittableStatus = getSplitStatus(project);
AbstractLink splitProjectLink = new BookmarkablePageLink<Void>("splitProjectLink", AdminCreateProjectPage.class) {
final PageParameters pp = new PageParameters();
pp.set(PageParameterKeys.MAP.get(Project.class), project.getId());
AbstractLink splitProjectLink = new BookmarkablePageLink<Void>("splitProjectLink", AdminSplitProjectPage.class, pp) {
@Override
protected void onConfigure() {
super.onConfigure();
@ -37,6 +42,7 @@ public class AdminSplitProjectPanel extends Panel {
}
}
};
add(splitProjectLink);
if (splittableStatus == SplittableStatus.NOT_TWO_PARTICIPANTS) {

@ -1 +1 @@
splitButton = Split ProjectX
splitButton = Split Project