001 /*
002 * Copyright 1997-2003 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025
026 package javax.swing;
027
028 import java.util.Enumeration;
029 import java.util.Locale;
030
031 /**
032 *
033 * @version 1.10 02/02/00
034 * @author Hans Muller
035 */
036 class MultiUIDefaults extends UIDefaults {
037 private UIDefaults[] tables;
038
039 public MultiUIDefaults(UIDefaults[] defaults) {
040 super ();
041 tables = defaults;
042 }
043
044 public MultiUIDefaults() {
045 super ();
046 tables = new UIDefaults[0];
047 }
048
049 public Object get(Object key) {
050 Object value = super .get(key);
051 if (value != null) {
052 return value;
053 }
054
055 for (int i = 0; i < tables.length; i++) {
056 UIDefaults table = tables[i];
057 value = (table != null) ? table.get(key) : null;
058 if (value != null) {
059 return value;
060 }
061 }
062
063 return null;
064 }
065
066 public Object get(Object key, Locale l) {
067 Object value = super .get(key, l);
068 if (value != null) {
069 return value;
070 }
071
072 for (int i = 0; i < tables.length; i++) {
073 UIDefaults table = tables[i];
074 value = (table != null) ? table.get(key, l) : null;
075 if (value != null) {
076 return value;
077 }
078 }
079
080 return null;
081 }
082
083 public int size() {
084 int n = super .size();
085 for (int i = 0; i < tables.length; i++) {
086 UIDefaults table = tables[i];
087 n += (table != null) ? table.size() : 0;
088 }
089 return n;
090 }
091
092 public boolean isEmpty() {
093 return size() == 0;
094 }
095
096 public Enumeration keys() {
097 Enumeration[] enums = new Enumeration[1 + tables.length];
098 enums[0] = super .keys();
099 for (int i = 0; i < tables.length; i++) {
100 UIDefaults table = tables[i];
101 if (table != null) {
102 enums[i + 1] = table.keys();
103 }
104 }
105 return new MultiUIDefaultsEnumerator(enums);
106 }
107
108 public Enumeration elements() {
109 Enumeration[] enums = new Enumeration[1 + tables.length];
110 enums[0] = super .elements();
111 for (int i = 0; i < tables.length; i++) {
112 UIDefaults table = tables[i];
113 if (table != null) {
114 enums[i + 1] = table.elements();
115 }
116 }
117 return new MultiUIDefaultsEnumerator(enums);
118 }
119
120 protected void getUIError(String msg) {
121 if (tables.length > 0) {
122 tables[0].getUIError(msg);
123 } else {
124 super .getUIError(msg);
125 }
126 }
127
128 private static class MultiUIDefaultsEnumerator implements
129 Enumeration {
130 Enumeration[] enums;
131 int n = 0;
132
133 MultiUIDefaultsEnumerator(Enumeration[] enums) {
134 this .enums = enums;
135 }
136
137 public boolean hasMoreElements() {
138 for (int i = n; i < enums.length; i++) {
139 Enumeration e = enums[i];
140 if ((e != null) && (e.hasMoreElements())) {
141 return true;
142 }
143 }
144 return false;
145 }
146
147 public Object nextElement() {
148 for (; n < enums.length; n++) {
149 Enumeration e = enums[n];
150 if ((e != null) && (e.hasMoreElements())) {
151 return e.nextElement();
152 }
153 }
154 return null;
155 }
156 }
157
158 public Object remove(Object key) {
159 Object value = super .remove(key);
160 if (value != null) {
161 return value;
162 }
163
164 for (int i = 0; i < tables.length; i++) {
165 UIDefaults table = tables[i];
166 value = (table != null) ? table.remove(key) : null;
167 if (value != null) {
168 return value;
169 }
170 }
171
172 return null;
173 }
174
175 public void clear() {
176 super .clear();
177 for (int i = 0; i < tables.length; i++) {
178 UIDefaults table = tables[i];
179 if (table != null) {
180 table.clear();
181 }
182 }
183 }
184
185 public synchronized String toString() {
186 StringBuffer buf = new StringBuffer();
187 buf.append("{");
188 Enumeration keys = keys();
189 while (keys.hasMoreElements()) {
190 Object key = keys.nextElement();
191 buf.append(key + "=" + get(key) + ", ");
192 }
193 int length = buf.length();
194 if (length > 1) {
195 buf.delete(length - 2, length);
196 }
197 buf.append("}");
198 return buf.toString();
199 }
200 }
|