Add required properties for caldav
Now we've got the basics of webdav browsing working, we can add some properties to allow Milton's Caldav framework to talk to Caldav clients.
The first thing you need to do is tell milton where a user's calendars are. So just add the @Calendars annotation to the getCalendarsHome method:
@ChildrenOf @Calendars public Calendar getCalendarsHome(CalendarsHome cals) { return new Calendar(cals.user); }
And we need to have unique ID's and modified dates for calendar events, because caldav clients use this information to syncronise their copy of the events database:
@UniqueId public long getUniqueId(Meeting m) { return m.getId(); } @ModifiedDate public Date getModifiedDate(Meeting m) { return m.getModifiedDate(); }
And, some caldav clients want to retrieve the calendar data as a property instead of by downloading it. To permit this we just add the @IcalData annotation to our @Get method:
@Get @ICalData public byte[] getMeetingData(Meeting m) { return m.getIcalData(); }
Thats it! There's a bunch of other things you can, and probably should, implement. Such as @Ctag and @CalendarColor, but milton provides sensible defaults for those.
The End Result
So i just connected to thunderbird using:
URL: http://localhost:8080/users/jack/cals/default/
User: jack
Password: password
Then i created an event, and it looks like this: