package edu.uw.zookeeper.protocol; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import edu.uw.zookeeper.common.Reference; import edu.uw.zookeeper.protocol.proto.Records; public class SessionRequest<T extends Records.Request> implements SessionOperation.Request<T>, Reference<Message.ClientRequest<T>> { public static <T extends Records.Request> SessionRequest<T> of( long sessionId, Message.ClientRequest<T> request) { return new SessionRequest<T>(sessionId, request); } protected final long sessionId; protected final Message.ClientRequest<T> request; public SessionRequest( long sessionId, Message.ClientRequest<T> request) { this.sessionId = sessionId; this.request = request; } @Override public Message.ClientRequest<T> get() { return request; } @Override public long getSessionId() { return sessionId; } @Override public int xid() { return request.xid(); } @Override public T record() { return request.record(); } @Override public String toString() { return MoreObjects.toStringHelper(this) .add("sessionId", String.format("0x%08x", getSessionId())) .add("request", get()) .toString(); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (! (obj instanceof SessionRequest)) { return false; } SessionRequest<?> other = (SessionRequest<?>) obj; return Objects.equal(getSessionId(), other.getSessionId()) && Objects.equal(get(), other.get()); } @Override public int hashCode() { return Objects.hashCode(getSessionId(), get()); } }