package org.commcare.android.javarosa;
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;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Date;
/**
* @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 int recordId = -1;
/**
* Serialization only
*/
public AndroidLogEntry() {
}
public AndroidLogEntry(String type, String message, Date date) {
super(type, message, date);
}
@Override
public void readExternal(DataInputStream in, PrototypeFactory pf)
throws IOException, DeserializationException {
recordId = ExtUtil.readInt(in);
super.readExternal(in, pf);
}
@Override
public void writeExternal(DataOutputStream out) throws IOException {
ExtUtil.writeNumeric(out, recordId);
super.writeExternal(out);
}
@Override
public Date getTime() {
return time;
}
@Override
public String getType() {
return type;
}
@Override
public String getMessage() {
return message;
}
@Override
public String[] getMetaDataFields() {
return new String[]{META_TYPE, META_DATE};
}
@Override
public Object getMetaData(String fieldName) {
if (META_DATE.equals(fieldName)) {
return DateUtils.formatDate(time, DateUtils.FORMAT_ISO8601);
} else if (META_TYPE.equals(fieldName)) {
return type;
}
throw new IllegalArgumentException("No metadata field " + fieldName + " for Log Entry Cache models");
}
@Override
public void setID(int ID) {
this.recordId = ID;
}
@Override
public int getID() {
return this.recordId;
}
}