package tim.prune.gui.profile; import tim.prune.data.Track; import tim.prune.data.UnitSet; /** * Abstract class for all sources of profile data, * including altitudes and speeds */ public abstract class ProfileData { /** Track object */ protected final Track _track; /** Unit set to use */ protected UnitSet _unitSet = null; /** Flag for availability of any data */ protected boolean _hasData = false; /** Array of booleans for data per point */ protected boolean[] _pointHasData = null; /** Array of values per point */ protected double[] _pointValues = null; /** Minimum value for track */ protected double _minValue = 0.0; /** Maximum value for track */ protected double _maxValue = 0.0; /** * Constructor giving track object * @param inTrack track object */ public ProfileData(Track inTrack) { _track = inTrack; } /** * @return true if this source has any data at all */ public boolean hasData() { return _hasData; } /** * @param inPointNum index of point * @return true if that point has data */ public boolean hasData(int inPointNum) { return (_hasData && _pointHasData != null && inPointNum >= 0 && inPointNum < _pointHasData.length && _pointHasData[inPointNum]); } /** * @param inPointNum index of point * @return value corresponding to that point */ public double getData(int inPointNum) { if (!hasData(inPointNum)) {return 0.0;} return _pointValues[inPointNum]; } /** * @return minimum value */ public double getMinValue() { return _minValue; } /** * @return maximum value */ public double getMaxValue() { return _maxValue; } /** * Get the data from the track and populate the value arrays */ public abstract void init(UnitSet inUnitSet); /** * Set the UnitSet to use for the calculations * @param inUnitSet unit set */ protected void setUnitSet(UnitSet inUnitSet) { _unitSet = inUnitSet; } /** * @return text for label including units */ public abstract String getLabel(); /** * @return key for message when no data available */ public abstract String getNoDataKey(); /** * Initialise the data arrays to the correct size */ protected void initArrays() { int numTrackPoints = _track.getNumPoints(); if (_pointHasData == null || _pointHasData.length != numTrackPoints) { _pointHasData = new boolean[numTrackPoints]; _pointValues = new double[numTrackPoints]; } } }