diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
commit | 27eda2eccd3729366a5545a21238ee9b2960171c (patch) | |
tree | 998a9af735ff91bb16c05e8411ac282c1fb57b48 /src/com/google/wireless/gdata/calendar/parser/xml/XmlCalendarsGDataParser.java | |
download | gdata-27eda2eccd3729366a5545a21238ee9b2960171c.tar.gz |
Initial Contributionandroid-1.0release-1.0cdma-import
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.java | 132 |
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); + } + } +} |