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;
/**
* The SimpleVehicleMessage is a simple vehicle message as defined by the OpenXC
* message format - it has a name and a value field.
*/
public class SimpleVehicleMessage extends NamedVehicleMessage {
protected static final String VALUE_KEY = "value";
private static final String[] sRequiredFieldsValues = new String[] {
NAME_KEY, VALUE_KEY };
private static final Set<String> sRequiredFields = new HashSet<>(
Arrays.asList(sRequiredFieldsValues));
@SerializedName(VALUE_KEY)
private Object mValue;
public SimpleVehicleMessage(Long timestamp, String name, Object value) {
super(timestamp, name);
mValue = value;
}
public SimpleVehicleMessage(String name, Object value) {
this(null, name, value);
}
public Object getValue() {
return mValue;
}
public Number getValueAsNumber() {
return (Number) mValue;
}
public String getValueAsString() {
return (String) mValue;
}
public Boolean getValueAsBoolean() {
return (Boolean) mValue;
}
public static boolean containsRequiredFields(Set<String> fields) {
return fields.containsAll(sRequiredFields);
}
@Override
public boolean equals(Object obj) {
if(!super.equals(obj) || !(obj instanceof SimpleVehicleMessage)) {
return false;
}
final SimpleVehicleMessage other = (SimpleVehicleMessage) obj;
return mValue.equals(other.mValue);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("timestamp", getTimestamp())
.add("name", getName())
.add("value", getValue())
.add("extras", getExtras())
.toString();
}
@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeValue(getValue());
}
@Override
public void readFromParcel(Parcel in) {
super.readFromParcel(in);
mValue = in.readValue(null);
}
protected SimpleVehicleMessage(Parcel in) {
readFromParcel(in);
}
protected SimpleVehicleMessage() { }
}