r2689 - in trunk/src: main/java/org/chorem/jtimer/data main/java/org/chorem/jtimer/entities main/java/org/chorem/jtimer/ui/treetable/dnd main/resources/org/chorem/jtimer/ui/treetable/dnd/resources test/java/org/chorem/jtimer/data
Author: echatellier Date: 2009-11-06 14:27:59 +0100 (Fri, 06 Nov 2009) New Revision: 2689 Modified: trunk/src/main/java/org/chorem/jtimer/data/CommonVetoable.java trunk/src/main/java/org/chorem/jtimer/entities/TimerTaskHelper.java trunk/src/main/java/org/chorem/jtimer/ui/treetable/dnd/TimerTaskTranferable.java trunk/src/main/java/org/chorem/jtimer/ui/treetable/dnd/TimerTaskTransferHandler.java trunk/src/main/resources/org/chorem/jtimer/ui/treetable/dnd/resources/TimerTaskTransferHandler.properties trunk/src/main/resources/org/chorem/jtimer/ui/treetable/dnd/resources/TimerTaskTransferHandler_fr.properties trunk/src/test/java/org/chorem/jtimer/data/CommonVetoableTest.java Log: Finish multiple task move (UI part) Modified: trunk/src/main/java/org/chorem/jtimer/data/CommonVetoable.java =================================================================== --- trunk/src/main/java/org/chorem/jtimer/data/CommonVetoable.java 2009-11-04 10:23:46 UTC (rev 2688) +++ trunk/src/main/java/org/chorem/jtimer/data/CommonVetoable.java 2009-11-06 13:27:59 UTC (rev 2689) @@ -26,6 +26,7 @@ import org.apache.commons.logging.LogFactory; import org.chorem.jtimer.entities.TimerProject; import org.chorem.jtimer.entities.TimerTask; +import org.chorem.jtimer.entities.TimerTaskHelper; /** * Common jtimer vetoable politics. @@ -183,6 +184,16 @@ @Override public void checkMoveTask(TimerTask destination, Collection<TimerTask> tasksToMove) { + // check if destination is one task to move + // no sens + if (TimerTaskHelper.collectionContainsTask(tasksToMove, destination)) { + if (log.isDebugEnabled()) { + log.debug("Move task into himself, impossible"); + } + throw new DataViolationException("Can't move task into himself", + MOVE_INVALID_TYPES_VIOLATION); + } + for (TimerTask taskToMove : tasksToMove) { // can't move projects Modified: trunk/src/main/java/org/chorem/jtimer/entities/TimerTaskHelper.java =================================================================== --- trunk/src/main/java/org/chorem/jtimer/entities/TimerTaskHelper.java 2009-11-04 10:23:46 UTC (rev 2688) +++ trunk/src/main/java/org/chorem/jtimer/entities/TimerTaskHelper.java 2009-11-06 13:27:59 UTC (rev 2689) @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Calendar; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Date; @@ -291,4 +292,28 @@ } } } + + /** + * Check if task is present in tasks collection and recursive subtasks. + * + * @param tasks task collection to search into + * @param task task to search + * @return {@code true} if task has been found + */ + public static boolean collectionContainsTask(Collection<TimerTask> tasks, TimerTask task) { + + boolean present = false; + + for (TimerTask oneTask : tasks) { + if (task == oneTask) { + present = true; + } + + if (collectionContainsTask(oneTask.getSubTasks(), task)) { + present = true; + } + } + + return present; + } } Modified: trunk/src/main/java/org/chorem/jtimer/ui/treetable/dnd/TimerTaskTranferable.java =================================================================== --- trunk/src/main/java/org/chorem/jtimer/ui/treetable/dnd/TimerTaskTranferable.java 2009-11-04 10:23:46 UTC (rev 2688) +++ trunk/src/main/java/org/chorem/jtimer/ui/treetable/dnd/TimerTaskTranferable.java 2009-11-06 13:27:59 UTC (rev 2689) @@ -22,6 +22,7 @@ import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; +import java.util.Collection; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -47,18 +48,18 @@ /** Data instance */ protected static DataFlavor myData; - /** Task to transfer */ - protected TimerTask taskToTransfer; + /** Tasks to transfer. Chosen implementation must be serializable. */ + protected Collection<TimerTask> tasksToTransfer; /** * Constructor. * - * @param task task to transfer + * @param tasks task to transfer */ - public TimerTaskTranferable(TimerTask task) { + public TimerTaskTranferable(Collection<TimerTask> tasks) { // save task - this.taskToTransfer = task; + this.tasksToTransfer = tasks; // build new DataFlavor try { @@ -77,19 +78,19 @@ public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { - TimerTask task = null; + Collection<TimerTask> tasks = null; if (flavor == null) { throw new IOException("flavor is null"); } if (flavor.equals(myData)) { - task = taskToTransfer; + tasks = tasksToTransfer; } else { throw new UnsupportedFlavorException(flavor); } - return task; + return tasks; } /* Modified: trunk/src/main/java/org/chorem/jtimer/ui/treetable/dnd/TimerTaskTransferHandler.java =================================================================== --- trunk/src/main/java/org/chorem/jtimer/ui/treetable/dnd/TimerTaskTransferHandler.java 2009-11-04 10:23:46 UTC (rev 2688) +++ trunk/src/main/java/org/chorem/jtimer/ui/treetable/dnd/TimerTaskTransferHandler.java 2009-11-06 13:27:59 UTC (rev 2689) @@ -22,7 +22,8 @@ import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; -import java.util.Collections; +import java.util.Collection; +import java.util.LinkedList; import java.util.List; import javax.swing.JComponent; @@ -35,6 +36,7 @@ import org.chorem.jtimer.data.DataViolationException; import org.chorem.jtimer.data.TimerDataManager; import org.chorem.jtimer.entities.TimerTask; +import org.chorem.jtimer.entities.TimerTaskHelper; import org.chorem.jtimer.ui.treetable.ProjectsAndTasksTable; import org.jdesktop.application.Application; import org.jdesktop.application.ApplicationContext; @@ -42,7 +44,7 @@ import org.jdesktop.application.ResourceMap; /** - * Transfert handler used to transfert task in table. + * Transfer handler used to transfer tasks in table. * * @author chatellier * @version $Revision$ @@ -106,12 +108,13 @@ TimerTask destinationTask = selectedTasks.get(0); Object myObject = transferable .getTransferData(TimerTaskTranferable.myData); - TimerTask movedTask = (TimerTask) myObject; + Collection<TimerTask> movedTasks = (Collection<TimerTask>) myObject; // can't move task to itself - if (movedTask != destinationTask) { + boolean validMove = !TimerTaskHelper.collectionContainsTask(movedTasks, destinationTask); + if (validMove) { String title = resourceMap.getString("move.confirmation.title"); - String message = resourceMap.getString("move.confirmation.message", movedTask.getName(), destinationTask.getName()); + String message = resourceMap.getString("move.confirmation.message", movedTasks.size(), destinationTask.getName()); int answer = JOptionPane.showConfirmDialog(component, message, title, JOptionPane.YES_NO_OPTION, @@ -151,8 +154,8 @@ // only task can be moved ! List<TimerTask> selectedTasks = treeTable.getSelectedTasks(); if (selectedTasks != null && !selectedTasks.isEmpty()) { - TimerTask task = selectedTasks.get(0); - transferable = new TimerTaskTranferable(task); + Collection<TimerTask> tasks = new LinkedList<TimerTask>(selectedTasks); + transferable = new TimerTaskTranferable(tasks); } return transferable; @@ -175,10 +178,10 @@ TimerTask destinationTask = selectedTasks.get(0); Object myObject = transferable .getTransferData(TimerTaskTranferable.myData); - TimerTask movedTask = (TimerTask) myObject; + Collection<TimerTask> movedTasks = (Collection<TimerTask>) myObject; try { - dataManager.moveTask(destinationTask, Collections.singleton(movedTask)); + dataManager.moveTask(destinationTask, movedTasks); } catch(DataViolationException e) { String title = resourceMap.getString("action.invalidActionTitle"); Modified: trunk/src/main/resources/org/chorem/jtimer/ui/treetable/dnd/resources/TimerTaskTransferHandler.properties =================================================================== --- trunk/src/main/resources/org/chorem/jtimer/ui/treetable/dnd/resources/TimerTaskTransferHandler.properties 2009-11-04 10:23:46 UTC (rev 2688) +++ trunk/src/main/resources/org/chorem/jtimer/ui/treetable/dnd/resources/TimerTaskTransferHandler.properties 2009-11-06 13:27:59 UTC (rev 2689) @@ -1,6 +1,6 @@ #�Move UI i18n move.confirmation.title=Move task -move.confirmation.message=Do you want to move task '%s'\nto '%s' ? +move.confirmation.message=Do you want to move %d task(s)\nto '%s' ? #�error action.invalidActionTitle=Can't do action Modified: trunk/src/main/resources/org/chorem/jtimer/ui/treetable/dnd/resources/TimerTaskTransferHandler_fr.properties =================================================================== --- trunk/src/main/resources/org/chorem/jtimer/ui/treetable/dnd/resources/TimerTaskTransferHandler_fr.properties 2009-11-04 10:23:46 UTC (rev 2688) +++ trunk/src/main/resources/org/chorem/jtimer/ui/treetable/dnd/resources/TimerTaskTransferHandler_fr.properties 2009-11-06 13:27:59 UTC (rev 2689) @@ -1,6 +1,6 @@ #�Move UI i18n move.confirmation.title=D\u00E9placement de la t\u00E2che -move.confirmation.message=\u00CAtes vous s\u00FBr de vouloir d\u00E9placer la t\u00E2che '%s'\nvers '%s' ? +move.confirmation.message=\u00CAtes vous s\u00FBr de vouloir d\u00E9placer %d t\u00E2che(s)\nvers '%s' ? #�error action.invalidActionTitle=Impossible d'effectuer cette action Modified: trunk/src/test/java/org/chorem/jtimer/data/CommonVetoableTest.java =================================================================== --- trunk/src/test/java/org/chorem/jtimer/data/CommonVetoableTest.java 2009-11-04 10:23:46 UTC (rev 2688) +++ trunk/src/test/java/org/chorem/jtimer/data/CommonVetoableTest.java 2009-11-06 13:27:59 UTC (rev 2689) @@ -18,8 +18,10 @@ package org.chorem.jtimer.data; +import java.util.Collection; import java.util.Collections; import java.util.Date; +import java.util.HashSet; import java.util.List; import junit.framework.Assert; @@ -135,6 +137,41 @@ } /** + * Test multiples tasks move move into one task to move. + */ + @Test(expectedExceptions = DataViolationException.class) + public void testMoveMultiplesTasks() { + + // first load all + // and make a move operation + TimerCore core = new TimerCore(); + TimerDataManager dataManager = core.getData(); + + //core.init(); + core.load(); + List<TimerProject> projectsBefore = dataManager.getProjectsList(); + TimerTask task1 = findTask(projectsBefore, "jTimer/Add workspace support"); + TimerTask task2 = findTask(projectsBefore, "jTimer/Interact with chorem services"); + TimerTask task3 = findTask(projectsBefore, "jTimer/Refactoring"); + TimerTask task4 = findTask(projectsBefore, "jTimer/Unit tests"); + + Assert.assertNotNull(task1); + Assert.assertNotNull(task2); + Assert.assertNotNull(task3); + Assert.assertNotNull(task4); + + Collection<TimerTask> tasksToMove = new HashSet<TimerTask>(); + tasksToMove.add(task1); + tasksToMove.add(task2); + tasksToMove.add(task3); + tasksToMove.add(task4); + + // move task 3 in task1 : forbidden + dataManager.moveTask(task1, tasksToMove); + + } + + /** * Merge two projects and tasks. */ @Test(expectedExceptions = DataViolationException.class)
participants (1)
-
echatellier@users.chorem.org