Source code: org/bdgp/apps/dagedit/plugin/TermFilterPlugin.java
1 package org.bdgp.apps.dagedit.plugin;
2
3 import org.bdgp.apps.dagedit.gui.*;
4 import org.bdgp.apps.dagedit.gui.event.*;
5 import javax.swing.*;
6 import java.util.*;
7 import java.awt.event.*;
8 import java.awt.*;
9 import org.bdgp.util.*;
10 import org.bdgp.apps.dagedit.datamodel.*;
11
12 public class TermFilterPlugin extends DEPlugin {
13
14 JList termList;
15 JButton hideTermsButton;
16 JButton restoreTermsButton;
17 Hashtable hiddenTermsHash = new Hashtable();
18 Hashtable impliedHiddenTermsHash = new Hashtable();
19 Vector hiddenTerms = new Vector();
20
21 protected VectorFilter filter = new VectorFilter() {
22 public boolean satisfies(Object o) {
23 return !hiddenTermsHash.containsKey(o) &&
24 !impliedHiddenTermsHash.containsKey(o);
25 }
26 };
27
28 protected RootChangeListener rootListener = new RootChangeListener() {
29 public void changeRoot(RootChangeEvent e) {
30 clear();
31 }
32 };
33
34 protected static final ListCellRenderer renderer =
35 new DefaultListCellRenderer() {
36 public Component
37 getListCellRendererComponent(JList list,
38 Object value,
39 int index,
40 boolean isSelected,
41 boolean cellHasFocus) {
42 TermRelationship tr = (TermRelationship) value;
43 String newValue = tr.getChild().getTerm()+" @ "+
44 tr.getParent().getTerm();
45 return super.getListCellRendererComponent(list,
46 newValue,
47 index,
48 isSelected,
49 cellHasFocus);
50 }
51 };
52
53 public void init(MultiProperties props) {
54 setLayout(new BorderLayout());
55 termList = new JList(hiddenTerms);
56 termList.setCellRenderer(renderer);
57 termList.setPreferredSize(new Dimension(100, 100));
58 hideTermsButton = new JButton("Hide selected terms");
59 restoreTermsButton = new JButton("Restore terms");
60
61 termList.setFont(controller.getDefaultFont());
62 hideTermsButton.setFont(controller.getDefaultFont());
63 restoreTermsButton.setFont(controller.getDefaultFont());
64 add(hideTermsButton, "North");
65 add(termList, "Center");
66 add(restoreTermsButton, "South");
67
68 controller.addFilter(filter);
69
70 attachListeners();
71 }
72
73 public void restoreTerm(TermRelationship tr) {
74 restoreTerm(tr, false);
75 }
76
77 public void restoreTerm(TermRelationship tr, boolean implied) {
78 if (implied) {
79 impliedHiddenTermsHash.remove(tr);
80 } else {
81 hiddenTerms.removeElement(tr);
82 hiddenTermsHash.remove(tr);
83 }
84 Enumeration e = tr.getAllDescendants(false);
85 while(e.hasMoreElements()) {
86 TermRelationship impliedTerm = (TermRelationship) e.nextElement();
87 restoreTerm(impliedTerm, true);
88 }
89 }
90
91 public void clear() {
92 hiddenTerms.removeAllElements();
93 impliedHiddenTermsHash.clear();
94 hiddenTermsHash.clear();
95 termList.setListData(hiddenTerms);
96 controller.fireReload(new DETermReloadEvent(this));
97 }
98
99 public void hideTerm(TermRelationship tr) {
100 hideTerm(tr, false);
101 }
102
103 protected void hideTerm(TermRelationship tr, boolean implied) {
104 if (implied) {
105 impliedHiddenTermsHash.put(tr, tr);
106 } else {
107 hiddenTerms.addElement(tr);
108 hiddenTermsHash.put(tr, tr);
109 }
110 Enumeration e = tr.getAllDescendants(false);
111 while(e.hasMoreElements()) {
112 TermRelationship impliedTerm = (TermRelationship) e.nextElement();
113 hideTerm(impliedTerm, true);
114 }
115 }
116
117 public void hideTerms(Vector terms) {
118 for(int i=0; i < terms.size(); i++) {
119 TermRelationship term = (TermRelationship) terms.elementAt(i);
120 hideTerm(term);
121 }
122 termList.setListData(hiddenTerms);
123 controller.fireReload(new DETermReloadEvent(this));
124 controller.
125 fireTermSelect(new DETermSelectEvent(this,
126 new Vector()));
127 }
128
129 public void restoreTerms(Vector terms) {
130 for(int i=0; i < terms.size(); i++) {
131 TermRelationship term = (TermRelationship) terms.elementAt(i);
132 restoreTerm(term);
133 }
134 termList.setListData(hiddenTerms);
135 controller.fireReload(new DETermReloadEvent(this));
136 controller.fireTermSelect(new DETermSelectEvent(this,
137 terms));
138
139 }
140
141 protected Vector getHiddenSelection() {
142 Vector out = new Vector();
143 Object [] os = termList.getSelectedValues();
144 for(int i=0; i < os.length; i++)
145 out.addElement(os[i]);
146 return out;
147 }
148
149 protected void attachListeners() {
150 controller.addListener(rootListener);
151 hideTermsButton.addActionListener(new ActionListener() {
152 public void actionPerformed(ActionEvent e) {
153 hideTerms(controller.getSelectedTerms());
154 }
155 });
156 restoreTermsButton.addActionListener(new ActionListener() {
157 public void actionPerformed(ActionEvent e) {
158 restoreTerms(getHiddenSelection());
159 }
160 });
161 }
162
163 protected void cleanup() {
164 controller.removeListener(rootListener);
165 controller.removeFilter(filter);
166 controller.fireReload(new DETermReloadEvent(this));
167 }
168
169 public String getName() {
170 return "Term Filter Plugin";
171 }
172 }