/* GanttProject is an opensource project management tool. Copyright (C) 2004-2011 GanttProject Team 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.task.dependency; import biz.ganttproject.core.chart.scene.gantt.Connector; import net.sourceforge.ganttproject.task.Task; import net.sourceforge.ganttproject.task.TaskActivity; import biz.ganttproject.core.chart.scene.BarChartActivity; import java.awt.*; /** * @author bard */ public class TaskDependencyImpl implements TaskDependency { private TaskDependencyConstraint myConstraint; private int myDifference; private final Task myDependant; private final Task myDependee; private Hardness myHardness; private TaskDependencyCollectionImpl myCollection; private BarChartActivity<Task> myStartActivity; private TaskActivity myEndActivity; public TaskDependencyImpl(Task dependant, Task dependee, TaskDependencyCollectionImpl collection) { this(dependant, dependee, collection, null); } TaskDependencyImpl(Task dependant, Task dependee, TaskDependencyCollectionImpl collection, TaskDependencyConstraint constraint) { this(dependant, dependee, collection, constraint, Hardness.STRONG, 0); } public TaskDependencyImpl(Task dependant, Task dependee, TaskDependencyCollectionImpl collection, TaskDependencyConstraint constraint, Hardness hardness, int lag) { myDependant = dependant; myDependee = dependee; myCollection = collection; if (dependee == null || dependant == null) { throw new IllegalArgumentException("invalid participants of dependency: dependee=" + dependee + " dependant=" + dependant); } myDifference = lag; myHardness = hardness; myConstraint = constraint; if (constraint != null) { constraint.setTaskDependency(this); } } @Override public Task getDependant() { return myDependant; } @Override public Task getDependee() { return myDependee; } @Override public void setConstraint(TaskDependencyConstraint constraint) { myStartActivity = null; myEndActivity = null; myConstraint = constraint; constraint.setTaskDependency(this); myCollection.fireChanged(this); } @Override public TaskDependencyConstraint getConstraint() { return myConstraint; } @Override public ActivityBinding getActivityBinding() { return getConstraint().getActivityBinding(); } @Override public void delete() { myCollection.delete(this); } @Override public boolean equals(Object obj) { boolean result = obj instanceof TaskDependency; if (result) { TaskDependency rvalue = (TaskDependency) obj; result = myDependant.equals(rvalue.getDependant()) && myDependee.equals(rvalue.getDependee()); } return result; } @Override public int hashCode() { return 7 * myDependant.hashCode() + 9 * myDependee.hashCode(); } @Override public void setDifference(int difference) { myDifference = difference; myCollection.fireChanged(this); } @Override public int getDifference() { return myDifference; } @Override public Hardness getHardness() { return myHardness; } @Override public void setHardness(Hardness hardness) { myHardness = hardness; } @Override public String toString() { return myDependee + "->" + myDependant; } public BarChartActivity<Task> getStart() { // if (myStartActivity == null) { ActivityBinding activityBinding = getConstraint().getActivityBinding(); return activityBinding == null ? null : activityBinding.getDependeeActivity(); //myStartActivity = dependeeActivity.getOwner().isMilestone() ? new MilestoneTaskFakeActivity(dependeeActivity.getOwner()) : dependeeActivity; // } // return myStartActivity; } @Override public Dimension getStartVector() { TaskDependencyConstraint.Type type = getConstraint().getType(); if (type == TaskDependencyConstraint.Type.finishfinish || type == TaskDependencyConstraint.Type.finishstart) { return Connector.Vector.EAST; } return Connector.Vector.WEST; } public BarChartActivity<Task> getEnd() { // if (myEndActivity == null) { ActivityBinding activityBinding = getConstraint().getActivityBinding(); return activityBinding == null ? null : activityBinding.getDependantActivity(); //myEndActivity = dependantActivity.getOwner().isMilestone() ? new MilestoneTaskFakeActivity(dependantActivity.getOwner()) : dependantActivity; // } // return myEndActivity; } @Override public Dimension getEndVector() { TaskDependencyConstraint.Type type = getConstraint().getType(); if (type == TaskDependencyConstraint.Type.finishfinish || type == TaskDependencyConstraint.Type.startfinish) { return Connector.Vector.EAST; } return Connector.Vector.WEST; } public TaskDependency getImpl() { return this; } }