package net.sabi.pester; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import danger.internal.Date; import danger.util.StdActiveObject; public class Alarm extends StdActiveObject { private static final int VERSION_1 = 1; // persisted private String mMessage; private int mType; private long mPeriod; private Date mDate; // transient private int mStatus; public Alarm() { mStatus = STATUS_INVALID; } public String getMessage() { return mMessage; } public long getPeriod() { return mPeriod; } public boolean getUsesPeriod() { return mType != TYPE_DATE; } public Date getDate() { return mDate; } public void setMessage(String message) { mMessage = message; } public void setPeriod(long period, boolean repeating) { mType = repeating ? TYPE_PERIODIC_REPEATING : TYPE_PERIODIC; mPeriod = period; } public void setDate(Date date) { mType = TYPE_DATE; mDate = date; } public byte[] toByteArray() { try { ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); DataOutputStream dataStream = new DataOutputStream(byteStream); dataStream.writeByte(VERSION_1); dataStream.writeUTF(mMessage); dataStream.writeLong(mPeriod); dataStream.writeInt(mDate.getUnixTimeGMT()); dataStream.writeInt(mType); dataStream.flush(); return byteStream.toByteArray(); } catch (Exception e) { // XXX do something } return null; } public void fromByteArray(byte[] data) { try { ByteArrayInputStream byteStream = new ByteArrayInputStream(data); DataInputStream dataStream = new DataInputStream(byteStream); byte version = dataStream.readByte(); if (version != VERSION_1) { // XXX barf } mMessage = dataStream.readUTF(); mPeriod = dataStream.readLong(); mType = dataStream.readInt(); } catch (Exception e) { // XXX do something } } void beginEditing() { mStatus = STATUS_EDITING; } void endEditing() { mStatus = STATUS_SCHEDULED; } public String toString() { return mMessage; } public static final int TYPE_PERIODIC = 0; public static final int TYPE_PERIODIC_REPEATING = 1; public static final int TYPE_DATE = 2; public static final int STATUS_INVALID = 0; public static final int STATUS_EDITING = 1; public static final int STATUS_SCHEDULED = 2; public static final int STATUS_EXPIRED = 3; }