1 package de.dhbwloe.campusapp.network;
3 import android.os.Bundle;
4 import android.util.Log;
6 import com.loopj.android.http.AsyncHttpClient;
7 import com.loopj.android.http.AsyncHttpResponseHandler;
9 import net.fortuna.ical4j.data.CalendarBuilder;
10 import net.fortuna.ical4j.data.ParserException;
11 import net.fortuna.ical4j.model.Calendar;
13 import org.xmlpull.v1.XmlPullParser;
14 import org.xmlpull.v1.XmlPullParserException;
15 import org.xmlpull.v1.XmlPullParserFactory;
17 import java.io.ByteArrayInputStream;
18 import java.io.IOException;
19 import java.io.InputStream;
20 import java.io.UnsupportedEncodingException;
21 import java.security.KeyStore;
22 import java.util.ArrayList;
23 import java.util.List;
25 import cz.msebera.android.httpclient.Header;
28 * Created by pk910 on 20.01.2016.
30 public abstract class XmlRequestHelper {
31 private static final String ns = null;
32 private String sRootElementName, sElementName;
34 protected void requestXmlFromWeb(String url, String rootElementName, String elementName) {
35 AsyncHttpClient client = new AsyncHttpClient();
37 sRootElementName = rootElementName;
38 sElementName = elementName;
40 Log.i("HTTPClient", "Request: "+url);
41 client.get(url, new AsyncHttpResponseHandler() {
43 public void onStart() {
47 public void onSuccess(int statusCode, Header[] headers, byte[] response) {
48 ByteArrayInputStream inputStream = new ByteArrayInputStream(response);
49 List<XmlEntry> entries = parseXml(inputStream, sRootElementName, sElementName);
51 onXmlReceived(entries);
55 public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) {
58 error = new String(errorResponse, "US-ASCII");
59 } catch (UnsupportedEncodingException e1) {
61 Log.i("HTTPClient", " Error: " + statusCode + " - " + error);
62 onXmlRequestFail(statusCode, error);
66 public void onRetry(int retryNo) {
71 public static List<XmlEntry> parseXml(InputStream input, String rootElementName, String elementName) {
72 List<XmlEntry> entries = null;
74 XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
75 XmlPullParser myparser = xmlFactoryObject.newPullParser();
77 myparser.setInput(input, null);
81 } while(!myparser.getName().equalsIgnoreCase(rootElementName));
83 entries = readXml(myparser, rootElementName, elementName);
84 } catch (Exception e) {
91 private static List<XmlEntry> readXml(XmlPullParser parser, String rootElementName, String elementName) throws XmlPullParserException, IOException {
92 List<XmlEntry> entries = new ArrayList<XmlEntry>();
94 parser.require(XmlPullParser.START_TAG, ns, rootElementName);
95 while (parser.next() != XmlPullParser.END_TAG) {
97 if (parser.getEventType() != XmlPullParser.START_TAG) {
100 String name = parser.getName();
101 // Starts by looking for the entry tag
102 if (name.equalsIgnoreCase(elementName)) {
103 Log.i("XMLParser", "found "+elementName);
104 entries.add(readXmlEntry(parser, elementName));
106 entries.addAll(readXml(parser, name, elementName));
112 private static XmlEntry readXmlEntry(XmlPullParser parser, String elementName) throws XmlPullParserException, IOException {
113 parser.require(XmlPullParser.START_TAG, ns, elementName);
114 XmlEntry entry = new XmlEntry(elementName);
116 int attrcount = parser.getAttributeCount();
117 Bundle attributes = new Bundle();
118 for(int i = 0; i < attrcount; i++) {
119 attributes.putString(parser.getAttributeName(i), parser.getAttributeValue(i));
121 entry.setAttributes(attributes);
123 switch (parser.next()) {
124 case XmlPullParser.START_TAG:
125 XmlEntry child = readXmlEntry(parser, parser.getName());
126 entry.addChild(child);
128 case XmlPullParser.END_TAG:
131 case XmlPullParser.TEXT:
132 entry.setValue(parser.getText());
139 private static void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
140 if (parser.getEventType() != XmlPullParser.START_TAG) {
141 throw new IllegalStateException();
145 switch (parser.next()) {
146 case XmlPullParser.END_TAG:
149 case XmlPullParser.START_TAG:
156 protected abstract void onXmlReceived(List<XmlEntry> entries);
157 protected abstract void onXmlRequestFail(int statusCode, String errorMessage);