/* * Copyright (C) Jakub Neubauer, 2007 * * This file is part of TaskBlocks * * TaskBlocks 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. * * TaskBlocks 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, see <http://www.gnu.org/licenses/>. */ package taskblocks.modelimpl; import taskblocks.graph.TaskModel; import taskblocks.utils.ArrayUtils; public class TaskModelImpl implements TaskModel { public TaskImpl[] _tasks; public ManImpl[] _mans; UndoManager _undoManager; public TaskModelImpl(TaskImpl[] tasks, ManImpl[] mans) { _tasks = tasks; _mans = mans; _undoManager = new UndoManager(); } public UndoManager getUndoManager() { return _undoManager; } public long getTaskEffort(Object task) { return ((TaskImpl)task).getEffort(); } public long getTaskWorkedTime(Object task) { return ((TaskImpl)task).getWorkedTime(); } public Object getTaskMan(Object task) { return ((TaskImpl)task).getMan(); } public Object[] getTaskPredecessors(Object task) { return ((TaskImpl)task).getPredecessors(); } public long getTaskStartTime(Object task) { return ((TaskImpl)task).geStartTime(); } public Object[] getTasks() { return _tasks; } public String getTaskName(Object task) { return ((TaskImpl)task).getName(); } public String getTaskComment(Object task) { return ((TaskImpl)task).getComment(); } public static TaskModelImpl createEmptyModel() { return new TaskModelImpl(new TaskImpl[0], new ManImpl[0]); } public void updateTask(Object task, Object taskMan, long startTime, long effort, long workedTime, Object[] precedingTasks) { TaskImpl prev = null; TaskImpl t = (TaskImpl)task; if(t.getMan() != taskMan) { if(prev == null) { prev = t.clone(); } t.setMan((ManImpl)taskMan); } if(t.getStartTime() != startTime) { if(prev == null) { prev = t.clone(); } t.setStartTime(startTime); } if(t.getEffort() != effort) { if(prev == null) { prev = t.clone(); } t.setEffort(effort); } if(t.getWorkedTime() != workedTime) { if(prev == null) { prev = t.clone(); } t.setWorkedTime( workedTime ); } if(!ArrayUtils.arrayEqualsExceptNull(precedingTasks, t.getPredecessors())) { if(prev == null) { prev = t.clone(); } TaskImpl[] preds = new TaskImpl[precedingTasks.length]; for(int i = 0; i < precedingTasks.length; i++) { preds[i] = (TaskImpl)precedingTasks[i]; } t.setPredecessors((TaskImpl[])preds); } if(prev != null) { _undoManager.addAction(new UndoActionTaskModify(this, prev, t)); } } public String getManName(Object man) { return ((ManImpl)man).getName(); } public void addTask(TaskImpl t) { _tasks = (TaskImpl[])ArrayUtils.addToArray(_tasks, t); } public void addMan(ManImpl m) { _mans = (ManImpl[])ArrayUtils.addToArray(_mans, m); } public Object[] getMans() { return _mans; } public void removeMan(Object man) { _undoManager.addAction(new UndoActionRemoveMan(this, (ManImpl)man)); removeManImpl(man); } public void removeManImpl(Object man) { _mans = (ManImpl[])ArrayUtils.removeFromArray(_mans, man); } public void removeTask(Object task) { _undoManager.addAction(new UndoActionRemoveTask(this, (TaskImpl)task)); for(TaskImpl t: _tasks) { if(t == task) { continue; } if(ArrayUtils.arrayContains(t.getPredecessors(), task)) { TaskImpl prev = t.clone(); t.setPredecessors(ArrayUtils.removeFromArray(t.getPredecessors(), (TaskImpl)task)); _undoManager.addAction(new UndoActionTaskModify(this, prev, t)); } } removeTaskImpl(task); } public void removeTaskImpl(Object task) { _tasks = (TaskImpl[])ArrayUtils.removeFromArray(_tasks, task); for(TaskImpl t: _tasks) { TaskImpl[] newPred = ArrayUtils.removeFromArray(t.getPredecessors(), t); if(!ArrayUtils.arrayEqualsExceptNull(newPred, t.getPredecessors())) { TaskImpl prev = t.clone(); t.setPredecessors(newPred); } } } public double getManWorkload(Object man) { return ((ManImpl)man).getWorkload(); } public void beginUpdateGroup(String groupName) { _undoManager.beginGroup(groupName); } public void endUpdateGroup() { _undoManager.endGroup(); } }