private synchronized void propagateMeasurementFromMessage( SimpleVehicleMessage message) { try { Measurement measurement = BaseMeasurement.getMeasurementFromMessage(message); if(mMeasurementTypeListeners.containsKey(measurement.getClass())) { for(Measurement.Listener listener : mMeasurementTypeListeners.get(measurement.getClass())) { listener.receive(measurement); } } } catch(UnrecognizedMeasurementTypeException e) { // The message is not a recognized Measurement, we don't propagate // it as a Measurement (only as a Message, which is handled // earlier). } catch(NoValueException e) { Log.w(TAG, "Received notification for a blank measurement", e); } } }
public static Measurement getMeasurementFromMessage( SimpleVehicleMessage message) throws UnrecognizedMeasurementTypeException, NoValueException { Class<? extends Measurement> measurementClass = BaseMeasurement.getClassForId(message.getName()); return BaseMeasurement.getMeasurementFromMessage(measurementClass, message); }
@Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null) { convertView = LayoutInflater.from(mContext) .inflate(R.layout.dashboard_list_item, parent, false); } SimpleVehicleMessage message = getItem(position); TextView nameView = (TextView) convertView.findViewById(R.id.name); TextView valueView = (TextView) convertView.findViewById(R.id.value); try { Measurement measurement = BaseMeasurement.getMeasurementFromMessage(message); nameView.setText("" + measurement.getName(mContext)); valueView.setText("" + measurement.toString()); } catch(UnrecognizedMeasurementTypeException e) { nameView.setText("" + message.getName()); valueView.setText("" + message.getValue()); } catch(NoValueException e) { } return convertView; }
@Test(expected=NoValueException.class) public void buildFromNull() throws NoValueException, UnrecognizedMeasurementTypeException { BaseMeasurement.getMeasurementFromMessage(VehicleSpeed.class, null); }
private void checkDeserializeSerialize(Measurement measurement) throws UnrecognizedMeasurementTypeException, NoValueException { SimpleVehicleMessage message = measurement.toVehicleMessage(); Measurement deserializedMeasurement = BaseMeasurement.getMeasurementFromMessage(message); assertThat(deserializedMeasurement, instanceOf(measurement.getClass())); assertThat(deserializedMeasurement, equalTo(measurement)); }
@Test public void buildFromMessage() throws UnrecognizedMeasurementTypeException, NoValueException { VehicleSpeed measurement = new VehicleSpeed(value); Measurement deserializedMeasurement = BaseMeasurement.getMeasurementFromMessage(message); assertThat(deserializedMeasurement, instanceOf(VehicleSpeed.class)); VehicleSpeed vehicleSpeed = (VehicleSpeed) deserializedMeasurement; assertThat(vehicleSpeed, equalTo(measurement)); }
/** * Retrieve the most current value of a measurement. * * @param measurementType The class of the requested Measurement * (e.g. VehicleSpeed.class) * @return An instance of the requested Measurement which may or may * not have a value. * @throws UnrecognizedMeasurementTypeException if passed a measurementType * that does not extend Measurement * @throws NoValueException if no value has yet been received for this * measurementType * @see BaseMeasurement */ public Measurement get( Class<? extends Measurement> measurementType) throws UnrecognizedMeasurementTypeException, NoValueException { return BaseMeasurement.getMeasurementFromMessage(measurementType, get(BaseMeasurement.getKeyForMeasurement(measurementType)).asSimpleMessage()); }
@Test public void buildFromMessageWithInteger() throws UnrecognizedMeasurementTypeException, NoValueException { message = new SimpleVehicleMessage(VehicleSpeed.ID, Integer.valueOf(42)); VehicleSpeed measurement = new VehicleSpeed(value); Measurement deserializedMeasurement = BaseMeasurement.getMeasurementFromMessage(message); assertThat(deserializedMeasurement, instanceOf(VehicleSpeed.class)); VehicleSpeed vehicleSpeed = (VehicleSpeed) deserializedMeasurement; assertThat(vehicleSpeed, equalTo(measurement)); }
@Test(expected=UnrecognizedMeasurementTypeException.class) public void buildFromUnrecognizedMessage() throws NoValueException, UnrecognizedMeasurementTypeException { message = new SimpleVehicleMessage("foo", value); BaseMeasurement.getMeasurementFromMessage(message); }
@Test public void buildEventedFromMessage() throws UnrecognizedMeasurementTypeException, NoValueException { VehicleDoorStatus measurement = new VehicleDoorStatus("driver", false); VehicleMessage eventedMessage = measurement.toVehicleMessage(); Measurement deserializedMeasurement = BaseMeasurement.getMeasurementFromMessage( eventedMessage.asSimpleMessage()); assertThat(deserializedMeasurement, instanceOf(VehicleDoorStatus.class)); VehicleDoorStatus doorStatus = (VehicleDoorStatus) deserializedMeasurement; assertThat(doorStatus, equalTo(measurement)); }