1 /*
2 * Copyright (c) 2009 QOS.ch All rights reserved.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20 * SOFTWARE.
21 */
22
23 package ch.qos.cal10n;
24
25 import java.util.Arrays;
26
27 /**
28 * Holds data relevant for a deferred message lookup. This is useful when the
29 * appropriate locale is <em>unknown</em> at the time or place where the message
30 * key and message args are emitted. For example, a low level library might wish
31 * to emit a localized message but it is only at the UI (user interface) layer
32 * that the locale is known. As another example, imagine that the host where the
33 * localized messages are presented to the user is in a different locale, e.g.
34 * Japan, than the locale of the source host. e.g. US.
35 *
36 * <p>
37 * Instances of this class are intended to be immutable, subject to the
38 * immutability of the supplied args.
39 *
40 * @author Rick Beton
41 * @author Ceki Gülcü
42 *
43 */
44 public class MessageParameterObj {
45
46 private final Enum<?> key;
47 private final Object[] args;
48
49 /**
50 * Constructs an instance.
51 *
52 * @param key
53 * the key for the localized message.
54 * @param args
55 * any message parameters, as required.
56 */
57 public MessageParameterObj(Enum<?> key, Object... args) {
58 if (key == null) {
59 new IllegalArgumentException("Enum argument \"key\" can't be null");
60 }
61 this.key = key;
62 this.args = args;
63 }
64
65 public Enum<?> getKey() {
66 return key;
67 }
68
69 public Object[] getArgs() {
70 return args;
71 }
72
73 @Override
74 public String toString() {
75 final StringBuilder b = new StringBuilder("MessageParameterObj(");
76 b.append(key.name());
77 b.append(", ");
78 b.append(Arrays.toString(args));
79 b.append(")");
80 return b.toString();
81 }
82
83 @Override
84 public int hashCode() {
85 return key.hashCode();
86 }
87
88 @Override
89 public boolean equals(Object obj) {
90 if (this == obj)
91 return true;
92 if (obj == null)
93 return false;
94 if (getClass() != obj.getClass())
95 return false;
96
97 MessageParameterObj other = (MessageParameterObj) obj;
98 // key cannot be null by virtue of the check done within the constructor
99 if (!key.equals(other.key))
100 return false;
101
102 return Arrays.equals(args, other.args);
103 }
104 }