/*
Copyright 2003-2012 Dmitry Barashev, GanttProject Team
This file is part of GanttProject, an opensource project management tool.
GanttProject 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.
GanttProject 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 GanttProject. If not, see <http://www.gnu.org/licenses/>.
*/
package net.sourceforge.ganttproject.task.dependency;
import net.sourceforge.ganttproject.task.Task;
public class SearchKey implements Comparable<SearchKey> {
static final int DEPENDANT = 1;
static final int DEPENDEE = 2;
final int myFirstTaskID;
final int myType;
final int mySecondTaskID;
public SearchKey(int type, TaskDependencyImpl taskDependency) {
myType = type;
Task firstTask, secondTask;
switch (type) {
case DEPENDANT: {
firstTask = taskDependency.getDependant();
secondTask = taskDependency.getDependee();
break;
}
case DEPENDEE: {
firstTask = taskDependency.getDependee();
secondTask = taskDependency.getDependant();
break;
}
default: {
throw new RuntimeException("Invalid type=" + type);
}
}
myFirstTaskID = firstTask.getTaskID();
mySecondTaskID = secondTask.getTaskID();
}
protected SearchKey(int type, int firstTaskID, int secondTaskID) {
myType = type;
myFirstTaskID = firstTaskID;
mySecondTaskID = secondTaskID;
}
@Override
public int compareTo(SearchKey rvalue) {
int result = myFirstTaskID - rvalue.myFirstTaskID;
if (result == 0) {
result = myType - rvalue.myType;
}
if (result == 0) {
result = mySecondTaskID - rvalue.mySecondTaskID;
}
return result;
}
@Override
public boolean equals(Object obj) {
SearchKey rvalue = (SearchKey) obj;
return myFirstTaskID == rvalue.myFirstTaskID && myType == rvalue.myType && mySecondTaskID == rvalue.mySecondTaskID;
}
@Override
public int hashCode() {
return 7 * myFirstTaskID + 11 * myType + 13 * mySecondTaskID;
}
}