diff options
Diffstat (limited to 'src/com/google/wireless/gdata/calendar/client/CalendarClient.java')
-rw-r--r-- | src/com/google/wireless/gdata/calendar/client/CalendarClient.java | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/com/google/wireless/gdata/calendar/client/CalendarClient.java b/src/com/google/wireless/gdata/calendar/client/CalendarClient.java new file mode 100644 index 0000000..8710079 --- /dev/null +++ b/src/com/google/wireless/gdata/calendar/client/CalendarClient.java @@ -0,0 +1,104 @@ +// Copyright 2007 The Android Open Source Project + +package com.google.wireless.gdata.calendar.client; + +import com.google.wireless.gdata.calendar.data.CalendarEntry; +import com.google.wireless.gdata.client.AuthenticationException; +import com.google.wireless.gdata.client.GDataClient; +import com.google.wireless.gdata.client.GDataParserFactory; +import com.google.wireless.gdata.client.GDataServiceClient; +import com.google.wireless.gdata.client.HttpException; +import com.google.wireless.gdata.client.QueryParams; +import com.google.wireless.gdata.client.AllDeletedUnavailableException; +import com.google.wireless.gdata.parser.GDataParser; +import com.google.wireless.gdata.parser.ParseException; + +import java.io.IOException; +import java.io.InputStream; + +/** + * GDataServiceClient for accessing Google Calendar. This client can access and + * parse both the meta feed (list of calendars for a user) and events feeds + * (calendar entries for a specific user). The parsers this class uses handle + * the XML version of feeds. + */ +// TODO: add a method that applies projections such as cutting the attendees. +public class CalendarClient extends GDataServiceClient { + /** Service value for calendar. */ + public static final String SERVICE = "cl"; + + public static final String PROJECTION_PRIVATE_FULL = "/private/full"; + public static final String PROJECTION_PRIVATE_SELF_ATTENDANCE = "/private/full-selfattendance"; + + /** Standard base url for a calendar feed. */ + private static final String CALENDAR_BASE_FEED_URL = + "http://www.google.com/calendar/feeds/"; + + /** + * Create a new CalendarClient. Uses the standard base URL for calendar feeds. + * @param client The GDataClient that should be used to authenticate + * requests, retrieve feeds, etc. + * @param factory The factory that should be used to obtain {@link GDataParser}s used by this + * client. + */ + public CalendarClient(GDataClient client, GDataParserFactory factory) { + super(client, factory); + } + + /* (non-Javadoc) + * @see GDataServiceClient#getServiceName + */ + public String getServiceName() { + return SERVICE; + } + + /** + * Returns the url for the default feed for a user, after applying the + * provided QueryParams. + * @param username The username for this user. + * @param projection the projection to use + * @param params The QueryParams that should be applied to the default feed. + * @return The url that should be used to retrieve a user's default feed. + */ + public String getDefaultCalendarUrl(String username, String projection, QueryParams params) { + String feedUrl = CALENDAR_BASE_FEED_URL + getGDataClient().encodeUri(username); + feedUrl += projection; + if (params == null) { + return feedUrl; + } + return params.generateQueryUrl(feedUrl); + } + + /** + * Returns the url for the metafeed for user, which contains the information about + * the user's calendars. + * @param username The username for this user. + * @return The url that should be used to retrieve a user's default feed. + */ + public String getUserCalendarsUrl(String username) { + return CALENDAR_BASE_FEED_URL + getGDataClient().encodeUri(username); + } + + /** + * Fetches the meta feed containing the list of calendars for a user. The + * caller is responsible for closing the returned {@link GDataParser}. + * + * @param feedUrl the URL of the user calendars feed + * @param authToken The authentication token for this user + * @return A GDataParser with the meta feed containing the list of + * calendars for this user. + * @throws ParseException Thrown if the feed could not be fetched. + */ + public GDataParser getParserForUserCalendars(String feedUrl, String authToken) + throws AuthenticationException, ParseException, IOException, + AllDeletedUnavailableException { + GDataClient gDataClient = getGDataClient(); + try { + InputStream is = gDataClient.getFeedAsStream(feedUrl, authToken); + return getGDataParserFactory().createParser(CalendarEntry.class, is); + } catch (HttpException e) { + convertHttpExceptionForReads("Could not fetch calendars feed", e); + return null; // never reached + } + } +} |