package org.commcare.xml; import org.commcare.data.xml.TransactionParser; import org.javarosa.xml.util.InvalidStructureException; import org.javarosa.xml.util.UnfullfilledRequirementsException; import org.kxml2.io.KXmlParser; import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; /** * @author ctsims */ public class MetaDataXmlParser extends TransactionParser<String[]> { public MetaDataXmlParser(KXmlParser parser) { super(parser); } @Override protected void commit(String[] data) throws IOException { //nothing; } @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 || "".equals(lastModified)) { lastModified = start; } } else if ("timeend".equals(item.toLowerCase())) { String end = parser.nextText().trim(); if (!"".equals(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; } }