Search in sources :

Example 1 with CalendarData

use of org.osaf.caldav4j.model.request.CalendarData in project openmeetings by apache.

the class EtagsHandler method internalSyncItems.

@Override
DavMethodBase internalSyncItems() throws IOException, DavException {
    Long ownerId = this.calendar.getOwner().getId();
    Map<String, Appointment> map = listToMap(appointmentDao.getHrefsbyCalendar(calendar.getId()), appointmentDao.getbyCalendar(calendar.getId()));
    DavPropertyNameSet properties = new DavPropertyNameSet();
    properties.add(DavPropertyName.GETETAG);
    CompFilter vcalendar = new CompFilter(Calendar.VCALENDAR);
    vcalendar.addCompFilter(new CompFilter(Component.VEVENT));
    CalendarQuery query = new CalendarQuery(properties, vcalendar, map.isEmpty() ? new CalendarData() : null, false, false);
    CalDAVReportMethod method = new CalDAVReportMethod(path, query, CalDAVConstants.DEPTH_1);
    client.executeMethod(method);
    if (method.succeeded()) {
        MultiStatusResponse[] multiStatusResponses = method.getResponseBodyAsMultiStatus().getResponses();
        if (map.isEmpty()) {
            // Parse the responses into Appointments
            for (MultiStatusResponse response : multiStatusResponses) {
                if (response.getStatus()[0].getStatusCode() == SC_OK) {
                    String etag = CalendarDataProperty.getEtagfromResponse(response);
                    Calendar ical = CalendarDataProperty.getCalendarfromResponse(response);
                    Appointment appointments = utils.parseCalendartoAppointment(ical, response.getHref(), etag, calendar);
                    appointmentDao.update(appointments, ownerId);
                }
            }
        } else {
            // Calendar has been inited before
            List<String> currenthrefs = new ArrayList<>();
            for (MultiStatusResponse response : multiStatusResponses) {
                if (response.getStatus()[0].getStatusCode() == SC_OK) {
                    Appointment appointment = map.get(response.getHref());
                    // Event updated
                    if (appointment != null) {
                        String origetag = appointment.getEtag(), currentetag = CalendarDataProperty.getEtagfromResponse(response);
                        // If etag is modified
                        if (!currentetag.equals(origetag)) {
                            currenthrefs.add(appointment.getHref());
                        }
                        map.remove(response.getHref());
                    } else {
                        // The orig list of events doesn't contain this event.
                        currenthrefs.add(response.getHref());
                    }
                }
            }
            // Remaining Events have been deleted on the server, thus delete them
            for (Map.Entry<String, Appointment> entry : map.entrySet()) {
                appointmentDao.delete(entry.getValue(), ownerId);
            }
            // Get the rest of the events through a Multiget Handler.
            MultigetHandler multigetHandler = new MultigetHandler(currenthrefs, path, calendar, client, appointmentDao, utils);
            releaseConnection(method);
            return multigetHandler.internalSyncItems();
        }
    } else {
        log.error("Report Method return Status: {} for calId {} ", method.getStatusCode(), calendar.getId());
    }
    return method;
}
Also used : Appointment(org.apache.openmeetings.db.entity.calendar.Appointment) CalDAVReportMethod(org.osaf.caldav4j.methods.CalDAVReportMethod) OmCalendar(org.apache.openmeetings.db.entity.calendar.OmCalendar) Calendar(net.fortuna.ical4j.model.Calendar) MultiStatusResponse(org.apache.jackrabbit.webdav.MultiStatusResponse) ArrayList(java.util.ArrayList) CompFilter(org.osaf.caldav4j.model.request.CompFilter) CalendarData(org.osaf.caldav4j.model.request.CalendarData) CalendarQuery(org.osaf.caldav4j.model.request.CalendarQuery) DavPropertyNameSet(org.apache.jackrabbit.webdav.property.DavPropertyNameSet) Map(java.util.Map)

Aggregations

ArrayList (java.util.ArrayList)1 Map (java.util.Map)1 Calendar (net.fortuna.ical4j.model.Calendar)1 MultiStatusResponse (org.apache.jackrabbit.webdav.MultiStatusResponse)1 DavPropertyNameSet (org.apache.jackrabbit.webdav.property.DavPropertyNameSet)1 Appointment (org.apache.openmeetings.db.entity.calendar.Appointment)1 OmCalendar (org.apache.openmeetings.db.entity.calendar.OmCalendar)1 CalDAVReportMethod (org.osaf.caldav4j.methods.CalDAVReportMethod)1 CalendarData (org.osaf.caldav4j.model.request.CalendarData)1 CalendarQuery (org.osaf.caldav4j.model.request.CalendarQuery)1 CompFilter (org.osaf.caldav4j.model.request.CompFilter)1