package com.openxc.messages; import java.util.Arrays; import java.util.HashMap; 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 NamedVehicleMessage is a VehicleMessage with a name field. * * Named messages are keyed on the name. */ public class NamedVehicleMessage extends KeyedMessage { protected static final String NAME_KEY = "name"; @SerializedName(NAME_KEY) private String mName; private static final String[] sRequiredFieldsValues = new String[] { NAME_KEY }; private static final Set<String> sRequiredFields = new HashSet<>( Arrays.asList(sRequiredFieldsValues)); public NamedVehicleMessage(String name) { mName = name; } public NamedVehicleMessage(Long timestamp, String name) { super(timestamp); mName = name; } public String getName() { return mName; } @Override public int compareTo(VehicleMessage other) { NamedVehicleMessage otherMessage = (NamedVehicleMessage) other; int nameComp = getName().compareTo(otherMessage.getName()); return nameComp == 0 ? super.compareTo(other) : nameComp; } @Override public boolean equals(Object obj) { if(!super.equals(obj) || getClass() != obj.getClass()) { return false; } final NamedVehicleMessage other = (NamedVehicleMessage) obj; return mName.equals(other.mName); } @Override public MessageKey getKey() { if(super.getKey() == null) { HashMap<String, Object> key = new HashMap<>(); key.put(NAME_KEY, getName()); setKey(new MessageKey(key)); } return super.getKey(); } public static boolean containsRequiredFields(Set<String> fields) { return fields.containsAll(sRequiredFields); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("timestamp", getTimestamp()) .add("name", getName()) .add("extras", getExtras()) .toString(); } @Override public void writeToParcel(Parcel out, int flags) { super.writeToParcel(out, flags); out.writeString(getName()); } @Override protected void readFromParcel(Parcel in) { super.readFromParcel(in); mName = in.readString(); } protected NamedVehicleMessage(Parcel in) { readFromParcel(in); } protected NamedVehicleMessage() { } }