1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.tobago.model;
21
22 import javax.swing.tree.TreeNode;
23 import java.io.Serializable;
24 import java.util.ArrayList;
25 import java.util.Collections;
26 import java.util.HashSet;
27 import java.util.Set;
28
29
30
31
32
33
34 public class ExpandedState implements Serializable {
35
36 private int defaultExpandedLevels;
37 private Set<TreePath> expandedSet;
38 private Set<TreePath> collapsedSet;
39
40
41
42
43
44
45 public ExpandedState(int defaultExpandedLevels) {
46 this.defaultExpandedLevels = defaultExpandedLevels;
47 this.expandedSet = new HashSet<TreePath>();
48 this.collapsedSet = new HashSet<TreePath>();
49 }
50
51
52
53
54
55
56
57 public boolean isExpanded(TreeNode node) {
58 final TreePath path = new TreePath(node);
59 return isExpanded(path);
60 }
61
62
63
64
65
66
67
68 public boolean isExpanded(TreePath path) {
69 if (expandedSet.contains(path)) {
70 return true;
71 }
72 if (collapsedSet.contains(path)) {
73 return false;
74 }
75 return path.getLength() < defaultExpandedLevels;
76 }
77
78
79
80
81
82
83 public void expand(TreeNode node) {
84 final TreePath path = new TreePath(node);
85 expand(path);
86 }
87
88
89
90
91
92
93 public void expand(TreePath path) {
94 if (path.getLength() >= defaultExpandedLevels) {
95 expandedSet.add(path);
96 } else {
97 collapsedSet.remove(path);
98 }
99 }
100
101
102
103
104
105
106 public void expand(int level) {
107 ArrayList<TreePath> toRemove = new ArrayList<TreePath>();
108 if (level > defaultExpandedLevels) {
109 defaultExpandedLevels = level;
110 for (TreePath treePath : expandedSet) {
111 if (treePath.getLength() < defaultExpandedLevels) {
112 toRemove.add(treePath);
113 }
114 }
115 expandedSet.removeAll(toRemove);
116 collapsedSet.clear();
117 } else {
118 for (TreePath treePath : collapsedSet) {
119 if (treePath.getLength() < level) {
120 toRemove.add(treePath);
121 }
122 }
123 collapsedSet.removeAll(toRemove);
124 }
125 }
126
127
128
129
130 public void expandAll() {
131 defaultExpandedLevels = Integer.MAX_VALUE;
132 expandedSet.clear();
133 collapsedSet.clear();
134 }
135
136
137
138
139
140
141 public void collapse(TreeNode node) {
142 final TreePath path = new TreePath(node);
143 collapse(path);
144 }
145
146
147
148
149
150
151 public void collapse(TreePath path) {
152 if (path.getLength() < defaultExpandedLevels) {
153 collapsedSet.add(path);
154 } else {
155 expandedSet.remove(path);
156 }
157 }
158
159
160
161
162
163
164 public void collapse(int level) {
165
166 level--;
167
168 ArrayList<TreePath> toRemove = new ArrayList<TreePath>();
169 if (level < defaultExpandedLevels) {
170 defaultExpandedLevels = level;
171 for (TreePath treePath : collapsedSet) {
172 if (treePath.getLength() >= defaultExpandedLevels) {
173 toRemove.add(treePath);
174 }
175 }
176 collapsedSet.removeAll(toRemove);
177 expandedSet.clear();
178 } else {
179 for (TreePath treePath : expandedSet) {
180 if (treePath.getLength() >= level) {
181 toRemove.add(treePath);
182 }
183 }
184 expandedSet.removeAll(toRemove);
185 }
186 }
187
188
189
190
191 public void collapseAll() {
192 defaultExpandedLevels = 0;
193 expandedSet.clear();
194 collapsedSet.clear();
195 }
196
197
198
199
200 public void collapseAllButRoot() {
201 defaultExpandedLevels = 1;
202 expandedSet.clear();
203 collapsedSet.clear();
204 }
205
206
207
208
209
210 public void reset() {
211 expandedSet.clear();
212 collapsedSet.clear();
213 }
214
215
216
217
218 public Set<TreePath> getExpandedSet() {
219 return Collections.unmodifiableSet(expandedSet);
220 }
221
222
223
224
225 public Set<TreePath> getCollapsedSet() {
226 return Collections.unmodifiableSet(collapsedSet);
227 }
228 }