package edu.uw.zookeeper.server; import java.util.Map; import org.apache.zookeeper.KeeperException; import com.google.common.collect.ImmutableMap; import edu.uw.zookeeper.common.Processors; import edu.uw.zookeeper.data.TxnOperation; import edu.uw.zookeeper.protocol.proto.OpCode; import edu.uw.zookeeper.protocol.proto.Records; public class ByOpcodeTxnRequestProcessor implements Processors.CheckedProcessor<TxnOperation.Request<?>, Records.Response, KeeperException> { public static ByOpcodeTxnRequestProcessor create( ImmutableMap<OpCode, ? extends Processors.CheckedProcessor<TxnOperation.Request<?>, ? extends Records.Response, KeeperException>> processors) { return new ByOpcodeTxnRequestProcessor(processors); } protected final Map<OpCode, ? extends Processors.CheckedProcessor<TxnOperation.Request<?>, ? extends Records.Response, KeeperException>> processors; protected ByOpcodeTxnRequestProcessor(Map<OpCode, ? extends Processors.CheckedProcessor<TxnOperation.Request<?>, ? extends Records.Response, KeeperException>> processors) { this.processors = processors; } @Override public Records.Response apply(TxnOperation.Request<?> input) throws KeeperException { Processors.CheckedProcessor<TxnOperation.Request<?>, ? extends Records.Response, KeeperException> processor = processors.get(input.record().opcode()); if (processor == null) { throw new IllegalArgumentException(input.toString()); } return processor.apply(input); } }