summaryrefslogtreecommitdiff
path: root/src/com/google/wireless/gdata/calendar/parser/xml/XmlCalendarsGDataParser.java
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2008-10-21 07:00:00 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2008-10-21 07:00:00 -0700
commit27eda2eccd3729366a5545a21238ee9b2960171c (patch)
tree998a9af735ff91bb16c05e8411ac282c1fb57b48 /src/com/google/wireless/gdata/calendar/parser/xml/XmlCalendarsGDataParser.java
downloadgdata-27eda2eccd3729366a5545a21238ee9b2960171c.tar.gz
Diffstat (limited to 'src/com/google/wireless/gdata/calendar/parser/xml/XmlCalendarsGDataParser.java')
-rw-r--r--src/com/google/wireless/gdata/calendar/parser/xml/XmlCalendarsGDataParser.java132
1 files changed, 132 insertions, 0 deletions
diff --git a/src/com/google/wireless/gdata/calendar/parser/xml/XmlCalendarsGDataParser.java b/src/com/google/wireless/gdata/calendar/parser/xml/XmlCalendarsGDataParser.java
new file mode 100644
index 0000000..2879780
--- /dev/null
+++ b/src/com/google/wireless/gdata/calendar/parser/xml/XmlCalendarsGDataParser.java
@@ -0,0 +1,132 @@
+// Copyright 2007 The Android Open Source Project
+
+package com.google.wireless.gdata.calendar.parser.xml;
+
+import com.google.wireless.gdata.calendar.data.CalendarEntry;
+import com.google.wireless.gdata.calendar.data.CalendarsFeed;
+import com.google.wireless.gdata.data.Entry;
+import com.google.wireless.gdata.data.Feed;
+import com.google.wireless.gdata.parser.ParseException;
+import com.google.wireless.gdata.parser.xml.XmlGDataParser;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * GDataParser for the meta feed listing a user's calendars.
+ */
+public class XmlCalendarsGDataParser extends XmlGDataParser {
+
+ /**
+ * Creates a new XmlCalendarsGDataParser.
+ * @param is The InputStream containing the calendars feed.
+ * @throws ParseException Thrown if an XmlPullParser could not be created.
+ */
+ public XmlCalendarsGDataParser(InputStream is, XmlPullParser parser)
+ throws ParseException {
+ super(is, parser);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.google.wireless.gdata.parser.xml.XmlGDataParser#createFeed()
+ */
+ protected Feed createFeed() {
+ return new CalendarsFeed();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.google.wireless.gdata.parser.xml.XmlGDataParser#createEntry()
+ */
+ protected Entry createEntry() {
+ return new CalendarEntry();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see XmlGDataParser#handleExtraElementInEntry
+ */
+ protected void handleExtraElementInEntry(Entry entry)
+ throws XmlPullParserException, IOException {
+
+ XmlPullParser parser = getParser();
+
+ if (!(entry instanceof CalendarEntry)) {
+ throw new IllegalArgumentException("Expected CalendarEntry!");
+ }
+ CalendarEntry calendarEntry = (CalendarEntry) entry;
+
+ // NOTE: all of these names are assumed to be in the "gcal" namespace.
+ // we do not bother checking that here.
+ String name = parser.getName();
+ if ("accesslevel".equals(name)) {
+ String accesslevelStr = parser.getAttributeValue(null /* ns */,
+ "value");
+ byte accesslevel = CalendarEntry.ACCESS_READ;
+ if ("none".equals(accesslevelStr)) {
+ accesslevel = CalendarEntry.ACCESS_NONE;
+ } else if ("read".equals(accesslevelStr)) {
+ accesslevel = CalendarEntry.ACCESS_READ;
+ } else if ("freebusy".equals(accesslevelStr)) {
+ accesslevel = CalendarEntry.ACCESS_FREEBUSY;
+ } else if ("contributor".equals(accesslevelStr)) {
+ accesslevel = CalendarEntry.ACCESS_CONTRIBUTOR;
+ } else if ("owner".equals(accesslevelStr)) {
+ accesslevel = CalendarEntry.ACCESS_OWNER;
+ }
+ calendarEntry.setAccessLevel(accesslevel);
+ } else if ("color".equals(name)) {
+ String color =
+ parser.getAttributeValue(null /* ns */, "value");
+ calendarEntry.setColor(color);
+ } else if ("hidden".equals(name)) {
+ String hiddenStr =
+ parser.getAttributeValue(null /* ns */, "value");
+ boolean hidden = false;
+ if ("false".equals(hiddenStr)) {
+ hidden = false;
+ } else if ("true".equals(hiddenStr)) {
+ hidden = true;
+ }
+ calendarEntry.setHidden(hidden);
+ // if the calendar is hidden, it cannot be selected.
+ if (hidden) {
+ calendarEntry.setSelected(false);
+ }
+ } else if ("selected".equals(name)) {
+ String selectedStr =
+ parser.getAttributeValue(null /* ns */, "value");
+ boolean selected = false;
+ if ("false".equals(selectedStr)) {
+ selected = false;
+ } else if ("true".equals(selectedStr)) {
+ selected = true;
+ }
+ calendarEntry.setSelected(selected);
+ } else if ("timezone".equals(name)) {
+ String timezone =
+ parser.getAttributeValue(null /* ns */, "value");
+ calendarEntry.setTimezone(timezone);
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see XmlGDataParser#handleExtraLinkInEntry
+ */
+ protected void handleExtraLinkInEntry(String rel,
+ String type,
+ String href,
+ Entry entry)
+ throws XmlPullParserException, IOException {
+ if (("alternate".equals(rel)) &&
+ ("application/atom+xml".equals(type))) {
+ CalendarEntry calendarEntry = (CalendarEntry) entry;
+ calendarEntry.setAlternateLink(href);
+ }
+ }
+}