From 520b8dc2dda076fc888f8a38ba419176a2f16c19 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Thu, 10 Nov 2011 15:13:43 +0100 Subject: [PATCH] FXOLAT-298: improve support of ical exported calendars --- .../olat/commons/calendar/CalendarModule.java | 4 +- .../commons/calendar/CalendarImportTest.java | 13 ++ .../org/olat/commons/calendar/EMAIL.ics | 119 ++++++++++++++++++ 3 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/org/olat/commons/calendar/EMAIL.ics diff --git a/src/main/java/org/olat/commons/calendar/CalendarModule.java b/src/main/java/org/olat/commons/calendar/CalendarModule.java index c9129f6fa39..1ebb0f52cba 100644 --- a/src/main/java/org/olat/commons/calendar/CalendarModule.java +++ b/src/main/java/org/olat/commons/calendar/CalendarModule.java @@ -23,6 +23,7 @@ package org.olat.commons.calendar; import net.fortuna.ical4j.model.TimeZone; import net.fortuna.ical4j.model.TimeZoneRegistry; import net.fortuna.ical4j.model.TimeZoneRegistryFactory; +import net.fortuna.ical4j.util.CompatibilityHints; import org.olat.core.configuration.AbstractOLATModule; import org.olat.core.configuration.PersistedProperties; @@ -45,7 +46,8 @@ public class CalendarModule extends AbstractOLATModule { public void init() { //some computers have no Internet access, the host can be down and we must get the default time zone System.setProperty("net.fortuna.ical4j.timezone.update.enabled", "false"); - System.setProperty("ical4j.unfolding.relaxed", "true"); + System.setProperty(CompatibilityHints.KEY_RELAXED_UNFOLDING, "true"); + System.setProperty(CompatibilityHints.KEY_RELAXED_PARSING, "true"); String defaultTimeZoneID = java.util.TimeZone.getDefault().getID(); timeZoneRegistry = TimeZoneRegistryFactory.getInstance().createRegistry(); defaultTimeZone = timeZoneRegistry.getTimeZone(defaultTimeZoneID); diff --git a/src/test/java/org/olat/commons/calendar/CalendarImportTest.java b/src/test/java/org/olat/commons/calendar/CalendarImportTest.java index cdcce92f7b7..2bdf6325dee 100644 --- a/src/test/java/org/olat/commons/calendar/CalendarImportTest.java +++ b/src/test/java/org/olat/commons/calendar/CalendarImportTest.java @@ -14,6 +14,7 @@ import net.fortuna.ical4j.model.TimeZone; import net.fortuna.ical4j.model.TimeZoneRegistry; import net.fortuna.ical4j.model.TimeZoneRegistryFactory; import net.fortuna.ical4j.model.parameter.Value; +import net.fortuna.ical4j.util.CompatibilityHints; import net.fortuna.ical4j.util.Dates; import net.fortuna.ical4j.util.TimeZones; @@ -69,5 +70,17 @@ public class CalendarImportTest { Calendar calendar = builder.build(in); assertNotNull(calendar); } + + @Test + public void testImportFromFGiCal() throws IOException, ParserException { + //default settings in olat + System.setProperty(CompatibilityHints.KEY_RELAXED_UNFOLDING, "true"); + System.setProperty(CompatibilityHints.KEY_RELAXED_PARSING, "true"); + + InputStream in = CalendarImportTest.class.getResourceAsStream("EMAIL.ics"); + CalendarBuilder builder = new CalendarBuilder(); + Calendar calendar = builder.build(in); + assertNotNull(calendar); + } } diff --git a/src/test/resources/org/olat/commons/calendar/EMAIL.ics b/src/test/resources/org/olat/commons/calendar/EMAIL.ics new file mode 100644 index 00000000000..0dffba922aa --- /dev/null +++ b/src/test/resources/org/olat/commons/calendar/EMAIL.ics @@ -0,0 +1,119 @@ +BEGIN:VCALENDAR +METHOD:PUBLISH +VERSION:2.0 +X-WR-CALNAME:FG-Office +PRODID:-//Apple Inc.//iCal 5.0.1//EN +X-APPLE-CALENDAR-COLOR:#0E61B9 +X-WR-TIMEZONE:Europe/Zurich +CALSCALE:GREGORIAN +BEGIN:VTIMEZONE +TZID:Europe/Berlin +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +DTSTART:19810329T020000 +TZNAME:CEST +TZOFFSETTO:+0200 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +DTSTART:19961027T030000 +TZNAME:CET +TZOFFSETTO:+0100 +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:America/New_York +BEGIN:DAYLIGHT +TZOFFSETFROM:-0500 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +DTSTART:20070311T020000 +TZNAME:EDT +TZOFFSETTO:-0400 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0400 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +DTSTART:20071104T020000 +TZNAME:EST +TZOFFSETTO:-0500 +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:Europe/Zurich +BEGIN:DAYLIGHT +TZOFFSETFROM:+0100 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +DTSTART:19810329T020000 +TZNAME:CEST +TZOFFSETTO:+0200 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:+0200 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +DTSTART:19961027T030000 +TZNAME:CET +TZOFFSETTO:+0100 +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:America/Chicago +BEGIN:DAYLIGHT +TZOFFSETFROM:-0600 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +DTSTART:20070311T020000 +TZNAME:CDT +TZOFFSETTO:-0500 +END:DAYLIGHT +BEGIN:STANDARD +TZOFFSETFROM:-0500 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +DTSTART:20071104T020000 +TZNAME:CST +TZOFFSETTO:-0600 +END:STANDARD +END:VTIMEZONE +BEGIN:VEVENT +CREATED:20111108T162555Z +UID:61993671-1958-418D-A84B-264BA4E21670 +DTEND;TZID=Europe/Zurich:20111109T093000 +ATTENDEE;CN="Florian Gnägi";CUTYPE=INDIVIDUAL;EMAIL="gnaegi@frentix.com" + ;PARTSTAT=ACCEPTED;ROLE=REQ-PARTICIPANT:mailto:gnaegi@frentix.com +ATTENDEE;CN="Christian Franck";CUTYPE=INDIVIDUAL;PARTSTAT=ACCEPTED:mailt + o:Christian.Franck@frentix.com +TRANSP:OPAQUE +SUMMARY:Besprechung wg. USU und Becker +DTSTART;TZID=Europe/Zurich:20111109T090000 +DTSTAMP:20111108T162634Z +ORGANIZER;CN="Christian Franck";SCHEDULE-AGENT=CLIENT:mailto:Christian.F + ranck@frentix.com +SEQUENCE:4 +END:VEVENT +BEGIN:VEVENT +CREATED:20111109T120320Z +UID:46A80CEF-2660-4A23-8ADE-FF960901B987 +DTEND;TZID=Europe/Zurich:20111116T120000 +TRANSP:OPAQUE +SUMMARY:Physio +DTSTART;TZID=Europe/Zurich:20111116T113000 +DTSTAMP:20111109T124426Z +SEQUENCE:1 +BEGIN:VALARM +X-WR-ALARMUID:A554BE09-0C97-4B9F-A22C-4A055132D5F1 +TRIGGER:-PT30M +DESCRIPTION:Event reminder +ACTION:DISPLAY +END:VALARM +END:VEVENT +BEGIN:VEVENT +CREATED:20111109T162022Z +UID:341906F7-2863-45AF-B3F1-02767F6225BF +DTEND;TZID=Europe/Zurich:20111107T201500 +TRANSP:OPAQUE +SUMMARY:Neues Ereignis +DTSTART;TZID=Europe/Zurich:20111107T200000 +DTSTAMP:20111109T162022Z +SEQUENCE:0 +END:VEVENT +END:VCALENDAR \ No newline at end of file -- GitLab