1 package prefuse.data.query; 2 3 import javax.swing.JComponent ; 4 5 import prefuse.data.Tuple; 6 import prefuse.data.event.TupleSetListener; 7 import prefuse.data.expression.AbstractPredicate; 8 import prefuse.data.search.PrefixSearchTupleSet; 9 import prefuse.data.search.SearchTupleSet; 10 import prefuse.data.tuple.TupleSet; 11 import prefuse.util.ui.JSearchPanel; 12 import prefuse.visual.VisualTupleSet; 13 14 23 public class SearchQueryBinding extends DynamicQueryBinding { 24 25 private SearchTupleSet m_set; 26 private Listener m_lstnr; 27 private Object m_lock; 28 29 34 public SearchQueryBinding(TupleSet ts, String field) { 35 this(ts, field, new PrefixSearchTupleSet()); 36 } 37 38 47 public SearchQueryBinding(TupleSet ts, String field, SearchTupleSet set) { 48 super(ts, field); 49 m_lstnr = new Listener(); 50 setPredicate(new SearchBindingPredicate()); 51 52 m_set = set; 53 m_set.index(ts.tuples(), field); 54 m_set.addTupleSetListener(m_lstnr); 55 56 if ( ts instanceof VisualTupleSet ) 57 m_lock = ((VisualTupleSet)ts).getVisualization(); 58 } 59 60 65 public SearchTupleSet getSearchSet() { 66 return m_set; 67 } 68 69 71 77 public JComponent createComponent() { 78 return createSearchPanel(); 79 } 80 81 86 public JSearchPanel createSearchPanel() { 87 return createSearchPanel(m_set instanceof PrefixSearchTupleSet); 88 } 89 90 99 public JSearchPanel createSearchPanel(boolean monitorKeystrokes) { 100 JSearchPanel jsp = new JSearchPanel(m_set, m_field, monitorKeystrokes); 101 if ( m_lock != null ) { jsp.setLock(m_lock); } 102 return jsp; 103 } 104 105 107 private class SearchBindingPredicate extends AbstractPredicate { 108 public boolean getBoolean(Tuple t) { 109 String q = m_set.getQuery(); 110 return (q==null || q.length()==0 || m_set.containsTuple(t)); 111 } 112 public void touch() { 113 this.fireExpressionChange(); 114 } 115 } 116 117 private class Listener implements TupleSetListener { 118 public void tupleSetChanged(TupleSet tset, Tuple[] added, Tuple[] removed) { 119 ((SearchBindingPredicate)getPredicate()).touch(); 120 } 121 } 122 123 } | Popular Tags |