KickJava   Java API By Example, From Geeks To Geeks.

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


1 package prefuse.data.query;
2
3 import javax.swing.DefaultBoundedRangeModel JavaDoc;
4
5 import prefuse.util.TypeLib;
6 import prefuse.util.ui.ValuedRangeModel;
7
8 /**
9  * Range model for numerical data. Designed to support range-based dynamic
10  * queries.
11  *
12  * @author <a HREF="http://jheer.org">jeffrey heer</a>
13  */

14 public class NumberRangeModel extends DefaultBoundedRangeModel JavaDoc
15     implements ValuedRangeModel
16 {
17     protected Class JavaDoc m_type;
18     protected Number JavaDoc m_min, m_max, m_lo, m_hi;
19     
20     // ------------------------------------------------------------------------
21

22     /**
23      * Create a new NumberRangeModel for the given range.
24      * @param lo the low value of the selected range
25      * @param hi the high value of the selected range
26      * @param min the minimum value allowed for ranges
27      * @param max the maximum value allowed for ranges
28      */

29     public NumberRangeModel(int lo, int hi, int min, int max) {
30         this(new Integer JavaDoc(lo), new Integer JavaDoc(hi),
31              new Integer JavaDoc(min), new Integer JavaDoc(hi));
32     }
33     
34     /**
35      * Create a new NumberRangeModel for the given range.
36      * @param lo the low value of the selected range
37      * @param hi the high value of the selected range
38      * @param min the minimum value allowed for ranges
39      * @param max the maximum value allowed for ranges
40      */

41     public NumberRangeModel(long lo, long hi, long min, long max) {
42         this(new Long JavaDoc(lo), new Long JavaDoc(hi), new Long JavaDoc(min), new Long JavaDoc(max));
43     }
44     
45     /**
46      * Create a new NumberRangeModel for the given range.
47      * @param lo the low value of the selected range
48      * @param hi the high value of the selected range
49      * @param min the minimum value allowed for ranges
50      * @param max the maximum value allowed for ranges
51      */

52     public NumberRangeModel(float lo, float hi, float min, float max) {
53         this(new Float JavaDoc(lo), new Float JavaDoc(hi), new Float JavaDoc(min), new Float JavaDoc(max));
54     }
55     
56     /**
57      * Create a new NumberRangeModel for the given range.
58      * @param lo the low value of the selected range
59      * @param hi the high value of the selected range
60      * @param min the minimum value allowed for ranges
61      * @param max the maximum value allowed for ranges
62      */

63     public NumberRangeModel(double lo, double hi, double min, double max) {
64         this(new Double JavaDoc(lo), new Double JavaDoc(hi), new Double JavaDoc(min), new Double JavaDoc(max));
65     }
66     
67     /**
68      * Create a new NumberRangeModel for the given range.
69      * @param lo the low value of the selected range
70      * @param hi the high value of the selected range
71      * @param min the minimum value allowed for ranges
72      * @param max the maximum value allowed for ranges
73      */

74     public NumberRangeModel(Number JavaDoc lo, Number JavaDoc hi, Number JavaDoc min, Number JavaDoc max) {
75         m_type = TypeLib.getPrimitiveType(min.getClass());
76         setValueRange(lo, hi, min, max);
77     }
78
79     // ------------------------------------------------------------------------
80

81     /**
82      * Update the range settings based on current values.
83      */

84     protected void updateRange() {
85         if ( m_type == int.class )
86         {
87             setRange(m_lo.intValue(), m_hi.intValue()-m_lo.intValue(),
88                     m_min.intValue(), m_max.intValue());
89         }
90         else if ( m_type == long.class )
91         {
92             int v = 10000 * (int)( (m_lo.longValue()-m_min.longValue()) /
93                                (m_max.longValue()-m_min.longValue()) );
94             int e = 10000 * (int)( (m_hi.longValue()-m_min.longValue()) /
95                                (m_max.longValue()-m_min.longValue()) ) - v;
96             setRange(v, e, 0, 10000);
97         }
98         else
99         {
100             int v = 10000 * (int)( (m_lo.doubleValue()-m_min.doubleValue()) /
101                                (m_max.doubleValue()-m_min.doubleValue()) );
102             int e = 10000 * (int)( (m_hi.doubleValue()-m_min.doubleValue()) /
103                                (m_max.doubleValue()-m_min.doubleValue()) ) - v;
104             setRange(v, e, 0, 10000);
105         }
106     }
107     
108     /**
109      * Set the range settings in the pixel-space coordinates.
110      */

111     protected void setRange(int val, int ext, int min, int max) {
112         super.setRangeProperties(val, ext, min, max, false);
113     }
114     
115     /**
116      * @see javax.swing.BoundedRangeModel#setRangeProperties(int, int, int, int, boolean)
117      */

118     public void setRangeProperties(int val, int extent, int min, int max,
119                                    boolean adj)
120     {
121         if ( min!=getMinimum() || max!= getMaximum() ) {
122             throw new IllegalArgumentException JavaDoc("Can not change min or max.");
123         }
124         m_lo = null;
125         m_hi = null;
126         super.setRangeProperties(val, extent, min, max, adj);
127     }
128     
129     /**
130      * Set the range model's backing values.
131      * @param lo the low value of the selected range
132      * @param hi the high value of the selected range
133      * @param min the minimum value allowed for ranges
134      * @param max the maximum value allowed for ranges
135      */

136     public void setValueRange(Number JavaDoc lo, Number JavaDoc hi, Number JavaDoc min, Number JavaDoc max) {
137         m_lo = lo; m_hi = hi; m_min = min; m_max = max;
138         updateRange();
139     }
140     
141     /**
142      * Set the range model's backing values.
143      * @param lo the low value of the selected range
144      * @param hi the high value of the selected range
145      * @param min the minimum value allowed for ranges
146      * @param max the maximum value allowed for ranges
147      */

148     public void setValueRange(double lo, double hi, double min, double max) {
149         m_lo = new Double JavaDoc(lo); m_hi = new Double JavaDoc(hi);
150         m_min = new Double JavaDoc(min); m_max = new Double JavaDoc(max);
151         updateRange();
152     }
153     
154     /**
155      * Set the range model's backing values.
156      * @param lo the low value of the selected range
157      * @param hi the high value of the selected range
158      * @param min the minimum value allowed for ranges
159      * @param max the maximum value allowed for ranges
160      */

161     public void setValueRange(int lo, int hi, int min, int max) {
162         m_lo = new Integer JavaDoc(lo); m_hi = new Integer JavaDoc(hi);
163         m_min = new Integer JavaDoc(min); m_max = new Integer JavaDoc(max);
164         updateRange();
165     }
166     
167     /**
168      * Set the range model's backing values.
169      * @param lo the low value of the selected range
170      * @param hi the high value of the selected range
171      * @param min the minimum value allowed for ranges
172      * @param max the maximum value allowed for ranges
173      */

174     public void setValueRange(long lo, long hi, long min, long max) {
175         m_lo = new Long JavaDoc(lo); m_hi = new Long JavaDoc(hi);
176         m_min = new Long JavaDoc(min); m_max = new Long JavaDoc(max);
177         updateRange();
178     }
179     
180     /**
181      * @see prefuse.util.ui.ValuedRangeModel#getMinValue()
182      */

183     public Object JavaDoc getMinValue() {
184         return m_min;
185     }
186
187     /**
188      * Set the minimum range value.
189      * @param n the minimum range value.
190      */

191     public void setMinValue(Number JavaDoc n) {
192         setValueRange((Number JavaDoc)getLowValue(), (Number JavaDoc)getHighValue(), n, m_max);
193     }
194     
195     /**
196      * @see prefuse.util.ui.ValuedRangeModel#getMaxValue()
197      */

198     public Object JavaDoc getMaxValue() {
199         return m_max;
200     }
201
202     /**
203      * Set the maximum range value.
204      * @param n the maximum range value.
205      */

206     public void setMaxValue(Number JavaDoc n) {
207         setValueRange((Number JavaDoc)getLowValue(), (Number JavaDoc)getHighValue(), m_min, n);
208     }
209     
210     /**
211      * @see prefuse.util.ui.ValuedRangeModel#getLowValue()
212      */

213     public Object JavaDoc getLowValue() {
214         if ( m_lo == null )
215             m_lo = (Number JavaDoc)value(getValue());
216         return m_lo;
217     }
218
219     /**
220      * Set the lowest selected range value.
221      * @param n the low value of the selected range.
222      */

223     public void setLowValue(Number JavaDoc n) {
224         setValueRange(n, (Number JavaDoc)getHighValue(), m_min, m_max);
225     }
226     
227     /**
228      * @see prefuse.util.ui.ValuedRangeModel#getHighValue()
229      */

230     public Object JavaDoc getHighValue() {
231         if ( m_hi == null )
232             m_hi = (Number JavaDoc)value(getValue()+getExtent());
233         return m_hi;
234     }
235     
236     /**
237      * Set the highest selected range value.
238      * @param n the high value of the selected range.
239      */

240     public void setHighValue(Number JavaDoc n) {
241         setValueRange((Number JavaDoc)getLowValue(), n, m_min, m_max);
242     }
243     
244     protected Object JavaDoc value(int val) {
245         int min = getMinimum();
246         int max = getMaximum();
247         if ( m_type == double.class || m_type == float.class ) {
248             double f = (val-min)/(double)(max-min);
249             double m = m_min.doubleValue();
250             double v = m + f*(m_max.doubleValue()-m);
251             return (m_type==float.class ? (Number JavaDoc)new Float JavaDoc((float)v)
252                                         : new Double JavaDoc(v));
253         } else if ( m_type == long.class ) {
254             long m = m_min.longValue();
255             long v = m + (val-min)*(m_max.longValue()-m)/(max-min);
256             return new Long JavaDoc(v);
257         } else {
258             return new Integer JavaDoc(val);
259         }
260     }
261     
262     /**
263      * Not supported, throws an exception.
264      * @throws UnsupportedOperationException
265      * @see javax.swing.BoundedRangeModel#setMinimum(int)
266      */

267     public void setMinimum(int min) {
268         throw new UnsupportedOperationException JavaDoc();
269     }
270     
271     /**
272      * Not supported, throws an exception.
273      * @throws UnsupportedOperationException
274      * @see javax.swing.BoundedRangeModel#setMaximum(int)
275      */

276     public void setMaximum(int max) {
277         throw new UnsupportedOperationException JavaDoc();
278     }
279     
280     /**
281      * @see javax.swing.BoundedRangeModel#setValue(int)
282      */

283     public void setValue(int val) {
284         m_lo = null;
285         super.setValue(val);
286     }
287     
288     /**
289      * @see javax.swing.BoundedRangeModel#setExtent(int)
290      */

291     public void setExtent(int extent) {
292         m_hi = null;
293         super.setExtent(extent);
294     }
295     
296 } // end of class NumberRangeModel
297
Popular Tags