package auctionsniper;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
public class SniperSnapshot {
public final String itemId;
public final int lastPrice;
public final int lastBid;
public final SniperState state;
public SniperSnapshot(String itemId, int lastPrice, int lastBid, SniperState state) {
this.itemId = itemId;
this.lastPrice = lastPrice;
this.lastBid = lastBid;
this.state = state;
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
public static SniperSnapshot joining(String itemId) {
return new SniperSnapshot(itemId, 0, 0, SniperState.JOINING);
}
public SniperSnapshot bidding(int newLastPrice, int newLastBid) {
return new SniperSnapshot(itemId, newLastPrice, newLastBid, SniperState.BIDDING);
}
public SniperSnapshot winning(int newLastPrice) {
return new SniperSnapshot(itemId, newLastPrice, lastBid, SniperState.WINNING);
}
public SniperSnapshot losing(int newLastPrice) {
return new SniperSnapshot(itemId, newLastPrice, lastBid, SniperState.LOSING);
}
public SniperSnapshot closed() {
return new SniperSnapshot(itemId, lastPrice, lastBid, state.whenAuctionClosed());
}
public SniperSnapshot failed() {
return new SniperSnapshot(itemId, 0, 0, SniperState.FAILED);
}
public boolean isForSameItemAs(SniperSnapshot sniperSnapshot) {
return itemId.equals(sniperSnapshot.itemId);
}
}