Revision 627 org.gvsig.proj/trunk/org.gvsig.proj/org.gvsig.proj.swing/org.gvsig.proj.swing.impl/src/main/java/org/gvsig/proj/swing/impl/CodeListModel.java
CodeListModel.java | ||
---|---|---|
27 | 27 |
|
28 | 28 |
import javax.swing.AbstractListModel; |
29 | 29 |
import javax.swing.ComboBoxModel; |
30 |
import javax.swing.ListModel; |
|
31 | 30 |
import javax.swing.event.ListDataEvent; |
32 | 31 |
import javax.swing.event.ListDataListener; |
33 | 32 |
import org.apache.commons.io.FilenameUtils; |
... | ... | |
41 | 40 |
* |
42 | 41 |
* @author gvSIG Team |
43 | 42 |
*/ |
44 |
public class CodeListModel extends AbstractListModel implements |
|
45 |
ListModel, ListDataListener { |
|
43 |
public class CodeListModel |
|
44 |
extends AbstractListModel |
|
45 |
{ |
|
46 | 46 |
|
47 | 47 |
private static final long serialVersionUID = -5594433634336286602L; |
48 | 48 |
|
... | ... | |
50 | 50 |
private List<String> filteredCodes; |
51 | 51 |
private String filterPattern=null; |
52 | 52 |
|
53 |
private String selectedCode; |
|
54 |
|
|
53 |
// private String selectedCode; |
|
54 |
private AuthorityComboBoxModel authorityModel; |
|
55 |
|
|
55 | 56 |
private final CoordinateReferenceSystemManager manager; |
56 | 57 |
|
57 | 58 |
@SuppressWarnings("LeakingThisInConstructor") |
58 | 59 |
public CodeListModel(CoordinateReferenceSystemManager manager, |
59 |
AuthorityComboBoxModel authorityModel) {
|
|
60 |
AuthorityComboBoxModel theAuthorityModel) {
|
|
60 | 61 |
this.manager = manager; |
61 |
authorityModel.addListDataListener(this); |
|
62 |
this.authorityModel = theAuthorityModel; |
|
63 |
this.authorityModel.addListDataListener(new ListDataListener() { |
|
64 |
|
|
65 |
@Override |
|
66 |
public void intervalAdded(ListDataEvent e) { |
|
67 |
} |
|
68 |
|
|
69 |
@Override |
|
70 |
public void intervalRemoved(ListDataEvent e) { |
|
71 |
} |
|
72 |
|
|
73 |
@Override |
|
74 |
public void contentsChanged(ListDataEvent e) { |
|
75 |
String authority = authorityModel.getSelectedAuthority(); |
|
76 |
updateAuthority(authority); |
|
77 |
} |
|
78 |
}); |
|
62 | 79 |
} |
63 | 80 |
|
64 | 81 |
@Override |
... | ... | |
68 | 85 |
|
69 | 86 |
@Override |
70 | 87 |
public Object getElementAt(int index) { |
71 |
return filteredCodes == null ? null : filteredCodes.get(index); |
|
88 |
if( filteredCodes == null || index <0 || index>this.filteredCodes.size() ) { |
|
89 |
return null; |
|
90 |
} |
|
91 |
return filteredCodes.get(index); |
|
72 | 92 |
} |
73 | 93 |
|
74 |
// @Override |
|
75 |
// public void setSelectedItem(Object anItem) { |
|
76 |
// if ((selectedCode != null && !selectedCode.equals(anItem)) |
|
77 |
// || selectedCode == null && anItem != null) { |
|
78 |
// selectedCode = anItem.toString(); |
|
79 |
// fireContentsChanged(this, -1, -1); |
|
80 |
// } |
|
81 |
// } |
|
82 |
// |
|
83 |
// @Override |
|
84 |
// public Object getSelectedItem() { |
|
85 |
// return getSelectedCode(); |
|
86 |
// } |
|
87 |
// |
|
88 |
// public String getSelectedCode() { |
|
89 |
// return selectedCode; |
|
90 |
// } |
|
91 |
// |
|
92 |
// public void setSelectedCode(String selectedCode) { |
|
93 |
// setSelectedItem(selectedCode); |
|
94 |
// } |
|
95 |
|
|
96 |
@Override |
|
97 |
public void intervalAdded(ListDataEvent e) { |
|
98 |
// Nothing to do |
|
94 |
private void updateAuthority(String authority) { |
|
95 |
allCodes = manager.getCodes(authority); |
|
96 |
this.applyFilter(this.filterPattern); |
|
99 | 97 |
} |
100 |
|
|
101 |
@Override |
|
102 |
public void intervalRemoved(ListDataEvent e) { |
|
103 |
// Nothing to do |
|
104 |
} |
|
105 |
|
|
106 |
@SuppressWarnings("unchecked") |
|
107 |
@Override |
|
108 |
public void contentsChanged(ListDataEvent e) { |
|
109 |
// A new authority has been selected |
|
110 |
if (e.getSource() != null |
|
111 |
&& e.getSource() instanceof AuthorityComboBoxModel) { |
|
112 |
AuthorityComboBoxModel authorityModel = |
|
113 |
(AuthorityComboBoxModel) e.getSource(); |
|
114 |
|
|
115 |
String authority = authorityModel.getSelectedAuthority(); |
|
116 |
selectedCode = null; |
|
117 |
allCodes = manager.getCodes(authority); |
|
118 |
this.applyFilter(this.filterPattern); |
|
119 |
fireContentsChanged(this, -1, -1); |
|
120 |
} |
|
121 |
} |
|
122 | 98 |
|
123 | 99 |
public void applyFilter(String pattern) { |
124 | 100 |
this.filterPattern = pattern; |
... | ... | |
128 | 104 |
if( !this.filterPattern.contains("*") ) { |
129 | 105 |
this.filterPattern = this.filterPattern + "*"; |
130 | 106 |
} |
131 |
this.filteredCodes = new ArrayList<>();
|
|
107 |
List filteredCodes = new ArrayList<>();
|
|
132 | 108 |
for (String code : allCodes) { |
133 | 109 |
if( FilenameUtils.wildcardMatch(code, this.filterPattern, IOCase.INSENSITIVE)) { |
134 |
this.filteredCodes.add(code);
|
|
110 |
filteredCodes.add(code); |
|
135 | 111 |
} |
136 | 112 |
} |
113 |
fireIntervalRemoved(this, 0,this.filteredCodes.size()); |
|
114 |
this.filteredCodes = filteredCodes; |
|
137 | 115 |
} |
138 |
fireContentsChanged(this, -1, -1);
|
|
116 |
fireIntervalAdded(this, 0,this.filteredCodes.size());
|
|
139 | 117 |
} |
140 | 118 |
|
141 | 119 |
} |
Also available in: Unified diff