Skip to content

Commit 085835b

Browse files
committed
work in progress
1 parent 7071eed commit 085835b

File tree

10 files changed

+440
-295
lines changed

10 files changed

+440
-295
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,5 +167,9 @@ public Project addOtherProjectToChildren(Project project) {
167167
project.setParent(this);
168168
return project;
169169
}
170+
171+
public String out(){
172+
return "Project: "+name+" ("+id+")";
173+
}
170174
}
171175

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import org.springframework.ui.Model;
44
import org.springframework.validation.BindingResult;
55
import org.woehlke.simpleworklist.context.Context;
6+
import org.woehlke.simpleworklist.task.Task;
67
import org.woehlke.simpleworklist.user.session.UserSessionBean;
78
import org.woehlke.simpleworklist.user.account.UserAccount;
89

@@ -50,4 +51,6 @@ Project getProject(
5051
UserSessionBean userSession
5152
);
5253

54+
void moveTaskToTaskAndChangeTaskOrderInProject(Task sourceTask, Task destinationTask);
55+
void moveTaskToTaskAndChangeTaskOrderInProjectRoot(Task sourceTask, Task destinationTask);
5356
}

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

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,15 @@
33
import lombok.extern.slf4j.Slf4j;
44
import org.springframework.beans.factory.annotation.Autowired;
55
import org.springframework.stereotype.Service;
6+
import org.springframework.transaction.annotation.Propagation;
7+
import org.springframework.transaction.annotation.Transactional;
68
import org.springframework.ui.Model;
79
import org.springframework.validation.BindingResult;
810
import org.woehlke.simpleworklist.application.breadcrumb.Breadcrumb;
911
import org.woehlke.simpleworklist.application.breadcrumb.BreadcrumbService;
1012
import org.woehlke.simpleworklist.context.Context;
13+
import org.woehlke.simpleworklist.task.Task;
14+
import org.woehlke.simpleworklist.task.TaskService;
1115
import org.woehlke.simpleworklist.user.session.UserSessionBean;
1216
import org.woehlke.simpleworklist.user.account.UserAccount;
1317

@@ -23,14 +27,16 @@ public class ProjectControllerServiceImpl implements ProjectControllerService {
2327

2428
private final ProjectService projectService;
2529
private final BreadcrumbService breadcrumbService;
30+
private final TaskService taskService;
2631

2732
@Autowired
2833
public ProjectControllerServiceImpl(
2934
ProjectService projectService,
30-
BreadcrumbService breadcrumbService
31-
) {
35+
BreadcrumbService breadcrumbService,
36+
TaskService taskService) {
3237
this.projectService = projectService;
3338
this.breadcrumbService = breadcrumbService;
39+
this.taskService = taskService;
3440
}
3541

3642
public void addNewProjectToProjectIdForm(
@@ -124,4 +130,62 @@ public String addNewProjectToProjectRootPersist(
124130
userSession.setLastProjectId(project.getId());
125131
return project.getUrl();
126132
}
133+
134+
@Override
135+
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false)
136+
public void moveTaskToTaskAndChangeTaskOrderInProject(@NotNull Task sourceTask, @NotNull Task destinationTask ) {
137+
Project project = sourceTask.getProject();
138+
log.info("-------------------------------------------------------------------------------");
139+
log.info(" START: moveTaskToTaskAndChangeTaskOrderInProject ");
140+
log.info(" "+project.out()+":");
141+
log.info(" "+sourceTask.outProject()+" -> "+destinationTask.outProject());
142+
log.info("-------------------------------------------------------------------------------");
143+
boolean okProject = destinationTask.hasProject(project);
144+
boolean sameContext = sourceTask.hasSameContextAs(destinationTask);
145+
boolean sameProject = sourceTask.hasSameProjectAs(destinationTask);
146+
boolean go = sameContext && sameProject && okProject;
147+
if (go) {
148+
boolean srcIsBelowDestinationTask = sourceTask.isBelowByProject(destinationTask);
149+
log.info(" srcIsBelowDestinationTask: "+srcIsBelowDestinationTask);
150+
log.info("-------------------------------------------------------------------------------");
151+
if (srcIsBelowDestinationTask) {
152+
this.taskService.moveTasksDownByProject(sourceTask, destinationTask);
153+
} else {
154+
this.taskService.moveTasksUpByProject(sourceTask, destinationTask);
155+
}
156+
}
157+
log.info("-------------------------------------------------------------------------------");
158+
log.info(" DONE: moveTaskToTaskAndChangeTaskOrderInProject ");
159+
log.info(" "+project.out()+":");
160+
log.info(" "+sourceTask.outProject()+" -> "+destinationTask.outProject());
161+
log.info("-------------------------------------------------------------------------------");
162+
}
163+
164+
@Override
165+
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false)
166+
public void moveTaskToTaskAndChangeTaskOrderInProjectRoot(@NotNull Task sourceTask, @NotNull Task destinationTask ) {
167+
log.info("-------------------------------------------------------------------------------");
168+
log.info(" START: moveTaskToTaskAndChangeTaskOrderIn Project Root");
169+
log.info(" "+sourceTask.outProject()+" -> "+destinationTask.outProject());
170+
log.info("-------------------------------------------------------------------------------");
171+
boolean sourceTaskRoot = destinationTask.isInRootProject();
172+
boolean destinationTaskRoot = destinationTask.isInRootProject();
173+
boolean sameContext = sourceTask.hasSameContextAs(destinationTask);
174+
boolean sameProject = sourceTask.hasSameProjectAs(destinationTask);
175+
boolean go = sameContext && sameProject && sourceTaskRoot && destinationTaskRoot;
176+
if ( go ) {
177+
boolean srcIsBelowDestinationTask = sourceTask.isBelowByProject(destinationTask);
178+
log.info(" srcIsBelowDestinationTask: "+srcIsBelowDestinationTask);
179+
log.info("-------------------------------------------------------------------------------");
180+
if (srcIsBelowDestinationTask) {
181+
this.taskService.moveTasksDownByProjectRoot(sourceTask, destinationTask);
182+
} else {
183+
this.taskService.moveTasksUpByProjectRoot(sourceTask, destinationTask);
184+
}
185+
}
186+
log.info("-------------------------------------------------------------------------------");
187+
log.info(" DONE: moveTaskToTaskAndChangeTaskOrderIn Project Root");
188+
log.info(" "+sourceTask.outProject()+" -> "+destinationTask.outProject());
189+
log.info("-------------------------------------------------------------------------------");
190+
}
127191
}

