From ccc241860abde4da528011abf221d58439da7226 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 28 Jul 2015 16:08:38 +0100 Subject: [PATCH] Isolate use of TemplateEngine into existing common base class --- .../restdocs/curl/CurlDocumentation.java | 14 ++---- .../restdocs/http/HttpDocumentation.java | 45 +++++++------------ .../hypermedia/LinkSnippetResultHandler.java | 18 ++------ .../payload/FieldSnippetResultHandler.java | 19 ++------ .../QueryParametersSnippetResultHandler.java | 27 ++++------- .../snippet/SnippetWritingResultHandler.java | 15 +++---- 6 files changed, 45 insertions(+), 93 deletions(-) diff --git a/spring-restdocs/src/main/java/org/springframework/restdocs/curl/CurlDocumentation.java b/spring-restdocs/src/main/java/org/springframework/restdocs/curl/CurlDocumentation.java index fbb410fc..9682fec5 100644 --- a/spring-restdocs/src/main/java/org/springframework/restdocs/curl/CurlDocumentation.java +++ b/spring-restdocs/src/main/java/org/springframework/restdocs/curl/CurlDocumentation.java @@ -25,7 +25,6 @@ import java.util.Map; import java.util.Map.Entry; import org.springframework.restdocs.snippet.SnippetWritingResultHandler; -import org.springframework.restdocs.templates.TemplateEngine; import org.springframework.restdocs.util.DocumentableHttpServletRequest; import org.springframework.test.web.servlet.MvcResult; import org.springframework.util.StringUtils; @@ -76,15 +75,10 @@ public abstract class CurlDocumentation { } @Override - public void handle(MvcResult result, PrintWriter writer) throws IOException { - Map context = new HashMap(); - context.put("arguments", getCurlCommandArguments(result)); - context.putAll(getAttributes()); - - TemplateEngine templateEngine = (TemplateEngine) result.getRequest() - .getAttribute(TemplateEngine.class.getName()); - - writer.print(templateEngine.compileTemplate("curl-request").render(context)); + public Map doHandle(MvcResult result) throws IOException { + Map model = new HashMap(); + model.put("arguments", getCurlCommandArguments(result)); + return model; } private String getCurlCommandArguments(MvcResult result) throws IOException { diff --git a/spring-restdocs/src/main/java/org/springframework/restdocs/http/HttpDocumentation.java b/spring-restdocs/src/main/java/org/springframework/restdocs/http/HttpDocumentation.java index fd9bdc2f..474f82f2 100644 --- a/spring-restdocs/src/main/java/org/springframework/restdocs/http/HttpDocumentation.java +++ b/spring-restdocs/src/main/java/org/springframework/restdocs/http/HttpDocumentation.java @@ -29,7 +29,6 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.restdocs.snippet.SnippetWritingResultHandler; -import org.springframework.restdocs.templates.TemplateEngine; import org.springframework.restdocs.util.DocumentableHttpServletRequest; import org.springframework.test.web.servlet.MvcResult; import org.springframework.util.StringUtils; @@ -87,20 +86,15 @@ public abstract class HttpDocumentation { } @Override - public void handle(MvcResult result, PrintWriter writer) throws IOException { + public Map doHandle(MvcResult result) throws IOException { DocumentableHttpServletRequest request = new DocumentableHttpServletRequest( result.getRequest()); - Map context = new HashMap(); - context.put("method", result.getRequest().getMethod()); - context.put("path", request.getRequestUriWithQueryString()); - context.put("headers", getHeaders(request)); - context.put("requestBody", getRequestBody(request)); - context.putAll(getAttributes()); - - TemplateEngine templateEngine = (TemplateEngine) result.getRequest() - .getAttribute(TemplateEngine.class.getName()); - - writer.print(templateEngine.compileTemplate("http-request").render(context)); + Map model = new HashMap(); + model.put("method", result.getRequest().getMethod()); + model.put("path", request.getRequestUriWithQueryString()); + model.put("headers", getHeaders(request)); + model.put("requestBody", getRequestBody(request)); + return model; } private List> getHeaders( @@ -225,33 +219,28 @@ public abstract class HttpDocumentation { } @Override - public void handle(MvcResult result, PrintWriter writer) throws IOException { + public Map doHandle(MvcResult result) throws IOException { HttpStatus status = HttpStatus.valueOf(result.getResponse().getStatus()); - Map context = new HashMap(); - context.put( + Map model = new HashMap(); + model.put( "responseBody", StringUtils.hasLength(result.getResponse().getContentAsString()) ? String .format("%n%s", result.getResponse().getContentAsString()) : ""); - context.put("statusCode", status.value()); - context.put("statusReason", status.getReasonPhrase()); + model.put("statusCode", status.value()); + model.put("statusReason", status.getReasonPhrase()); + model.put("headers", headers(result)); + return model; + } + private List> headers(MvcResult result) { List> headers = new ArrayList<>(); - context.put("headers", headers); - for (String headerName : result.getResponse().getHeaderNames()) { for (String header : result.getResponse().getHeaders(headerName)) { headers.add(header(headerName, header)); } } - - context.putAll(getAttributes()); - - TemplateEngine templateEngine = (TemplateEngine) result.getRequest() - .getAttribute(TemplateEngine.class.getName()); - - writer.print(templateEngine.compileTemplate("http-response").render(context)); - + return headers; } private Map header(String name, String value) { diff --git a/spring-restdocs/src/main/java/org/springframework/restdocs/hypermedia/LinkSnippetResultHandler.java b/spring-restdocs/src/main/java/org/springframework/restdocs/hypermedia/LinkSnippetResultHandler.java index cf0f9899..68155007 100644 --- a/spring-restdocs/src/main/java/org/springframework/restdocs/hypermedia/LinkSnippetResultHandler.java +++ b/spring-restdocs/src/main/java/org/springframework/restdocs/hypermedia/LinkSnippetResultHandler.java @@ -17,7 +17,6 @@ package org.springframework.restdocs.hypermedia; import java.io.IOException; -import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -29,7 +28,6 @@ import java.util.Set; import org.springframework.restdocs.snippet.SnippetGenerationException; import org.springframework.restdocs.snippet.SnippetWritingResultHandler; -import org.springframework.restdocs.templates.TemplateEngine; import org.springframework.test.web.servlet.MvcResult; import org.springframework.util.Assert; @@ -62,9 +60,11 @@ public class LinkSnippetResultHandler extends SnippetWritingResultHandler { } @Override - protected void handle(MvcResult result, PrintWriter writer) throws IOException { + protected Map doHandle(MvcResult result) throws IOException { validate(extractLinks(result)); - writeDocumentationSnippet(result, writer); + Map model = new HashMap<>(); + model.put("links", createLinksModel()); + return model; } private Map> extractLinks(MvcResult result) throws IOException { @@ -111,16 +111,6 @@ public class LinkSnippetResultHandler extends SnippetWritingResultHandler { } } - private void writeDocumentationSnippet(MvcResult result, PrintWriter writer) - throws IOException { - TemplateEngine templateEngine = (TemplateEngine) result.getRequest() - .getAttribute(TemplateEngine.class.getName()); - Map context = new HashMap<>(); - context.put("links", createLinksModel()); - context.putAll(getAttributes()); - writer.print(templateEngine.compileTemplate("links").render(context)); - } - private List> createLinksModel() { List> model = new ArrayList<>(); for (Entry entry : this.descriptorsByRel.entrySet()) { diff --git a/spring-restdocs/src/main/java/org/springframework/restdocs/payload/FieldSnippetResultHandler.java b/spring-restdocs/src/main/java/org/springframework/restdocs/payload/FieldSnippetResultHandler.java index 3bc1701f..0eb0b1f3 100644 --- a/spring-restdocs/src/main/java/org/springframework/restdocs/payload/FieldSnippetResultHandler.java +++ b/spring-restdocs/src/main/java/org/springframework/restdocs/payload/FieldSnippetResultHandler.java @@ -17,7 +17,6 @@ package org.springframework.restdocs.payload; import java.io.IOException; -import java.io.PrintWriter; import java.io.Reader; import java.util.ArrayList; import java.util.HashMap; @@ -27,7 +26,6 @@ import java.util.Map; import java.util.Map.Entry; import org.springframework.restdocs.snippet.SnippetWritingResultHandler; -import org.springframework.restdocs.templates.TemplateEngine; import org.springframework.test.web.servlet.MvcResult; import org.springframework.util.Assert; @@ -50,14 +48,11 @@ public abstract class FieldSnippetResultHandler extends SnippetWritingResultHand private final ObjectMapper objectMapper = new ObjectMapper(); - private final String templateName; - private List fieldDescriptors; FieldSnippetResultHandler(String identifier, String type, Map attributes, List descriptors) { super(identifier, type + "-fields", attributes); - this.templateName = type + "-fields"; for (FieldDescriptor descriptor : descriptors) { Assert.notNull(descriptor.getPath()); Assert.hasText(descriptor.getDescription()); @@ -67,15 +62,12 @@ public abstract class FieldSnippetResultHandler extends SnippetWritingResultHand } @Override - protected void handle(MvcResult result, PrintWriter writer) throws IOException { - + protected Map doHandle(MvcResult result) throws IOException { this.fieldValidator.validate(getPayloadReader(result), this.fieldDescriptors); - Object payload = extractPayload(result); - - Map context = new HashMap<>(); + Map model = new HashMap<>(); List> fields = new ArrayList<>(); - context.put("fields", fields); + model.put("fields", fields); for (Entry entry : this.descriptorsByPath.entrySet()) { FieldDescriptor descriptor = entry.getValue(); if (descriptor.getType() == null) { @@ -83,10 +75,7 @@ public abstract class FieldSnippetResultHandler extends SnippetWritingResultHand } fields.add(descriptor.toModel()); } - context.putAll(getAttributes()); - TemplateEngine templateEngine = (TemplateEngine) result.getRequest() - .getAttribute(TemplateEngine.class.getName()); - writer.print(templateEngine.compileTemplate(this.templateName).render(context)); + return model; } private FieldType getFieldType(FieldDescriptor descriptor, Object payload) { diff --git a/spring-restdocs/src/main/java/org/springframework/restdocs/request/QueryParametersSnippetResultHandler.java b/spring-restdocs/src/main/java/org/springframework/restdocs/request/QueryParametersSnippetResultHandler.java index ad45e62b..b61e85c8 100644 --- a/spring-restdocs/src/main/java/org/springframework/restdocs/request/QueryParametersSnippetResultHandler.java +++ b/spring-restdocs/src/main/java/org/springframework/restdocs/request/QueryParametersSnippetResultHandler.java @@ -17,7 +17,6 @@ package org.springframework.restdocs.request; import java.io.IOException; -import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -29,7 +28,6 @@ import java.util.Set; import org.springframework.restdocs.snippet.SnippetGenerationException; import org.springframework.restdocs.snippet.SnippetWritingResultHandler; -import org.springframework.restdocs.templates.TemplateEngine; import org.springframework.test.web.servlet.MvcResult; import org.springframework.util.Assert; @@ -54,9 +52,16 @@ public class QueryParametersSnippetResultHandler extends SnippetWritingResultHan } @Override - protected void handle(MvcResult result, PrintWriter writer) throws IOException { + protected Map doHandle(MvcResult result) throws IOException { verifyParameterDescriptors(result); - documentParameters(result, writer); + + Map model = new HashMap<>(); + List> parameters = new ArrayList<>(); + for (Entry entry : this.descriptorsByName.entrySet()) { + parameters.add(entry.getValue().toModel()); + } + model.put("parameters", parameters); + return model; } private void verifyParameterDescriptors(MvcResult result) { @@ -88,18 +93,4 @@ public class QueryParametersSnippetResultHandler extends SnippetWritingResultHan Assert.isTrue(actualParameters.equals(expectedParameters)); } - private void documentParameters(MvcResult result, PrintWriter writer) - throws IOException { - TemplateEngine templateEngine = (TemplateEngine) result.getRequest() - .getAttribute(TemplateEngine.class.getName()); - Map context = new HashMap<>(); - List> parameters = new ArrayList<>(); - for (Entry entry : this.descriptorsByName.entrySet()) { - parameters.add(entry.getValue().toModel()); - } - context.put("parameters", parameters); - context.putAll(getAttributes()); - writer.print(templateEngine.compileTemplate("query-parameters").render(context)); - } - } diff --git a/spring-restdocs/src/main/java/org/springframework/restdocs/snippet/SnippetWritingResultHandler.java b/spring-restdocs/src/main/java/org/springframework/restdocs/snippet/SnippetWritingResultHandler.java index c75c351e..12b364eb 100644 --- a/spring-restdocs/src/main/java/org/springframework/restdocs/snippet/SnippetWritingResultHandler.java +++ b/spring-restdocs/src/main/java/org/springframework/restdocs/snippet/SnippetWritingResultHandler.java @@ -17,11 +17,11 @@ package org.springframework.restdocs.snippet; import java.io.IOException; -import java.io.PrintWriter; import java.io.Writer; import java.util.HashMap; import java.util.Map; +import org.springframework.restdocs.templates.TemplateEngine; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.ResultHandler; @@ -47,20 +47,19 @@ public abstract class SnippetWritingResultHandler implements ResultHandler { } } - protected abstract void handle(MvcResult result, PrintWriter writer) - throws IOException; - @Override public void handle(MvcResult result) throws IOException { WriterResolver writerResolver = (WriterResolver) result.getRequest() .getAttribute(WriterResolver.class.getName()); try (Writer writer = writerResolver.resolve(this.identifier, this.snippetName)) { - handle(result, new PrintWriter(writer)); + Map model = doHandle(result); + model.putAll(this.attributes); + TemplateEngine templateEngine = (TemplateEngine) result.getRequest() + .getAttribute(TemplateEngine.class.getName()); + writer.append(templateEngine.compileTemplate(this.snippetName).render(model)); } } - protected Map getAttributes() { - return this.attributes; - } + protected abstract Map doHandle(MvcResult result) throws IOException; } \ No newline at end of file