/** * @param request Not null. * @param context Nullable. */ public void executeRequest(final RollRequest request, final IRequestContext context) throws FatalException { try { final String methodCode = resolveMethodCode(request, context); final String input = request.getRequest(); try { if (requestTooLong(input)) throw new RequestTooLongException(input.length(), getMaxRequestLength()); final IRollingMethod method = this.factory.getMethod(methodCode); final IDieRollerFactory factory = createDieRollerFactory(); final IRollConfig config = context != null ? context.getConfig(method) : null; final IFormattedBufferedOutput wrappedOutput = wrapOutput(request); method.writeResult(factory, config, input, wrappedOutput); wrappedOutput.flush(); } catch (final UserReadableException exception) { request.getOutput().append(exception.getMessage()).with(Style.RED); } } catch (final OutputException exception) { throw new FatalException(exception); } }
public IFormattedBufferedOutput wrapOutput(final RollRequest request) { final IFormattedBufferedOutput output = getMaxResultLength() == null ? new WrappingWriter(request.getOutput()) : new LimitingWriter(request.getOutput(), getMaxResultLength()); return output; }
public String resolveMethodCode(final RollRequest request, final IRequestContext context) { return request.getMethodCode() != null ? request.getMethodCode() : context.getDefaultMethodCode(); }