source: trunk/hiptop/pester/net/sabi/pester/MessageFinder.java@ 283

Last change on this file since 283 was 283, checked in by Nicholas Riley, 18 years ago

Keep track of recent messages.

File size: 3.0 KB
Line 
1package net.sabi.pester;
2
3import danger.app.Application;
4import danger.text.Collator;
5import danger.text.DangerCollator;
6import danger.ui.ListSelectMenu;
7import danger.ui.MenuItem;
8import danger.util.DEBUG;
9import danger.util.TextFinder;
10import java.io.ByteArrayInputStream;
11import java.io.ByteArrayOutputStream;
12import java.io.DataInputStream;
13import java.io.DataOutputStream;
14import java.util.Arrays;
15import java.util.LinkedList;
16import java.util.ListIterator;
17import java.util.Vector;
18
19class 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}
Note: See TracBrowser for help on using the repository browser.