Skip to content

Commit 95973de

Browse files
committed
URL PATH of Actions - Controller Methods Refactoring
1 parent 086af49 commit 95973de

26 files changed

+425
-313
lines changed

etc/requirements/Requirements.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,15 @@ http://localhost:5000/project/0/?listTaskTime=MIN5&listTaskTime=MIN10&listTaskTi
3131

3232

3333

34+
http://localhost:5000/taskstate/inbox
35+
today
36+
next
37+
waiting
38+
scheduled
39+
someday
40+
completed
41+
trash
42+
focus
43+
44+
3445

etc/serialversions/getserialversionid.cmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ echo %CLASSPATH%
1717
cd target\classes
1818
serialver org.woehlke.simpleworklist.language.Language > ..\..\etc\serialversions.txt
1919
serialver org.woehlke.simpleworklist.task.TaskEnergy >> ..\..\etc\serialversions.txt
20-
serialver org.woehlke.simpleworklist.task.TaskState >> ..\..\etc\serialversions.txt
20+
serialver org.woehlke.simpleworklist.taskstate.TaskState >> ..\..\etc\serialversions.txt
2121
serialver org.woehlke.simpleworklist.task.TaskTime >> ..\..\etc\serialversions.txt
2222
serialver org.woehlke.simpleworklist.user.resetpassword.UserPasswordRecoveryStatus >> ..\..\etc\serialversions.txt
2323
serialver org.woehlke.simpleworklist.user.register.UserRegistrationStatus >> ..\..\etc\serialversions.txt

etc/serialversions/getserialversionid.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ echo "CLASSPATH $CLASSPATH"
2929
cd $CLASSES_PATH
3030
serialver org.woehlke.simpleworklist.language.Language > $SERIALVERSIONS_FILE
3131
serialver org.woehlke.simpleworklist.task.TaskEnergy >> $SERIALVERSIONS_FILE
32-
serialver org.woehlke.simpleworklist.task.TaskState >> $SERIALVERSIONS_FILE
32+
serialver org.woehlke.simpleworklist.taskstate.TaskState >> $SERIALVERSIONS_FILE
3333
serialver org.woehlke.simpleworklist.task.TaskTime >> $SERIALVERSIONS_FILE
3434
serialver org.woehlke.simpleworklist.user.resetpassword.UserPasswordRecoveryStatus >> $SERIALVERSIONS_FILE
3535
serialver org.woehlke.simpleworklist.user.register.UserRegistrationStatus >> $SERIALVERSIONS_FILE

etc/serialversions/serialversions.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
org.woehlke.simpleworklist.language.Language: private static final long serialVersionUID = 0L;
22
org.woehlke.simpleworklist.task.TaskEnergy: private static final long serialVersionUID = 0L;
3-
org.woehlke.simpleworklist.task.TaskState: private static final long serialVersionUID = 0L;
3+
org.woehlke.simpleworklist.taskstate.TaskState: private static final long serialVersionUID = 0L;
44
org.woehlke.simpleworklist.task.TaskTime: private static final long serialVersionUID = 0L;
55
org.woehlke.simpleworklist.user.resetpassword.UserPasswordRecoveryStatus: private static final long serialVersionUID = 0L;
66
org.woehlke.simpleworklist.user.register.UserRegistrationStatus: private static final long serialVersionUID = 0L;

src/main/java/org/woehlke/simpleworklist/breadcrumb/BreadcrumbService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import org.woehlke.simpleworklist.context.Context;
44
import org.woehlke.simpleworklist.project.Project;
55
import org.woehlke.simpleworklist.task.Task;
6-
import org.woehlke.simpleworklist.task.TaskState;
6+
import org.woehlke.simpleworklist.taskstate.TaskState;
77

88
import java.util.Locale;
99

