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