blob: b69923f1139e278d841e0dd299f207d4301cc1ef [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2008 Tasktop Technologies and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.tasks.core;
import java.util.Calendar;
import java.util.Date;
/**
* @author Rob Elves
*/
public class TaskActivityUtil {
private static int startDay = Calendar.MONDAY;
private static int endHour = 17;
public static Calendar snapStartOfDay(Calendar cal) {
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.getTime();
return cal;
}
public static Calendar snapStartOfHour(Calendar cal) {
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.getTime();
return cal;
}
public static Calendar snapEndOfHour(Calendar cal) {
cal.set(Calendar.MINUTE, cal.getActualMaximum(Calendar.MINUTE));
cal.set(Calendar.SECOND, cal.getActualMaximum(Calendar.SECOND));
cal.set(Calendar.MILLISECOND, cal.getActualMaximum(Calendar.MILLISECOND));
cal.getTime();
return cal;
}
public static Calendar snapEndOfDay(Calendar cal) {
cal.set(Calendar.HOUR_OF_DAY, cal.getActualMaximum(Calendar.HOUR_OF_DAY));
cal.set(Calendar.MINUTE, cal.getActualMaximum(Calendar.MINUTE));
cal.set(Calendar.SECOND, cal.getActualMaximum(Calendar.SECOND));
cal.set(Calendar.MILLISECOND, cal.getActualMaximum(Calendar.MILLISECOND));
cal.getTime();
return cal;
}
public static void snapToNextDay(Calendar cal) {
cal.add(Calendar.DAY_OF_MONTH, 1);
TaskActivityUtil.snapStartOfDay(cal);
}
public static Calendar snapNextDay(Calendar cal) {
cal.add(Calendar.DAY_OF_MONTH, 1);
snapStartOfDay(cal);
return cal;
}
public static Calendar snapStartOfWorkWeek(Calendar cal) {
cal.set(Calendar.DAY_OF_WEEK, startDay);
snapStartOfDay(cal);
return cal;
}
public static Calendar snapEndOfWeek(Calendar cal) {
cal.set(Calendar.DAY_OF_WEEK, getLastCalDayInt(cal));
snapEndOfDay(cal);
return cal;
}
private static int getLastCalDayInt(Calendar cal) {
int last = cal.getFirstDayOfWeek() - 1;
if (last == 0) {
last = Calendar.SATURDAY;
}
return last;
}
public static Calendar snapEndOfNextWeek(Calendar cal) {
snapEndOfWeek(cal);
cal.add(Calendar.WEEK_OF_MONTH, 1);
return cal;
}
public static Calendar snapForwardNumDays(Calendar calendar, int days) {
calendar.add(Calendar.DAY_OF_MONTH, days);
calendar.set(Calendar.HOUR_OF_DAY, endHour);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar;
}
public static Calendar snapEndOfWorkDay(Calendar calendar) {
calendar.set(Calendar.HOUR_OF_DAY, endHour);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar;
}
public static Calendar snapNextWorkWeek(Calendar calendar) {
calendar.add(Calendar.WEEK_OF_MONTH, 1);
snapStartOfWorkWeek(calendar);
return calendar;
}
public static boolean isAfterCurrentWeek(Calendar time) {
if (time != null) {
Calendar cal = getCalendar();
return time.compareTo(snapNextWorkWeek(cal)) > -1;
}
return false;
}
/**
* @return true if time is in or past Future bin
*/
public static boolean isFuture(Calendar time) {
if (time != null) {
Calendar cal = getCalendar();
cal.add(Calendar.WEEK_OF_MONTH, 2);
snapStartOfWorkWeek(cal);
return time.compareTo(cal) > -1;
}
return false;
}
public static boolean isThisWeek(Calendar time) {
if (time != null) {
Calendar weekStart = getCalendar();
snapStartOfWorkWeek(weekStart);
Calendar weekEnd = getCalendar();
snapEndOfWeek(weekEnd);
return (time.compareTo(weekStart) >= 0 && time.compareTo(weekEnd) <= 0);
}
return false;
}
public static boolean isNextWeek(Calendar time) {
if (time != null) {
Calendar weekStart = getCalendar();
snapNextWorkWeek(weekStart);
Calendar weekEnd = getCalendar();
snapNextWorkWeek(weekEnd);
snapEndOfWeek(weekEnd);
return (time.compareTo(weekStart) >= 0 && time.compareTo(weekEnd) <= 0);
}
return false;
}
public static boolean isToday(Calendar time) {
if (time != null) {
Calendar dayStart = getCalendar();
snapStartOfDay(dayStart);
Calendar midnight = getCalendar();
snapEndOfDay(midnight);
return (time.compareTo(dayStart) >= 0 && time.compareTo(midnight) <= 0);
}
return false;
}
public static boolean isToday(DateRange time) {
if (time != null) {
return getCurrentWeek().getToday().compareTo(time) == 0;
}
return false;
}
public static Calendar getCalendar() {
Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(startDay);
cal.getTime();
return cal;
}
public static Calendar getStartOfCurrentWeek() {
Calendar cal = getCalendar();
return snapStartOfWorkWeek(cal);
}
public static Calendar getStartOfNextWeek() {
Calendar cal = getCalendar();
snapNextWorkWeek(cal);
return snapStartOfWorkWeek(cal);
}
public static Calendar getEndOfCurrentWeek() {
Calendar cal = getCalendar();
return snapEndOfWeek(cal);
}
public static boolean isBetween(Calendar time, Calendar start, Calendar end) {
return (time.compareTo(start) >= 0 && time.compareTo(end) <= 0);
}
protected static void setStartDay(int startDay) {
TaskActivityUtil.startDay = startDay;
}
protected static int getStartDay() {
return TaskActivityUtil.startDay;
}
public static void setEndHour(int endHour) {
TaskActivityUtil.endHour = endHour;
}
public static WeekDateRange getCurrentWeek() {
Calendar weekStart = getCalendar();
snapStartOfWorkWeek(weekStart);
Calendar weekEnd = getCalendar();
snapEndOfWeek(weekEnd);
return new WeekDateRange(weekStart, weekEnd);
}
public static WeekDateRange getNextWeek() {
Calendar weekStart = getCalendar();
snapNextWorkWeek(weekStart);
Calendar weekEnd = getCalendar();
weekEnd.setTimeInMillis(weekStart.getTimeInMillis());
snapEndOfWeek(weekEnd);
return new WeekDateRange(weekStart, weekEnd);
}
public static WeekDateRange getWeekOf(Date date) {
Calendar weekStart = getCalendar();
weekStart.setTime(date);
Calendar weekEnd = getCalendar();
weekEnd.setTime(date);
snapStartOfWorkWeek(weekStart);
snapEndOfWeek(weekEnd);
return new WeekDateRange(weekStart, weekEnd);
}
public static DayDateRange getDayOf(Date date) {
Calendar dayStart = getCalendar();
dayStart.setTime(date);
Calendar dayEnd = getCalendar();
dayEnd.setTime(date);
snapStartOfDay(dayStart);
snapEndOfDay(dayEnd);
return new DayDateRange(dayStart, dayEnd);
}
}