1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.mortbay.cometd;
16
17 import java.io.IOException;
18 import java.io.PrintWriter;
19
20 import javax.servlet.http.HttpServletResponse;
21
22 import org.cometd.Message;
23 import org.mortbay.util.ajax.JSON;
24
25
26
27
28
29
30
31 public class JSONPTransport extends AbstractTransport
32 {
33 public final static String __DEFAULT_CALLBACK="jsonpcallback";
34 int _responses=0;
35 PrintWriter _out;
36 String _jsonp=null;
37 String _mimeType;
38
39 public JSONPTransport(String jsonp)
40 {
41 _mimeType="text/javascript; charset=utf-8";
42 _jsonp=jsonp;
43 }
44
45 public void send(Message message) throws IOException
46 {
47 if (message != null)
48 {
49 if (_responses == 0)
50 {
51 HttpServletResponse response=getResponse();
52 response.setContentType(_mimeType);
53 _out=response.getWriter();
54 _out.write(this._jsonp == null?__DEFAULT_CALLBACK:_jsonp);
55 _out.write("([");
56 }
57 else
58 {
59 _out.write(",\r\n");
60 }
61
62 String r=(message instanceof MessageImpl)?((MessageImpl)message).getJSON():JSON.toString(message);
63 _responses++;
64 _out.write(r);
65 }
66 }
67
68 public void complete() throws IOException
69 {
70 HttpServletResponse response=getResponse();
71 response.setStatus(200);
72
73 if (_responses == 0)
74 {
75 response.setContentType(_mimeType);
76 _out=response.getWriter();
77 _out.write(this._jsonp == null?__DEFAULT_CALLBACK:_jsonp);
78 _out.write("([");
79 }
80 _out.write("])\r\n");
81 _out.close();
82 }
83
84
85 public boolean isMetaConnectDeliveryOnly()
86 {
87 return true;
88 }
89
90
91 public String getJsonp()
92 {
93 return _jsonp;
94 }
95
96
97 @Override
98 public String toString()
99 {
100 return "JSONPTransport[jsonp=" + this._jsonp + "]";
101 }
102 }