summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/de/unifr/rz/infoscreen/IcsEventProvider.java22
-rw-r--r--src/main/java/de/unifr/rz/infoscreen/component/CalendarViewCarrousel.java39
-rw-r--r--src/main/java/de/unifr/rz/infoscreen/component/EventCalendar.java100
-rw-r--r--src/main/resources/de/unifr/rz/infoscreen/component/EventCalendar.html42
-rw-r--r--src/main/resources/de/unifr/rz/infoscreen/component/test.ics67
-rw-r--r--src/main/resources/de/unifr/rz/infoscreen/component/test.ics.orage0
-rw-r--r--src/main/webapp/img/videoconf.pngbin0 -> 44844 bytes
-rw-r--r--test.ics67
8 files changed, 183 insertions, 154 deletions
diff --git a/src/main/java/de/unifr/rz/infoscreen/IcsEventProvider.java b/src/main/java/de/unifr/rz/infoscreen/IcsEventProvider.java
index 3156a54..48e854e 100644
--- a/src/main/java/de/unifr/rz/infoscreen/IcsEventProvider.java
+++ b/src/main/java/de/unifr/rz/infoscreen/IcsEventProvider.java
@@ -3,6 +3,8 @@ package de.unifr.rz.infoscreen;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
@@ -54,7 +56,8 @@ public class IcsEventProvider implements EventProvider {
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));
+ Period period = new Period(new net.fortuna.ical4j.model.DateTime(start.toDate()),
+ new net.fortuna.ical4j.model.DateTime(end.toDate()));
ArrayList<Rule> rules = new ArrayList<Rule>();
rules.add(new PeriodRule(period));
@@ -75,7 +78,8 @@ public class IcsEventProvider implements EventProvider {
e.setTitle(event.getSummary().getValue());
events.add(e);
}
-
+
+ Collections.sort(events, new EventComparator());
return events;
}
@@ -92,5 +96,19 @@ public class IcsEventProvider implements EventProvider {
public void setIcsUrl(String icsUrl) {
this.icsUrl = icsUrl;
}
+
+ private class EventComparator implements Comparator<Event>{
+
+ @Override
+ public int compare(Event a, Event b) {
+ if (a.equals(b)) {
+ return 0;
+ } else if (a.getStart().isBefore(b.getStart())) {
+ return -1;
+ }
+ return 1;
+ }
+
+ }
}
diff --git a/src/main/java/de/unifr/rz/infoscreen/component/CalendarViewCarrousel.java b/src/main/java/de/unifr/rz/infoscreen/component/CalendarViewCarrousel.java
index 23fdc77..c50d1a2 100644
--- a/src/main/java/de/unifr/rz/infoscreen/component/CalendarViewCarrousel.java
+++ b/src/main/java/de/unifr/rz/infoscreen/component/CalendarViewCarrousel.java
@@ -32,11 +32,12 @@ public class CalendarViewCarrousel extends Panel {
weekView.setOutputMarkupId(true);
dayView.setOutputMarkupId(true);
eventView.setOutputMarkupId(true);
-
+
currentView = weekView;
-
add(currentView);
+ rotateView();
+
// rotate view every 10 sec
add(new AbstractAjaxTimerBehavior(Duration.seconds(10)) {
@@ -46,21 +47,7 @@ public class CalendarViewCarrousel extends Panel {
protected void onTimer(AjaxRequestTarget target) {
System.out.println("ajaxcall");
if (target != null) {
- Calendar cal = Calendar.getInstance();
-
- if ((int) ((cal.get(Calendar.SECOND) % 30) / 10) == 0) {
- currentView.replaceWith(weekView);
- currentView = weekView;
- System.out.println("weekView");
- } else if ((int) ((cal.get(Calendar.SECOND) % 30) / 10) == 1) {
- currentView.replaceWith(dayView);
- currentView = dayView;
- System.out.println("dayView");
- } else {
- currentView.replaceWith(eventView);
- currentView = eventView;
- System.out.println("eventView");
- }
+ rotateView();
target.add(currentView);
target.add(getComponent());
}
@@ -76,4 +63,22 @@ public class CalendarViewCarrousel extends Panel {
public void setEventProvider(EventProvider eventProvider) {
this.eventProvider = eventProvider;
}
+
+ private void rotateView() {
+ Calendar cal = Calendar.getInstance();
+
+ if ((int) ((cal.get(Calendar.SECOND) % 30) / 10) == 0) {
+ currentView.replaceWith(weekView);
+ currentView = weekView;
+ System.out.println("weekView");
+ } else if ((int) ((cal.get(Calendar.SECOND) % 30) / 10) == 1) {
+ currentView.replaceWith(dayView);
+ currentView = dayView;
+ System.out.println("dayView");
+ } else {
+ currentView.replaceWith(eventView);
+ currentView = eventView;
+ System.out.println("eventView");
+ }
+ }
}
diff --git a/src/main/java/de/unifr/rz/infoscreen/component/EventCalendar.java b/src/main/java/de/unifr/rz/infoscreen/component/EventCalendar.java
index a9fa77f..3a3d5ff 100644
--- a/src/main/java/de/unifr/rz/infoscreen/component/EventCalendar.java
+++ b/src/main/java/de/unifr/rz/infoscreen/component/EventCalendar.java
@@ -1,8 +1,15 @@
package de.unifr.rz.infoscreen.component;
+import java.util.Collection;
+import java.util.Date;
+
+import net.ftlines.wicket.fullcalendar.Event;
import net.ftlines.wicket.fullcalendar.EventProvider;
+import nu.xss.web.util.ContextPathResourceUrl;
+import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
+import org.joda.time.DateTime;
public class EventCalendar extends Panel {
@@ -12,6 +19,99 @@ public class EventCalendar extends Panel {
public EventCalendar(String id, EventProvider ep) {
super(id);
setEventProvider(ep);
+
+
+ if (isEventRunning()) {
+ // CASE 1: Event running
+ final Event e = getEventRunning();
+ add(new Label("eventTitle", e.getTitle()));
+ add(new Label("eventTimeline", e.getStart().toString("HH:mm") + " - " + e.getEnd().toString("HH:mm") + " Uhr"));
+ } else if (isEventUpcomming()) {
+ // CASE 2: No Event running, but one is starting soon
+ final Event e = getEventUpcomming();
+ add(new Label("eventTitle", e.getTitle()));
+ add(new Label("eventTimeline", "Beginn: " + e.getStart().toString("HH:mm") + " - " + e.getEnd().toString("HH:mm") + " Uhr"));
+ } else {
+ // CASE 3: No Events near now..
+ add(new Label("eventTitle", "<img style=\"margin-top:-20%;\" src=\""+ new ContextPathResourceUrl("videoconf.png").toString() +"\"/>").setEscapeModelStrings(false));
+ add(new Label("eventTimeline", ""));
+ }
+
+ final Event next = getNextEvent();
+ if (next != null) {
+ final DateTime now = new DateTime(new Date());
+ if (next.getStart().getDayOfYear() - now.getDayOfYear() == 0) {
+ add(new Label("eventNext", "Nächste Veranstaltung: <br/>" + next.getTitle() +
+ " (Heute, " + next.getStart().toString("HH:mm") +
+ " - " + next.getEnd().toString("HH:mm") + "Uhr)"
+ ).setEscapeModelStrings(false));
+ } else if (next.getStart().getDayOfYear() - now.getDayOfYear() == 1) {
+ add(new Label("eventNext", "Nächste Veranstaltung: <br/>" + next.getTitle() +
+ " (Morgen, " + next.getStart().toString("HH:mm") +
+ " - " + next.getEnd().toString("HH:mm") + "Uhr)"
+ ).setEscapeModelStrings(false));
+ } else {
+ add(new Label("eventNext", "Nächste Veranstaltung: <br/>" + next.getTitle() +
+ " (" + next.getStart().toString("dd.MM.yyyy, HH:mm") +
+ " - " + next.getEnd().toString("HH:mm") + "Uhr)"
+ ).setEscapeModelStrings(false));
+ }
+ } else {
+ add(new Label("eventNext", ""));
+ }
+
+
+// Event next = getNextEvent();
+// if (next != null) {
+// add(new Label("label3", "next: " + next.getTitle() + " - " + next.getStart().toString()));
+// } else {
+// add(new Label("label3", "next: no future events found"));
+// }
+
+
+ }
+
+ private Event getEventRunning() {
+ DateTime now = new DateTime(new Date());
+ Collection<Event> events = getEventProvider().getEvents(now, now);
+ if (!events.isEmpty()) {
+ return events.iterator().next();
+ }
+ return null;
+ }
+
+ private boolean isEventRunning() {
+ return (getEventRunning() != null);
+ }
+
+
+ private Event getEventUpcomming() {
+ DateTime inTenMinutes = new DateTime(new Date()).plusMinutes(10);
+ Collection<Event> events = getEventProvider().getEvents(inTenMinutes, inTenMinutes);
+ if (!events.isEmpty()) {
+ return events.iterator().next();
+ }
+ return null;
+ }
+
+ private boolean isEventUpcomming() {
+ return (getEventUpcomming() != null);
+ }
+
+ private Event getNextEvent() {
+ final Event eventRunningNow = getEventRunning();
+ DateTime start;
+ if (eventRunningNow != null) {
+ start = eventRunningNow.getEnd().plusMinutes(1);
+ } else {
+ start = new DateTime(new Date());
+ }
+
+ Collection<Event> events = getEventProvider().getEvents(start, start.plusMonths(3));
+ if (!events.isEmpty()) {
+ return events.iterator().next();
+ }
+ return null;
}
public EventProvider getEventProvider() {
diff --git a/src/main/resources/de/unifr/rz/infoscreen/component/EventCalendar.html b/src/main/resources/de/unifr/rz/infoscreen/component/EventCalendar.html
index 0d2baeb..c8969d7 100644
--- a/src/main/resources/de/unifr/rz/infoscreen/component/EventCalendar.html
+++ b/src/main/resources/de/unifr/rz/infoscreen/component/EventCalendar.html
@@ -2,10 +2,50 @@
<html xmlns:wicket="http://wicket.apache.org">
<head>
<title>EventCalendar</title>
+<wicket:head>
+<style type="text/css">
+
+ .centerbox {
+ position:absolute;
+ left:50%;
+ margin-left:-40%;
+ width:80%;
+ top:38%;
+ text-align:center;
+ }
+
+ .eventTitle {
+ display:block;
+ text-shadow: 0 1px 0 #CCC;
+ color:#555;
+ }
+
+ .eventTimeline {
+ display:block;
+ text-shadow: 0 1px 0 #CCC;
+ color:#555;
+ }
+
+ .footer {
+ position: absolute;
+ left:50%;
+ margin-left:-30%;
+ width:60%;
+ bottom:15%;
+ text-align:center;
+ }
+ </style>
+</wicket:head>
</head>
<body>
<wicket:panel>
- event!!
+ <div class="centerbox">
+ <h1 wicket:id="eventTitle" class="eventTitle"></h1>
+ <h3 wicket:id="eventTimeline" class="eventTimeline"></h3>
+ </div>
+ <div class="footer">
+ <h4 wicket:id="eventNext" class="eventNext"></h4>
+ </div>
</wicket:panel>
</body>
</html> \ No newline at end of file
diff --git a/src/main/resources/de/unifr/rz/infoscreen/component/test.ics b/src/main/resources/de/unifr/rz/infoscreen/component/test.ics
deleted file mode 100644
index 5bfb987..0000000
--- a/src/main/resources/de/unifr/rz/infoscreen/component/test.ics
+++ /dev/null
@@ -1,67 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:QIS-LSF HIS GmbH
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Europe/Berlin
-X-LIC-LOCATION:Europe/Berlin
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
-END:STANDARD
-END:VTIMEZONE
-METHOD:PUBLISH
-BEGIN:VEVENT
-DTSTART;TZID=Europe/Berlin:20120903T080000
-DTEND;TZID=Europe/Berlin:20120903T120000
-EXDATE:
-LOCATION:KG II - Audimax
-DTSTAMP:20120910T121316Z
-UID:108075184056
-DESCRIPTION:
-SUMMARY:Landgericht Freiburg - Frau Kerner
-CATEGORIES:Klausur
-END:VEVENT
-BEGIN:VEVENT
-DTSTART;TZID=Europe/Berlin:20120906T080000
-DTEND;TZID=Europe/Berlin:20120906T140000
-EXDATE:
-LOCATION:KG II - Audimax
-DTSTAMP:20120910T121316Z
-UID:112467194866
-DESCRIPTION:
-SUMMARY:Landeslehrerprüfungsamt - Frau Thegtmeier
-CATEGORIES:Klausur
-END:VEVENT
-BEGIN:VEVENT
-DTSTART;TZID=Europe/Berlin:20120906T180000
-DTEND;TZID=Europe/Berlin:20120906T200000
-EXDATE:
-LOCATION:KG II - Audimax
-DTSTAMP:20120910T121316Z
-UID:102150172358
-DESCRIPTION:
-SUMMARY:Rechtswissenschaftliche Fakultät - Klausurenkurs - Frau Waldenberger
-CATEGORIES:Kurs
-END:VEVENT
-BEGIN:VEVENT
-DTSTART;TZID=Europe/Berlin:20120908T080000
-DTEND;TZID=Europe/Berlin:20120908T130000
-EXDATE:
-LOCATION:KG II - Audimax
-DTSTAMP:20120910T121316Z
-UID:102150172359
-DESCRIPTION:
-SUMMARY:Rechtswissenschaftliche Fakultät - Klausurenkurs - Frau Waldenberger
-CATEGORIES:Kurs
-END:VEVENT
-END:VCALENDAR \ No newline at end of file
diff --git a/src/main/resources/de/unifr/rz/infoscreen/component/test.ics.orage b/src/main/resources/de/unifr/rz/infoscreen/component/test.ics.orage
deleted file mode 100644
index e69de29..0000000
--- a/src/main/resources/de/unifr/rz/infoscreen/component/test.ics.orage
+++ /dev/null
diff --git a/src/main/webapp/img/videoconf.png b/src/main/webapp/img/videoconf.png
new file mode 100644
index 0000000..9b5e4b8
--- /dev/null
+++ b/src/main/webapp/img/videoconf.png
Binary files differ
diff --git a/test.ics b/test.ics
deleted file mode 100644
index 5bfb987..0000000
--- a/test.ics
+++ /dev/null
@@ -1,67 +0,0 @@
-BEGIN:VCALENDAR
-PRODID:QIS-LSF HIS GmbH
-VERSION:2.0
-BEGIN:VTIMEZONE
-TZID:Europe/Berlin
-X-LIC-LOCATION:Europe/Berlin
-BEGIN:DAYLIGHT
-TZOFFSETFROM:+0100
-TZOFFSETTO:+0200
-TZNAME:CEST
-DTSTART:19700329T020000
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
-END:DAYLIGHT
-BEGIN:STANDARD
-TZOFFSETFROM:+0200
-TZOFFSETTO:+0100
-TZNAME:CET
-DTSTART:19701025T030000
-RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
-END:STANDARD
-END:VTIMEZONE
-METHOD:PUBLISH
-BEGIN:VEVENT
-DTSTART;TZID=Europe/Berlin:20120903T080000
-DTEND;TZID=Europe/Berlin:20120903T120000
-EXDATE:
-LOCATION:KG II - Audimax
-DTSTAMP:20120910T121316Z
-UID:108075184056
-DESCRIPTION:
-SUMMARY:Landgericht Freiburg - Frau Kerner
-CATEGORIES:Klausur
-END:VEVENT
-BEGIN:VEVENT
-DTSTART;TZID=Europe/Berlin:20120906T080000
-DTEND;TZID=Europe/Berlin:20120906T140000
-EXDATE:
-LOCATION:KG II - Audimax
-DTSTAMP:20120910T121316Z
-UID:112467194866
-DESCRIPTION:
-SUMMARY:Landeslehrerprüfungsamt - Frau Thegtmeier
-CATEGORIES:Klausur
-END:VEVENT
-BEGIN:VEVENT
-DTSTART;TZID=Europe/Berlin:20120906T180000
-DTEND;TZID=Europe/Berlin:20120906T200000
-EXDATE:
-LOCATION:KG II - Audimax
-DTSTAMP:20120910T121316Z
-UID:102150172358
-DESCRIPTION:
-SUMMARY:Rechtswissenschaftliche Fakultät - Klausurenkurs - Frau Waldenberger
-CATEGORIES:Kurs
-END:VEVENT
-BEGIN:VEVENT
-DTSTART;TZID=Europe/Berlin:20120908T080000
-DTEND;TZID=Europe/Berlin:20120908T130000
-EXDATE:
-LOCATION:KG II - Audimax
-DTSTAMP:20120910T121316Z
-UID:102150172359
-DESCRIPTION:
-SUMMARY:Rechtswissenschaftliche Fakultät - Klausurenkurs - Frau Waldenberger
-CATEGORIES:Kurs
-END:VEVENT
-END:VCALENDAR \ No newline at end of file