package edu.uw.zookeeper.protocol.server;
import edu.uw.zookeeper.common.Processors;
import edu.uw.zookeeper.protocol.proto.OpCode;
import edu.uw.zookeeper.protocol.proto.OpCodeXid;
public class AssignZxidProcessor implements
Processors.UncheckedProcessor<OpCode, Long>,
ZxidGenerator {
public static AssignZxidProcessor newInstance() {
return newInstance(ZxidEpochIncrementer.fromZero());
}
public static AssignZxidProcessor newInstance(
ZxidGenerator zxid) {
return new AssignZxidProcessor(zxid);
}
private final ZxidGenerator zxids;
private AssignZxidProcessor(ZxidGenerator zxids) {
this.zxids = zxids;
}
@Override
public Long apply(OpCode input) {
Long zxid;
switch (input) {
case NOTIFICATION:
zxid = OpCodeXid.NOTIFICATION_ZXID;
break;
case CREATE:
case CREATE2:
case DELETE:
case RECONFIG:
case SET_DATA:
case SET_ACL:
case CHECK:
case MULTI:
case CREATE_SESSION:
case CLOSE_SESSION:
case ERROR:
zxid = next();
break;
default:
zxid = get();
break;
}
return zxid;
}
@Override
public long get() {
return zxids.get();
}
@Override
public long next() {
return zxids.next();
}
}