Java/Liferay: iCal-Datei erzeugen und ausliefern [UPDATE]

Wer mit Liferay (genauer: Mit einem Portlet) eine iCal-Datei ausliefern will, benötigt zuerst mal iCal4j. Ich brauchte die JARs backport-util-concurrent-3.1 und ical4j-1.0.3, aber vermutlich benötigt man auch noch commons-lang-2.6 und commons-logging-1.1.1, davon habe ich (ältere) bereits durch/für Liferay im Projekt. Die anderen brauchte ich nicht.

Anmerkung: Außerdem habe ich eine leere Datei namens ical4j.properties direkt in src angelegt, um eine Warnung zu unterdrücken.

Um eine Ressource abzurufen, nutze ich die ResourceURL von Liferay, in meinem Fall plus einer Event-ID:

Ein Aufruf der URL landet in der serveResource() meines Portlets, und mündet in der Erzeugung des Files:

ACHTUNG: Wer einen Termin mit Startzeit (und Endzeit) erzeugen will, muss dem VEvent ein (zwei) Objekte vom Typ DateTime statt Date übergeben!

Quellen: Basis, verschiedene iCal4j-Fehlermeldungen, Filename setzen, ICS Mime type, Unterschied Date/DateTime 😉

Wer rausfindet, warum mir beim Validieren ein “Parameter [VALUE] must only be specified once” geworfen wird, bekommt ein Bier! EDIT: Es lag an der jetzt auskommentierten Zeile! Prost!