package com.aconex.scrutineer;
import java.io.IOException;
import java.io.ObjectOutputStream;
import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
public abstract class AbstractIdAndVersion implements IdAndVersion {
private final long version;
protected AbstractIdAndVersion(long version) {
this.version = version;
}
@Override
public long getVersion() {
return version;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof AbstractIdAndVersion)) {
return false;
}
AbstractIdAndVersion other = (AbstractIdAndVersion) obj;
return this.compareTo(other) == 0;
}
@Override
public int hashCode() {
return appendId(new HashCodeBuilder()).append(version).toHashCode();
}
@Override
public String toString() {
return getId() + ":" + getVersion();
}
@Override
public int compareTo(IdAndVersion other) {
return appendId(new CompareToBuilder(), other).append(version, other.getVersion()).toComparison();
}
@Override
public final void writeToStream(ObjectOutputStream objectOutputStream) throws IOException {
writeId(objectOutputStream);
objectOutputStream.writeLong(version);
}
protected abstract HashCodeBuilder appendId(HashCodeBuilder appender);
protected abstract CompareToBuilder appendId(CompareToBuilder appender, IdAndVersion other);
protected abstract void writeId(ObjectOutputStream objectOutputStream) throws IOException;
}