package com.openxc.measurements; import com.google.common.base.Objects; import com.openxc.messages.EventedSimpleVehicleMessage; import com.openxc.messages.SimpleVehicleMessage; import com.openxc.units.Unit; import com.openxc.util.AgingData; public abstract class EventedMeasurement<TheUnit extends Unit> extends BaseMeasurement<TheUnit> { private AgingData<Unit> mEvent; public abstract Object getSerializedEvent(); public EventedMeasurement(TheUnit value, Unit event) { super(value); mEvent = new AgingData<>(event); } @Override public SimpleVehicleMessage toVehicleMessage() { return new EventedSimpleVehicleMessage( mValue.getTimestamp(), getGenericName(), getSerializedValue(), getSerializedEvent()); } public Object getEvent() { if(hasEvent()) { return mEvent.getValue(); } return null; } public boolean hasEvent() { return mEvent != null; } @Override public boolean equals(Object obj) { if(this == obj) { return true; } if(!super.equals(obj) || getClass() != obj.getClass()) { return false; } @SuppressWarnings("unchecked") final EventedMeasurement<TheUnit> other = (EventedMeasurement<TheUnit>) obj; return Objects.equal(getEvent(), other.getEvent()); } }