33import lombok .extern .slf4j .Slf4j ;
44import org .springframework .beans .factory .annotation .Autowired ;
55import org .springframework .stereotype .Service ;
6+ import org .springframework .transaction .annotation .Propagation ;
7+ import org .springframework .transaction .annotation .Transactional ;
68import org .springframework .ui .Model ;
79import org .springframework .validation .BindingResult ;
810import org .woehlke .simpleworklist .application .breadcrumb .Breadcrumb ;
911import org .woehlke .simpleworklist .application .breadcrumb .BreadcrumbService ;
1012import org .woehlke .simpleworklist .context .Context ;
13+ import org .woehlke .simpleworklist .task .Task ;
14+ import org .woehlke .simpleworklist .task .TaskService ;
1115import org .woehlke .simpleworklist .user .session .UserSessionBean ;
1216import 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}
0 commit comments