package edu.uw.zookeeper.server;
import org.apache.zookeeper.KeeperException;
import edu.uw.zookeeper.common.Processors;
import edu.uw.zookeeper.common.Processors.ForwardingProcessor;
import edu.uw.zookeeper.protocol.Operation;
import edu.uw.zookeeper.protocol.proto.IErrorResponse;
import edu.uw.zookeeper.protocol.proto.Records;
public class RequestErrorProcessor<I extends Operation.Request> extends ForwardingProcessor<I, Records.Response> implements Processors.UncheckedProcessor<I, Records.Response> {
public static <I extends Operation.Request> RequestErrorProcessor<I> create(
Processors.CheckedProcessor<? super I, ? extends Records.Response, KeeperException> processor) {
return new RequestErrorProcessor<I>(processor);
}
protected final Processors.CheckedProcessor<? super I, ? extends Records.Response, KeeperException> delegate;
public RequestErrorProcessor(
Processors.CheckedProcessor<? super I, ? extends Records.Response, KeeperException> delegate) {
this.delegate = delegate;
}
@Override
public Records.Response apply(I input) {
Records.Response result;
try {
result = delegate.apply(input);
} catch (KeeperException e) {
result = new IErrorResponse(e.code());
}
return result;
}
@Override
protected Processors.CheckedProcessor<? super I, ? extends Records.Response, KeeperException> delegate() {
return delegate;
}
}