package org.fluxtream.connectors.google_calendar; import com.google.api.client.util.DateTime; import com.google.api.services.calendar.model.Event; import com.google.api.services.calendar.model.EventAttendee; import com.google.api.services.calendar.model.EventDateTime; import com.google.gson.Gson; import org.fluxtream.core.connectors.annotations.ObjectTypeSpec; import org.fluxtream.core.domain.AbstractRepeatableFacet; import org.hibernate.annotations.Index; import org.joda.time.DateTimeConstants; import javax.persistence.Entity; import javax.persistence.Lob; import java.sql.Date; import java.util.List; /** * User: candide * Date: 27/07/13 * Time: 16:24 */ @Entity(name="Facet_GoogleCalendarEvent") @ObjectTypeSpec(name = "entry", value = 1, prettyname = "Event", isMixedType = true) public class GoogleCalendarEventFacet extends AbstractRepeatableFacet { @Index(name="googleId") public String googleId; @Lob public String etag; public Boolean endTimeUnspecified; public Boolean guestsCanSeeOtherGuests; @Lob public String hangoutLink; @Lob public String htmlLink; @Lob public String iCalUID; @Lob public String kind; @Lob public String location; public Boolean locked; @Lob public String status; @Lob public String colorId; @Lob public String description; @Lob public String summary; public long originalStartTime; public long created; public long eventUpdated; @Lob public String creatorStorage; @Lob public String organizerStorage; public int startTimezoneShift; public int endTimezoneShift; public String calendarId; public String transparency; public String visibility; public Integer sequence; @Lob public String attendeesStorage; @Lob public String recurrence; static Gson gson; public GoogleCalendarEventFacet() {super();} public GoogleCalendarEventFacet(final Long apiKeyId) { super(apiKeyId); } public String recurringEventId; @Override protected void makeFullTextIndexable() { fullTextDescription = summary; } public void setStart(final EventDateTime start) { if (start!=null) { if (start.getDateTime()!=null) { this.start = start.getDateTime().getValue(); this.startTimezoneShift = start.getDateTime().getTimeZoneShift(); } else if (start.getDate()!=null) { this.allDayEvent = true; this.startDate = new Date(start.getDate().getValue()); this.start = start.getDate().getValue(); this.startTimezoneShift = start.getDate().getTimeZoneShift(); } } } public void setEnd(final EventDateTime end) { if (end!=null) { if (end.getDateTime()!=null) { this.end = end.getDateTime().getValue(); this.endTimezoneShift = end.getDateTime().getTimeZoneShift(); } else if (end.getDate()!=null) { this.allDayEvent = true; this.endDate = new Date(end.getDate().getValue()- DateTimeConstants.MILLIS_PER_DAY); this.end = end.getDate().getValue(); this.endTimezoneShift = end.getDate().getTimeZoneShift(); } } } public void setOriginalStartTime(final EventDateTime originalStartTime) { if (originalStartTime!=null) { if (originalStartTime.getDateTime()!=null) { this.originalStartTime = originalStartTime.getDateTime().getValue(); } else if (originalStartTime.getDate()!=null) { this.allDayEvent = true; this.originalStartTime = originalStartTime.getDate().getValue(); } } } public void setCreated(final DateTime created) { if (created!=null) this.created = created.getValue(); } public void setAttendees(final List<EventAttendee> attendees) { if (attendees==null) return; StringBuilder sb = new StringBuilder(); for (EventAttendee attendee : attendees) { if (sb.length()>0) sb.append("|"); sb.append(attendee.toString()); } attendeesStorage = sb.toString(); } public void setCreator(final Event.Creator creator) { if (creator!=null) this.creatorStorage = creator.toString(); } public void setOrganizer(final Event.Organizer organizer) { if (organizer!=null) organizerStorage = organizer.toString(); } public void setRecurrence(final List<String> recurrence) { if (recurrence!=null&&recurrence.size()>0) { StringBuilder sb = new StringBuilder(); for (String s : recurrence) { if (sb.length()>0) sb.append("|"); sb.append(s); } this.recurrence = sb.toString(); } } public void setUpdated(final DateTime updated) { if (updated!=null) this.eventUpdated = updated.getValue(); } @Override public boolean allDay() { return true; } }