package no.java.schedule.activities.adapters;
import java.util.*;
public class ScheduleTimeUtil {
static {
createStartDates();
}
private static Long[] startTimes;
private static Long[] endTimes;
public static long findBlockStart(long time) {
long midnightDelta = toMidnightDelta(time);
for (Long startTime : startTimes) {
if (startTime <= midnightDelta){
return time-midnightDelta+startTime;
}
}
throw new IllegalStateException("error in slot time resolution");
}
public static long findBlockEnd(long time) {
long midnightDelta = toMidnightDelta(time);
for (Long endTime : endTimes) {
if (endTime >= midnightDelta){
return time-midnightDelta+endTime;
}
}
throw new IllegalStateException("error in slot time resolution");
}
private static void createStartDates() {
// TODO replace this with data from the event feed
List<Long> startTimesTmp = new ArrayList<Long>();
List<Long> endTimesTmp = new ArrayList<Long>();
final GregorianCalendar time = new GregorianCalendar(0, 0, 0, 9, 0); // 0900
final GregorianCalendar midnight = new GregorianCalendar(0, 0, 0, 0, 0);
final long base = midnight.getTimeInMillis();
// 09:00 - 10:00
startTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,60);
endTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,15);
// 10:15 - 11:15
startTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,60);
endTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,30); // First long break
// 11:45 - 12:45
startTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,60);
endTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,15);
// 13:00 - 14:00
startTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,60);
endTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,15);
// 14:15 - 15:15
startTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,60);
endTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,30); // Second long break
// 15:45 - 16:45
startTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,60);
endTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,15);
// 17:00 - 18:00
startTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,60);
endTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,15);
// 18:15 - 19:00
startTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,60);
endTimesTmp.add(time.getTimeInMillis() - base);
time.add(GregorianCalendar.MINUTE,15);
startTimes = startTimesTmp.toArray(new Long[startTimesTmp.size()]);
Arrays.sort(startTimes, Collections.reverseOrder());
//for (Long startTime : startTimesTmp) {
// Log.d("startTime",new SimpleDateFormat("hh:mm").format(new Date(startTime)));
//}
//for (Long endTime : endTimesTmp) {
// Log.d("endTime",new SimpleDateFormat("hh:mm").format(new Date(endTime)));
//
//}
endTimes = endTimesTmp.toArray(new Long[endTimesTmp.size()]);
Arrays.sort(endTimes);
}
private static long toMidnightDelta(long startTime) {
Calendar calendar = new GregorianCalendar();
calendar.setTimeInMillis(startTime);
Calendar midnight = new GregorianCalendar();
midnight.setTimeInMillis(startTime);
midnight.set(Calendar.HOUR_OF_DAY,0);
midnight.set(Calendar.MINUTE,0);
midnight.set(Calendar.MILLISECOND,0);
return calendar.getTimeInMillis() - midnight.getTimeInMillis();
}
}