/* GanttProject is an opensource project management tool. License: GPL3 Copyright (C) 2011 Dmitry Barashev This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package net.sourceforge.ganttproject.action.task; import com.google.common.collect.Lists; import net.sourceforge.ganttproject.GanttTree2; import net.sourceforge.ganttproject.TreeUtil; import net.sourceforge.ganttproject.action.GPAction; import net.sourceforge.ganttproject.gui.UIFacade; import net.sourceforge.ganttproject.gui.UIFacade.Choice; import net.sourceforge.ganttproject.gui.UIUtil; import net.sourceforge.ganttproject.task.Task; import net.sourceforge.ganttproject.task.TaskManager; import net.sourceforge.ganttproject.task.TaskNode; import net.sourceforge.ganttproject.task.TaskSelectionManager; import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.TreeMap; public class TaskDeleteAction extends TaskActionBase { public TaskDeleteAction(TaskManager taskManager, TaskSelectionManager selectionManager, UIFacade uiFacade, GanttTree2 tree) { super("task.delete", taskManager, selectionManager, uiFacade, tree); } private TaskDeleteAction(TaskManager taskManager, TaskSelectionManager selectionManager, UIFacade uiFacade, GanttTree2 tree, IconSize size) { super("task.delete", taskManager, selectionManager, uiFacade, tree, size); } @Override public GPAction withIcon(IconSize size) { return new TaskDeleteAction(getTaskManager(), getSelectionManager(), getUIFacade(), getTree(), size); } @Override protected boolean isEnabled(List<Task> selection) { return !selection.isEmpty(); } @Override protected boolean askUserPermission(List<Task> selection) { Choice choice = getUIFacade().showConfirmationDialog(getI18n("msg19"), getI18n("question")); return choice == Choice.YES; } @Override protected void run(List<Task> selection) throws Exception { final DefaultMutableTreeTableNode[] cdmtn = getTree().getSelectedNodes(); Map<Integer, List<DefaultMutableTreeTableNode>> levelMap = new TreeMap<Integer, List<DefaultMutableTreeTableNode>>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { // descending order return o2.compareTo(o1); } }); for (DefaultMutableTreeTableNode node : cdmtn) { int level = TreeUtil.getLevel(node); List<DefaultMutableTreeTableNode> levelList = levelMap.get(level); if (levelList == null) { levelList = Lists.newArrayList(); levelMap.put(level, levelList); } levelList.add(node); } getTree().stopEditing(); for (List<DefaultMutableTreeTableNode> levelList : levelMap.values()) { for (DefaultMutableTreeTableNode node : levelList) { if (node != null && node instanceof TaskNode) { Task task = (Task) node.getUserObject(); getTaskManager().deleteTask(task); } } } forwardScheduling(); } @Override public TaskDeleteAction asToolbarAction() { TaskDeleteAction result = new TaskDeleteAction(getTaskManager(), getSelectionManager(), getUIFacade(), getTree()); result.setFontAwesomeLabel(UIUtil.getFontawesomeLabel(result)); return result; } }