package org.fluxtream.connectors.google_calendar; import com.google.api.client.json.jackson.JacksonFactory; import com.google.api.services.calendar.model.Event; import com.google.api.services.calendar.model.EventAttendee; import org.fluxtream.core.OutsideTimeBoundariesException; import org.fluxtream.core.TimeInterval; import org.fluxtream.core.connectors.vos.AbstractTimedFacetVO; import org.fluxtream.core.connectors.vos.AllDayVO; import org.fluxtream.core.domain.GuestSettings; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * User: candide * Date: 28/07/13 * Time: 21:39 */ public class GoogleCalendarEventFacetVO extends AbstractTimedFacetVO<GoogleCalendarEventFacet> implements AllDayVO { public String summary; public String description; public long apiKeyId; public String calendarId; public List<EventAttendee> attendees; public Event.Creator creator; public Event.Organizer organizer; public String location; public boolean recurringEvent; public String hangoutLink; private transient boolean allDayEvent; @Override protected void fromFacet(final GoogleCalendarEventFacet facet, final TimeInterval timeInterval, final GuestSettings settings) throws OutsideTimeBoundariesException { try { this.allDayEvent = facet.allDayEvent; JacksonFactory jacksonFactory = new JacksonFactory(); if (facet.attendeesStorage!=null) { this.attendees = new ArrayList<EventAttendee>(); String[] attendees = facet.attendeesStorage.split("\\|"); for (String attendee : attendees) { final EventAttendee eventAttendee = jacksonFactory.fromString(attendee, EventAttendee.class); eventAttendee.put("attendeeStatusClass", toCssClass(eventAttendee.getResponseStatus())); this.attendees.add(eventAttendee); } } if (facet.creatorStorage!=null) creator = jacksonFactory.fromString(facet.creatorStorage, Event.Creator.class); if (facet.organizerStorage!=null) organizer = jacksonFactory.fromString(facet.organizerStorage, Event.Organizer.class); this.description = facet.description; this.summary = facet.summary; this.apiKeyId = facet.apiKeyId; this.calendarId = facet.calendarId; if (facet.location!=null) this.location = facet.location.equals("")?null:facet.location; this.recurringEvent = facet.recurringEventId!=null; this.hangoutLink = facet.hangoutLink; } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } private Object toCssClass(final String responseStatus) { if (responseStatus.equalsIgnoreCase("accepted")) return "icon-ok"; else if (responseStatus.equalsIgnoreCase("needsAction")) return "icon-warning-sign"; else if (responseStatus.equalsIgnoreCase("tentative")) return "icon-question"; else if (responseStatus.equalsIgnoreCase("declined")) return "icon-ban-circle"; return ""; } @Override public boolean allDay() { return this.allDayEvent; } }