From f025cccd6ccdf4a2272991932bfed92264ff2045 Mon Sep 17 00:00:00 2001 From: Sebastian Schmelzer Date: Tue, 11 Sep 2012 15:08:21 +0200 Subject: calendar, ics import working --- .../de/unifr/rz/infoscreen/IcsEventProvider.java | 99 +++++++++++++++ src/main/java/de/unifr/rz/infoscreen/Index.java | 3 +- .../unifr/rz/infoscreen/component/DayCalendar.java | 67 ++++++++++ .../rz/infoscreen/component/WeekCalendar.java | 137 +++++++-------------- .../unifr/rz/infoscreen/component/DayCalendar.html | 19 +++ .../rz/infoscreen/component/NavbarDateTime.html | 3 +- .../rz/infoscreen/component/WeekCalendar.html | 3 + 7 files changed, 237 insertions(+), 94 deletions(-) create mode 100644 src/main/java/de/unifr/rz/infoscreen/IcsEventProvider.java create mode 100644 src/main/java/de/unifr/rz/infoscreen/component/DayCalendar.java create mode 100644 src/main/resources/de/unifr/rz/infoscreen/component/DayCalendar.html (limited to 'src/main') diff --git a/src/main/java/de/unifr/rz/infoscreen/IcsEventProvider.java b/src/main/java/de/unifr/rz/infoscreen/IcsEventProvider.java new file mode 100644 index 0000000..6615227 --- /dev/null +++ b/src/main/java/de/unifr/rz/infoscreen/IcsEventProvider.java @@ -0,0 +1,99 @@ +package de.unifr.rz.infoscreen; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +import org.joda.time.DateTime; + +import net.fortuna.ical4j.data.CalendarBuilder; +import net.fortuna.ical4j.filter.Filter; +import net.fortuna.ical4j.filter.PeriodRule; +import net.fortuna.ical4j.filter.Rule; +import net.fortuna.ical4j.model.Calendar; +import net.fortuna.ical4j.model.Component; +import net.fortuna.ical4j.model.Dur; +import net.fortuna.ical4j.model.Period; +import net.fortuna.ical4j.model.component.VEvent; +import net.ftlines.wicket.fullcalendar.Event; +import net.ftlines.wicket.fullcalendar.EventNotFoundException; +import net.ftlines.wicket.fullcalendar.EventProvider; + +public class IcsEventProvider implements EventProvider { + + private static final long serialVersionUID = 1L; + + private String icsUrl; + + public IcsEventProvider(String icsUrl) { + super(); + this.icsUrl = icsUrl; + } + + @Override + public Collection getEvents(DateTime start, DateTime end) { + Collection ret = null; + try { + ret = _getEvents(start, end); + } catch (Exception e) { + e.printStackTrace(); + } + return ret; + } + + public Collection _getEvents(DateTime start, DateTime end) throws Exception { + + List events = new ArrayList(); + + URL calendarSource = new URL(icsUrl); + CalendarBuilder builder = new CalendarBuilder(); + + Calendar calendar = builder.build(calendarSource.openStream()); + java.util.Calendar today = java.util.Calendar.getInstance(); + java.util.Calendar yesterday = today; + yesterday.add(java.util.Calendar.DATE, -1); + Period period = new Period(new net.fortuna.ical4j.model.DateTime(yesterday.getTime()), new Dur(7, 0, 0, 0)); + + ArrayList rules = new ArrayList(); + rules.add(new PeriodRule(period)); + + Filter filter = new Filter(rules.toArray(new Rule[rules.size()]), Filter.MATCH_ALL); + + + @SuppressWarnings("unchecked") + Collection c = filter.filter(calendar.getComponents(Component.VEVENT)); + Iterator i = c.iterator(); + + while (i.hasNext()) { + final VEvent event = i.next(); + System.out.println("Start: " + event.getStartDate().getDate()); + System.out.println("End: " + event.getEndDate().getDate()); + final Event e = new Event(); + e.setStart(new DateTime(event.getStartDate().getDate())); + e.setEnd(new DateTime(event.getEndDate().getDate())); + e.setTitle(event.getSummary().getValue()); +// System.out.println(event.toString()); + events.add(e); + } + + return events; + } + + @Override + public Event getEventForId(String id) throws EventNotFoundException { + // TODO Auto-generated method stub + return null; + } + + public String getIcsUrl() { + return icsUrl; + } + + public void setIcsUrl(String icsUrl) { + this.icsUrl = icsUrl; + } + +} diff --git a/src/main/java/de/unifr/rz/infoscreen/Index.java b/src/main/java/de/unifr/rz/infoscreen/Index.java index 9f872f8..3cedc2e 100644 --- a/src/main/java/de/unifr/rz/infoscreen/Index.java +++ b/src/main/java/de/unifr/rz/infoscreen/Index.java @@ -11,6 +11,7 @@ import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem; import de.unifr.rz.infoscreen.component.NavbarDateTime; import de.unifr.rz.infoscreen.component.WeekCalendar; +import de.unifr.rz.infoscreen.component.DayCalendar; public class Index extends SimpleBootstrapPage { @@ -28,7 +29,7 @@ public class Index extends SimpleBootstrapPage { setPageTitle("Infoscreen"); setPageSubTitle("Videokonferenzraum"); - setMainContent(new WeekCalendar("content")); + setMainContent(new DayCalendar("content", new IcsEventProvider("http://www.verwaltung.uni-freiburg.de/lsfserver/rds?state=verpublish&status=transform&vmfile=no&termine=165887,165887,192598,192599,200957&moduleCall=iCalendarPlan&publishConfFile=reports&publishSubDir=veranstaltung"))); } diff --git a/src/main/java/de/unifr/rz/infoscreen/component/DayCalendar.java b/src/main/java/de/unifr/rz/infoscreen/component/DayCalendar.java new file mode 100644 index 0000000..5ad39fc --- /dev/null +++ b/src/main/java/de/unifr/rz/infoscreen/component/DayCalendar.java @@ -0,0 +1,67 @@ +package de.unifr.rz.infoscreen.component; + +import java.util.Locale; + +import net.ftlines.wicket.fullcalendar.Config; +import net.ftlines.wicket.fullcalendar.EventProvider; +import net.ftlines.wicket.fullcalendar.EventSource; +import net.ftlines.wicket.fullcalendar.FullCalendar; + +import org.apache.wicket.markup.html.panel.Panel; +import org.joda.time.LocalTime; + +public class DayCalendar extends Panel { + + private static final long serialVersionUID = 1L; + private EventProvider ep; + + public DayCalendar(String id, EventProvider ep) { + super(id); + this.setEp(ep); + + Config ajaxCalendarConfig = new Config(); + + ajaxCalendarConfig.setSelectable(false); + ajaxCalendarConfig.setSelectHelper(false); + + ajaxCalendarConfig.getHeader().setLeft(""); + ajaxCalendarConfig.getHeader().setCenter(""); + ajaxCalendarConfig.getHeader().setRight(""); + ajaxCalendarConfig.setDefaultView("agendaDay"); + ajaxCalendarConfig.setAllDaySlot(false); + + ajaxCalendarConfig.setColumnFormatWeek("dddd, d.M."); + ajaxCalendarConfig.setColumnFormatDay("dddd, d.M."); + ajaxCalendarConfig.setLocale(Locale.GERMANY); + + ajaxCalendarConfig.setMinTime(new LocalTime(6, 30)); + ajaxCalendarConfig.setMaxTime(new LocalTime(23, 00)); + + EventSource content = new EventSource(); + content.setEventsProvider(ep); + + ajaxCalendarConfig.add(content); + + ajaxCalendarConfig.enableTimeline(); + + FullCalendar ajaxCalendar = new FullCalendar("calendar", + ajaxCalendarConfig) { + + private static final long serialVersionUID = 1L; + + }; + + ajaxCalendar.setMarkupId("calendar"); + add(ajaxCalendar); + + } + + public EventProvider getEp() { + return ep; + } + + public void setEp(EventProvider ep) { + this.ep = ep; + } + +} diff --git a/src/main/java/de/unifr/rz/infoscreen/component/WeekCalendar.java b/src/main/java/de/unifr/rz/infoscreen/component/WeekCalendar.java index 3d08835..0011b49 100644 --- a/src/main/java/de/unifr/rz/infoscreen/component/WeekCalendar.java +++ b/src/main/java/de/unifr/rz/infoscreen/component/WeekCalendar.java @@ -1,26 +1,10 @@ package de.unifr.rz.infoscreen.component; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; import java.util.Locale; -import net.fortuna.ical4j.data.CalendarBuilder; -import net.fortuna.ical4j.data.ParserException; -import net.fortuna.ical4j.filter.Filter; -import net.fortuna.ical4j.filter.PeriodRule; -import net.fortuna.ical4j.filter.Rule; -import net.fortuna.ical4j.model.Calendar; -import net.fortuna.ical4j.model.Component; -import net.fortuna.ical4j.model.DateTime; -import net.fortuna.ical4j.model.Dur; -import net.fortuna.ical4j.model.Period; -import net.fortuna.ical4j.model.component.VEvent; - import net.ftlines.wicket.fullcalendar.Config; +import net.ftlines.wicket.fullcalendar.EventProvider; +import net.ftlines.wicket.fullcalendar.EventSource; import net.ftlines.wicket.fullcalendar.FullCalendar; import org.apache.wicket.markup.html.panel.Panel; @@ -29,85 +13,54 @@ import org.joda.time.LocalTime; public class WeekCalendar extends Panel { private static final long serialVersionUID = 1L; + private EventProvider ep; - public WeekCalendar(String id) { + public WeekCalendar(String id, EventProvider ep) { super(id); + this.setEp(ep); + + Config ajaxCalendarConfig = new Config(); + + ajaxCalendarConfig.setSelectable(false); + ajaxCalendarConfig.setSelectHelper(false); + + ajaxCalendarConfig.getHeader().setLeft(""); + ajaxCalendarConfig.getHeader().setCenter(""); + ajaxCalendarConfig.getHeader().setRight(""); + ajaxCalendarConfig.setDefaultView("agendaWeek"); + ajaxCalendarConfig.setAllDaySlot(false); + + ajaxCalendarConfig.setColumnFormatWeek("dddd, d.M."); + ajaxCalendarConfig.setLocale(Locale.GERMANY); + + ajaxCalendarConfig.setMinTime(new LocalTime(6, 30)); + ajaxCalendarConfig.setMaxTime(new LocalTime(23, 00)); + + EventSource content = new EventSource(); + content.setEventsProvider(ep); + + ajaxCalendarConfig.add(content); - try { - URL calendarSource = new URL("http://www.verwaltung.uni-freiburg.de/lsfserver/rds?state=verpublish&status=transform&vmfile=no&termine=165887,165887,192598,192599,200957&moduleCall=iCalendarPlan&publishConfFile=reports&publishSubDir=veranstaltung"); - System.out.println(System.getProperty("user.dir")); - CalendarBuilder builder = new CalendarBuilder(); - - try { - Calendar calendar = builder.build(calendarSource.openStream()); - java.util.Calendar today = java.util.Calendar.getInstance(); - java.util.Calendar yesterday = today; - yesterday.add(java.util.Calendar.DATE, -1); - Period period = new Period(new DateTime(yesterday.getTime()), new Dur(7, 0, 0, 0)); - - ArrayList rules = new ArrayList(); - rules.add(new PeriodRule(period)); - - Filter filter = new Filter(rules.toArray(new Rule[rules.size()]), Filter.MATCH_ALL); - - - @SuppressWarnings("unchecked") - Collection c = filter.filter(calendar.getComponents(Component.VEVENT)); - Iterator i = c.iterator(); - - Config ajaxCalendarConfig = new Config(); - - ajaxCalendarConfig.setSelectable(false); - ajaxCalendarConfig.setSelectHelper(false); - - ajaxCalendarConfig.getHeader().setLeft(""); - ajaxCalendarConfig.getHeader().setCenter(""); - ajaxCalendarConfig.getHeader().setRight(""); - ajaxCalendarConfig.setDefaultView("agendaWeek"); - ajaxCalendarConfig.setAllDaySlot(false); - - ajaxCalendarConfig.setColumnFormatWeek("dddd, d.M."); - ajaxCalendarConfig.setDateNamesForLocale(Locale.GERMANY); - - ajaxCalendarConfig.setTimeFormatDefault("H(:mm)"); - ajaxCalendarConfig.setTimeFormatAgenda("H:mm{ - H:mm}"); - - ajaxCalendarConfig.setAxisFormat("H:mm"); - - ajaxCalendarConfig.setMinTime(new LocalTime(6, 30)); - ajaxCalendarConfig.setMaxTime(new LocalTime(23, 00)); - - - FullCalendar ajaxCalendar = new FullCalendar("calendar", ajaxCalendarConfig) { - - private static final long serialVersionUID = 1L; - - }; - - ajaxCalendar.setMarkupId("calendar"); - add(ajaxCalendar); - - - while (i.hasNext()) { - final VEvent event = i.next(); - System.out.println("Start: " + event.getStartDate().getDate()); - System.out.println("End: " + event.getEndDate().getDate()); - } - - - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (ParserException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } catch (MalformedURLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + ajaxCalendarConfig.enableTimeline(); + FullCalendar ajaxCalendar = new FullCalendar("calendar", + ajaxCalendarConfig) { + + private static final long serialVersionUID = 1L; + + }; + + ajaxCalendar.setMarkupId("calendar"); + add(ajaxCalendar); + + } + + public EventProvider getEp() { + return ep; + } + public void setEp(EventProvider ep) { + this.ep = ep; } } diff --git a/src/main/resources/de/unifr/rz/infoscreen/component/DayCalendar.html b/src/main/resources/de/unifr/rz/infoscreen/component/DayCalendar.html new file mode 100644 index 0000000..12d9b57 --- /dev/null +++ b/src/main/resources/de/unifr/rz/infoscreen/component/DayCalendar.html @@ -0,0 +1,19 @@ + + + +WeekCalendar + + + + + + + +
+
+ + \ No newline at end of file diff --git a/src/main/resources/de/unifr/rz/infoscreen/component/NavbarDateTime.html b/src/main/resources/de/unifr/rz/infoscreen/component/NavbarDateTime.html index f893959..4956334 100644 --- a/src/main/resources/de/unifr/rz/infoscreen/component/NavbarDateTime.html +++ b/src/main/resources/de/unifr/rz/infoscreen/component/NavbarDateTime.html @@ -5,7 +5,8 @@ -- cgit v1.2.3-55-g7522