1:
43:
44: package ;
45:
46: import ;
47: import ;
48: import ;
49: import ;
50: import ;
51: import ;
52: import ;
53:
54: import ;
55: import ;
56: import ;
57:
58:
62: public class MultipleXYSeriesLabelGenerator implements XYSeriesLabelGenerator,
63: Cloneable, PublicCloneable, Serializable {
64:
65:
66: private static final long serialVersionUID = 138976236941898560L;
67:
68:
69: public static final String DEFAULT_LABEL_FORMAT = "{0}";
70:
71:
72: private String formatPattern;
73:
74:
75: private String additionalFormatPattern;
76:
77:
78: private Map seriesLabelLists;
79:
80:
83: public MultipleXYSeriesLabelGenerator() {
84: this(DEFAULT_LABEL_FORMAT);
85: }
86:
87:
92: public MultipleXYSeriesLabelGenerator(String format) {
93: if (format == null) {
94: throw new IllegalArgumentException("Null 'format' argument.");
95: }
96: this.formatPattern = format;
97: this.additionalFormatPattern = "\n{0}";
98: this.seriesLabelLists = new HashMap();
99: }
100:
101:
107: public void addSeriesLabel(int series, String label) {
108: Integer key = new Integer(series);
109: List labelList = (List) this.seriesLabelLists.get(key);
110: if (labelList == null) {
111: labelList = new java.util.ArrayList();
112: this.seriesLabelLists.put(key, labelList);
113: }
114: labelList.add(label);
115: }
116:
117:
122: public void clearSeriesLabels(int series) {
123: Integer key = new Integer(series);
124: this.seriesLabelLists.put(key, null);
125: }
126:
127:
136: public String generateLabel(XYDataset dataset, int series) {
137: if (dataset == null) {
138: throw new IllegalArgumentException("Null 'dataset' argument.");
139: }
140: StringBuffer label = new StringBuffer();
141: label.append(MessageFormat.format(this.formatPattern,
142: createItemArray(dataset, series)));
143: Integer key = new Integer(series);
144: List extraLabels = (List) this.seriesLabelLists.get(key);
145: if (extraLabels != null) {
146: Object[] temp = new Object[1];
147: for (int i = 0; i < extraLabels.size(); i++) {
148: temp[0] = extraLabels.get(i);
149: String labelAddition = MessageFormat.format(
150: this.additionalFormatPattern, temp);
151: label.append(labelAddition);
152: }
153: }
154: return label.toString();
155: }
156:
157:
166: protected Object[] createItemArray(XYDataset dataset, int series) {
167: Object[] result = new Object[1];
168: result[0] = dataset.getSeriesKey(series).toString();
169: return result;
170: }
171:
172:
179: public Object clone() throws CloneNotSupportedException {
180: MultipleXYSeriesLabelGenerator clone
181: = (MultipleXYSeriesLabelGenerator) super.clone();
182: clone.seriesLabelLists = new HashMap();
183: Set keys = this.seriesLabelLists.keySet();
184: Iterator iterator = keys.iterator();
185: while (iterator.hasNext()) {
186: Object key = iterator.next();
187: Object entry = this.seriesLabelLists.get(key);
188: Object toAdd = entry;
189: if (entry instanceof PublicCloneable) {
190: PublicCloneable pc = (PublicCloneable) entry;
191: toAdd = pc.clone();
192: }
193: clone.seriesLabelLists.put(key, toAdd);
194: }
195: return clone;
196: }
197:
198:
205: public boolean equals(Object obj) {
206: if (obj == this) {
207: return true;
208: }
209: if (!(obj instanceof MultipleXYSeriesLabelGenerator)) {
210: return false;
211: }
212: MultipleXYSeriesLabelGenerator that
213: = (MultipleXYSeriesLabelGenerator) obj;
214: if (!this.formatPattern.equals(that.formatPattern)) {
215: return false;
216: }
217: if (!this.additionalFormatPattern.equals(
218: that.additionalFormatPattern)) {
219: return false;
220: }
221: if (!this.seriesLabelLists.equals(that.seriesLabelLists)) {
222: return false;
223: }
224: return true;
225: }
226:
227:
232: public int hashCode() {
233: int result = 127;
234: result = HashUtilities.hashCode(result, this.formatPattern);
235: result = HashUtilities.hashCode(result, this.additionalFormatPattern);
236: result = HashUtilities.hashCode(result, this.seriesLabelLists);
237: return result;
238: }
239:
240: }