1. /*
  2. * @(#)MultiUIDefaults.java 1.9 01/11/29
  3. *
  4. * Copyright 2002 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. /**
  10. *
  11. * @version 1.9 11/29/01
  12. * @author Hans Muller
  13. */
  14. class MultiUIDefaults extends UIDefaults
  15. {
  16. private UIDefaults[] tables;
  17. public MultiUIDefaults(UIDefaults[] defaults) {
  18. super();
  19. tables = defaults;
  20. }
  21. public MultiUIDefaults() {
  22. super();
  23. tables = new UIDefaults[0];
  24. }
  25. public Object get(Object key)
  26. {
  27. Object value = super.get(key);
  28. if (value != null) {
  29. return value;
  30. }
  31. for(int i = 0; i < tables.length; i++) {
  32. UIDefaults table = tables[i];
  33. value = (table != null) ? table.get(key) : null;
  34. if (value != null) {
  35. return value;
  36. }
  37. }
  38. return null;
  39. }
  40. public int size() {
  41. int n = super.size();
  42. for(int i = 0; i < tables.length; i++) {
  43. UIDefaults table = tables[i];
  44. n += (table != null) ? table.size() : 0;
  45. }
  46. return n;
  47. }
  48. public boolean isEmpty() {
  49. return size() == 0;
  50. }
  51. public Enumeration keys()
  52. {
  53. Enumeration[] enums = new Enumeration[1 + tables.length];
  54. enums[0] = super.keys();
  55. for(int i = 0; i < tables.length; i++) {
  56. UIDefaults table = tables[i];
  57. if (table != null) {
  58. enums[i + 1] = table.keys();
  59. }
  60. }
  61. return new MultiUIDefaultsEnumerator(enums);
  62. }
  63. public Enumeration elements()
  64. {
  65. Enumeration[] enums = new Enumeration[1 + tables.length];
  66. enums[0] = super.elements();
  67. for(int i = 0; i < tables.length; i++) {
  68. UIDefaults table = tables[i];
  69. if (table != null) {
  70. enums[i + 1] = table.elements();
  71. }
  72. }
  73. return new MultiUIDefaultsEnumerator(enums);
  74. }
  75. private static class MultiUIDefaultsEnumerator implements Enumeration
  76. {
  77. Enumeration[] enums;
  78. int n = 0;
  79. MultiUIDefaultsEnumerator(Enumeration[] enums) {
  80. this.enums = enums;
  81. }
  82. public boolean hasMoreElements() {
  83. for(int i = n; i < enums.length; i++) {
  84. Enumeration e = enums[i];
  85. if ((e != null) && (e.hasMoreElements())) {
  86. return true;
  87. }
  88. }
  89. return false;
  90. }
  91. public Object nextElement() {
  92. for(; n < enums.length; n++) {
  93. Enumeration e = enums[n];
  94. if ((e != null) && (e.hasMoreElements())) {
  95. return e.nextElement();
  96. }
  97. }
  98. return null;
  99. }
  100. }
  101. public Object remove(Object key)
  102. {
  103. Object value = super.remove(key);
  104. if (value != null) {
  105. return value;
  106. }
  107. for(int i = 0; i < tables.length; i++) {
  108. UIDefaults table = tables[i];
  109. value = (table != null) ? table.remove(key) : null;
  110. if (value != null) {
  111. return value;
  112. }
  113. }
  114. return null;
  115. }
  116. public void clear() {
  117. super.clear();
  118. for(int i = 0; i < tables.length; i++) {
  119. UIDefaults table = tables[i];
  120. if (table != null) {
  121. table.clear();
  122. }
  123. }
  124. }
  125. }