KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > prefuse > data > query > ObjectRangeModel


1 package prefuse.data.query;
2
3 import java.util.HashMap JavaDoc;
4 import java.util.Map JavaDoc;
5
6 import javax.swing.DefaultBoundedRangeModel JavaDoc;
7
8 import prefuse.util.ui.ValuedRangeModel;
9
10 /**
11  * Supports an ordered range of arbitrary objects. Designed to support
12  * range-based dynamic queries over ordered, but not necessarily numerical,
13  * data.
14  * @author <a HREF="http://jheer.org">jeffrey heer</a>
15  */

16 public class ObjectRangeModel extends DefaultBoundedRangeModel JavaDoc
17     implements ValuedRangeModel
18 {
19     private Object JavaDoc[] m_objects;
20     private Map JavaDoc m_ordinal;
21     
22     /**
23      * Create a new ObjectRangeModel with the given objects. The objects are
24      * assumed to sorted in ascending order.
25      * @param objects the members of this ObjectRangeModel, sorted in ascending
26      * order.
27      */

28     public ObjectRangeModel(Object JavaDoc[] objects) {
29         setValueRange(objects);
30     }
31     
32     /**
33      * Sets the range model to the given objects. The objects are
34      * assumed to sorted in ascending order.
35      * @param objects the members of this ObjectRangeModel, sorted in ascending
36      * order.
37      */

38     public void setValueRange(Object JavaDoc[] objects) {
39         if ( m_objects != null && objects.length == m_objects.length ) {
40             boolean equal = true;
41             for ( int i=0; i<objects.length; ++i ) {
42                 if ( objects[i] != m_objects[i] ) {
43                     equal = false; break;
44                 }
45             }
46             if ( equal ) return; // early exit, model hasn't changed
47
}
48         // build a new object array
49
m_objects = new Object JavaDoc[objects.length];
50         System.arraycopy(objects, 0, m_objects, 0, objects.length);
51         
52         // build the object->index map
53
if ( m_ordinal == null ) {
54             m_ordinal = new HashMap JavaDoc();
55         } else {
56             m_ordinal.clear();
57         }
58         for ( int i=0; i<objects.length; ++i ) {
59             m_ordinal.put(objects[i], new Integer JavaDoc(i));
60         }
61         setRangeProperties(0, objects.length-1, 0, objects.length-1, false);
62     }
63     
64     /**
65      * Return the Object at the given index.
66      * @param i the index of the Object
67      * @return return the requested Object.
68      */

69     public Object JavaDoc getObject(int i) {
70         return m_objects[i];
71     }
72     
73     
74     /**
75      * Return the index for a given Object, indicating its order in the range.
76      * @param o the Object to lookup.
77      * @return the index of the Object in the range model, -1 if the Object is
78      * not found in the model.
79      */

80     public int getIndex(Object JavaDoc o) {
81         Integer JavaDoc idx = (Integer JavaDoc)m_ordinal.get(o);
82         return (idx==null ? -1 : idx.intValue());
83     }
84     
85     /**
86      * @see prefuse.util.ui.ValuedRangeModel#getMinValue()
87      */

88     public Object JavaDoc getMinValue() {
89         return m_objects[getMinimum()];
90     }
91     
92     /**
93      * @see prefuse.util.ui.ValuedRangeModel#getMaxValue()
94      */

95     public Object JavaDoc getMaxValue() {
96         return m_objects[getMaximum()];
97     }
98     
99     /**
100      * @see prefuse.util.ui.ValuedRangeModel#getLowValue()
101      */

102     public Object JavaDoc getLowValue() {
103         return m_objects[getValue()];
104     }
105     
106     /**
107      * @see prefuse.util.ui.ValuedRangeModel#getHighValue()
108      */

109     public Object JavaDoc getHighValue() {
110         return m_objects[getValue()+getExtent()];
111     }
112     
113 } // end of class ObjectRangeModel
114
Popular Tags