+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";
+ }
+}