package voldemort.server.protocol; import voldemort.VoldemortException; import voldemort.client.protocol.RequestFormatType; import voldemort.server.StoreRepository; import voldemort.server.protocol.pb.ProtoBuffRequestHandler; import voldemort.server.protocol.vold.VoldemortNativeRequestHandler; import voldemort.store.ErrorCodeMapper; /** * A factory that gets the appropriate request handler for a given * {@link voldemort.client.protocol.RequestFormatType}. * * */ public class ClientRequestHandlerFactory implements RequestHandlerFactory { private final StoreRepository repository; public ClientRequestHandlerFactory(StoreRepository repository) { this.repository = repository; } @Override public RequestHandler getRequestHandler(RequestFormatType type) { switch(type) { case VOLDEMORT_V0: return new VoldemortNativeRequestHandler(new ErrorCodeMapper(), repository, 0); case VOLDEMORT_V1: return new VoldemortNativeRequestHandler(new ErrorCodeMapper(), repository, 1); case VOLDEMORT_V2: return new VoldemortNativeRequestHandler(new ErrorCodeMapper(), repository, 2); case VOLDEMORT_V3: return new VoldemortNativeRequestHandler(new ErrorCodeMapper(), repository, 3); case PROTOCOL_BUFFERS: return new ProtoBuffRequestHandler(new ErrorCodeMapper(), repository); default: throw new VoldemortException("Unknown wire format in " + this.getClass().getName() + " Type : " + type); } } @Override public boolean shareReadWriteBuffer() { return true; } }