Files
tlw-database-tool/src/main/java/de/jeyp91/googlecalendar/ConditionalRetrievalSample.java

82 lines
3.3 KiB
Java

/*
* Copyright (c) 2014 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package de.jeyp91.googlecalendar;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.HttpHeaders;
import com.google.api.services.calendar.Calendar;
import com.google.api.services.calendar.CalendarScopes;
import com.google.api.services.calendar.model.Event;
import com.google.common.collect.Lists;
import java.io.IOException;
import java.util.List;
/**
* A sample that demonstrates how to determine if a
* <a href="https://developers.google.com/google-apps/calendar/v3/reference/">Calendar resource</a>
* has been modified since you last retrieved it. It does this by passing along the etag of the
* resource being retrieved in the "If-None-Match" HTTP header of the request, which will cause the
* request to fail if the version on the server is the same as the local version.
*
* @author ekoleda+devrel@google.com (Eric Koleda)
*/
public class ConditionalRetrievalSample {
/** Global instance of the Calendar client. */
private static Calendar client;
public static void main(String[] args) {
try {
List<String> scopes = Lists.newArrayList(CalendarScopes.CALENDAR);
client = Utils.createCalendarClient(scopes);
run();
} catch (Throwable t) {
t.printStackTrace();
System.exit(1);
}
}
/**
* Creates a test event, pauses while the user modifies the event in the Calendar UI, and then
* checks if the event has been modified.
*/
private static void run() throws IOException {
// Create a test event.
Event event = Utils.createTestEvent(client, "Test Event");
System.out.println(String.format("Event created: %s", event.getHtmlLink()));
// Pause while the user modifies the event in the Calendar UI.
System.out.println("Modify the event's description and hit enter to continue.");
System.in.read();
// Fetch the event again if it's been modified.
Calendar.Events.Get getRequest = client.events().get("primary", event.getId());
getRequest.setRequestHeaders(new HttpHeaders().setIfNoneMatch(event.getEtag()));
try {
event = getRequest.execute();
System.out.println("The event was modified, retrieved latest version.");
} catch (GoogleJsonResponseException e) {
if (e.getStatusCode() == 304) {
// A 304 status code, "Not modified", indicates that the etags match, and the event has
// not been modified since we last retrieved it.
System.out.println("The event was not modified, using local version.");
} else {
throw e;
}
}
}
}