class StoreCommandProcessor
        extends RpcRequestProcessor<StoreCommandRequest> {

    private static final Logger LOG = Log.logger(
            StoreCommandProcessor.class);

    private final RaftContext context;

    public StoreCommandProcessor(RaftContext context) {
        super(null, null);
        this.context = context;
    }

    @Override
    public Message processRequest(StoreCommandRequest request,
                                  RpcRequestClosure done) {<FILL_FUNCTION_BODY>}

    @Override
    public String interest() {
        return StoreCommandRequest.class.getName();
    }

    private StoreCommand parseStoreCommand(StoreCommandRequest request) {
        StoreType type = request.getType();
        StoreAction action = request.getAction();
        byte[] data = request.getData().toByteArray();
        return new StoreCommand(type, action, data, true);
    }
}

        LOG.debug("Processing StoreCommandRequest: {}", request.getAction());
        RaftNode node = this.context.node();
        try {
            StoreCommand command = this.parseStoreCommand(request);
            RaftStoreClosure closure = new RaftStoreClosure(command);
            node.submitAndWait(command, closure);
            // TODO: return the submitAndWait() result to rpc client
            return StoreCommandResponse.newBuilder().setStatus(true).build();
        } catch (Throwable e) {
            LOG.warn("Failed to process StoreCommandRequest: {}",
                     request.getAction(), e);
            StoreCommandResponse.Builder builder = StoreCommandResponse
                    .newBuilder()
                    .setStatus(false);
            if (e.getMessage() != null) {
                builder.setMessage(e.getMessage());
            }
            return builder.build();
        }
    
<no_super_class>