Statistics
| Revision:

svn-gvsig-desktop / 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 @ 43939

History | View | Annotate | Download (3.2 KB)

1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.expressionevaluator.swing.impl;
7

    
8
import java.util.ArrayList;
9
import java.util.Comparator;
10
import java.util.List;
11
import javax.swing.AbstractListModel;
12
import javax.swing.SwingUtilities;
13
import org.apache.commons.io.FilenameUtils;
14
import org.apache.commons.lang3.StringUtils;
15

    
16
/**
17
 *
18
 * @author jjdelcerro
19
 */
20
class FilteredListModel extends AbstractListModel {
21
    
22
    private List<Object> elements;
23
    private List<Object> filteredElements;
24
    private String filter;
25

    
26
    public FilteredListModel() {
27
        this.elements = new ArrayList<>();
28
        this.filteredElements = this.elements;
29
        this.filter = null;
30
    }
31

    
32
    @Override
33
    public int getSize() {
34
        return this.filteredElements.size();
35
    }
36

    
37
    @Override
38
    public Object getElementAt(int index) {
39
        return this.filteredElements.get(index);
40
    }
41

    
42
    void addElement(String element) {
43
        this.elements.add(element);
44
        if (this.elements != this.filteredElements) {
45
            this.filteredElements.add(element);
46
        }
47
    }
48

    
49
    public void setFilter(String filter) {
50
        if (StringUtils.isEmpty(filter)) {
51
            this.filter = null;
52
            this.filteredElements = this.elements;
53
        } else {
54
            this.filteredElements = new ArrayList<>();
55
            for (Object element : elements) {
56
                if (FilenameUtils.wildcardMatch(element.toString(), this.filter)) {
57
                    this.filteredElements.add(element);
58
                }
59
            }
60
        }
61
        this.fireContentsChanged(this, 0, this.filteredElements.size());
62
    }
63
    
64
    public void sort(final boolean ascending) {
65
        Thread th = new Thread(new Runnable() {
66
            @Override
67
            public void run() {
68
                final List<Object> items = new ArrayList(elements);
69
                items.sort(new Comparator<Object>() {
70
                    @Override
71
                    public int compare(Object o1, Object o2) {
72
                        int r;
73
                        if( o1 == null && o2 == null ) {
74
                           r = 0;
75
                        } else if( o1 == null && o2 != null ) {
76
                            r = -1;
77
                        } else if( o1 != null && o2 == null ) {
78
                            r = 1;
79
                        } else {
80
                            r = o1.toString().compareTo(o2.toString());
81
                        }
82
                        if( ascending ) {
83
                            return r;
84
                        }
85
                        return r * -1;
86
                    }
87
                });
88
                SwingUtilities.invokeLater(new Runnable() {
89
                    @Override
90
                    public void run() {
91
                        elements = items;
92
                        if( filter!=null ) {
93
                            setFilter(filter);
94
                        }
95
                    }
96
                });
97
            }
98
        }, "FilteredListModelSorter");
99
        th.start();
100
    }
101

    
102
    public String getFilter() {
103
        return this.filter;
104
    }
105
    
106
}