1. /*
  2. * @(#)MultiUIDefaults.java 1.13 03/01/23
  3. *
  4. * Copyright 2003 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. private static class MultiUIDefaultsEnumerator implements Enumeration
  92. {
  93. Enumeration[] enums;
  94. int n = 0;
  95. MultiUIDefaultsEnumerator(Enumeration[] enums) {
  96. this.enums = enums;
  97. }
  98. public boolean hasMoreElements() {
  99. for(int i = n; i < enums.length; i++) {
  100. Enumeration e = enums[i];
  101. if ((e != null) && (e.hasMoreElements())) {
  102. return true;
  103. }
  104. }
  105. return false;
  106. }
  107. public Object nextElement() {
  108. for(; n < enums.length; n++) {
  109. Enumeration e = enums[n];
  110. if ((e != null) && (e.hasMoreElements())) {
  111. return e.nextElement();
  112. }
  113. }
  114. return null;
  115. }
  116. }
  117. public Object remove(Object key)
  118. {
  119. Object value = super.remove(key);
  120. if (value != null) {
  121. return value;
  122. }
  123. for(int i = 0; i < tables.length; i++) {
  124. UIDefaults table = tables[i];
  125. value = (table != null) ? table.remove(key) : null;
  126. if (value != null) {
  127. return value;
  128. }
  129. }
  130. return null;
  131. }
  132. public void clear() {
  133. super.clear();
  134. for(int i = 0; i < tables.length; i++) {
  135. UIDefaults table = tables[i];
  136. if (table != null) {
  137. table.clear();
  138. }
  139. }
  140. }
  141. }