1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package net.sf.clirr.core;
21
22 import java.util.Iterator;
23 import java.util.ArrayList;
24 import java.util.Comparator;
25 import java.util.Collection;
26
27 /***
28 * Class which manages API Difference messages, including expanding message
29 * codes into strings and descriptions.
30 */
31 public final class MessageManager
32 {
33 private static MessageManager instance;
34 private ArrayList messages = new ArrayList();
35
36 /***
37 * Utility class to sort messages by their numeric ids.
38 */
39 private static class MessageComparator implements Comparator
40 {
41 public int compare(Object o1, Object o2)
42 {
43 Message m1 = (Message) o1;
44 Message m2 = (Message) o2;
45 return m1.getId() - m2.getId();
46 }
47 }
48
49 /***
50 * This is a singleton class; to get an instance of this class, use
51 * the getInstance method.
52 */
53 private MessageManager()
54 {
55 }
56
57 /***
58 * Return the singleton instance of this class.
59 */
60 public static MessageManager getInstance()
61 {
62 if (instance == null)
63 {
64 instance = new MessageManager();
65 }
66 return instance;
67 }
68
69 /***
70 * Add a message to the list of known messages.
71 */
72 public void addMessage(Message msg)
73 {
74 messages.add(msg);
75 }
76
77 /***
78 * Verify that the list of known messages contains no two objects
79 * with the same numeric message id. This method is expected to be
80 * called from the unit tests, so that if a developer adds a new
81 * message and accidentally uses the message id of an existing
82 * message object, then this will be reported as an error.
83 * <p>
84 * @throws java.lang.IllegalArgumentException if any duplicate id is found.
85 */
86 public void checkUnique()
87 {
88 java.util.Collections.sort(messages, new MessageComparator());
89 int lastId = -1;
90 for (Iterator i = messages.iterator(); i.hasNext();)
91 {
92
93 Message m = (Message) i.next();
94 int currId = m.getId();
95 if (currId <= lastId)
96 {
97 throw new IllegalArgumentException("Message id [" + currId + "] is not unique.");
98 }
99 }
100 }
101
102 /***
103 * Return the complete set of registered messages.
104 */
105 public Collection getMessages()
106 {
107 return messages;
108 }
109 }