1 package com.atlassian.plugins.rest.module.json;
2
3 import static com.atlassian.plugins.rest.common.MediaTypes.*;
4
5 import com.sun.jersey.spi.container.ContainerResponse;
6 import com.sun.jersey.spi.container.ContainerResponseWriter;
7 import org.apache.commons.lang.Validate;
8
9 import static javax.ws.rs.core.HttpHeaders.*;
10
11 import java.io.IOException;
12 import java.io.OutputStream;
13
14 class JsonWithPaddingResponseAdapter implements ContainerResponseWriter {
15 private final String callbackFunction;
16 private final ContainerResponseWriter containerResponseWriter;
17
18 private OutputStream out;
19
20 public JsonWithPaddingResponseAdapter(String callbackFunction, ContainerResponseWriter containerResponseWriter) {
21 Validate.notNull(callbackFunction);
22 Validate.notNull(containerResponseWriter);
23 this.callbackFunction = callbackFunction;
24 this.containerResponseWriter = containerResponseWriter;
25 }
26
27 public OutputStream writeStatusAndHeaders(long contentLength, ContainerResponse response) throws IOException {
28
29 response.getHttpHeaders().putSingle(CONTENT_TYPE, APPLICATION_JAVASCRIPT_TYPE);
30
31 out = containerResponseWriter.writeStatusAndHeaders(-1, response);
32 out.write((callbackFunction + "(").getBytes());
33 return out;
34 }
35
36 public void finish() throws IOException {
37 out.write(");".getBytes());
38 }
39 }