[283] | 1 | package net.sabi.pester;
|
---|
| 2 |
|
---|
| 3 | import danger.app.Application;
|
---|
| 4 | import danger.text.Collator;
|
---|
| 5 | import danger.text.DangerCollator;
|
---|
| 6 | import danger.ui.ListSelectMenu;
|
---|
| 7 | import danger.ui.MenuItem;
|
---|
| 8 | import danger.util.DEBUG;
|
---|
| 9 | import danger.util.TextFinder;
|
---|
| 10 | import java.io.ByteArrayInputStream;
|
---|
| 11 | import java.io.ByteArrayOutputStream;
|
---|
| 12 | import java.io.DataInputStream;
|
---|
| 13 | import java.io.DataOutputStream;
|
---|
| 14 | import java.util.Arrays;
|
---|
| 15 | import java.util.LinkedList;
|
---|
| 16 | import java.util.ListIterator;
|
---|
| 17 | import java.util.Vector;
|
---|
| 18 |
|
---|
| 19 | class MessageFinder implements TextFinder, Resources {
|
---|
| 20 | private static final int VERSION_1 = 1;
|
---|
| 21 | private static final int MAX_MESSAGE_COUNT = 50;
|
---|
| 22 | private static LinkedList sMessageList = new LinkedList();
|
---|
| 23 | private Vector mItems;
|
---|
| 24 |
|
---|
| 25 | public static void setDefaultMessageList() {
|
---|
| 26 | String messages[] =
|
---|
| 27 | Application.getCurrentApp().getStringArray(ID_ALARM_MESSAGES);
|
---|
| 28 | sMessageList = new LinkedList(Arrays.asList(messages));
|
---|
| 29 | }
|
---|
| 30 |
|
---|
| 31 | public static byte[] messageListAsByteArray() {
|
---|
| 32 | try {
|
---|
| 33 | ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
|
---|
| 34 | DataOutputStream dataStream = new DataOutputStream(byteStream);
|
---|
| 35 |
|
---|
| 36 | dataStream.writeByte(VERSION_1);
|
---|
| 37 | dataStream.writeInt(sMessageList.size());
|
---|
| 38 | ListIterator i = sMessageList.listIterator(0);
|
---|
| 39 | while (i.hasNext())
|
---|
| 40 | dataStream.writeUTF((String)i.next());
|
---|
| 41 | dataStream.flush();
|
---|
| 42 | return byteStream.toByteArray();
|
---|
| 43 | } catch (Exception e) {
|
---|
| 44 | DEBUG.p("Pester: couldn't serialize message list: " + e);
|
---|
| 45 | }
|
---|
| 46 | return null;
|
---|
| 47 | }
|
---|
| 48 |
|
---|
| 49 | public static void setMessageListFromByteArray(byte[] data) {
|
---|
| 50 | try {
|
---|
| 51 | ByteArrayInputStream byteStream = new ByteArrayInputStream(data);
|
---|
| 52 | DataInputStream dataStream = new DataInputStream(byteStream);
|
---|
| 53 |
|
---|
| 54 | byte version = dataStream.readByte();
|
---|
| 55 | if (version != VERSION_1)
|
---|
| 56 | throw new Exception();
|
---|
| 57 |
|
---|
| 58 | int count = dataStream.readInt();
|
---|
| 59 | for (int i = 0 ; i < count ; i++)
|
---|
| 60 | addMessage(dataStream.readUTF());
|
---|
| 61 | } catch (Exception e) {
|
---|
| 62 | setDefaultMessageList();
|
---|
| 63 | DEBUG.p("Pester: setting default message list: " + e);
|
---|
| 64 | }
|
---|
| 65 | }
|
---|
| 66 |
|
---|
| 67 | private static boolean addMessage(String message) {
|
---|
| 68 | int i = sMessageList.indexOf(message);
|
---|
| 69 | if (i == 0)
|
---|
| 70 | return false;
|
---|
| 71 | if (i != -1)
|
---|
| 72 | sMessageList.remove(i);
|
---|
| 73 | sMessageList.addFirst(message);
|
---|
| 74 | if (sMessageList.size() > MAX_MESSAGE_COUNT)
|
---|
| 75 | sMessageList.removeLast();
|
---|
| 76 | return true;
|
---|
| 77 | }
|
---|
| 78 |
|
---|
| 79 | public static void usedMessage(String message) {
|
---|
| 80 | if (!addMessage(message))
|
---|
| 81 | return;
|
---|
| 82 | Alarms.recentMessagesChanged();
|
---|
| 83 | }
|
---|
| 84 |
|
---|
| 85 | public MessageFinder() {
|
---|
| 86 | mItems = new Vector(sMessageList.size() / 2);
|
---|
| 87 | }
|
---|
| 88 |
|
---|
| 89 | public void search(ListSelectMenu menu, String key) {
|
---|
| 90 | DangerCollator collator = (DangerCollator)DangerCollator.getInstance();
|
---|
| 91 | mItems.removeAllElements();
|
---|
| 92 | ListIterator i = sMessageList.listIterator(0);
|
---|
| 93 | while (i.hasNext()) {
|
---|
| 94 | String message = (String)i.next();
|
---|
| 95 | if (collator.startsWith(message, key, Collator.PRIMARY)) {
|
---|
| 96 | mItems.addElement(new MenuItem(message));
|
---|
| 97 | }
|
---|
| 98 | }
|
---|
| 99 | menu.updateMenuContents(mItems);
|
---|
| 100 | }
|
---|
| 101 | }
|
---|