87: Improve result page (AdminViewParentProjectPage) after split

This commit is contained in:
Tom Zhao 2025-03-27 11:48:34 +01:00
parent d193663590
commit 8266b1f1fe
5 changed files with 67 additions and 8 deletions

@ -1,5 +1,6 @@
package se.su.dsv.scipro.project.split;
import java.util.List;
import se.su.dsv.scipro.project.Project;
import se.su.dsv.scipro.util.Pair;
@ -25,4 +26,6 @@ public interface SplitOrRestartProjectService {
Pair<SplittableStatus, Project> getSplittableStatus(long projectId);
void splitProject(long projectId);
List<Project> getChildProjects(long parentProjectId);
}

@ -1,5 +1,6 @@
package se.su.dsv.scipro.project.split;
import com.querydsl.core.types.dsl.BooleanExpression;
import jakarta.inject.Inject;
import jakarta.transaction.Transactional;
import java.util.List;
@ -7,6 +8,7 @@ import se.su.dsv.scipro.finalseminar.FinalSeminarService;
import se.su.dsv.scipro.project.Project;
import se.su.dsv.scipro.project.ProjectService;
import se.su.dsv.scipro.project.ProjectStatus;
import se.su.dsv.scipro.project.QProject;
import se.su.dsv.scipro.system.User;
import se.su.dsv.scipro.util.Pair;
@ -78,14 +80,20 @@ public class SplitOrRestartProjectServiceImpl implements SplitOrRestartProjectSe
project.getRootProjectId() != null ? project.getRootProjectId() : project.getId()
);
// Todo: add RoughDraftApproval if it's 'APPROVED'
childProject = projectService.save(childProject);
// Todo: Send event to eventBus to synchronize eventual Phase Two Approval
// Todo: Send event to eventBus to synchronize eventual Phase Two Approval with MileStone
}
// Parent project will set as inactive
project.setProjectStatus(ProjectStatus.INACTIVE);
projectService.save(project);
}
System.out.println("Hello, split project -> " + projectId);
@Override
@Transactional
public List<Project> getChildProjects(long parentProjectId) {
return projectService.findAll(QProject.project.rootProjectId.eq(parentProjectId));
}
}

@ -73,8 +73,6 @@ public class AdminSplitProjectPage extends AbstractAdminProjectPage implements M
protected void onSubmit() {
Long projectId = getModel().getObject().getId();
System.out.println("Project ID: " + projectId);
splitOrRestartProjectService.splitProject(projectId);
final PageParameters pp = new PageParameters();

@ -4,14 +4,13 @@
<wicket:extend>
<div class="row">
<div class="col-lg-5">
<h4>Hahahaha</h4>
<h4 wicket:id="projectTitle"></h4>
<p>The project has following children projects:</p>
<div class="mb-3">
<ul>
<li>Abcd</li>
<li>efbud</li>
<ul wicket:id="projectList">
<li><a wicket:id="editLink"></a></li>
</ul>
</div>

@ -1,17 +1,68 @@
package se.su.dsv.scipro.admin.pages;
import jakarta.inject.Inject;
import java.util.List;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.markup.html.basic.Label;
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.LoadableDetachableModel;
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.project.Project;
import se.su.dsv.scipro.project.ProjectService;
import se.su.dsv.scipro.project.split.SplitOrRestartProjectService;
import se.su.dsv.scipro.security.auth.Authorization;
import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.util.PageParameterKeys;
@Authorization(authorizedRoles = { Roles.SYSADMIN })
public class AdminViewParentProjectPage
extends AbstractAdminProjectPage
implements MenuHighlightAdminProjectManagement {
@Inject
private ProjectService projectService;
@Inject
private SplitOrRestartProjectService splitOrRestartProjectService;
public AdminViewParentProjectPage(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);
}
add(new Label("projectTitle", Model.of(project.getTitle())));
LoadableDetachableModel<List<Project>> ldModel = LoadableDetachableModel.of(() ->
splitOrRestartProjectService.getChildProjects(id)
);
add(
new ListView<>("projectList", ldModel) {
@Override
protected void populateItem(ListItem<Project> item) {
Project project = item.getModelObject();
final PageParameters pp = new PageParameters();
pp.set(PageParameterKeys.MAP.get(Project.class), project.getId());
BookmarkablePageLink<Void> link = new BookmarkablePageLink<Void>(
"editLink",
AdminEditProjectPage.class,
pp
);
link.setBody(Model.of(project.getTitle() + " - " + project.getAuthorNames()));
item.add(link);
}
}
);
add(new BookmarkablePageLink<Void>("link", ProjectManagementPage.class));
}
}