01: //////////////////////////////////////////////////////////////////////////////
02: // Clirr: compares two versions of a java library for binary compatibility
03: // Copyright (C) 2003 - 2005 Lars Kühne
04: //
05: // This library is free software; you can redistribute it and/or
06: // modify it under the terms of the GNU Lesser General Public
07: // License as published by the Free Software Foundation; either
08: // version 2.1 of the License, or (at your option) any later version.
09: //
10: // This library is distributed in the hope that it will be useful,
11: // but WITHOUT ANY WARRANTY; without even the implied warranty of
12: // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13: // Lesser General Public License for more details.
14: //
15: // You should have received a copy of the GNU Lesser General Public
16: // License along with this library; if not, write to the Free Software
17: // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
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: private static MessageManager instance;
33: private ArrayList messages = new ArrayList();
34:
35: /**
36: * Utility class to sort messages by their numeric ids.
37: */
38: private static class MessageComparator implements Comparator {
39: public int compare(Object o1, Object o2) {
40: Message m1 = (Message) o1;
41: Message m2 = (Message) o2;
42: return m1.getId() - m2.getId();
43: }
44: }
45:
46: /**
47: * This is a singleton class; to get an instance of this class, use
48: * the getInstance method.
49: */
50: private MessageManager() {
51: }
52:
53: /**
54: * Return the singleton instance of this class.
55: */
56: public static MessageManager getInstance() {
57: if (instance == null) {
58: instance = new MessageManager();
59: }
60: return instance;
61: }
62:
63: /**
64: * Add a message to the list of known messages.
65: */
66: public void addMessage(Message msg) {
67: messages.add(msg);
68: }
69:
70: /**
71: * Verify that the list of known messages contains no two objects
72: * with the same numeric message id. This method is expected to be
73: * called from the unit tests, so that if a developer adds a new
74: * message and accidentally uses the message id of an existing
75: * message object, then this will be reported as an error.
76: * <p>
77: * @throws java.lang.IllegalArgumentException if any duplicate id is found.
78: */
79: public void checkUnique() {
80: java.util.Collections.sort(messages, new MessageComparator());
81: int lastId = -1;
82: for (Iterator i = messages.iterator(); i.hasNext();) {
83: // check for any duplicates
84: Message m = (Message) i.next();
85: int currId = m.getId();
86: if (currId <= lastId) {
87: throw new IllegalArgumentException("Message id ["
88: + currId + "] is not unique.");
89: }
90: }
91: }
92:
93: /**
94: * Return the complete set of registered messages.
95: */
96: public Collection getMessages() {
97: return messages;
98: }
99: }
|