/* * This file is part of LibrePlan * * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e * Desenvolvemento Tecnolóxico de Galicia * Copyright (C) 2010-2011 Igalia, S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.zkoss.ganttz.data; import static org.zkoss.ganttz.data.constraint.ConstraintOnComparableValues.biggerOrEqualThan; import org.zkoss.ganttz.data.GanttDiagramGraph.IAdapter; import org.zkoss.ganttz.data.constraint.Constraint; /** * This enum tells the type of a depepdency. Each instance contanins the correct * behaviour for that type of dependency . <br/> * @author Óscar González Fernández <ogonzalez@igalia.com> */ public enum DependencyType { VOID(Point.VOID, Point.VOID) { @Override public DependencyType inverse() { return VOID; } }, END_START(Point.END, Point.START) { @Override public DependencyType inverse() { return START_END; } }, START_END(Point.START, Point.END) { @Override public DependencyType inverse() { return END_START; } }, START_START(Point.START, Point.START) { @Override public DependencyType inverse() { return START_START; } }, END_END(Point.END, Point.END) { @Override public DependencyType inverse() { return END_END; } }; public enum Point { VOID, START, END; public Point getOther() { switch (this) { case START: return END; case END: return START; default: return VOID; } } } private final Point source; private final Point destination; private DependencyType(Point source, Point destination) { this.source = source; this.destination = destination; } protected <V> Constraint<GanttDate> biggerThanTaskEndDate( IAdapter<V, ?> adapter, V source) { return biggerOrEqualThan(adapter.getEndDateFor(source)); } protected <V> Constraint<GanttDate> biggerThanTaskStartDate( IAdapter<V, ?> adapter, V source) { return biggerOrEqualThan(adapter.getStartDate(source)); } public Point[] getSourceAndDestination() { return new Point[] { getSource(), getDestination() }; } public Point getSource() { return this.source; } public Point getDestination() { return this.destination; } public abstract DependencyType inverse(); }