public Response formResult()

in src/main/java/org/apache/freemarker/onlinetester/resources/ExecuteApiResource.java [87:145]


    public Response formResult(
            ExecuteRequest req) {
        ExecuteResponse resp = new ExecuteResponse();
        
        if (StringUtils.isBlank(req.getTemplate()) && StringUtils.isBlank(req.getDataModel())) {
            return Response.status(400).entity("Empty Template & data").build();
        }

        List<ExecuteResponseProblem> problems = new ArrayList<>();
        
        ExecuteTemplateArgs serviceArgs = new ExecuteTemplateArgs()
        		.templateSourceCode(lengthCheckAndGetTemplate(req, problems))
        		.dataModel(parseDataModel(req, problems))
        		.outputFormat(parseChoiceField(
		        		ExecuteRequest.Field.OUTPUT_FORMAT, req.getOutputFormat(),
		        		AllowedSettingValues.DEFAULT_OUTPUT_FORMAT, AllowedSettingValues.OUTPUT_FORMAT_MAP,
		        		problems))
        		.locale(parseChoiceField(
		        		ExecuteRequest.Field.LOCALE, req.getLocale(),
		        		AllowedSettingValues.DEFAULT_LOCALE, AllowedSettingValues.LOCALE_MAP,
		        		problems))
        		.timeZone(parseChoiceField(
		        		ExecuteRequest.Field.TIME_ZONE, req.getTimeZone(),
		        		AllowedSettingValues.DEFAULT_TIME_ZONE, AllowedSettingValues.TIME_ZONE_MAP,
		        		problems))
        		.tagSyntax(parseChoiceField(
		        		ExecuteRequest.Field.TAG_SYNTAX, req.getTagSyntax(),
		        		AllowedSettingValues.DEFAULT_TAG_SYNTAX, AllowedSettingValues.TAG_SYNTAX_MAP,
		        		problems))
        		.interpolationSyntax(parseChoiceField(
		        		ExecuteRequest.Field.INTERPOLATION_SYNTAX, req.getInterpolationSyntax(),
		        		AllowedSettingValues.DEFAULT_INTERPOLATION_SYNTAX, AllowedSettingValues.INTERPOLATION_SYNTAX_MAP,
		        		problems));
        
        if (!problems.isEmpty()) {
            resp.setProblems(problems);
            return buildFreeMarkerResponse(resp);
        }
        
        FreeMarkerServiceResponse serviceResponse;
        try {
            serviceResponse = freeMarkerService.executeTemplate(serviceArgs);
        } catch (RejectedExecutionException e) {
            String error = SERVICE_TIMEOUT_ERROR_MESSAGE;
            return Response.serverError().entity(new ErrorResponse(ErrorCode.FREEMARKER_SERVICE_TIMEOUT, error)).build();
        }
        if (!serviceResponse.isSuccesful()){
            Throwable failureReason = serviceResponse.getFailureReason();
            String error = ExceptionUtils.getMessageWithCauses(failureReason);
            problems.add(new ExecuteResponseProblem(ExecuteRequest.Field.TEMPLATE, error));
            resp.setProblems(problems);
            return buildFreeMarkerResponse(resp);
        }

        String result = serviceResponse.getTemplateOutput();
        resp.setResult(result);
        resp.setTruncatedResult(serviceResponse.isTemplateOutputTruncated());
        return buildFreeMarkerResponse(resp);
    }