src/main/java/org/woehlke/simpleworklist/breadcrumb/BreadcrumbServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import org.woehlke.simpleworklist.context.Context;
99
import org.woehlke.simpleworklist.project.Project;
1010
import org.woehlke.simpleworklist.task.Task;
11-
import org.woehlke.simpleworklist.task.TaskState;
11+
import org.woehlke.simpleworklist.taskstate.TaskState;
1212

1313
import java.util.Locale;
1414
import java.util.Stack;

src/main/java/org/woehlke/simpleworklist/project/ProjectController.java

Lines changed: 56 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ public final String showProject(
6868
model.addAttribute("message",message);
6969
model.addAttribute("isDeleted",isDeleted);
7070
}
71-
return "project/show";
71+
return "project/id/show";
7272
}
7373

74-
@RequestMapping(path = "/{projectId}/add/new/project", method = RequestMethod.GET)
74+
@RequestMapping(path = "/{projectId}/add/project", method = RequestMethod.GET)
7575
public final String addNewSubProjectGet(
7676
@PathVariable long projectId,
7777
@ModelAttribute("userSession") UserSessionBean userSession,
@@ -80,10 +80,10 @@ public final String addNewSubProjectGet(
8080
log.info("private addNewProjectGet (GET) projectId="+projectId);
8181
Context context = super.getContext(userSession);
8282
projectControllerService.addNewProject(projectId, userSession, context, locale, model);
83-
return "project/add";
83+
return "project/id/add/project";
8484
}
8585

86-
@RequestMapping(path = "/{projectId}/add/new/project", method = {RequestMethod.POST, RequestMethod.PUT})
86+
@RequestMapping(path = "/{projectId}/add/project", method = {RequestMethod.POST, RequestMethod.PUT})
8787
public final String addNewSubProjectPost(
8888
@PathVariable long projectId,
8989
@ModelAttribute("userSession") UserSessionBean userSession,
@@ -92,12 +92,20 @@ public final String addNewSubProjectPost(
9292
Locale locale, Model model) {
9393
log.info("private addNewProjectPost (POST) projectId="+projectId+" "+project.toString());
9494
Context context = super.getContext(userSession);
95-
return projectControllerService.addNewProjectPersist( projectId, userSession, project, context,
96-
result, locale, model ,"project/add");
95+
return projectControllerService.addNewProjectPersist(
96+
projectId,
97+
userSession,
98+
project,
99+
context,
100+
result,
101+
locale,
102+
model ,
103+
"/add/project"
104+
);
97105
}
98106

99107

100-
@RequestMapping(path = "/{thisProjectId}/move/to/{targetProjectId}", method = RequestMethod.GET)
108+
@RequestMapping(path = "/{thisProjectId}/move/to/project/{targetProjectId}", method = RequestMethod.GET)
101109
public final String moveProject(
102110
@PathVariable("thisProjectId") Project thisProject,
103111
@PathVariable long targetProjectId,
@@ -128,7 +136,7 @@ public final String editProjectGet(
128136
model.addAttribute("breadcrumb", breadcrumb);
129137
model.addAttribute("thisProject", thisProject);
130138
model.addAttribute("project", thisProject);
131-
return "project/edit";
139+
return "project/id/edit";
132140
}
133141

134142
@RequestMapping(path = "/{projectId}/edit", method = RequestMethod.POST)
@@ -150,7 +158,7 @@ public final String editProjectPost(
150158
Project thisProject = projectService.findByProjectId(projectId);
151159
Breadcrumb breadcrumb = breadcrumbService.getBreadcrumbForShowOneProject(thisProject,locale);
152160
model.addAttribute("breadcrumb", breadcrumb);
153-
return "project/edit";
161+
return "project/id/edit";
154162
} else {
155163
Project thisProject = projectService.findByProjectId(project.getId());
156164
thisProject.setName(project.getName());
@@ -173,47 +181,53 @@ public final String deleteProject(
173181
@PathVariable("projectId") Project project,
174182
@PageableDefault(sort = "title") Pageable request,
175183
@ModelAttribute("userSession") UserSessionBean userSession,
176-
Locale locale, Model model) {
184+
Locale locale,
185+
Model model
186+
) {
177187
long newProjectId = project.getId();
178188
Context context = super.getContext(userSession);
179189
userSession.setLastProjectId(project.getId());
180190
model.addAttribute("userSession",userSession);
181191
UserAccount userAccount = context.getUserAccount();
182-
if(project != null){
183-
boolean hasNoData = taskService.projectHasNoTasks(project);
184-
boolean hasNoChildren = project.hasNoChildren();
185-
if (hasNoData && hasNoChildren) {
186-
if (!project.isRootProject()) {
187-
newProjectId = project.getParent().getId();
188-
} else {
189-
newProjectId = 0;
190-
}
191-
projectService.delete(project);
192-
String message = "Project is deleted. You see its parent project now.";
193-
model.addAttribute("message",message);
194-
model.addAttribute("isDeleted",true);
192+
if(project != null){
193+
boolean hasNoData = taskService.projectHasNoTasks(project);
194+
boolean hasNoChildren = project.hasNoChildren();
195+
if (hasNoData && hasNoChildren) {
196+
if (!project.isRootProject()) {
197+
newProjectId = project.getParent().getId();
195198
} else {
196-
StringBuilder s = new StringBuilder("Deletion rejected for this Project, because ");
197-
log.info("Deletion rejected for Project " + project.getId());
198-
if (!hasNoData) {
199-
log.warn("Project " + project.getId() + " has actionItem");
200-
s.append("Project has actionItems.");
201-
}
202-
if (!hasNoChildren) {
203-
log.info("Project " + project.getId() + " has children");
204-
s.append("Project has child categories.");
205-
}
206-
model.addAttribute("message",s.toString());
207-
model.addAttribute("isDeleted",false);
208-
Breadcrumb breadcrumb = breadcrumbService.getBreadcrumbForShowOneProject(project,locale);
209-
Page<Task> taskPage = taskService.findByProject(project, context, request);
210-
model.addAttribute("taskPage", taskPage);
211-
model.addAttribute("breadcrumb", breadcrumb);
212-
model.addAttribute("thisProject", project);
213-
return "project/show";
199+
newProjectId = 0;
200+
}
201+
projectService.delete(project);
202+
String message = "Project is deleted. You see its parent project now.";
203+
model.addAttribute("message",message);
204+
model.addAttribute("isDeleted",true);
205+
} else {
206+
StringBuilder s = new StringBuilder("Deletion rejected for this Project, because ");
207+
log.info("Deletion rejected for Project " + project.getId());
208+
if (!hasNoData) {
209+
log.warn("Project " + project.getId() + " has actionItem");
210+
s.append("Project has actionItems.");
214211
}
212+
if (!hasNoChildren) {
213+
log.info("Project " + project.getId() + " has children");
214+
s.append("Project has child categories.");
215+
}
216+
model.addAttribute("message",s.toString());
217+
model.addAttribute("isDeleted",false);
218+
Breadcrumb breadcrumb = breadcrumbService.getBreadcrumbForShowOneProject(project,locale);
219+
Page<Task> taskPage = taskService.findByProject(project, context, request);
220+
model.addAttribute("taskPage", taskPage);
221+
model.addAttribute("breadcrumb", breadcrumb);
222+
model.addAttribute("thisProject", project);
223+
return "project/id/show";
215224
}
216-
return "redirect:/project/" + newProjectId;
225+
}
226+
if( newProjectId == 0){
227+
return "redirect:/project/root";
228+
} else {
229+
return "redirect:/project/" + newProjectId;
230+
}
217231
}
218232

219233
}

src/main/java/org/woehlke/simpleworklist/project/ProjectControllerService.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,21 @@ Project getProject(
3434
UserAccount userAccount,
3535
UserSessionBean userSession
3636
);
37+
38+
void addNewProjectToRoot(
39+
UserSessionBean userSession,
40+
Context context,
41+
Locale locale,
42+
Model model
43+
);
44+
45+
String addNewProjectToRootPersist(
46+
UserSessionBean userSession,
47+
Project project,
48+
Context context,
49+
BindingResult result,
50+
Locale locale,
51+
Model model,
52+
String s
53+
);
3754
}

src/main/java/org/woehlke/simpleworklist/project/ProjectRootController.java

Lines changed: 98 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,18 @@
88
import org.springframework.stereotype.Controller;
99
import org.springframework.ui.Model;
1010
import org.springframework.validation.BindingResult;
11-
import org.springframework.web.bind.annotation.ModelAttribute;
12-
import org.springframework.web.bind.annotation.RequestMapping;
13-
import org.springframework.web.bind.annotation.RequestMethod;
14-
import org.springframework.web.bind.annotation.RequestParam;
11+
import org.springframework.validation.ObjectError;
12+
import org.springframework.web.bind.annotation.*;
1513
import org.woehlke.simpleworklist.breadcrumb.Breadcrumb;
1614
import org.woehlke.simpleworklist.common.AbstractController;
1715
import org.woehlke.simpleworklist.context.Context;
1816
import org.woehlke.simpleworklist.task.Task;
17+
import org.woehlke.simpleworklist.task.TaskEnergy;
18+
import org.woehlke.simpleworklist.taskstate.TaskState;
19+
import org.woehlke.simpleworklist.task.TaskTime;
20+
import org.woehlke.simpleworklist.taskstate.TaskMoveService;
1921
import org.woehlke.simpleworklist.user.UserSessionBean;
22+
import org.woehlke.simpleworklist.user.account.UserAccount;
2023

2124
import javax.validation.Valid;
2225
import java.util.Locale;
@@ -27,12 +30,12 @@
2730
public class ProjectRootController extends AbstractController {
2831

2932
private final ProjectControllerService projectControllerService;
30-
31-
private static final long rootProjectId = 0L;
33+
private final TaskMoveService taskMoveService;
3234

3335
@Autowired
34-
public ProjectRootController(ProjectControllerService projectControllerService) {
36+
public ProjectRootController(ProjectControllerService projectControllerService, TaskMoveService taskMoveService) {
3537
this.projectControllerService = projectControllerService;
38+
this.taskMoveService = taskMoveService;
3639
}
3740

3841
@RequestMapping(path = "/", method = RequestMethod.GET)
@@ -58,27 +61,108 @@ public final String showRootProject(
5861
return "project/root";
5962
}
6063

61-
@RequestMapping(path = "/add/new/project", method = RequestMethod.GET)
64+
@RequestMapping(path = "/add/project", method = RequestMethod.GET)
6265
public final String addNewTopLevelProjectForm(
6366
@ModelAttribute("userSession") UserSessionBean userSession,
6467
Locale locale, Model model
6568
){
66-
log.info("/project/add/new/project (GET)");
69+
log.info("/project/root/add/project (GET)");
6770
Context context = super.getContext(userSession);
68-
projectControllerService.addNewProject(rootProjectId, userSession, context, locale, model);
71+
projectControllerService.addNewProjectToRoot(userSession, context, locale, model);
6972
return "project/addToplevel";
7073
}
7174

72-
@RequestMapping(path = "/add/new/project", method = {RequestMethod.POST, RequestMethod.PUT})
75+
@RequestMapping(path = "/add/project", method = {RequestMethod.POST, RequestMethod.PUT})
7376
public final String addNewTopLevelProjectSave(
7477
@Valid Project project,
7578
@ModelAttribute("userSession") UserSessionBean userSession,
7679
BindingResult result,
7780
Locale locale, Model model
7881
){
79-
log.info("/project/add/new/project (POST)");
82+
log.info("/project/root/add/project (POST)");
8083
Context context = super.getContext(userSession);
81-
return projectControllerService.addNewProjectPersist( rootProjectId, userSession, project, context,
82-
result, locale, model, "project/addToplevel");
84+
return projectControllerService.addNewProjectToRootPersist(
85+
userSession,
86+
project,
87+
context,
88+
result,
89+
locale,
90+
model,
91+
"project/addToplevel"
92+
);
93+
}
94+
95+
@RequestMapping(path = "/add/task", method = RequestMethod.GET)
96+
public final String addNewTaskToRootProjectGet(
97+
@ModelAttribute("userSession") UserSessionBean userSession,
98+
Locale locale, Model model
99+
) {
100+
log.info("/project/root/add/task (GET)");
101+
Context context = super.getContext(userSession);
102+
UserAccount userAccount = context.getUserAccount();
103+
Task task = new Task();
104+
task.setTaskState(TaskState.INBOX);
105+
task.setTaskEnergy(TaskEnergy.NONE);
106+
task.setTaskTime(TaskTime.NONE);
107+
Project thisProject;
108+
Boolean mustChooseArea = false;
109+
thisProject = new Project();
110+
thisProject.setId(0L);
111+
if(userSession.getContextId() == 0L){
112+
mustChooseArea = true;
113+
task.setContext(userAccount.getDefaultContext());
114+
thisProject.setContext(userAccount.getDefaultContext());
115+
} else {
116+
task.setContext(context);
117+
thisProject.setContext(context);
118+
}
119+
Breadcrumb breadcrumb = breadcrumbService.getBreadcrumbForShowOneProject(thisProject,locale);
120+
model.addAttribute("breadcrumb", breadcrumb);
121+
model.addAttribute("mustChooseArea", mustChooseArea);
122+
model.addAttribute("thisProject", thisProject);
123+
model.addAttribute("thisProjectId", thisProject.getId());
124+
model.addAttribute("breadcrumb", breadcrumb);
125+
model.addAttribute("task", task);
126+
//return "task/addToProject";
127+
return "project/root/add/task";
128+
}
129+
130+
@RequestMapping(path = "/add/task", method = RequestMethod.POST)
131+
public final String addNewTaskToRootProjectPost(
132+
@ModelAttribute("userSession") UserSessionBean userSession,
133+
@Valid Task task,
134+
BindingResult result, Locale locale, Model model
135+
) {
136+
log.info("/project/root/add/task (POST)");
137+
Context context = super.getContext(userSession);
138+
if (result.hasErrors()) {
139+
for (ObjectError e : result.getAllErrors()) {
140+
log.info(e.toString());
141+
}
142+
Boolean mustChooseArea = false;
143+
task.setContext(context);
144+
Breadcrumb breadcrumb = breadcrumbService.getBreadcrumbForTaskstate(TaskState.INBOX,locale);
145+
model.addAttribute("mustChooseArea", mustChooseArea);
146+
model.addAttribute("breadcrumb", breadcrumb);
147+
model.addAttribute("task", task);
148+
//return "task/addToProject";
149+
return "project/root/add/task";
150+
} else {
151+
task.setProject(null);
152+
if(task.getDueDate()==null){
153+
task.setTaskState(TaskState.INBOX);
154+
} else {
155+
task.setTaskState(TaskState.SCHEDULED);
156+
}
157+
task.setFocus(false);
158+
task.setContext(context);
159+
long maxOrderIdProject = taskMoveService.getMaxOrderIdProject(task.getProject(),context);
160+
task.setOrderIdProject(++maxOrderIdProject);
161+
long maxOrderIdTaskState = taskMoveService.getMaxOrderIdTaskState(task.getTaskState(),task.getContext());
162+
task.setOrderIdTaskState(++maxOrderIdTaskState);
163+
task = taskService.saveAndFlush(task);
164+
log.info(task.toString());
165+
return "redirect:/project/root/";
166+
}
83167
}
84168
}

0 commit comments

Comments
 (0)