package co.smartreceipts.android.model.impl.columns;
import android.support.annotation.NonNull;
import java.util.List;
import co.smartreceipts.android.model.Column;
import co.smartreceipts.android.sync.model.SyncState;
/**
* Provides an abstract implementation of the column contract to cover shared code
*/
public abstract class AbstractColumnImpl<T> implements Column<T>, Comparable<AbstractColumnImpl<T>> {
private final int mId;
private final String mName;
private final SyncState mSyncState;
public AbstractColumnImpl(int id, @NonNull String name, @NonNull SyncState syncState) {
mId = id;
mName = name;
mSyncState = syncState;
}
@Override
public int getId() {
return mId;
}
@Override
@NonNull
public final String getName() {
return mName;
}
@Override
@NonNull
public String getHeader() {
return getName();
}
@Override
@NonNull
public String getFooter(@NonNull List<T> rows) {
return "";
}
@Override
public int compareTo(@NonNull AbstractColumnImpl<T> otherColumn) {
return getId() - otherColumn.getId();
}
@NonNull
@Override
public SyncState getSyncState() {
return mSyncState;
}
@Override
public String toString() {
return getName();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof AbstractColumnImpl)) return false;
AbstractColumnImpl that = (AbstractColumnImpl) o;
if (mId != that.mId) return false;
if (!mName.equals(that.mName)) return false;
return true;
}
@Override
public int hashCode() {
int result = mId;
result = 31 * result + mName.hashCode();
return result;
}
}