1. /*
  2. * @(#)MultiUIDefaults.java 1.16 03/12/19
  3. *
  4. * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package javax.swing;
  8. import java.util.Enumeration;
  9. import java.util.Locale;
  10. /**
  11. *
  12. * @version 1.10 02/02/00
  13. * @author Hans Muller
  14. */
  15. class MultiUIDefaults extends UIDefaults
  16. {
  17. private UIDefaults[] tables;
  18. public MultiUIDefaults(UIDefaults[] defaults) {
  19. super();
  20. tables = defaults;
  21. }
  22. public MultiUIDefaults() {
  23. super();
  24. tables = new UIDefaults[0];
  25. }
  26. public Object get(Object key)
  27. {
  28. Object value = super.get(key);
  29. if (value != null) {
  30. return value;
  31. }
  32. for(int i = 0; i < tables.length; i++) {
  33. UIDefaults table = tables[i];
  34. value = (table != null) ? table.get(key) : null;
  35. if (value != null) {
  36. return value;
  37. }
  38. }
  39. return null;
  40. }
  41. public Object get(Object key, Locale l)
  42. {
  43. Object value = super.get(key,l);
  44. if (value != null) {
  45. return value;
  46. }
  47. for(int i = 0; i < tables.length; i++) {
  48. UIDefaults table = tables[i];
  49. value = (table != null) ? table.get(key,l) : null;
  50. if (value != null) {
  51. return value;
  52. }
  53. }
  54. return null;
  55. }
  56. public int size() {
  57. int n = super.size();
  58. for(int i = 0; i < tables.length; i++) {
  59. UIDefaults table = tables[i];
  60. n += (table != null) ? table.size() : 0;
  61. }
  62. return n;
  63. }
  64. public boolean isEmpty() {
  65. return size() == 0;
  66. }
  67. public Enumeration keys()
  68. {
  69. Enumeration[] enums = new Enumeration[1 + tables.length];
  70. enums[0] = super.keys();
  71. for(int i = 0; i < tables.length; i++) {
  72. UIDefaults table = tables[i];
  73. if (table != null) {
  74. enums[i + 1] = table.keys();
  75. }
  76. }
  77. return new MultiUIDefaultsEnumerator(enums);
  78. }
  79. public Enumeration elements()
  80. {
  81. Enumeration[] enums = new Enumeration[1 + tables.length];
  82. enums[0] = super.elements();
  83. for(int i = 0; i < tables.length; i++) {
  84. UIDefaults table = tables[i];
  85. if (table != null) {
  86. enums[i + 1] = table.elements();
  87. }
  88. }
  89. return new MultiUIDefaultsEnumerator(enums);
  90. }
  91. protected void getUIError(String msg) {
  92. if (tables.length > 0) {
  93. tables[0].getUIError(msg);
  94. } else {
  95. super.getUIError(msg);
  96. }
  97. }
  98. private static class MultiUIDefaultsEnumerator implements Enumeration
  99. {
  100. Enumeration[] enums;
  101. int n = 0;
  102. MultiUIDefaultsEnumerator(Enumeration[] enums) {
  103. this.enums = enums;
  104. }
  105. public boolean hasMoreElements() {
  106. for(int i = n; i < enums.length; i++) {
  107. Enumeration e = enums[i];
  108. if ((e != null) && (e.hasMoreElements())) {
  109. return true;
  110. }
  111. }
  112. return false;
  113. }
  114. public Object nextElement() {
  115. for(; n < enums.length; n++) {
  116. Enumeration e = enums[n];
  117. if ((e != null) && (e.hasMoreElements())) {
  118. return e.nextElement();
  119. }
  120. }
  121. return null;
  122. }
  123. }
  124. public Object remove(Object key)
  125. {
  126. Object value = super.remove(key);
  127. if (value != null) {
  128. return value;
  129. }
  130. for(int i = 0; i < tables.length; i++) {
  131. UIDefaults table = tables[i];
  132. value = (table != null) ? table.remove(key) : null;
  133. if (value != null) {
  134. return value;
  135. }
  136. }
  137. return null;
  138. }
  139. public void clear() {
  140. super.clear();
  141. for(int i = 0; i < tables.length; i++) {
  142. UIDefaults table = tables[i];
  143. if (table != null) {
  144. table.clear();
  145. }
  146. }
  147. }
  148. public synchronized String toString() {
  149. StringBuffer buf = new StringBuffer();
  150. buf.append("{");
  151. Enumeration keys = keys();
  152. while (keys.hasMoreElements()) {
  153. Object key = keys.nextElement();
  154. buf.append(key + "=" + get(key) + ", ");
  155. }
  156. int length = buf.length();
  157. if (length > 1) {
  158. buf.delete(length-2, length);
  159. }
  160. buf.append("}");
  161. return buf.toString();
  162. }
  163. }