package org.commcare.logging; import org.commcare.android.javarosa.AndroidLogEntry; import org.commcare.models.database.SqlStorage; import org.javarosa.core.log.LogEntry; import org.javarosa.core.log.StreamLogSerializer; import org.javarosa.core.model.utils.DateUtils; import org.xmlpull.v1.XmlSerializer; import java.io.IOException; /** * @author ctsims */ public class AndroidLogSerializer <T extends AndroidLogEntry> extends StreamLogSerializer implements DeviceReportElement { private XmlSerializer serializer; private AndroidLogEntry singleEntry; private SqlStorage<T> logStorage; public AndroidLogSerializer(AndroidLogEntry entry) { this.singleEntry = entry; } public AndroidLogSerializer(final SqlStorage<T> logStorage) { this.logStorage = logStorage; this.setPurger(new AndroidLogPurger<>(logStorage)); } @Override protected void serializeLog(LogEntry entry) throws IOException { String dateString = DateUtils.formatDateTime(entry.getTime(), DateUtils.FORMAT_ISO8601); serializer.startTag(DeviceReportWriter.XMLNS, "log"); try { serializer.attribute(null, "date", dateString); writeText("type", entry.getType(), serializer); writeText("msg", entry.getMessage(), serializer); } catch (Exception e) { e.printStackTrace(); } finally { serializer.endTag(DeviceReportWriter.XMLNS, "log"); } } public static void writeText(String element, String text, XmlSerializer serializer) throws IllegalArgumentException, IllegalStateException, IOException { serializer.startTag(DeviceReportWriter.XMLNS, element); try { serializer.text(text); } catch (Exception e) { e.printStackTrace(); } finally { serializer.endTag(DeviceReportWriter.XMLNS, element); } } @Override public void writeToDeviceReport(XmlSerializer serializer) throws IOException { this.serializer = serializer; serializer.startTag(DeviceReportWriter.XMLNS, "log_subreport"); try { if (singleEntry != null) { serializeLog(singleEntry.getID(), singleEntry); } else { for (AndroidLogEntry entry : logStorage) { serializeLog(entry.getID(), entry); } } } finally { serializer.endTag(DeviceReportWriter.XMLNS, "log_subreport"); } } }