KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > clirr > core > MessageManager


1 //////////////////////////////////////////////////////////////////////////////
2
// Clirr: compares two versions of a java library for binary compatibility
3
// Copyright (C) 2003 - 2005 Lars Kühne
4
//
5
// This library is free software; you can redistribute it and/or
6
// modify it under the terms of the GNU Lesser General Public
7
// License as published by the Free Software Foundation; either
8
// version 2.1 of the License, or (at your option) any later version.
9
//
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 JavaDoc;
23 import java.util.ArrayList JavaDoc;
24 import java.util.Comparator JavaDoc;
25 import java.util.Collection JavaDoc;
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 JavaDoc messages = new ArrayList JavaDoc();
35
36     /**
37      * Utility class to sort messages by their numeric ids.
38      */

39     private static class MessageComparator implements Comparator JavaDoc
40     {
41         public int compare(Object JavaDoc o1, Object JavaDoc 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 JavaDoc i = messages.iterator(); i.hasNext();)
91         {
92             // check for any duplicates
93
Message m = (Message) i.next();
94             int currId = m.getId();
95             if (currId <= lastId)
96             {
97                 throw new IllegalArgumentException JavaDoc("Message id [" + currId + "] is not unique.");
98             }
99         }
100     }
101
102     /**
103      * Return the complete set of registered messages.
104      */

105     public Collection JavaDoc getMessages()
106     {
107         return messages;
108     }
109 }
110
Popular Tags