1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.bcel.verifier;
20
21 import java.util.ArrayList;
22 import java.util.List;
23 import java.util.Set;
24 import java.util.TreeSet;
25
26 import javax.swing.ListModel;
27 import javax.swing.event.ListDataEvent;
28 import javax.swing.event.ListDataListener;
29
30 import org.apache.commons.lang3.ArrayUtils;
31
32
33
34
35 public class VerifierFactoryListModel implements VerifierFactoryObserver, ListModel<String> {
36
37 private final List<ListDataListener> listeners = new ArrayList<>();
38 private final Set<String> cache = new TreeSet<>();
39
40 public VerifierFactoryListModel() {
41 VerifierFactory.attach(this);
42 update(null);
43 }
44
45 @Override
46 public synchronized void addListDataListener(final ListDataListener l) {
47 listeners.add(l);
48 }
49
50 @Override
51 public synchronized String getElementAt(final int index) {
52 return cache.toArray(ArrayUtils.EMPTY_STRING_ARRAY)[index];
53 }
54
55 @Override
56 public synchronized int getSize() {
57 return cache.size();
58 }
59
60 @Override
61 public synchronized void removeListDataListener(final ListDataListener l) {
62 listeners.remove(l);
63 }
64
65 @Override
66 public synchronized void update(final String s) {
67 final Verifier[] verifiers = VerifierFactory.getVerifiers();
68 final int verifierLen = verifiers.length;
69 cache.clear();
70 for (final Verifier verifier : verifiers) {
71 cache.add(verifier.getClassName());
72 }
73 for (final ListDataListener listener : listeners) {
74 listener.contentsChanged(new ListDataEvent(this, ListDataEvent.CONTENTS_CHANGED, 0, verifierLen - 1));
75 }
76 }
77
78 }