src/main/java/org/woehlke/simpleworklist/task/Task.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,18 @@ public class Task extends AuditModel implements Serializable, ComparableById<Tas
8282
@OnDelete(action = OnDeleteAction.NO_ACTION)
8383
private Project project;
8484

85+
@ManyToOne(
86+
fetch = FetchType.LAZY,
87+
optional = true,
88+
cascade = {
89+
CascadeType.MERGE,
90+
CascadeType.REFRESH
91+
}
92+
)
93+
@JoinColumn(name = "project_id")
94+
@OnDelete(action = OnDeleteAction.NO_ACTION)
95+
private Project lastProject;
96+
8597
@ManyToOne(
8698
fetch = FetchType.LAZY,
8799
optional = false,
@@ -192,6 +204,11 @@ private void pushTaskstate(TaskState newState){
192204
this.taskState = newState;
193205
}
194206

207+
private void pushProject(Project newProject){
208+
this.lastProject = this.project;
209+
this.project = newProject;
210+
}
211+
195212
//TODO: delete Due Date
196213
public void moveToInbox(){
197214
pushTaskstate(TaskState.INBOX);
@@ -312,7 +329,7 @@ public boolean hasUser(UserAccount thisUser) {
312329

313330
@Transient
314331
public void setRootProject() {
315-
this.setProject(null);
332+
this.pushProject(null);
316333
}
317334

318335
@Transient
@@ -358,6 +375,14 @@ public String getProjectUrl() {
358375
}
359376
}
360377

378+
public String outProject(){
379+
return "Task "+title+" (id:"+id+",orderIdProject:"+orderIdProject+")";
380+
}
381+
382+
public String outTaskstate(){
383+
return "Task "+title+" (id:"+id+",orderIdTaskState:"+orderIdTaskState+")";
384+
}
385+
361386
public void merge(Task task) {
362387
this.setTitle(task.title);
363388
this.setText(task.text);
@@ -367,4 +392,12 @@ public void merge(Task task) {
367392
this.setTaskEnergy(task.taskEnergy);
368393
this.setTaskTime(task.taskTime);
369394
}
395+
396+
public void moveTaskToRootProject() {
397+
pushProject(null);
398+
}
399+
400+
public void moveTaskToAnotherProject(Project project) {
401+
pushProject(project);
402+
}
370403
}

src/main/java/org/woehlke/simpleworklist/task/TaskRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ public interface TaskRepository extends JpaRepository<Task, Long> {
2626

2727
Task findTopByTaskStateAndContextOrderByOrderIdTaskStateDesc(TaskState inbox, Context context);
2828

29+
Task findTopByProjectAndContextOrderByOrderIdProjectIsNullDesc(Context context);
30+
2931
Task findTopByProjectAndContextOrderByOrderIdProjectDesc(Project project, Context context);
3032

3133
Page<Task> findByTaskStateAndContext(TaskState taskState, Context context, Pageable request);

src/main/java/org/woehlke/simpleworklist/task/TaskService.java

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,61 @@
77

88
public interface TaskService {
99

10-
Task findOne(long taskId);
11-
boolean projectHasNoTasks(Project project);
10+
Task moveTaskToInbox(Task task);
11+
Task moveTaskToToday(Task task);
12+
Task moveTaskToNext(Task task);
13+
Task moveTaskToWaiting(Task task);
14+
Task moveTaskToSomeday(Task task);
15+
Task moveTaskToFocus(Task task);
16+
Task moveTaskToCompleted(Task task);
17+
Task moveTaskToTrash(Task task);
1218

13-
Page<Task> findbyTaskstate(TaskState taskState, Context context, Pageable request);
19+
void moveAllCompletedToTrash(Context context);
20+
void emptyTrash(Context context);
21+
22+
Task moveTaskToRootProject(Task task);
23+
Task moveTaskToAnotherProject(Task task, Project project);
24+
25+
Task addToInbox(Task task);
26+
Task addToProject(Task task);
27+
Task addToRootProject(Task task);
28+
29+
Task updatedViaTaskstate(Task task);
30+
Task updatedViaProject(Task task);
31+
Task updatedViaProjectRoot(Task task);
1432

33+
Task findOne(long taskId);
34+
Page<Task> findbyTaskstate(TaskState taskState, Context context, Pageable request);
1535
Page<Task> findByProject(Project thisProject, Pageable request);
1636
Page<Task> findByRootProject(Context context, Pageable request);
1737

38+
boolean projectHasNoTasks(Project project);
39+
1840
long getMaxOrderIdTaskState(TaskState taskState, Context context);
19-
long getMaxOrderIdRootProject(Context context);
2041
long getMaxOrderIdProject(Project project, Context context);
42+
long getMaxOrderIdProjectRoot(Context context);
2143

44+
/**
45+
* Before: sourceTask is dragged from above down to destinationTask, so sourceTask is above destinationTask.
46+
* After: sourceTask is placed to the position of destinationTask, all tasks between old position of sourceTask
47+
* and destinationTask are moved one position up; destinationTask is the next Task above sourceTask.
48+
* @param sourceTask Task
49+
* @param destinationTask Task
50+
*/
51+
void moveTasksUpByTaskState(Task sourceTask, Task destinationTask);
2252

53+
/**
54+
* Before: sourceTask is dragged from below up to destinationTask, so sourceTask is below destinationTask.
55+
* After: sourceTask is placed to the position of destinationTask, all tasks between old position of sourceTask
56+
* are moved one position down; destinationTask is the next Task below sourceTask.
57+
* @param sourceTask Task
58+
* @param destinationTask Task
59+
*/
60+
void moveTasksDownByTaskState(Task sourceTask, Task destinationTask);
2361

24-
Task addToInbox(Task task);
25-
Task addToRootProject(Task task);
26-
Task addToProject(Task task);
27-
28-
Task updatedViaTaskstate(Task task);
29-
Task updatedViaProject(Task task);
30-
31-
Task moveTaskToRootProject(Task task);
32-
Task moveTaskToAnotherProject(Task task, Project project);
33-
void moveAllCompletedToTrash(Context context);
34-
void emptyTrash(Context context);
62+
void moveTasksUpByProjectRoot(Task sourceTask, Task destinationTask);
63+
void moveTasksDownByProjectRoot(Task sourceTask, Task destinationTask);
3564

36-
void moveTaskToTaskAndChangeTaskOrderInTaskstate(Task sourceTask, Task destinationTask);
37-
void moveTaskToTaskAndChangeTaskOrderInProject(Task sourceTask, Task destinationTask);
38-
void moveTaskToTaskAndChangeTaskOrderInProjectRoot(Task sourceTask, Task destinationTask);
65+
void moveTasksUpByProject(Task sourceTask, Task destinationTask);
66+
void moveTasksDownByProject(Task sourceTask, Task destinationTask);
3967
}

0 commit comments

Comments
 (0)