package org.commcare.xml;
import java.io.IOException;
import org.commcare.android.util.Base64;
import org.commcare.data.xml.TransactionParser;
import org.commcare.xml.util.InvalidStructureException;
import org.commcare.xml.util.UnfullfilledRequirementsException;
import org.kxml2.io.KXmlParser;
import org.xmlpull.v1.XmlPullParserException;
/**
* @author ctsims
*
*/
public class MetaDataXmlParser extends TransactionParser<String[]> {
public MetaDataXmlParser(KXmlParser parser) {
super(parser, "meta", null);
}
/*
* (non-Javadoc)
* @see org.commcare.data.xml.TransactionParser#commit(java.lang.Object)
*/
@Override
public void commit(String[] data) throws IOException {
//nothing;
}
/*
* (non-Javadoc)
* @see org.commcare.xml.ElementParser#parse()
*/
@Override
public String[] parse() throws InvalidStructureException, IOException, XmlPullParserException, UnfullfilledRequirementsException {
this.checkNode("meta");
String lastModified = null;
String uid = null;
while(this.nextTagInBlock("meta")) {
String item = this.parser.getName();
if(item == null) { continue;}
if("timestart".equals(item.toLowerCase())) {
String start = parser.nextText().trim();
//Only update modified if time end hasn't set it
if(lastModified == null || lastModified == "") {
lastModified = start;
}
}
else if("timeend".equals(item.toLowerCase())) {
String end = parser.nextText().trim();
if(end != null && end != "") {
lastModified = end;
}
}
//Ugh. this will make this 2.0 and 1.N compatible, which isn't awesome, but we'll split out versioning later...
else if("uid".equals(item.toLowerCase()) || "instanceid".equals(item.toLowerCase())) {
uid = parser.nextText().trim();
}
}
String[] ret = new String[] {lastModified, uid};
commit(ret);
return ret;
}
}