package co.smartreceipts.android.model.impl;
import android.os.Parcel;
import android.support.annotation.NonNull;
import com.google.common.base.Preconditions;
import co.smartreceipts.android.model.PaymentMethod;
import co.smartreceipts.android.sync.model.SyncState;
import co.smartreceipts.android.sync.model.impl.DefaultSyncState;
/**
* An immutable implementation of {@link co.smartreceipts.android.model.PaymentMethod}.
*
* @author Will Baumann
*/
public final class ImmutablePaymentMethodImpl implements PaymentMethod {
private final int mId;
private final String mMethod;
private final SyncState mSyncState;
public ImmutablePaymentMethodImpl(int id, @NonNull String method) {
this(id, method, new DefaultSyncState());
}
public ImmutablePaymentMethodImpl(int id, @NonNull String method, @NonNull SyncState syncState) {
mId = id;
mMethod = Preconditions.checkNotNull(method);
mSyncState = Preconditions.checkNotNull(syncState);
}
private ImmutablePaymentMethodImpl(final Parcel in) {
mId = in.readInt();
mMethod = in.readString();
mSyncState = in.readParcelable(getClass().getClassLoader());
}
/**
* @return - the database primary key id for this method
*/
@Override
public int getId() {
return mId;
}
@Override
@NonNull
public String getMethod() {
return mMethod;
}
@NonNull
@Override
public SyncState getSyncState() {
return mSyncState;
}
@Override
public String toString() {
return mMethod;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof ImmutablePaymentMethodImpl)) return false;
ImmutablePaymentMethodImpl that = (ImmutablePaymentMethodImpl) o;
if (mId != that.mId) return false;
return (mMethod.equals(that.mMethod));
}
@Override
public int hashCode() {
int result = mId;
result = 31 * result + mMethod.hashCode();
return result;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(final Parcel out, final int flags) {
out.writeInt(mId);
out.writeString(mMethod);
out.writeParcelable(mSyncState, flags);
}
public static Creator<ImmutablePaymentMethodImpl> CREATOR = new Creator<ImmutablePaymentMethodImpl>() {
@Override
public ImmutablePaymentMethodImpl createFromParcel(Parcel source) {
return new ImmutablePaymentMethodImpl(source);
}
@Override
public ImmutablePaymentMethodImpl[] newArray(int size) {
return new ImmutablePaymentMethodImpl[size];
}
};
}