diff --git a/pom.xml b/pom.xml index fdf6c750..3c024daf 100644 --- a/pom.xml +++ b/pom.xml @@ -81,41 +81,38 @@ 3.5.0 - 3.6.0 + 3.6.1 2.9.3 5.2.0 6.1.2 - 5.3 + 5.7.0 true 2.9.0 - 2.63.0 - 2.4.21 + 2.64.0 + 3.0.12 2.2 1.15.3 - 6.46.0 + 6.49.0 - 1.13.0 - - - 4.0.0 - true - true - true - true - true - - - 3.0.0-M6 - - + 3.3.0 + 3.2.0 + 3.3.0 + 3.10.1 + 3.0.1 + 3.0.0 + 3.4.1 + 3.2.1 + 3.0.0-M7 + 3.0.0-M7 + 3.0.0-M6 3.12.0 3.3.0 3.1.2 3.2.0 - 3.17.0 + 3.17.0 4.7.0.0 3.0.0-M7 2.2.2 @@ -123,6 +120,12 @@ 3.1.0 1.5.2 1.2022.6 + 4.0.0 + true + true + true + true + true @@ -250,6 +253,7 @@ pom import + @@ -305,6 +310,8 @@ ${lombok.version} false + + + + + org.postgresql + postgresql + 42.4.1 + @@ -392,7 +405,7 @@ org.apache.maven.plugins maven-invoker-plugin - ${maven-invoker-plugin.version} + ${version.maven-invoker-plugin} maven-plugin provided @@ -405,21 +418,21 @@ com.dkanejs.maven.plugins docker-compose-maven-plugin - ${docker-compose-maven-plugin.version} + ${version.docker-compose-maven-plugin} maven-plugin provided org.apache.maven.plugins maven-clean-plugin - ${maven-clean-plugin.version} + ${version.maven-clean-plugin} maven-plugin provided org.apache.maven.plugins maven-dependency-plugin - ${maven-dependency-plugin.version} + ${version.maven-dependency-plugin} maven-plugin provided @@ -432,7 +445,7 @@ org.apache.maven.plugins maven-compiler-plugin - ${maven-compiler-plugin.version} + ${version.maven-compiler-plugin} maven-plugin provided @@ -477,6 +490,7 @@ + org.apache.maven.plugins maven-pmd-plugin - ${maven-pmd-plugin.version} + ${version.maven-pmd-plugin} maven-plugin provided @@ -521,7 +536,7 @@ org.apache.maven.plugins maven-release-plugin - ${maven-release-plugin.version} + ${version.maven-release-plugin} maven-plugin provided @@ -534,39 +549,38 @@ org.apache.maven.plugins maven-deploy-plugin - ${maven-deploy-plugin.version} + ${version.maven-deploy-plugin} maven-plugin provided org.apache.maven.plugins maven-install-plugin - ${maven-install-plugin.version} + ${version.maven-install-plugin} maven-plugin provided org.apache.maven.plugins maven-javadoc-plugin - ${maven-javadoc-plugin.version} + ${version.maven-javadoc-plugin} maven-plugin provided org.apache.maven.plugins maven-source-plugin - ${maven-source-plugin.version} + ${version.maven-source-plugin} maven-plugin provided - + @@ -595,19 +610,20 @@ provided false + org.springframework.boot spring-boot-configuration-processor provided true - org.springframework.boot spring-boot-starter-actuator @@ -681,7 +697,7 @@ spring-boot-starter-cache --> - + + org.springframework.security spring-security-web @@ -757,6 +772,7 @@ org.springframework.data spring-data-commons + --> org.springframework.security @@ -764,7 +780,6 @@ test - org.webjars jquery @@ -781,16 +796,6 @@ org.webjars font-awesome - - - org.postgresql - postgresql - - - com.zaxxer - HikariCP - - org.thymeleaf thymeleaf @@ -824,19 +829,28 @@ org.thymeleaf thymeleaf-testing - provided + test + + + org.postgresql + postgresql + + + com.zaxxer + HikariCP + @@ -850,6 +864,7 @@ test + @@ -908,7 +924,6 @@ provided - org.apache.maven.plugins maven-enforcer-plugin @@ -980,12 +995,14 @@ maven-plugin provided + org.apache.maven.plugins maven-pmd-plugin @@ -1040,6 +1057,7 @@ maven-plugin provided + ${project.artifactId} - clean package spring-boot:run + clean install spring-boot:run @@ -1065,27 +1084,27 @@ org.apache.maven.plugins maven-invoker-plugin - ${maven-invoker-plugin.version} + ${version.maven-invoker-plugin} com.dkanejs.maven.plugins docker-compose-maven-plugin - ${docker-compose-maven-plugin.version} + ${version.docker-compose-maven-plugin} org.apache.maven.plugins maven-clean-plugin - ${maven-clean-plugin.version} + ${version.maven-clean-plugin} org.apache.maven.plugins maven-dependency-plugin - ${maven-dependency-plugin.version} + ${version.maven-dependency-plugin} org.apache.maven.plugins maven-compiler-plugin - ${maven-compiler-plugin.version} + ${version.maven-compiler-plugin} org.springframework.boot @@ -1095,7 +1114,7 @@ org.apache.maven.plugins maven-install-plugin - ${maven-install-plugin.version} + ${version.maven-install-plugin} org.apache.maven.plugins @@ -1120,7 +1139,7 @@ org.apache.maven.plugins maven-surefire-plugin - ${maven-surefire-plugin.version} + ${version.maven-surefire-plugin} org.apache.maven.plugins @@ -1130,7 +1149,7 @@ org.apache.maven.plugins maven-release-plugin - ${maven-release-plugin.version} + ${version.maven-release-plugin} org.asciidoctor @@ -1140,12 +1159,12 @@ org.apache.maven.plugins maven-javadoc-plugin - ${maven-javadoc-plugin.version} + ${version.maven-javadoc-plugin} org.apache.maven.plugins maven-pmd-plugin - ${maven-pmd-plugin.version} + ${version.maven-pmd-plugin} net.sourceforge.pmd @@ -1176,7 +1195,7 @@ org.apache.maven.plugins maven-source-plugin - ${maven-source-plugin.version} + ${version.maven-source-plugin} org.apache.maven.plugins @@ -1186,12 +1205,12 @@ org.apache.maven.plugins maven-deploy-plugin - ${maven-deploy-plugin.version} + ${version.maven-deploy-plugin} org.apache.maven.plugins maven-failsafe-plugin - ${maven-failsafe-plugin.version} + ${version.maven-failsafe-plugin} @@ -1278,13 +1297,38 @@ org.springframework.boot spring-boot-maven-plugin + JAR true true + org.eclipse.aether,org.beanshell,org.apache.maven.plugins,org.apache.maven.scm,org.jruby,com.vladsch.flexmark,org.apache.maven.doxia,org.codehaus.plexus,org.apache.maven.scm,io.netty,org.apache.groovy,org.eclipse.jetty,org.mockito,org.asciidoctor,com.github.jnr,org.apache.maven.surefire,org.apache.maven,net.sourceforge.saxon,net.sf.saxon,com.github.spotbugs,org.eclipse.jgit,org.apache.ant,org.apache.velocity,org.junit.jupiter,org.junit.platform,junit,org.mockito,net.sourceforge.pmd,org.eclipse.sisu,org.ow2.asmcom.fasterxml.jackson.module org.springframework.boot spring-boot-configuration-processor + @@ -1327,6 +1371,13 @@ org.apache.maven.plugins maven-dependency-plugin + + compile + maven-plugin + test,provided + org.eclipse.aether,antlr,org.beanshell,org.apache.maven.plugins,org.apache.maven.scm,org.jruby,com.vladsch.flexmark,org.apache.maven.doxia,org.codehaus.plexus,org.apache.maven.scm,io.netty,org.apache.groovy,org.eclipse.jetty,org.mockito,org.asciidoctor,com.github.jnr,org.apache.maven.surefire,org.apache.maven,net.sourceforge.saxon,net.sf.saxon,com.github.spotbugs,org.eclipse.jgit,org.apache.ant,org.apache.velocity,org.junit.jupiter,org.junit.platform,junit,org.mockito,net.sourceforge.pmd,org.eclipse.sisu,org.ow2.asmcom.fasterxml.jackson.module, + jboss-transaction-api_1.2_spec,byte-buddy-agent,byte-buddy,backport9,backport-util-concurrent,spring-boot-configuration-processor,spring-boot-devtools,ganymed-ssh2,maven-toolchain,weld-probe-core,antlr,bsh,velocity-tools,liquibase-core,jruby-complete,cdi-api,lombok,jcommander,checkstyle,plexus-build-api + copy-dependencies @@ -1334,13 +1385,6 @@ copy-dependencies - - compile - maven-plugin - test,provided - org.eclipse.aether,antlr,org.beanshell,org.apache.maven.plugins,org.apache.maven.scm,org.jruby,com.vladsch.flexmark,org.apache.maven.doxia,org.codehaus.plexus,org.apache.maven.scm,io.netty,org.apache.groovy,org.eclipse.jetty,org.mockito,org.asciidoctor,com.github.jnr,org.apache.maven.surefire,org.apache.maven,net.sourceforge.saxon,net.sf.saxon,com.github.spotbugs,org.eclipse.jgit,org.apache.ant,org.apache.velocity,org.junit.jupiter,org.junit.platform,junit,org.mockito,net.sourceforge.pmd,org.eclipse.sisu,org.ow2.asmcom.fasterxml.jackson.module, - jboss-transaction-api_1.2_spec,byte-buddy-agent,byte-buddy,backport9,backport-util-concurrent,spring-boot-configuration-processor,spring-boot-devtools,ganymed-ssh2,maven-toolchain,weld-probe-core,antlr,bsh,velocity-tools,liquibase-core,jruby-complete,cdi-api,lombok,jcommander,checkstyle,plexus-build-api - @@ -1486,15 +1530,6 @@ org.springframework.boot spring-boot-maven-plugin true - - true - - - org.springframework.boot - spring-boot-configuration-processor - - - com.dkanejs.maven.plugins @@ -1506,8 +1541,7 @@ ${docker-compose-maven-plugin.removeImages} true true - true - + true org.apache.maven.plugins diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/db/ProjectIdController.java b/src/main/java/org/woehlke/java/simpleworklist/domain/db/ProjectIdController.java index 3229e7c6..81c7292f 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/db/ProjectIdController.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/db/ProjectIdController.java @@ -20,6 +20,7 @@ import org.woehlke.java.simpleworklist.domain.db.data.task.TaskEnergy; import org.woehlke.java.simpleworklist.domain.db.data.task.TaskService; import org.woehlke.java.simpleworklist.domain.db.data.task.TaskTime; +import org.woehlke.java.simpleworklist.domain.meso.move.MoveTaskService; import org.woehlke.java.simpleworklist.domain.meso.taskworkflow.TaskState; import org.woehlke.java.simpleworklist.domain.meso.taskworkflow.TransformTaskIntoProjektService; import org.woehlke.java.simpleworklist.domain.db.user.UserAccount; @@ -42,16 +43,18 @@ public class ProjectIdController extends AbstractController { private final ProjectControllerService projectControllerService; + private final MoveTaskService moveTaskService; private final TaskService taskService; private final TransformTaskIntoProjektService transformTaskIntoProjektService; @Autowired public ProjectIdController( - ProjectControllerService projectControllerService, - TaskService taskService, - TransformTaskIntoProjektService transformTaskIntoProjektService + ProjectControllerService projectControllerService, + MoveTaskService moveTaskService, TaskService taskService, + TransformTaskIntoProjektService transformTaskIntoProjektService ) { this.projectControllerService = projectControllerService; + this.moveTaskService = moveTaskService; this.taskService = taskService; this.transformTaskIntoProjektService = transformTaskIntoProjektService; } @@ -384,7 +387,7 @@ public final String moveAllCompletedToTrash( ) { userSession.setLastProjectId(thisProject.getId()); Context context = super.getContext(userSession); - taskService.moveAllCompletedToTrash(context); + moveTaskService.moveAllCompletedToTrash(context); model.addAttribute("userSession", userSession); model.addAttribute("taskstateType",PROJECTS.getType()); model.addAttribute("dataPage", true); @@ -399,7 +402,7 @@ public final String emptyTrash( ) { userSession.setLastProjectId(thisProject.getId()); Context context = super.getContext(userSession); - taskService.emptyTrash(context); + moveTaskService.emptyTrash(context); model.addAttribute("userSession", userSession); model.addAttribute("taskstateType",PROJECTS.getType()); model.addAttribute("dataPage", true); @@ -564,7 +567,7 @@ public final String moveTaskToAnotherProject( @ModelAttribute("userSession") UserSessionBean userSession, Model model ) { - task = taskService.moveTaskToRootProject(task); + task = moveTaskService.moveTaskToRootProject(task); model.addAttribute("userSession", userSession); model.addAttribute("taskstateType",PROJECTS.getType()); model.addAttribute("dataPage", true); @@ -579,7 +582,7 @@ public final String moveTaskToAnotherProject( @ModelAttribute("userSession") UserSessionBean userSession, Model model ) { - task = taskService.moveTaskToAnotherProject(task,otherProject); + task = moveTaskService.moveTaskToAnotherProject(task,otherProject); model.addAttribute("userSession", userSession); model.addAttribute("taskstateType",PROJECTS.getType()); model.addAttribute("dataPage", true); diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/db/ProjectRootController.java b/src/main/java/org/woehlke/java/simpleworklist/domain/db/ProjectRootController.java index 6d692e75..7f4ce3a2 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/db/ProjectRootController.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/db/ProjectRootController.java @@ -21,6 +21,7 @@ import org.woehlke.java.simpleworklist.domain.db.data.task.TaskEnergy; import org.woehlke.java.simpleworklist.domain.db.data.task.TaskService; import org.woehlke.java.simpleworklist.domain.db.data.task.TaskTime; +import org.woehlke.java.simpleworklist.domain.meso.move.MoveTaskService; import org.woehlke.java.simpleworklist.domain.meso.taskworkflow.TaskState; import org.woehlke.java.simpleworklist.domain.meso.taskworkflow.TransformTaskIntoProjektService; import org.woehlke.java.simpleworklist.domain.db.user.UserAccount; @@ -41,12 +42,14 @@ public class ProjectRootController extends AbstractController { public final static String rootProjectUrl = "redirect:/project/root"; private final ProjectControllerService projectControllerService; + private final MoveTaskService moveTaskService; private final TaskService taskService; private final TransformTaskIntoProjektService transformTaskIntoProjektService; @Autowired - public ProjectRootController(ProjectControllerService projectControllerService, TaskService taskService, TransformTaskIntoProjektService transformTaskIntoProjektService) { + public ProjectRootController(ProjectControllerService projectControllerService, MoveTaskService moveTaskService, TaskService taskService, TransformTaskIntoProjektService transformTaskIntoProjektService) { this.projectControllerService = projectControllerService; + this.moveTaskService = moveTaskService; this.taskService = taskService; this.transformTaskIntoProjektService = transformTaskIntoProjektService; } @@ -301,7 +304,7 @@ public final String moveTaskToProjectRoot( @ModelAttribute("userSession") UserSessionBean userSession, Model model ) { - task = taskService.moveTaskToRootProject(task); + task = moveTaskService.moveTaskToRootProject(task); userSession.setLastProjectId(Project.rootProjectId); userSession.setLastTaskState(task.getTaskState()); userSession.setLastTaskId(task.getId()); @@ -318,7 +321,7 @@ public final String moveTaskToProject( @ModelAttribute("userSession") UserSessionBean userSession, Model model ) { - task = taskService.moveTaskToAnotherProject(task,targetProject); + task = moveTaskService.moveTaskToAnotherProject(task,targetProject); userSession.setLastProjectId(targetProject.getId()); userSession.setLastTaskState(task.getTaskState()); userSession.setLastTaskId(task.getId()); @@ -478,7 +481,7 @@ public final String moveAllCompletedToTrash( Model model ) { Context context = super.getContext(userSession); - taskService.moveAllCompletedToTrash(context); + moveTaskService.moveAllCompletedToTrash(context); userSession.setLastContextId(context.getId()); userSession.setLastProjectId(Project.rootProjectId); model.addAttribute("userSession", userSession); @@ -493,7 +496,7 @@ public final String emptyTrash( Model model ) { Context context = super.getContext(userSession); - taskService.emptyTrash(context); + moveTaskService.emptyTrash(context); userSession.setLastContextId(context.getId()); userSession.setLastProjectId(Project.rootProjectId); model.addAttribute("userSession", userSession); diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/task/TaskService.java b/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/task/TaskService.java index 37a145fd..32252cc4 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/task/TaskService.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/task/TaskService.java @@ -7,22 +7,15 @@ import org.woehlke.java.simpleworklist.domain.db.data.Task; import org.woehlke.java.simpleworklist.domain.meso.taskworkflow.TaskState; -public interface TaskService { +import java.util.List; - Task moveTaskToInbox(Task task); - Task moveTaskToToday(Task task); - Task moveTaskToNext(Task task); - Task moveTaskToWaiting(Task task); - Task moveTaskToSomeday(Task task); - Task moveTaskToFocus(Task task); - Task moveTaskToCompleted(Task task); - Task moveTaskToTrash(Task task); +public interface TaskService { - void moveAllCompletedToTrash(Context context); - void emptyTrash(Context context); +// void moveAllCompletedToTrash(Context context); +// void emptyTrash(Context context); - Task moveTaskToRootProject(Task task); - Task moveTaskToAnotherProject(Task task, Project project); +// Task moveTaskToRootProject(Task task); +// Task moveTaskToAnotherProject(Task task, Project project); Task addToInbox(Task task); Task addToProject(Task task); @@ -68,4 +61,15 @@ public interface TaskService { void moveTasksUpByProject(Task sourceTask, Task destinationTask); void moveTasksDownByProject(Task sourceTask, Task destinationTask); + + Task saveAndFlush(Task task); + + void deleteAll(List taskListDeleted); + + void saveAll(List taskListChanged); + + List findByTaskStateAndContextOrderByOrderIdTaskStateAsc(TaskState completed, Context context); + + List findByTaskStateAndContext(TaskState trash, Context context); + } diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/task/TaskServiceImpl.java b/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/task/TaskServiceImpl.java index de99f87a..4495691d 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/task/TaskServiceImpl.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/db/data/task/TaskServiceImpl.java @@ -92,12 +92,12 @@ public Task findOne(@Min(1L) long taskId) { public Task updatedViaTaskstate(Task task) { log.info("updatedViaTaskstate"); if(task.getProject() != null){ - Long projectId = task.getProject().getId(); + long projectId = task.getProject().getId(); Project project = projectRepository.getReferenceById(projectId); task.setProject(project); } if(task.getLastProject()!=null){ - Long projectId = task.getLastProject().getId(); + long projectId = task.getLastProject().getId(); Project project = projectRepository.getReferenceById(projectId); task.setLastProject(project); } @@ -108,8 +108,18 @@ public Task updatedViaTaskstate(Task task) { @Override @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) - public Task updatedViaProject( @Valid Task task) { + public Task updatedViaProject(Task task) { log.info("updatedViaProject"); + if(task.getProject() != null){ + long projectId = task.getProject().getId(); + Project project = projectRepository.getReferenceById(projectId); + task.setProject(project); + } + if(task.getLastProject()!=null){ + long projectId = task.getLastProject().getId(); + Project project = projectRepository.getReferenceById(projectId); + task.setLastProject(project); + } task = taskRepository.saveAndFlush(task); log.info("persisted Task: " + task.outProject()); return task; @@ -119,12 +129,22 @@ public Task updatedViaProject( @Valid Task task) { @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) public Task updatedViaProjectRoot( @Valid Task task) { log.info("updatedViaProject"); + if(task.getProject() != null){ + long projectId = task.getProject().getId(); + Project project = projectRepository.getReferenceById(projectId); + task.setProject(project); + } + if(task.getLastProject()!=null){ + long projectId = task.getLastProject().getId(); + Project project = projectRepository.getReferenceById(projectId); + task.setLastProject(project); + } task = taskRepository.saveAndFlush(task); log.info("persisted Task: " + task.outProject()); return task; } - @Override + @Override @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) public Task addToInbox( @Valid Task task) { log.info("addToInbox"); @@ -174,70 +194,7 @@ public Task addToRootProject( @Valid Task task) { return task; } - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) - public Task moveTaskToRootProject( @Valid Task task) { - task.moveTaskToRootProject(); - long maxOrderIdProject = this.getMaxOrderIdProjectRoot(task.getContext()); - task.setOrderIdProject(++maxOrderIdProject); - return taskRepository.saveAndFlush(task); - } - - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) - public Task moveTaskToAnotherProject( @Valid Task task,@Valid Project project) { - boolean okContext = task.hasSameContextAs(project); - if(okContext) { - task.moveTaskToAnotherProject(project); - long maxOrderIdProject = this.getMaxOrderIdProject( - task.getProject(), - task.getContext() - ); - task.setOrderIdProject(++maxOrderIdProject); - taskRepository.saveAndFlush(task); - } - return task; - } - - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) - public void moveAllCompletedToTrash( Context context) { - long maxOrderIdTaskState = this.getMaxOrderIdTaskState( - TaskState.TRASH, - context - ); - long newOrderIdTaskState = maxOrderIdTaskState; - List taskListCompleted = taskRepository.findByTaskStateAndContextOrderByOrderIdTaskStateAsc( - TaskState.COMPLETED, - context - ); - for (Task task : taskListCompleted) { - newOrderIdTaskState++; - task.setOrderIdTaskState(newOrderIdTaskState); - task.moveToTrash(); - } - taskRepository.saveAll(taskListCompleted); - } - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) - public void emptyTrash( Context context) { - List taskList = taskRepository.findByTaskStateAndContext( - TaskState.TRASH, - context - ); - List taskListChanged = new ArrayList<>(taskList.size()); - for(Task task: taskList){ - task.emptyTrash(); - taskListChanged.add(task); - } - taskRepository.saveAll(taskListChanged); - List taskListDeleted = taskRepository.findByTaskStateAndContext( - TaskState.DELETED, - context - ); - taskRepository.deleteAll(taskListDeleted); - } @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = true) @@ -457,116 +414,29 @@ public void moveTasksDownByProject(Task sourceTask, Task destinationTask) { log.info("-------------------------------------------------------------------------------"); } - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) - public Task moveTaskToInbox(Task task) { - long newOrderIdTaskState = this.getMaxOrderIdTaskState( - TaskState.INBOX, - task.getContext() - ); - task.moveToInbox(); - task.setOrderIdTaskState(++newOrderIdTaskState); - task = taskRepository.saveAndFlush(task); - log.info("moved to inbox: " + task.outTaskstate()); - return task; - } + @Override + public Task saveAndFlush(Task task) { + return taskRepository.saveAndFlush(task); + } - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) - public Task moveTaskToToday(Task task) { - Date now = new Date(); - long newOrderIdTaskState = this.getMaxOrderIdTaskState( - TaskState.TODAY, - task.getContext() - ); - task.moveToToday(); - task.setOrderIdTaskState(++newOrderIdTaskState); - task = taskRepository.saveAndFlush(task); - log.info("moved to today: " + task.outTaskstate()); - return task; - } + @Override + public void deleteAll(List taskListDeleted) { + taskRepository.deleteAll(taskListDeleted); + } - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) - public Task moveTaskToNext(Task task) { - long newOrderIdTaskState = this.getMaxOrderIdTaskState( - TaskState.NEXT, - task.getContext() - ); - task.moveToNext(); - task.setOrderIdTaskState(++newOrderIdTaskState); - task = taskRepository.saveAndFlush(task); - log.info("moved to next: " + task.outTaskstate()); - return task; - } + @Override + public void saveAll(List taskListChanged) { + taskRepository.saveAll(taskListChanged); + } - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) - public Task moveTaskToWaiting(Task task) { - long newOrderIdTaskState = this.getMaxOrderIdTaskState( - TaskState.WAITING, - task.getContext() - ); - task.moveToWaiting(); - task.setOrderIdTaskState(++newOrderIdTaskState); - task = taskRepository.saveAndFlush(task); - log.info("moved to next: " + task.outTaskstate()); - return task; - } + @Override + public List findByTaskStateAndContextOrderByOrderIdTaskStateAsc(TaskState completed, Context context) { + return taskRepository.findByTaskStateAndContextOrderByOrderIdTaskStateAsc(completed, context); + } - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) - public Task moveTaskToSomeday(Task task) { - long newOrderIdTaskState = this.getMaxOrderIdTaskState( - TaskState.SOMEDAY, - task.getContext() - ); - task.moveToSomeday(); - task.setOrderIdTaskState(++newOrderIdTaskState); - task = taskRepository.saveAndFlush(task); - log.info("moved to someday: " + task.outTaskstate()); - return task; - } - - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) - public Task moveTaskToFocus(Task task) { - long newOrderIdTaskState = this.getMaxOrderIdTaskState( - TaskState.FOCUS, - task.getContext() - ); - task.moveToFocus(); - task.setOrderIdTaskState(++newOrderIdTaskState); - task = taskRepository.saveAndFlush(task); - log.info("moved to focus: " + task.outTaskstate()); - return task; - } + @Override + public List findByTaskStateAndContext(TaskState trash, Context context) { + return taskRepository.findByTaskStateAndContext(trash,context); + } - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) - public Task moveTaskToCompleted(Task task) { - long newOrderIdTaskState = this.getMaxOrderIdTaskState( - TaskState.COMPLETED, - task.getContext() - ); - task.moveToCompletedTasks(); - task.setOrderIdTaskState(++newOrderIdTaskState); - task = taskRepository.saveAndFlush(task); - log.info("moved to completed: " + task.outTaskstate()); - return task; - } - - @Override - @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) - public Task moveTaskToTrash(Task task) { - long newOrderIdTaskState = this.getMaxOrderIdTaskState( - TaskState.TRASH, - task.getContext() - ); - task.moveToTrash(); - task.setOrderIdTaskState(++newOrderIdTaskState); - task = taskRepository.saveAndFlush(task); - log.info("moved to trash: " + task.outTaskstate()); - return task; - } } diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/TaskStateTaskController.java b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/TaskStateTaskController.java index aebb322a..00ec3db9 100644 --- a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/TaskStateTaskController.java +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/TaskStateTaskController.java @@ -15,6 +15,7 @@ import org.woehlke.java.simpleworklist.domain.db.data.task.TaskEnergy; import org.woehlke.java.simpleworklist.domain.db.data.task.TaskService; import org.woehlke.java.simpleworklist.domain.db.data.task.TaskTime; +import org.woehlke.java.simpleworklist.domain.meso.move.MoveTaskService; import org.woehlke.java.simpleworklist.domain.meso.taskworkflow.MoveTaskToTaskInTaskstateService; import org.woehlke.java.simpleworklist.domain.meso.taskworkflow.TaskState; import org.woehlke.java.simpleworklist.domain.meso.taskworkflow.TransformTaskIntoProjektService; @@ -39,15 +40,17 @@ public class TaskStateTaskController extends AbstractController { private final MoveTaskToTaskInTaskstateService moveTaskToTaskInTaskstateService; + private final MoveTaskService moveTaskService; private final TaskService taskService; private final TransformTaskIntoProjektService transformTaskIntoProjektService; @Autowired public TaskStateTaskController( - MoveTaskToTaskInTaskstateService moveTaskToTaskInTaskstateService, TaskService taskService, - TransformTaskIntoProjektService transformTaskIntoProjektService) { + MoveTaskToTaskInTaskstateService moveTaskToTaskInTaskstateService, MoveTaskService moveTaskService, TaskService taskService, + TransformTaskIntoProjektService transformTaskIntoProjektService) { this.moveTaskToTaskInTaskstateService = moveTaskToTaskInTaskstateService; - this.taskService = taskService; + this.moveTaskService = moveTaskService; + this.taskService = taskService; this.transformTaskIntoProjektService = transformTaskIntoProjektService; } @@ -211,7 +214,7 @@ public final String moveTaskToAnotherProject( @NotNull @ModelAttribute("userSession") UserSessionBean userSession, Model model ) { - task = taskService.moveTaskToAnotherProject(task,project); + task = moveTaskService.moveTaskToAnotherProject(task,project); userSession.setLastProjectId(project.getId()); model.addAttribute("userSession",userSession); model.addAttribute("dataPage", true); @@ -224,7 +227,7 @@ public final String moveTaskToRootProject( @NotNull @ModelAttribute("userSession") UserSessionBean userSession, Model model ) { - task = taskService.moveTaskToRootProject(task); + task = moveTaskService.moveTaskToRootProject(task); userSession.setLastProjectId(0L); model.addAttribute("userSession",userSession); model.addAttribute("dataPage", true); @@ -238,7 +241,7 @@ public final String moveTaskToInbox( Model model ) { log.info("dragged and dropped "+task.getId()+" to inbox"); - task = taskService.moveTaskToInbox(task); + task = moveTaskService.moveTaskToInbox(task); model.addAttribute("userSession", userSession); model.addAttribute("dataPage", true); return task.getTaskState().getUrl(); @@ -251,7 +254,7 @@ public final String moveTaskToToday( Model model ) { log.info("dragged and dropped "+task.getId()+" to today"); - task = taskService.moveTaskToToday(task); + task = moveTaskService.moveTaskToToday(task); model.addAttribute("userSession", userSession); model.addAttribute("dataPage", true); return task.getTaskState().getUrl(); @@ -264,7 +267,7 @@ public final String moveTaskToNext( Model model ) { log.info("dragged and dropped "+task.getId()+" to next"); - task = taskService.moveTaskToNext(task); + task = moveTaskService.moveTaskToNext(task); model.addAttribute("userSession", userSession); model.addAttribute("dataPage", true); return task.getTaskState().getUrl(); @@ -277,7 +280,7 @@ public final String moveTaskToWaiting( Model model ) { log.info("dragged and dropped "+task.getId()+" to waiting"); - task = taskService.moveTaskToWaiting(task); + task = moveTaskService.moveTaskToWaiting(task); model.addAttribute("userSession", userSession); model.addAttribute("dataPage", true); return task.getTaskState().getUrl(); @@ -290,7 +293,7 @@ public final String moveTaskToSomeday( Model model ) { log.info("dragged and dropped "+task.getId()+" to someday"); - task = taskService.moveTaskToSomeday(task); + task = moveTaskService.moveTaskToSomeday(task); model.addAttribute("userSession", userSession); model.addAttribute("dataPage", true); return task.getTaskState().getUrl(); @@ -303,7 +306,7 @@ public final String moveTaskToFocus( Model model ) { log.info("dragged and dropped "+task.getId()+" to focus"); - task = taskService.moveTaskToFocus(task); + task = moveTaskService.moveTaskToFocus(task); model.addAttribute("userSession", userSession); model.addAttribute("dataPage", true); return task.getTaskState().getUrl(); @@ -316,7 +319,7 @@ public final String moveTaskToCompleted( Model model ) { log.info("dragged and dropped "+task.getId()+" to completed"); - task = taskService.moveTaskToCompleted(task); + task = moveTaskService.moveTaskToCompleted(task); model.addAttribute("userSession", userSession); model.addAttribute("dataPage", true); return task.getTaskState().getUrl(); @@ -329,7 +332,7 @@ public final String moveTaskToTrash( Model model ) { log.info("dragged and dropped "+task.getId()+" to trash"); - task = taskService.moveTaskToTrash(task); + task = moveTaskService.moveTaskToTrash(task); model.addAttribute("userSession", userSession); model.addAttribute("dataPage", true); return task.getTaskState().getUrl(); @@ -341,7 +344,7 @@ public final String moveAllCompletedToTrash( Model model ) { Context context = super.getContext(userSession); - taskService.moveAllCompletedToTrash(context); + moveTaskService.moveAllCompletedToTrash(context); model.addAttribute("userSession", userSession); model.addAttribute("dataPage", true); return "redirect:/taskstate/trash"; @@ -353,7 +356,7 @@ public final String emptyTrash( Model model ) { Context context = super.getContext(userSession); - taskService.emptyTrash(context); + moveTaskService.emptyTrash(context); model.addAttribute("userSession", userSession); model.addAttribute("dataPage", true); return "redirect:/taskstate/trash"; diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/move/MoveTaskService.java b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/move/MoveTaskService.java new file mode 100644 index 00000000..8b710e8b --- /dev/null +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/move/MoveTaskService.java @@ -0,0 +1,33 @@ +package org.woehlke.java.simpleworklist.domain.meso.move; + +import org.woehlke.java.simpleworklist.domain.db.data.Context; +import org.woehlke.java.simpleworklist.domain.db.data.Project; +import org.woehlke.java.simpleworklist.domain.db.data.Task; + +public interface MoveTaskService { + + Task moveTaskToAnotherProject(Task task, Project project); + + Task moveTaskToRootProject(Task task); + + Task moveTaskToInbox(Task task); + + Task moveTaskToToday(Task task); + + Task moveTaskToNext(Task task); + + Task moveTaskToWaiting(Task task); + + Task moveTaskToSomeday(Task task); + + Task moveTaskToFocus(Task task); + + Task moveTaskToCompleted(Task task); + + Task moveTaskToTrash(Task task); + + void moveAllCompletedToTrash(Context context); + + void emptyTrash(Context context); + +} diff --git a/src/main/java/org/woehlke/java/simpleworklist/domain/meso/move/MoveTaskServiceImpl.java b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/move/MoveTaskServiceImpl.java new file mode 100644 index 00000000..cc658bc1 --- /dev/null +++ b/src/main/java/org/woehlke/java/simpleworklist/domain/meso/move/MoveTaskServiceImpl.java @@ -0,0 +1,209 @@ +package org.woehlke.java.simpleworklist.domain.meso.move; + + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.woehlke.java.simpleworklist.domain.db.data.Context; +import org.woehlke.java.simpleworklist.domain.db.data.Project; +import org.woehlke.java.simpleworklist.domain.db.data.Task; +import org.woehlke.java.simpleworklist.domain.db.data.task.TaskService; +import org.woehlke.java.simpleworklist.domain.meso.taskworkflow.TaskState; + +import javax.validation.Valid; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Slf4j +@Service +public class MoveTaskServiceImpl implements MoveTaskService { + + private final TaskService taskService; + + @Autowired + public MoveTaskServiceImpl(TaskService taskService) { + this.taskService = taskService; + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) + public Task moveTaskToRootProject(@Valid Task task) { + task.moveTaskToRootProject(); + long maxOrderIdProject = taskService.getMaxOrderIdProjectRoot(task.getContext()); + task.setOrderIdProject(++maxOrderIdProject); + return taskService.saveAndFlush(task); + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) + public Task moveTaskToAnotherProject( @Valid Task task,@Valid Project project) { + boolean okContext = task.hasSameContextAs(project); + if(okContext) { + task.moveTaskToAnotherProject(project); + long maxOrderIdProject = taskService.getMaxOrderIdProject( + task.getProject(), + task.getContext() + ); + task.setOrderIdProject(++maxOrderIdProject); + taskService.saveAndFlush(task); + } + return task; + } + + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) + public Task moveTaskToInbox(Task task) { + long newOrderIdTaskState = taskService.getMaxOrderIdTaskState( + TaskState.INBOX, + task.getContext() + ); + task.moveToInbox(); + task.setOrderIdTaskState(++newOrderIdTaskState); + task = taskService.saveAndFlush(task); + log.info("moved to inbox: " + task.outTaskstate()); + return task; + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) + public Task moveTaskToToday(Task task) { + Date now = new Date(); + long newOrderIdTaskState = taskService.getMaxOrderIdTaskState( + TaskState.TODAY, + task.getContext() + ); + task.moveToToday(); + task.setOrderIdTaskState(++newOrderIdTaskState); + task = taskService.saveAndFlush(task); + log.info("moved to today: " + task.outTaskstate()); + return task; + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) + public Task moveTaskToNext(Task task) { + long newOrderIdTaskState = taskService.getMaxOrderIdTaskState( + TaskState.NEXT, + task.getContext() + ); + task.moveToNext(); + task.setOrderIdTaskState(++newOrderIdTaskState); + task = taskService.saveAndFlush(task); + log.info("moved to next: " + task.outTaskstate()); + return task; + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) + public Task moveTaskToWaiting(Task task) { + long newOrderIdTaskState = taskService.getMaxOrderIdTaskState( + TaskState.WAITING, + task.getContext() + ); + task.moveToWaiting(); + task.setOrderIdTaskState(++newOrderIdTaskState); + task = taskService.saveAndFlush(task); + log.info("moved to next: " + task.outTaskstate()); + return task; + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) + public Task moveTaskToSomeday(Task task) { + long newOrderIdTaskState = taskService.getMaxOrderIdTaskState( + TaskState.SOMEDAY, + task.getContext() + ); + task.moveToSomeday(); + task.setOrderIdTaskState(++newOrderIdTaskState); + task = taskService.saveAndFlush(task); + log.info("moved to someday: " + task.outTaskstate()); + return task; + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) + public Task moveTaskToFocus(Task task) { + long newOrderIdTaskState = taskService.getMaxOrderIdTaskState( + TaskState.FOCUS, + task.getContext() + ); + task.moveToFocus(); + task.setOrderIdTaskState(++newOrderIdTaskState); + task = taskService.saveAndFlush(task); + log.info("moved to focus: " + task.outTaskstate()); + return task; + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) + public Task moveTaskToCompleted(Task task) { + long newOrderIdTaskState = taskService.getMaxOrderIdTaskState( + TaskState.COMPLETED, + task.getContext() + ); + task.moveToCompletedTasks(); + task.setOrderIdTaskState(++newOrderIdTaskState); + task = taskService.saveAndFlush(task); + log.info("moved to completed: " + task.outTaskstate()); + return task; + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) + public Task moveTaskToTrash(Task task) { + long newOrderIdTaskState = taskService.getMaxOrderIdTaskState( + TaskState.TRASH, + task.getContext() + ); + task.moveToTrash(); + task.setOrderIdTaskState(++newOrderIdTaskState); + task = taskService.saveAndFlush(task); + log.info("moved to trash: " + task.outTaskstate()); + return task; + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) + public void moveAllCompletedToTrash( Context context) { + long maxOrderIdTaskState = taskService.getMaxOrderIdTaskState( + TaskState.TRASH, + context + ); + long newOrderIdTaskState = maxOrderIdTaskState; + List taskListCompleted = taskService.findByTaskStateAndContextOrderByOrderIdTaskStateAsc( + TaskState.COMPLETED, + context + ); + for (Task task : taskListCompleted) { + newOrderIdTaskState++; + task.setOrderIdTaskState(newOrderIdTaskState); + task.moveToTrash(); + } + taskService.saveAll(taskListCompleted); + } + + @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false) + public void emptyTrash( Context context) { + List taskList = taskService.findByTaskStateAndContext( + TaskState.TRASH, + context + ); + List taskListChanged = new ArrayList<>(taskList.size()); + for(Task task: taskList){ + task.emptyTrash(); + taskListChanged.add(task); + } + taskService.saveAll(taskListChanged); + List taskListDeleted = taskService.findByTaskStateAndContext( + TaskState.DELETED, + context + ); + taskService.deleteAll(taskListDeleted); + } +}