package edu.uw.zookeeper.server;
import edu.uw.zookeeper.common.Processors;
import edu.uw.zookeeper.common.Reference;
import edu.uw.zookeeper.data.TxnOperation;
import edu.uw.zookeeper.data.TxnRequest;
import edu.uw.zookeeper.protocol.SessionOperation;
import edu.uw.zookeeper.protocol.server.AssignZxidProcessor;
public class ToTxnRequestProcessor implements Processors.UncheckedProcessor<SessionOperation.Request<?>, TxnOperation.Request<?>>, Reference<AssignZxidProcessor> {
public static ToTxnRequestProcessor create() {
return create(AssignZxidProcessor.newInstance());
}
public static ToTxnRequestProcessor create(AssignZxidProcessor zxids) {
return new ToTxnRequestProcessor(zxids);
}
public static long getTime() {
return System.currentTimeMillis();
}
protected final AssignZxidProcessor zxids;
public ToTxnRequestProcessor(AssignZxidProcessor zxids) {
this.zxids = zxids;
}
@Override
public AssignZxidProcessor get() {
return zxids;
}
@Override
public TxnOperation.Request<?> apply(SessionOperation.Request<?> input) {
long time = getTime();
long zxid = get().apply(input.record().opcode());
return TxnRequest.of(time, zxid, input);
}
}