From 18fed94860f17501d95a44f2fb0c372a58c0eaa7 Mon Sep 17 00:00:00 2001 From: Christopher Baines Date: Sat, 24 Mar 2012 16:27:15 +0000 Subject: Properly implemented weeks... :) --- src/net/cbaines/suca/CalendarApplet.java | 2 - src/net/cbaines/suca/SotonCalendarParser.java | 107 ++++++++++++++++++++++---- 2 files changed, 90 insertions(+), 19 deletions(-) diff --git a/src/net/cbaines/suca/CalendarApplet.java b/src/net/cbaines/suca/CalendarApplet.java index 329c180..5569285 100644 --- a/src/net/cbaines/suca/CalendarApplet.java +++ b/src/net/cbaines/suca/CalendarApplet.java @@ -278,8 +278,6 @@ public class CalendarApplet extends JApplet { Calendar calendar = builder.build(new StringReader(calendarCSVString)); calendarICALString = calendar.toString(); calendarPreviewTextArea.setText(calendarICALString); - System.out.println(calendarICALString); - createCalendarButton.setEnabled(true); creationProgress.setIndeterminate(false); diff --git a/src/net/cbaines/suca/SotonCalendarParser.java b/src/net/cbaines/suca/SotonCalendarParser.java index a98fd81..7473bf8 100644 --- a/src/net/cbaines/suca/SotonCalendarParser.java +++ b/src/net/cbaines/suca/SotonCalendarParser.java @@ -9,6 +9,9 @@ import java.net.URISyntaxException; import java.text.ParseException; import java.util.ArrayList; import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.Map; import net.fortuna.ical4j.data.CalendarParser; import net.fortuna.ical4j.data.ContentHandler; @@ -35,6 +38,10 @@ public class SotonCalendarParser implements CalendarParser { private boolean mergeHeaders = false; + private Calendar startYear = UniTermDates.getStartOf(UniTermDates.SEMESTER_1, + Calendar.getInstance().get(Calendar.YEAR) - 1); + private Calendar endYear = UniTermDates.getEndOf(UniTermDates.SEMESTER_2, UniTermDates.YEAR_BEGINING_2019); + // private final static String TAG = "SotonCalendarParser"; public void parse(InputStream in, ContentHandler handler) throws IOException, ParserException { @@ -382,19 +389,19 @@ public class SotonCalendarParser implements CalendarParser { log("Semester 1, year " + year + " starts on the " + dayOfTheWeek); int difference2 = 0; if (dayOfTheWeek == Calendar.MONDAY) { - difference2 = 8; - } else if (dayOfTheWeek == Calendar.TUESDAY) { difference2 = 7; - } else if (dayOfTheWeek == Calendar.WEDNESDAY) { + } else if (dayOfTheWeek == Calendar.TUESDAY) { difference2 = 6; - } else if (dayOfTheWeek == Calendar.THURSDAY) { + } else if (dayOfTheWeek == Calendar.WEDNESDAY) { difference2 = 5; - } else if (dayOfTheWeek == Calendar.FRIDAY) { + } else if (dayOfTheWeek == Calendar.THURSDAY) { difference2 = 4; - } else if (dayOfTheWeek == Calendar.SATURDAY) { + } else if (dayOfTheWeek == Calendar.FRIDAY) { difference2 = 3; - } else if (dayOfTheWeek == Calendar.SUNDAY) { + } else if (dayOfTheWeek == Calendar.SATURDAY) { difference2 = 2; + } else if (dayOfTheWeek == Calendar.SUNDAY) { + difference2 = 1; } else { log("Error calculating difference"); } @@ -403,6 +410,16 @@ public class SotonCalendarParser implements CalendarParser { int week = 1; while (semester1StartDate.before(semester1EndDate)) { + + if (semester1StartDate.after(UniTermDates.getEndOf(UniTermDates.AUTUMN_TERM, year)) + && semester1StartDate.before(UniTermDates + .getStartOf(UniTermDates.SPRING_TERM, year))) { + semester1StartDate.add(Calendar.WEEK_OF_YEAR, 1); + continue; + } + + log("Semester 1, Week " + week); + handler.startComponent(Component.VEVENT); // handler.startProperty(Property.UID); // handler.propertyValue(ug.generateUid().toString()); @@ -420,22 +437,30 @@ public class SotonCalendarParser implements CalendarParser { // Start time - logCalendar(" Start time " + "Week " + week + " ", semester1StartDate); + logCalendar(" Start time ", semester1StartDate); handler.startProperty(Property.DTSTART); handler.parameter("VALUE", "DATE"); - handler.propertyValue(new Date(semester1StartDate.getTime()).toString()); + // Calendar startCalTemp = ((Calendar) semester1StartDate.clone()); + // startCalTemp.add(Calendar.DAY_OF_YEAR, 1); + // Date startDate = new Date(startCalTemp.getTime()); + // logDate(" Start date " + "Week " + week + " ", startDate); + handler.propertyValue(getDate(semester1StartDate)); handler.endProperty(Property.DTSTART); semester1StartDate.add(Calendar.WEEK_OF_YEAR, 1); // End time - logCalendar(" End time " + "Week " + week + " ", semester1StartDate); + logCalendar(" End time ", semester1StartDate); handler.startProperty(Property.DTEND); handler.parameter("VALUE", "DATE"); - handler.propertyValue(new Date(semester1StartDate.getTime()).toString()); + // Calendar endCalTemp = ((Calendar) semester1StartDate.clone()); + // endCalTemp.add(Calendar.DAY_OF_YEAR, 1); + // Date endDate = new Date(endCalTemp.getTime()); + // logDate(" End date " + "Week " + week + " ", endDate); + handler.propertyValue(getDate(semester1StartDate)); handler.endProperty(Property.DTEND); handler.endComponent(Component.VEVENT); @@ -449,6 +474,16 @@ public class SotonCalendarParser implements CalendarParser { week = 1; while (semester2StartDate.before(semester2EndDate)) { + + if (semester2StartDate.after(UniTermDates.getEndOf(UniTermDates.SPRING_TERM, year)) + && semester2StartDate.before(UniTermDates + .getStartOf(UniTermDates.SUMMER_TERM, year))) { + semester2StartDate.add(Calendar.WEEK_OF_YEAR, 1); + continue; + } + + log("Semester 2, Week " + week); + handler.startComponent(Component.VEVENT); // handler.startProperty(Property.UID); // handler.propertyValue(ug.generateUid().toString()); @@ -466,22 +501,22 @@ public class SotonCalendarParser implements CalendarParser { // Start time - logCalendar(" Start time " + "Week " + week + " ", semester2StartDate); + logCalendar(" Start time ", semester2StartDate); handler.startProperty(Property.DTSTART); handler.parameter("VALUE", "DATE"); - handler.propertyValue(new Date(semester2StartDate.getTime()).toString()); + handler.propertyValue(getDate(semester2StartDate)); handler.endProperty(Property.DTSTART); semester2StartDate.add(Calendar.WEEK_OF_YEAR, 1); // End time - logCalendar(" End time " + "Week " + week + " ", semester2StartDate); + logCalendar(" End time ", semester2StartDate); handler.startProperty(Property.DTEND); handler.parameter("VALUE", "DATE"); - handler.propertyValue(new Date(semester2StartDate.getTime()).toString()); + handler.propertyValue(getDate(semester2StartDate)); handler.endProperty(Property.DTEND); handler.endComponent(Component.VEVENT); @@ -502,7 +537,32 @@ public class SotonCalendarParser implements CalendarParser { } } + private String getDate(Calendar cal) { + StringBuilder builder = new StringBuilder(8); + + builder.append(cal.get(Calendar.YEAR)); + + builder.append(cal.get(Calendar.MONTH) + 1); + if (builder.length() == 5) + builder.insert(4, '0'); + + builder.append(cal.get(Calendar.DAY_OF_MONTH)); + if (builder.length() == 7) + builder.insert(6, '0'); + + return builder.toString(); + } + private static void logCalendar(String prefix, Calendar cal) { + Map daysOfTheWeek = new HashMap(7); + daysOfTheWeek.put(Calendar.MONDAY, "Monday"); + daysOfTheWeek.put(Calendar.TUESDAY, "Tuesday"); + daysOfTheWeek.put(Calendar.WEDNESDAY, "Wednesday"); + daysOfTheWeek.put(Calendar.THURSDAY, "Thursday"); + daysOfTheWeek.put(Calendar.FRIDAY, "Friday"); + daysOfTheWeek.put(Calendar.SATURDAY, "Saturday"); + daysOfTheWeek.put(Calendar.SUNDAY, "Sunday"); + String hour = String.valueOf(cal.get(Calendar.HOUR_OF_DAY)); if (hour.length() == 1) { hour = "0" + hour; @@ -513,8 +573,21 @@ public class SotonCalendarParser implements CalendarParser { minute = "0" + minute; } - log(prefix + hour + ":" + minute + " " + cal.get(Calendar.DAY_OF_MONTH) + "/" + (cal.get(Calendar.MONTH) + 1) - + "/" + cal.get(Calendar.YEAR)); + log(prefix + hour + ":" + minute + " " + daysOfTheWeek.get(cal.get(Calendar.DAY_OF_WEEK)) + " " + + cal.get(Calendar.DAY_OF_MONTH) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.YEAR)); + } + + private static void logDate(String prefix, Date date) { + Map daysOfTheWeek = new HashMap(7); + daysOfTheWeek.put(Calendar.MONDAY, "Monday"); + daysOfTheWeek.put(Calendar.TUESDAY, "Tuesday"); + daysOfTheWeek.put(Calendar.WEDNESDAY, "Wednesday"); + daysOfTheWeek.put(Calendar.THURSDAY, "Thursday"); + daysOfTheWeek.put(Calendar.FRIDAY, "Friday"); + daysOfTheWeek.put(Calendar.SATURDAY, "Saturday"); + daysOfTheWeek.put(Calendar.SUNDAY, "Sunday"); + + log(prefix + " " + date.toString()); } private static void log(String string) { -- cgit v1.2.3