src/org/gege/caldavsyncadapter/caldav/xml/CalendarsHandler.java

Tue, 10 Feb 2015 18:12:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 10 Feb 2015 18:12:00 +0100
changeset 0
fb9019fb1bf7
permissions
-rw-r--r--

Import initial revisions of existing project AndroidCaldavSyncAdapater,
forked from upstream repository at 27e8a0f8495c92e0780d450bdf0c7cec77a03a55.

     1 /**
     2  * Copyright (c) 2012-2013, David Wiesner
     3  * 
     4  * This file is part of Andoid Caldav Sync Adapter Free.
     5  *
     6  * Andoid Caldav Sync Adapter Free is free software: you can redistribute 
     7  * it and/or modify it under the terms of the GNU General Public License 
     8  * as published by the Free Software Foundation, either version 3 of the 
     9  * License, or at your option any later version.
    10  *
    11  * Andoid Caldav Sync Adapter Free is distributed in the hope that 
    12  * it will be useful, but WITHOUT ANY WARRANTY; without even the implied 
    13  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    14  * GNU General Public License for more details.
    15  *
    16  * You should have received a copy of the GNU General Public License
    17  * along with Andoid Caldav Sync Adapter Free.  
    18  * If not, see <http://www.gnu.org/licenses/>.
    19  * 
    20  */
    22 package org.gege.caldavsyncadapter.caldav.xml;
    24 import java.net.URI;
    25 import java.net.URISyntaxException;
    26 import java.util.ArrayList;
    27 import java.util.Arrays;
    28 import java.util.List;
    30 import org.gege.caldavsyncadapter.BuildConfig;
    31 import org.gege.caldavsyncadapter.caldav.entities.DavCalendar;
    32 import org.gege.caldavsyncadapter.caldav.entities.DavCalendar.CalendarSource;
    33 import org.xml.sax.Attributes;
    34 import org.xml.sax.SAXException;
    35 import org.xml.sax.helpers.DefaultHandler;
    37 import android.util.Log;
    39 public class CalendarsHandler extends DefaultHandler {
    41 	private static final String CALENDAR = "calendar";
    42 	private static final String RESOURCETYPE = "resourcetype";
    43 	private static final String CALENDAR_COLOR = "calendar-color";
    44 	private static final String GETCTAG = "getctag";
    45 	private static final String DISPLAYNAME = "displayname";
    46 	private URI homeURI;
    48 	public CalendarsHandler(URI homeURI) {
    49 		this.homeURI = homeURI;
    50 	}
    52 	private static final String RESPONSE = "response";
    53 	private static final String HREF = "href";
    55 	private StringBuilder stringBuilder = new StringBuilder();
    56 	private String currentElement;
    57 	private DavCalendar calendar;
    58 	public List<DavCalendar> calendars = new ArrayList<DavCalendar>();
    59 	private boolean isInResourceType = false;
    60 	private boolean isCalendarResource;
    62 	public final static List<String> TAGS = Arrays.asList(HREF, RESOURCETYPE,
    63 			DISPLAYNAME, GETCTAG, CALENDAR_COLOR);
    65 	@Override
    66 	public void startElement(String uri, String localName, String qName,
    67 			Attributes attributes) throws SAXException {
    68 		if (RESPONSE.equals(localName)) {
    69 			calendar = new DavCalendar(CalendarSource.CalDAV);
    70 			isCalendarResource = false;
    71 		} else if (RESOURCETYPE.equals(localName)) {
    72 			isInResourceType = true;
    73 		} else if (isInResourceType && CALENDAR.equals(localName)) {
    74 			isCalendarResource = true;
    75 		}
    76 		currentElement = localName;
    77 		stringBuilder.setLength(0);
    78 	}
    80 	@Override
    81 	public void characters(char[] ch, int start, int length)
    82 			throws SAXException {
    83 		if (TAGS.contains(currentElement)) {
    84 			stringBuilder.append(ch, start, length);
    85 		}
    86 	}
    88 	@Override
    89 	public void endElement(String uri, String localName, String qName)
    90 			throws SAXException {
    91 		if (TAGS.contains(localName)) {
    92 			if (calendar != null) {
    93 				if (HREF.equals(localName)) {
    94 					String calendarUrl = stringBuilder.toString();
    95 					calendarUrl = calendarUrl.trim();
    96 					try {
    97 						URI calendarURI = new URI(calendarUrl);
    98 						calendar.setURI(homeURI.resolve(calendarURI));
    99 					} catch (URISyntaxException e) {
   100 						if (BuildConfig.DEBUG) {
   101 							Log.e(CalendarsHandler.class.getSimpleName(),
   102 									"calendar-uri malformed: " + calendarUrl);
   103 						} else {
   104 							Log.e(CalendarsHandler.class.getSimpleName(),
   105 									"uri malformed in href");
   106 						}
   107 					}
   108 				} else if (DISPLAYNAME.equals(localName)) {
   109 					calendar.setCalendarDisplayName(stringBuilder.toString());
   110 				} else if (GETCTAG.equals(localName)) {
   111 					calendar.setCTag(stringBuilder.toString(), false);
   112 				} else if (CALENDAR_COLOR.equals(localName)) {
   113 					calendar.setCalendarColorAsString(stringBuilder.toString());
   114 				}
   115 			}
   116 			//stringBuilder.setLength(0);
   117 		} else if (RESPONSE.equals(localName)) {
   118 			if (isCalendarResource && isValidCalendar(calendar)) {
   119 				calendars.add(calendar);
   120 			}
   121 		}
   122 		currentElement=null;
   123 	}
   125 	private boolean isValidCalendar(DavCalendar calendar) {
   126 		return calendar != null && calendar.getURI() != null
   127 				&& calendar.getcTag() != null
   128 				&& calendar.getCalendarDisplayName() != null;
   129 	}
   130 }

mercurial