/** * */ package org.commcare.android.javarosa; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.Date; import org.javarosa.core.log.LogEntry; import org.javarosa.core.model.utils.DateUtils; import org.javarosa.core.services.storage.IMetaData; import org.javarosa.core.services.storage.Persistable; import org.javarosa.core.util.externalizable.DeserializationException; import org.javarosa.core.util.externalizable.ExtUtil; import org.javarosa.core.util.externalizable.PrototypeFactory; /** * @author ctsims * */ public class AndroidLogEntry extends LogEntry implements Persistable, IMetaData { public static final String STORAGE_KEY = "commcarelogs"; private static final String META_TYPE = "type"; private static final String META_DATE = "date"; private Date date; private String message; private String type; private int recordId = -1; /** * Serialization only */ public AndroidLogEntry() { } public AndroidLogEntry(String type, String message, Date date) { this.type = type; this.message = message; this.date = date; } /* (non-Javadoc) * @see org.javarosa.core.util.externalizable.Externalizable#readExternal(java.io.DataInputStream, org.javarosa.core.util.externalizable.PrototypeFactory) */ @Override public void readExternal(DataInputStream in, PrototypeFactory pf) throws IOException, DeserializationException { recordId = ExtUtil.readInt(in); date = ExtUtil.readDate(in); type = ExtUtil.readString(in); message = ExtUtil.readString(in); } /* (non-Javadoc) * @see org.javarosa.core.util.externalizable.Externalizable#writeExternal(java.io.DataOutputStream) */ @Override public void writeExternal(DataOutputStream out) throws IOException { ExtUtil.writeNumeric(out, recordId); ExtUtil.writeDate(out, date); ExtUtil.writeString(out,type); ExtUtil.writeString(out,message); } /** * @return the time */ public Date getTime() { return date; } /** * @return the type */ public String getType() { return type; } /** * @return the message */ public String getMessage() { return message; } /* (non-Javadoc) * @see org.javarosa.core.services.storage.IMetaData#getMetaDataFields() */ @Override public String[] getMetaDataFields() { return new String[] {META_TYPE, META_DATE}; } /* (non-Javadoc) * @see org.javarosa.core.services.storage.IMetaData#getMetaData(java.lang.String) */ @Override public Object getMetaData(String fieldName) { if(META_DATE.equals(fieldName)) { return DateUtils.formatDate(date, DateUtils.FORMAT_ISO8601); } else if(META_TYPE.equals(fieldName)) { return type; } throw new IllegalArgumentException("No metadata field " + fieldName + " for Log Entry Cache models"); } /* (non-Javadoc) * @see org.javarosa.core.services.storage.Persistable#setID(int) */ @Override public void setID(int ID) { this.recordId = ID; } /* (non-Javadoc) * @see org.javarosa.core.services.storage.Persistable#getID() */ @Override public int getID() { return this.recordId; } }