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

@ -1,5 +1,6 @@
package se.su.dsv.scipro.project.split; package se.su.dsv.scipro.project.split;
import com.querydsl.core.types.dsl.BooleanExpression;
import jakarta.inject.Inject; import jakarta.inject.Inject;
import jakarta.transaction.Transactional; import jakarta.transaction.Transactional;
import java.util.List; 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.Project;
import se.su.dsv.scipro.project.ProjectService; import se.su.dsv.scipro.project.ProjectService;
import se.su.dsv.scipro.project.ProjectStatus; 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.system.User;
import se.su.dsv.scipro.util.Pair; import se.su.dsv.scipro.util.Pair;
@ -78,14 +80,20 @@ public class SplitOrRestartProjectServiceImpl implements SplitOrRestartProjectSe
project.getRootProjectId() != null ? project.getRootProjectId() : project.getId() project.getRootProjectId() != null ? project.getRootProjectId() : project.getId()
); );
// Todo: add RoughDraftApproval if it's 'APPROVED'
childProject = projectService.save(childProject); 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 // Parent project will set as inactive
project.setProjectStatus(ProjectStatus.INACTIVE); project.setProjectStatus(ProjectStatus.INACTIVE);
projectService.save(project); 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() { protected void onSubmit() {
Long projectId = getModel().getObject().getId(); Long projectId = getModel().getObject().getId();
System.out.println("Project ID: " + projectId);
splitOrRestartProjectService.splitProject(projectId); splitOrRestartProjectService.splitProject(projectId);
final PageParameters pp = new PageParameters(); final PageParameters pp = new PageParameters();

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

@ -1,17 +1,68 @@
package se.su.dsv.scipro.admin.pages; 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.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 org.apache.wicket.request.mapper.parameter.PageParameters;
import se.su.dsv.scipro.components.menuhighlighting.MenuHighlightAdminProjectManagement; 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.Authorization;
import se.su.dsv.scipro.security.auth.roles.Roles; import se.su.dsv.scipro.security.auth.roles.Roles;
import se.su.dsv.scipro.util.PageParameterKeys;
@Authorization(authorizedRoles = { Roles.SYSADMIN }) @Authorization(authorizedRoles = { Roles.SYSADMIN })
public class AdminViewParentProjectPage public class AdminViewParentProjectPage
extends AbstractAdminProjectPage extends AbstractAdminProjectPage
implements MenuHighlightAdminProjectManagement { implements MenuHighlightAdminProjectManagement {
@Inject
private ProjectService projectService;
@Inject
private SplitOrRestartProjectService splitOrRestartProjectService;
public AdminViewParentProjectPage(PageParameters pp) { 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)); add(new BookmarkablePageLink<Void>("link", ProjectManagementPage.class));
} }
} }