package com.android.smap.controllers;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import android.content.Context;
import com.android.smap.GatewayApp;
import com.android.smap.api.models.FormList;
import com.android.smap.api.models.FormList.Form;
import com.android.smap.api.requests.FormListRequest;
import com.android.smap.api.requests.SmapRawRequest;
import com.android.smap.api.requests.SurveyDefinitionRequest;
public class FormListController extends
RawRequestController<FormList> {
private static final String XML_NAME = "name";
private static final String XML_URL = "downloadUrl";
private FormList mModel;
public FormListController(Context context,
ControllerListener listener,
ControllerErrorListener errorListener) {
super(context, listener, errorListener);
mListener = listener;
mErrorListener = errorListener;
mModel = new FormList();
}
@Override
protected SmapRawRequest getRequest() {
return new FormListRequest(this, this);
}
@Override
protected FormList addResponseToDatabase(String rawXML) {
mModel.setForms(valuesFromTag(rawXML));
return mModel;
}
private List<Form> valuesFromTag(String xml) {
ArrayList<Form> list = new ArrayList<Form>();
try {
Document doc = loadXMLFromString(xml);
NodeList nodeNameList = doc.getElementsByTagName(XML_NAME);
NodeList nodeUrlList = doc.getElementsByTagName(XML_URL);
for (int i = 0; i < nodeNameList.getLength(); i++) {
String name = nodeNameList.item(i).getTextContent();
String url = nodeUrlList.item(i).getTextContent();
Form form = new Form(name, url);
list.add(form);
}
return list;
}
catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static Document loadXMLFromString(String xml) throws Exception
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(xml));
return builder.parse(is);
}
}