Revision 44259 trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.swing/org.gvsig.expressionevaluator.swing.impl/src/main/java/org/gvsig/expressionevaluator/swing/impl/FilteredListModel.java
FilteredListModel.java | ||
---|---|---|
8 | 8 |
import java.util.ArrayList; |
9 | 9 |
import java.util.Comparator; |
10 | 10 |
import java.util.List; |
11 |
import java.util.Objects; |
|
11 | 12 |
import javax.swing.AbstractListModel; |
12 | 13 |
import javax.swing.SwingUtilities; |
13 | 14 |
import org.apache.commons.io.FilenameUtils; |
15 |
import org.apache.commons.lang3.ObjectUtils; |
|
14 | 16 |
import org.apache.commons.lang3.StringUtils; |
15 |
import org.gvsig.expressionevaluator.swing.Element.ConstantElement;
|
|
16 |
import org.gvsig.tools.swing.api.ListElement;
|
|
17 |
import org.gvsig.tools.util.LabeledValue;
|
|
18 |
import org.gvsig.tools.util.LabeledValueImpl;
|
|
17 | 19 |
|
18 | 20 |
/** |
19 | 21 |
* |
... | ... | |
21 | 23 |
*/ |
22 | 24 |
class FilteredListModel extends AbstractListModel { |
23 | 25 |
|
24 |
private List<ListElement> elements;
|
|
25 |
private List<ListElement> filteredElements;
|
|
26 |
private List<LabeledValue> elements;
|
|
27 |
private List<LabeledValue> filteredElements;
|
|
26 | 28 |
private String filter; |
27 | 29 |
|
28 | 30 |
public FilteredListModel() { |
... | ... | |
37 | 39 |
} |
38 | 40 |
|
39 | 41 |
@Override |
40 |
public Object getElementAt(int index) {
|
|
42 |
public LabeledValue getElementAt(int index) {
|
|
41 | 43 |
return this.filteredElements.get(index); |
42 | 44 |
} |
43 | 45 |
|
44 |
void addElement(ListElement element) {
|
|
46 |
void addElement(LabeledValue element) {
|
|
45 | 47 |
this.elements.add(element); |
46 | 48 |
if (this.elements != this.filteredElements) { |
47 | 49 |
this.filteredElements.add(element); |
48 | 50 |
} |
49 | 51 |
} |
50 | 52 |
|
53 |
void addElement(Object element) { |
|
54 |
this.addElement(new LabeledValueImpl<>(Objects.toString(element, ""), element)); |
|
55 |
} |
|
56 |
|
|
51 | 57 |
public void setFilter(String filter) { |
52 | 58 |
if (StringUtils.isEmpty(filter)) { |
53 | 59 |
this.filter = null; |
... | ... | |
55 | 61 |
} else { |
56 | 62 |
this.filter = filter; |
57 | 63 |
this.filteredElements = new ArrayList<>(); |
58 |
for (ListElement element : elements) {
|
|
64 |
for (LabeledValue element : elements) {
|
|
59 | 65 |
if (FilenameUtils.wildcardMatch(element.getValue().toString().toLowerCase(), this.filter.toLowerCase())) { |
60 | 66 |
this.filteredElements.add(element); |
61 | 67 |
} |
... | ... | |
97 | 103 |
} |
98 | 104 |
|
99 | 105 |
private void sortForeground(final boolean ascending) { |
100 |
final List<ListElement> items = new ArrayList<>(elements); |
|
101 |
final Comparator comparator = Utils.naturalComparator(); |
|
102 |
items.sort(new Comparator<ListElement>() { |
|
106 |
final List items = new ArrayList<>(elements); |
|
107 |
items.sort(new Comparator<Comparable>() { |
|
103 | 108 |
@Override |
104 |
public int compare(ListElement o1, ListElement o2) { |
|
105 |
int r; |
|
106 |
if (o1 == null && o2 == null) { |
|
107 |
r = 0; |
|
108 |
} else if (o1 == null && o2 != null) { |
|
109 |
r = -1; |
|
110 |
} else if (o1 != null && o2 == null) { |
|
111 |
r = 1; |
|
112 |
} else { |
|
113 |
if( o1.getValue() instanceof ConstantElement && |
|
114 |
o2.getValue() instanceof ConstantElement ) { |
|
115 |
r = comparator.compare( |
|
116 |
((ConstantElement)o1.getValue()).getValue(), |
|
117 |
((ConstantElement)o2.getValue()).getValue() |
|
118 |
); |
|
119 |
} else { |
|
120 |
r = comparator.compare(o1.getValue(),o2.getValue()); |
|
121 |
} |
|
122 |
} |
|
109 |
public int compare(Comparable o1, Comparable o2) { |
|
110 |
int r = ObjectUtils.compare(o1, o2); |
|
123 | 111 |
if (ascending) { |
124 | 112 |
return r; |
125 | 113 |
} |
... | ... | |
135 | 123 |
} |
136 | 124 |
} |
137 | 125 |
|
138 |
void addElement(Object data) { |
|
139 |
ListElement e = new ListElement(data.toString(), data); |
|
140 |
this.addElement(e); |
|
141 |
} |
|
142 | 126 |
} |
Also available in: Unified diff