View Javadoc
1   package org.woehlke.java.simpleworklist.domain;
2   
3   import lombok.extern.java.Log;
4   import org.springframework.beans.factory.annotation.Autowired;
5   import org.springframework.data.domain.Page;
6   import org.springframework.data.domain.Pageable;
7   import org.springframework.data.domain.Sort;
8   import org.springframework.data.web.PageableDefault;
9   import org.springframework.stereotype.Controller;
10  import org.springframework.ui.Model;
11  import org.springframework.validation.BindingResult;
12  import org.springframework.validation.FieldError;
13  import org.springframework.validation.ObjectError;
14  import org.springframework.web.bind.annotation.*;
15  import org.woehlke.java.simpleworklist.domain.db.data.Project;
16  import org.woehlke.java.simpleworklist.domain.meso.project.ProjectControllerService;
17  import org.woehlke.java.simpleworklist.domain.db.data.task.TaskService;
18  import org.woehlke.java.simpleworklist.domain.meso.breadcrumb.Breadcrumb;
19  import org.woehlke.java.simpleworklist.domain.db.data.Context;
20  import org.woehlke.java.simpleworklist.domain.db.data.Task;
21  import org.woehlke.java.simpleworklist.domain.db.data.task.TaskEnergy;
22  import org.woehlke.java.simpleworklist.domain.db.data.task.TaskTime;
23  import org.woehlke.java.simpleworklist.domain.meso.breadcrumb.BreadcrumbService;
24  import org.woehlke.java.simpleworklist.domain.meso.task.TaskLifecycleService;
25  import org.woehlke.java.simpleworklist.domain.meso.task.TaskMoveService;
26  import org.woehlke.java.simpleworklist.domain.db.data.task.TaskState;
27  import org.woehlke.java.simpleworklist.domain.db.user.UserAccount;
28  import org.woehlke.java.simpleworklist.domain.meso.session.UserSessionBean;
29  
30  import jakarta.validation.Valid;
31  import java.util.List;
32  import java.util.Locale;
33  import java.util.UUID;
34  
35  import static org.woehlke.java.simpleworklist.domain.db.data.task.TaskState.PROJECTS;
36  
37  @Log
38  @Controller
39  @RequestMapping(path = "/project/root")
40  public class ProjectRootController extends AbstractController {
41  
42      private final ProjectControllerService projectControllerService;
43      private final TaskService taskService;
44      private final BreadcrumbService breadcrumbService;
45  
46      @Autowired
47      public ProjectRootController(
48        ProjectControllerService projectControllerService,
49        TaskService taskService, BreadcrumbService breadcrumbService) {
50        this.projectControllerService = projectControllerService;
51        this.taskService = taskService;
52        this.breadcrumbService = breadcrumbService;
53      }
54  
55      @RequestMapping(path="", method = RequestMethod.GET)
56      public final String projectRoot(
57          @PageableDefault(sort = "orderIdProject", direction = Sort.Direction.DESC) Pageable pageable,
58          @RequestParam(required = false) String message,
59          @RequestParam(required = false) boolean isDeleted,
60          @ModelAttribute("userSession") UserSessionBean userSession,
61          Locale locale, Model model
62      ) {
63          log.info("/project/root");
64          Context context = super.getContext(userSession);
65          userSession.setLastProjectId(0L);
66          model.addAttribute("userSession",userSession);
67          Page<Task> taskPage = taskService.findByProjectRoot(context,pageable);
68          Breadcrumb breadcrumb = breadcrumbService.getBreadcrumbForShowProjectRoot(locale,userSession);
69          model.addAttribute("breadcrumb", breadcrumb);
70          model.addAttribute("taskPage", taskPage);
71          if(message != null){
72              model.addAttribute("message",message);
73              model.addAttribute("isDeleted",isDeleted);
74          }
75          model.addAttribute("userSession", userSession);
76          model.addAttribute("taskstateType",PROJECTS.getSlug());
77          model.addAttribute("dataPage", true);
78          return "project/root/show";
79      }
80  
81      @RequestMapping(path = "/project/add", method = RequestMethod.GET)
82      public final String projectRootAddProjectGet(
83          @ModelAttribute("userSession") UserSessionBean userSession,
84          Locale locale, Model model
85      ){
86          log.info("/project/root/project/add (GET)");
87          Context context = super.getContext(userSession);
88          projectControllerService.addNewProjectToProjectRootForm(userSession, context, locale, model);
89          model.addAttribute("userSession", userSession);
90          model.addAttribute("taskstateType",PROJECTS.getSlug());
91          model.addAttribute("dataPage", true);
92          return "project/root/project/add";
93      }
94  
95      @RequestMapping(path = "/project/add", method = RequestMethod.POST)
96      public final String projectRootAddProjectPost(
97          @Valid Project project,
98          @ModelAttribute("userSession") UserSessionBean userSession,
99          BindingResult result,
100         Locale locale, Model model
101     ) {
102         log.info("/project/root/add/project (POST)");
103         Context context = super.getContext(userSession);
104         if (result.hasErrors()) {
105             model.addAttribute("userSession", userSession);
106             return "project/root/project/add";
107         } else {
108             project.setUuid(UUID.randomUUID());
109             return projectControllerService.addNewProjectToProjectRootPersist(
110                 userSession,
111                 project,
112                 context,
113                 result,
114                 locale,
115                 model
116             );
117         }
118     }
119 }