gvsig-tools / org.gvsig.tools / library / trunk / org.gvsig.tools / org.gvsig.tools.swing / org.gvsig.tools.swing.api / src / main / java / org / gvsig / tools / swing / api / TreeModelRecursiveWildcarMatchFilter.java @ 2130
History | View | Annotate | Download (1.28 KB)
1 | 2130 | jjdelcerro | package org.gvsig.tools.swing.api; |
---|---|---|---|
2 | |||
3 | import javax.swing.tree.TreeModel; |
||
4 | import org.apache.commons.io.FilenameUtils; |
||
5 | import org.apache.commons.lang3.StringUtils; |
||
6 | import org.gvsig.tools.swing.api.FilteredTreeModel.TreeModelFilter; |
||
7 | |||
8 | /**
|
||
9 | *
|
||
10 | * @author jjdelcerro
|
||
11 | */
|
||
12 | public class TreeModelRecursiveWildcarMatchFilter implements TreeModelFilter { |
||
13 | |||
14 | private final String filter; |
||
15 | |||
16 | public TreeModelRecursiveWildcarMatchFilter(String filter) { |
||
17 | if (StringUtils.isBlank(filter)) {
|
||
18 | this.filter = null; |
||
19 | } else {
|
||
20 | if (StringUtils.containsAny(filter, "*?")) { |
||
21 | this.filter = filter.toUpperCase();
|
||
22 | } else {
|
||
23 | this.filter = "*" + filter.toUpperCase() + "*"; |
||
24 | } |
||
25 | } |
||
26 | } |
||
27 | |||
28 | @Override
|
||
29 | public boolean test(TreeModel treeModel, Object node) { |
||
30 | if ( this.filter==null ) { |
||
31 | return true; |
||
32 | } |
||
33 | if ( node==null ) { |
||
34 | return true; |
||
35 | } |
||
36 | String nodeString = node.toString().toUpperCase();
|
||
37 | boolean matches = FilenameUtils.wildcardMatch(nodeString, filter);
|
||
38 | |||
39 | int childCount = treeModel.getChildCount(node);
|
||
40 | for (int i = 0; i < childCount; i++) { |
||
41 | Object child = treeModel.getChild(node, i);
|
||
42 | matches |= test(treeModel, child); |
||
43 | } |
||
44 | return matches;
|
||
45 | } |
||
46 | |||
47 | } |