private void createOrUpdateEvent( final UpdateInfo updateInfo, final CalendarListEntry calendarEntry, final Event event) throws Exception { if (event.getStatus().equalsIgnoreCase("cancelled")) { System.out.println( "event " + event.getSummary() + "/" + event.getDescription() + " was canceled"); final int deleted = jpaDaoService.execute( String.format( "DELETE FROM Facet_GoogleCalendarEvent facet WHERE " + "facet.apiKeyId=%s AND facet.googleId='%s'", updateInfo.apiKey.getId(), event.getId())); System.out.println("deleted " + deleted + " calendar entry"); return; } final String googleIdHash = hash(event.getId()); final String calendarIdHash = hash(calendarEntry.getId()); final ApiDataService.FacetQuery facetQuery = new ApiDataService.FacetQuery( "e.apiKeyId=? AND (e.googleId=? OR e.googleId=?) AND (e.calendarId=? OR e.calendarId=?)", updateInfo.apiKey.getId(), event.getId(), googleIdHash, calendarEntry.getId(), calendarIdHash); final ApiDataService.FacetModifier<GoogleCalendarEventFacet> facetModifier = new ApiDataService.FacetModifier<GoogleCalendarEventFacet>() { @Override public GoogleCalendarEventFacet createOrModify( GoogleCalendarEventFacet facet, final Long apiKeyId) { if (facet == null) { facet = new GoogleCalendarEventFacet(updateInfo.apiKey.getId()); facet.googleId = event.getId().length() > 250 ? googleIdHash : event.getId(); facet.guestId = updateInfo.apiKey.getGuestId(); facet.api = updateInfo.apiKey.getConnector().value(); facet.calendarId = calendarEntry.getId().length() > 250 ? calendarIdHash : calendarEntry.getId(); } facet.summary = event.getSummary(); facet.setCreated(event.getCreated()); facet.setAttendees(event.getAttendees()); facet.etag = event.getEtag(); facet.setStart(event.getStart()); facet.endTimeUnspecified = event.getEndTimeUnspecified(); facet.setEnd(event.getEnd()); facet.colorId = event.getColorId(); facet.setCreator(event.getCreator()); facet.description = event.getDescription(); facet.guestsCanSeeOtherGuests = event.getGuestsCanSeeOtherGuests(); facet.hangoutLink = event.getHangoutLink(); facet.htmlLink = event.getHtmlLink(); facet.iCalUID = event.getICalUID(); facet.kind = event.getKind(); facet.location = event.getLocation(); facet.locked = event.getLocked(); facet.setOrganizer(event.getOrganizer()); facet.setOriginalStartTime(event.getOriginalStartTime()); facet.status = event.getStatus(); facet.timeUpdated = System.currentTimeMillis(); facet.transparency = event.getTransparency(); facet.visibility = event.getVisibility(); facet.setRecurrence(event.getRecurrence()); if (event.getRecurringEventId() != null) { final String recurringEventIdHash = hash(event.getRecurringEventId()); facet.recurringEventId = event.getRecurringEventId().length() > 250 ? recurringEventIdHash : event.getRecurringEventId(); } facet.sequence = event.getSequence(); facet.setUpdated(event.getUpdated()); return facet; } }; // we could use the resulting value (facet) from this call if we needed to do further processing // on it (e.g. passing it on to the datastore) apiDataService.createOrReadModifyWrite( GoogleCalendarEventFacet.class, facetQuery, facetModifier, updateInfo.apiKey.getId()); }