Staging
v0.5.1
v0.5.1
swh:1:snp:8af5e945b1aa5b1b5f89bf21e30348f209c5139c
ObjectRangeModel.java
package prefuse.data.query;
import java.util.HashMap;
import java.util.Map;
import javax.swing.DefaultBoundedRangeModel;
import prefuse.util.ui.ValuedRangeModel;
/**
* Supports an ordered range of arbitrary objects. Designed to support
* range-based dynamic queries over ordered, but not necessarily numerical,
* data.
* @author <a href="http://jheer.org">jeffrey heer</a>
*/
public class ObjectRangeModel extends DefaultBoundedRangeModel
implements ValuedRangeModel
{
private Object[] m_objects;
private Map m_ordinal;
/**
* Create a new ObjectRangeModel with the given objects. The objects are
* assumed to sorted in ascending order.
* @param objects the members of this ObjectRangeModel, sorted in ascending
* order.
*/
public ObjectRangeModel(Object[] objects) {
setValueRange(objects);
}
/**
* Sets the range model to the given objects. The objects are
* assumed to sorted in ascending order.
* @param objects the members of this ObjectRangeModel, sorted in ascending
* order.
*/
public void setValueRange(Object[] objects) {
if ( m_objects != null && objects.length == m_objects.length ) {
boolean equal = true;
for ( int i=0; i<objects.length; ++i ) {
if ( objects[i] != m_objects[i] ) {
equal = false; break;
}
}
if ( equal ) return; // early exit, model hasn't changed
}
// build a new object array
m_objects = new Object[objects.length];
System.arraycopy(objects, 0, m_objects, 0, objects.length);
// build the object->index map
if ( m_ordinal == null ) {
m_ordinal = new HashMap();
} else {
m_ordinal.clear();
}
for ( int i=0; i<objects.length; ++i ) {
m_ordinal.put(objects[i], new Integer(i));
}
setRangeProperties(0, objects.length-1, 0, objects.length-1, false);
}
/**
* Return the Object at the given index.
* @param i the index of the Object
* @return return the requested Object.
*/
public Object getObject(int i) {
return m_objects[i];
}
/**
* Return the index for a given Object, indicating its order in the range.
* @param o the Object to lookup.
* @return the index of the Object in the range model, -1 if the Object is
* not found in the model.
*/
public int getIndex(Object o) {
Integer idx = (Integer)m_ordinal.get(o);
return (idx==null ? -1 : idx.intValue());
}
/**
* @see prefuse.util.ui.ValuedRangeModel#getMinValue()
*/
public Object getMinValue() {
return m_objects[getMinimum()];
}
/**
* @see prefuse.util.ui.ValuedRangeModel#getMaxValue()
*/
public Object getMaxValue() {
return m_objects[getMaximum()];
}
/**
* @see prefuse.util.ui.ValuedRangeModel#getLowValue()
*/
public Object getLowValue() {
return m_objects[getValue()];
}
/**
* @see prefuse.util.ui.ValuedRangeModel#getHighValue()
*/
public Object getHighValue() {
return m_objects[getValue()+getExtent()];
}
} // end of class ObjectRangeModel