From 8266b1f1fe0d403282d5c51f3d2d9c8b2f0e02ee Mon Sep 17 00:00:00 2001 From: Tom Zhao <tom.zhao@dsv.su.se> Date: Thu, 27 Mar 2025 11:48:34 +0100 Subject: [PATCH] 87: Improve result page (AdminViewParentProjectPage) after split --- .../split/SplitOrRestartProjectService.java | 3 ++ .../SplitOrRestartProjectServiceImpl.java | 12 ++++- .../admin/pages/AdminSplitProjectPage.java | 2 - .../pages/AdminViewParentProjectPage.html | 7 ++- .../pages/AdminViewParentProjectPage.java | 51 +++++++++++++++++++ 5 files changed, 67 insertions(+), 8 deletions(-) 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 e2fc88005c..d11626a0a0 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 @@ -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); } 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 7937045a58..0b5bc53f82 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 @@ -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)); } } diff --git a/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminSplitProjectPage.java b/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminSplitProjectPage.java index 6a0d779fbb..5ec65d6b52 100644 --- a/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminSplitProjectPage.java +++ b/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminSplitProjectPage.java @@ -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(); diff --git a/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminViewParentProjectPage.html b/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminViewParentProjectPage.html index 7cdd694718..c7f6ecaa59 100644 --- a/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminViewParentProjectPage.html +++ b/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminViewParentProjectPage.html @@ -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> diff --git a/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminViewParentProjectPage.java b/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminViewParentProjectPage.java index 56c1ed8e4e..36ec634056 100644 --- a/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminViewParentProjectPage.java +++ b/view/src/main/java/se/su/dsv/scipro/admin/pages/AdminViewParentProjectPage.java @@ -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)); } }