/*
GanttProject is an opensource project management tool. License: GPL3
Copyright (C) 2010 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 biz.ganttproject.core.chart.grid;
import java.util.Date;
import java.util.List;
import biz.ganttproject.core.time.TimeUnit;
public class Offset {
private final Date myOffsetAnchor;
private final Date myOffsetEnd;
private int myOffsetPixels;
private final TimeUnit myOffsetUnit;
private final int myDayMask;
private final Date myOffsetStart;
private int myStartPixels;
public Offset(TimeUnit offsetUnit, Date offsetAnchor, Date offsetStart, Date offsetEnd, int startPixels, int offsetPixels,
int dayMask) {
myOffsetAnchor = offsetAnchor;
myOffsetStart = offsetStart;
myOffsetEnd = offsetEnd;
myOffsetPixels = offsetPixels;
myOffsetUnit = offsetUnit;
myDayMask = dayMask;
myStartPixels = startPixels;
}
Date getOffsetAnchor() {
return myOffsetAnchor;
}
public Date getOffsetStart() {
return myOffsetStart;
}
public Date getOffsetEnd() {
return myOffsetEnd;
}
public int getStartPixels() {
return myStartPixels;
}
public int getOffsetPixels() {
return myOffsetPixels;
}
void shift(int pixels) {
myStartPixels += pixels;
myOffsetPixels += pixels;
}
public TimeUnit getOffsetUnit() {
return myOffsetUnit;
}
public int getDayMask() {
return myDayMask;
}
@Override
public String toString() {
return String.format("start: %s[%dpx] end: %s[%dpx] unit=%s",
myOffsetStart, myStartPixels, myOffsetEnd, myOffsetPixels, myOffsetUnit.getName());
}
@Override
public boolean equals(Object that) {
if (false == that instanceof Offset) {
return false;
}
Offset thatOffset = (Offset) that;
return myOffsetPixels == thatOffset.myOffsetPixels && myOffsetEnd.equals(thatOffset.myOffsetEnd)
&& myOffsetAnchor.equals(thatOffset.myOffsetAnchor);
}
@Override
public int hashCode() {
return myOffsetEnd.hashCode();
}
/**
* @param concreteTimeUnit
* @param startDate
* @param currentDate
* @param endDate
* @param i
* @param dayType
* @return
*/
public static Offset createFullyClosed(TimeUnit timeUnit, Date anchor, Date closedStartDate, Date closedEndDate,
int startPixels, int endPixels, int dayMask) {
return new Offset(timeUnit, anchor, closedStartDate, closedEndDate, startPixels, endPixels, dayMask);
}
public static String debugPrint(List<Offset> offsets) {
StringBuilder builder = new StringBuilder();
builder.append("anchor=" + offsets.get(0).getOffsetAnchor());
for (Offset offset : offsets) {
builder.append(offset.toString()).append("\n");
}
return builder.toString();
}
}