package com.openxc.messages;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import android.os.Parcel;
import com.google.common.base.MoreObjects;
import com.google.gson.annotations.SerializedName;
/**
* A simple vehicle message also with an event field.
*
* An EventedSimpleVehicleMessage can optionally be converted into a
* Measurement, e.g. a VehicleDoorStatus measurement.
*/
public class EventedSimpleVehicleMessage extends SimpleVehicleMessage {
private static final String EVENT_KEY = "event";
private static final String[] sRequiredFieldsValues = new String[] {
NAME_KEY, VALUE_KEY, EVENT_KEY };
private static final Set<String> sRequiredFields = new HashSet<>(
Arrays.asList(sRequiredFieldsValues));
@SerializedName(EVENT_KEY)
private Object mEvent;
public EventedSimpleVehicleMessage(Long timestamp, String name, Object value,
Object event) {
super(timestamp, name, value);
mEvent = event;
}
public EventedSimpleVehicleMessage(String name, Object value, Object event) {
this(null, name, value, event);
}
public Object getEvent() {
return mEvent;
}
public Number getEventAsNumber() {
return (Number) mEvent;
}
public String getEventAsString() {
return (String) mEvent;
}
public Boolean getEventAsBoolean() {
return (Boolean) mEvent;
}
public static boolean containsRequiredFields(Set<String> fields) {
return fields.containsAll(sRequiredFields);
}
@Override
public boolean equals(Object obj) {
if(!super.equals(obj) || !(obj instanceof EventedSimpleVehicleMessage)) {
return false;
}
final EventedSimpleVehicleMessage other = (EventedSimpleVehicleMessage) obj;
return mEvent.equals(other.mEvent);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("timestamp", getTimestamp())
.add("name", getName())
.add("value", getValue())
.add("event", getEvent())
.add("extras", getExtras())
.toString();
}
@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeValue(getEvent());
}
@Override
public void readFromParcel(Parcel in) {
super.readFromParcel(in);
mEvent = in.readValue(null);
}
protected EventedSimpleVehicleMessage(Parcel in) {
readFromParcel(in);
}
protected EventedSimpleVehicleMessage() { }
}