KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > prefuse > data > tuple > AbstractTupleSet


1 package prefuse.data.tuple;
2
3 import java.beans.PropertyChangeListener JavaDoc;
4 import java.util.Comparator JavaDoc;
5 import java.util.HashMap JavaDoc;
6 import java.util.Iterator JavaDoc;
7
8 import javax.swing.event.SwingPropertyChangeSupport JavaDoc;
9
10 import prefuse.data.Schema;
11 import prefuse.data.Table;
12 import prefuse.data.Tuple;
13 import prefuse.data.event.EventConstants;
14 import prefuse.data.event.TupleSetListener;
15 import prefuse.data.expression.Expression;
16 import prefuse.data.expression.Predicate;
17 import prefuse.data.util.FilterIteratorFactory;
18 import prefuse.data.util.Sort;
19 import prefuse.data.util.SortedTupleIterator;
20 import prefuse.util.collections.CopyOnWriteArrayList;
21
22 /**
23  * Abstract base class for TupleSet implementations. Provides mechanisms for
24  * generating filtered tuple iterators, maintain listeners, and supporting
25  * bound client properties.
26  *
27  * @author <a HREF="http://jheer.org">jeffrey heer</a>
28  */

29 public abstract class AbstractTupleSet implements TupleSet {
30     
31     /**
32      * @see prefuse.data.tuple.TupleSet#tuples(prefuse.data.expression.Predicate)
33      */

34     public Iterator JavaDoc tuples(Predicate filter) {
35         if ( filter == null ) {
36             return tuples();
37         } else {
38             return FilterIteratorFactory.tuples(this, filter);
39         }
40     }
41     
42     /**
43      * @see prefuse.data.tuple.TupleSet#tuples(prefuse.data.expression.Predicate, prefuse.data.util.Sort)
44      */

45     public Iterator JavaDoc tuples(Predicate filter, Sort sort) {
46         if ( sort == null ) {
47             return tuples(filter);
48         } else {
49             Comparator JavaDoc c = sort.getComparator(this);
50             return new SortedTupleIterator(tuples(filter),getTupleCount(),c);
51         }
52     }
53     
54     
55     // -- TupleSet Methods ----------------------------------------------------
56

57     private CopyOnWriteArrayList m_tupleListeners;
58     
59     /**
60      * @see prefuse.data.tuple.TupleSet#addTupleSetListener(prefuse.data.event.TupleSetListener)
61      */

62     public void addTupleSetListener(TupleSetListener tsl) {
63         if ( m_tupleListeners == null )
64             m_tupleListeners = new CopyOnWriteArrayList();
65         if ( !m_tupleListeners.contains(tsl) )
66             m_tupleListeners.add(tsl);
67     }
68     
69     /**
70      * @see prefuse.data.tuple.TupleSet#removeTupleSetListener(prefuse.data.event.TupleSetListener)
71      */

72     public void removeTupleSetListener(TupleSetListener tsl) {
73         if ( m_tupleListeners != null ) {
74             m_tupleListeners.remove(tsl);
75         }
76     }
77     
78     /**
79      * Fire a Tuple event.
80      * @param t the Table on which the event has occurred
81      * @param start the first row changed
82      * @param end the last row changed
83      * @param type the type of event, one of
84      * {@link prefuse.data.event.EventConstants#INSERT} or
85      * {@link prefuse.data.event.EventConstants#DELETE}.
86      */

87     protected void fireTupleEvent(Table t, int start, int end, int type) {
88         if ( m_tupleListeners != null && m_tupleListeners.size() > 0 ) {
89             Object JavaDoc[] lstnrs = m_tupleListeners.getArray();
90             Tuple[] tuples = new Tuple[end-start+1];
91             for ( int i=0, r=start; r <= end; ++r, ++i ) {
92                 tuples[i] = t.getTuple(r);
93             }
94             for ( int i=0; i<lstnrs.length; ++i ) {
95                 TupleSetListener tsl = (TupleSetListener)lstnrs[i];
96                 if ( type == EventConstants.INSERT ) {
97                     tsl.tupleSetChanged(this, tuples, EMPTY_ARRAY);
98                 } else {
99                     tsl.tupleSetChanged(this, EMPTY_ARRAY, tuples);
100                 }
101             }
102         }
103     }
104     
105     /**
106      * Fire a Tuple event.
107      * @param t the tuple that has been added or removed
108      * @param type the type of event, one of
109      * {@link prefuse.data.event.EventConstants#INSERT} or
110      * {@link prefuse.data.event.EventConstants#DELETE}.
111      */

112     protected void fireTupleEvent(Tuple t, int type) {
113         if ( m_tupleListeners != null && m_tupleListeners.size() > 0 ) {
114             Object JavaDoc[] lstnrs = m_tupleListeners.getArray();
115             Tuple[] ts = new Tuple[] {t};
116             for ( int i=0; i<lstnrs.length; ++i ) {
117                 TupleSetListener tsl = (TupleSetListener)lstnrs[i];
118                 if ( type == EventConstants.INSERT ) {
119                     tsl.tupleSetChanged(this, ts, EMPTY_ARRAY);
120                 } else {
121                     tsl.tupleSetChanged(this, EMPTY_ARRAY, ts);
122                 }
123             }
124         }
125     }
126     
127     /**
128      * Fire a Tuple event.
129      * @param added array of Tuples that have been added, can be null
130      * @param removed array of Tuples that have been removed, can be null
131      */

132     protected void fireTupleEvent(Tuple[] added, Tuple[] removed) {
133         if ( m_tupleListeners != null && m_tupleListeners.size() > 0 ) {
134             Object JavaDoc[] lstnrs = m_tupleListeners.getArray();
135             added = added==null ? EMPTY_ARRAY : added;
136             removed = removed==null ? EMPTY_ARRAY : removed;
137             for ( int i=0; i<lstnrs.length; ++i ) {
138                 TupleSetListener tsl = (TupleSetListener)lstnrs[i];
139                 tsl.tupleSetChanged(this, added, removed);
140             }
141         }
142     }
143     
144     // -- Data Field Methods --------------------------------------------------
145

146     /**
147      * False by default.
148      * @see prefuse.data.tuple.TupleSet#isAddColumnSupported()
149      */

150     public boolean isAddColumnSupported() {
151         return false;
152     }
153
154     /**
155      * @see prefuse.data.tuple.TupleSet#addColumns(prefuse.data.Schema)
156      */

157     public void addColumns(Schema schema) {
158         if ( isAddColumnSupported() ) {
159             for ( int i=0; i<schema.getColumnCount(); ++i ) {
160                 try {
161                     addColumn(schema.getColumnName(i),
162                               schema.getColumnType(i),
163                               schema.getDefault(i));
164                 } catch ( IllegalArgumentException JavaDoc iae ) {}
165             }
166         } else {
167             throw new UnsupportedOperationException JavaDoc();
168         }
169     }
170     
171     /**
172      * Unsupported by default.
173      * @see prefuse.data.tuple.TupleSet#addColumn(java.lang.String, java.lang.Class, java.lang.Object)
174      */

175     public void addColumn(String JavaDoc name, Class JavaDoc type, Object JavaDoc defaultValue) {
176         throw new UnsupportedOperationException JavaDoc();
177     }
178
179     /**
180      * Unsupported by default.
181      * @see prefuse.data.tuple.TupleSet#addColumn(java.lang.String, java.lang.Class)
182      */

183     public void addColumn(String JavaDoc name, Class JavaDoc type) {
184         throw new UnsupportedOperationException JavaDoc();
185     }
186
187     /**
188      * Unsupported by default.
189      * @see prefuse.data.tuple.TupleSet#addColumn(java.lang.String, prefuse.data.expression.Expression)
190      */

191     public void addColumn(String JavaDoc name, Expression expr) {
192         throw new UnsupportedOperationException JavaDoc();
193     }
194
195     /**
196      * Unsupported by default.
197      * @see prefuse.data.tuple.TupleSet#addColumn(java.lang.String, java.lang.String)
198      */

199     public void addColumn(String JavaDoc name, String JavaDoc expr) {
200         throw new UnsupportedOperationException JavaDoc();
201     }
202     
203     // -- Client Properties ---------------------------------------------------
204

205     private HashMap JavaDoc m_props;
206     private SwingPropertyChangeSupport JavaDoc m_propSupport;
207     
208     /**
209      * @see prefuse.data.tuple.TupleSet#addPropertyChangeListener(java.beans.PropertyChangeListener)
210      */

211     public void addPropertyChangeListener(PropertyChangeListener JavaDoc lstnr) {
212         if ( lstnr == null ) return;
213         if ( m_propSupport == null )
214             m_propSupport = new SwingPropertyChangeSupport JavaDoc(this);
215         m_propSupport.addPropertyChangeListener(lstnr);
216     }
217     
218     /**
219      * @see prefuse.data.tuple.TupleSet#addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)
220      */

221     public void addPropertyChangeListener(String JavaDoc key,
222                                           PropertyChangeListener JavaDoc lstnr)
223     {
224         if ( lstnr == null ) return;
225         if ( m_propSupport == null )
226             m_propSupport = new SwingPropertyChangeSupport JavaDoc(this);
227         m_propSupport.addPropertyChangeListener(key, lstnr);
228     }
229     
230     /**
231      * @see prefuse.data.tuple.TupleSet#removePropertyChangeListener(java.beans.PropertyChangeListener)
232      */

233     public void removePropertyChangeListener(PropertyChangeListener JavaDoc lstnr) {
234         if ( lstnr == null ) return;
235         if ( m_propSupport == null ) return;
236         m_propSupport.removePropertyChangeListener(lstnr);
237     }
238     
239     /**
240      * @see prefuse.data.tuple.TupleSet#removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)
241      */

242     public void removePropertyChangeListener(String JavaDoc key,
243                                              PropertyChangeListener JavaDoc lstnr)
244     {
245         if ( lstnr == null ) return;
246         if ( m_propSupport == null ) return;
247         m_propSupport.removePropertyChangeListener(key, lstnr);
248     }
249     
250     /**
251      * @see prefuse.data.tuple.TupleSet#putClientProperty(java.lang.String, java.lang.Object)
252      */

253     public void putClientProperty(String JavaDoc key, Object JavaDoc value) {
254         Object JavaDoc prev = null;
255         if ( m_props == null && value == null ) {
256             // nothing to do
257
return;
258         } else if ( value == null ) {
259             prev = m_props.remove(key);
260         } else {
261             if ( m_props == null )
262                 m_props = new HashMap JavaDoc(2);
263             prev = m_props.put(key, value);
264         }
265         if ( m_propSupport != null )
266             m_propSupport.firePropertyChange(key, prev, value);
267     }
268     
269     /**
270      * @see prefuse.data.tuple.TupleSet#getClientProperty(java.lang.String)
271      */

272     public Object JavaDoc getClientProperty(String JavaDoc key) {
273         return ( m_props == null ? null : m_props.get(key) );
274     }
275     
276 } // end of class AbstractTupleSet
277
Popular Tags