package tim.prune.gui.profile;
import tim.prune.data.Field;
import tim.prune.data.Track;
import tim.prune.data.UnitSet;
/**
* Class to provide a source of values for the profile chart
* using any arbitary (non-built-in) field, units unknown
*/
public class ArbitraryData extends ProfileData
{
/** Field to use */
private Field _field = null;
/**
* Constructor
* @param inTrack track object
* @param inField field to use
*/
public ArbitraryData(Track inTrack, Field inField)
{
super(inTrack);
_field = inField;
}
/**
* Get the data and populate the instance arrays
*/
public void init(UnitSet inUnitSet)
{
setUnitSet(inUnitSet);
initArrays();
_hasData = false;
_minValue = _maxValue = 0.0;
if (_track != null)
{
for (int i=0; i<_track.getNumPoints(); i++)
{
// Get the value of the given field
boolean hasValue = false;
String value = _track.getPoint(i).getFieldValue(_field);
try
{
double dValue = Double.parseDouble(value);
_pointValues[i] = dValue;
if (dValue < _minValue || _minValue == 0.0) {_minValue = dValue;}
if (dValue > _maxValue) {_maxValue = dValue;}
hasValue = true;
_hasData = true;
}
catch (Exception e) {} // ignore nulls and non-numbers
_pointHasData[i] = hasValue;
}
}
}
/**
* @return name of field
*/
public String getLabel()
{
return _field.getName();
}
/**
* @return the field object
*/
public Field getField() {
return _field;
}
/**
* @return key for message when no values present
*/
public String getNoDataKey() {
return "display.novalues";
}
}