package com.openxc.interfaces;
import com.google.common.base.Objects;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Log;
import static com.google.common.base.MoreObjects.toStringHelper;
public class VehicleInterfaceDescriptor implements Parcelable {
private final static String TAG =
VehicleInterfaceDescriptor.class.getName();
private boolean mConnected;
private Class<? extends VehicleInterface> mInterfaceClass;
public VehicleInterfaceDescriptor(
Class<? extends VehicleInterface> interfaceClass,
boolean connected) {
mInterfaceClass = interfaceClass;
mConnected = connected;
}
public VehicleInterfaceDescriptor(VehicleInterface vi) {
this(vi.getClass(), vi.isConnected());
}
public boolean isConnected() {
return mConnected;
}
public Class<? extends VehicleInterface> getInterfaceClass() {
return mInterfaceClass;
}
@Override
public boolean equals(Object obj) {
if(obj == null) {
return false;
}
final VehicleInterfaceDescriptor other =
(VehicleInterfaceDescriptor) obj;
return Objects.equal(mConnected, other.mConnected) &&
Objects.equal(mInterfaceClass, other.mInterfaceClass);
}
@Override
public int hashCode() {
return Objects.hashCode(mConnected, mInterfaceClass);
}
@Override
public String toString() {
return toStringHelper(this)
.add("class", mInterfaceClass)
.add("connected", mConnected)
.toString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mConnected ? 1 : 0);
out.writeString(mInterfaceClass.getName());
}
protected void readFromParcel(Parcel in) {
mConnected = in.readInt() == 1;
try {
mInterfaceClass = VehicleInterfaceFactory.findClass(
in.readString());
} catch(VehicleInterfaceException e) {
Log.w(TAG, "Unable to load class for vehicle interface by name", e);
}
}
public static final Parcelable.Creator<VehicleInterfaceDescriptor> CREATOR =
new Parcelable.Creator<VehicleInterfaceDescriptor>() {
@Override
public VehicleInterfaceDescriptor createFromParcel(Parcel in) {
return new VehicleInterfaceDescriptor(in);
}
@Override
public VehicleInterfaceDescriptor[] newArray(int size) {
return new VehicleInterfaceDescriptor[size];
}
};
private VehicleInterfaceDescriptor(Parcel in) {
readFromParcel(in);
}
}