package pl.llp.aircasting.sensor.external;
import pl.llp.aircasting.model.events.SensorEvent;
public class ExternalSensorParser
{
/**
* This has to match what Arduino produces
* Value;Sensor package name;Sensor name;Type of measurement;Short type of measurement;Unit name;Unit symbol/abbreviation;T1;T2;T3;T4;T5
*/
enum Fields
{
MEASUREMENT_VALUE,
SENSOR_PACKAGE_NAME,
SENSOR_NAME,
MEASUREMENT_TYPE,
MEASUREMENT_SHORT_TYPE,
MEASUREMENT_UNIT,
MEASUREMENT_SYMBOL,
THRESHOLD_VERY_LOW,
THRESHOLD_LOW,
THRESHOLD_MEDIUM,
THRESHOLD_HIGH,
THRESHOLD_VERY_HIGH
}
public SensorEvent parse(String string) throws ParseException
{
String[] parts = string.split(";");
if (parts.length < Fields.values().length)
{
throw new ParseException("Field count is wrong");
}
String packageName = parts[Fields.SENSOR_PACKAGE_NAME.ordinal()];
String name = parts[Fields.SENSOR_NAME.ordinal()];
String type = parts[Fields.MEASUREMENT_TYPE.ordinal()];
String shortType = parts[Fields.MEASUREMENT_SHORT_TYPE.ordinal()];
String unit = parts[Fields.MEASUREMENT_UNIT.ordinal()];
String symbol = parts[Fields.MEASUREMENT_SYMBOL.ordinal()];
double value;
int veryLow, low, mid, high, veryHigh;
try
{
veryLow = Integer.parseInt(parts[Fields.THRESHOLD_VERY_LOW.ordinal()]);
low = Integer.parseInt(parts[Fields.THRESHOLD_LOW.ordinal()]);
mid = Integer.parseInt(parts[Fields.THRESHOLD_MEDIUM.ordinal()]);
high = Integer.parseInt(parts[Fields.THRESHOLD_HIGH.ordinal()]);
veryHigh = Integer.parseInt(parts[Fields.THRESHOLD_VERY_HIGH.ordinal()]);
value = Double.parseDouble(parts[Fields.MEASUREMENT_VALUE.ordinal()]);
}
catch (NumberFormatException e)
{
throw new ParseException(e);
}
return new SensorEvent(packageName, name, type, shortType, unit, symbol, veryLow, low, mid, high, veryHigh, value);
}
}