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 public class JSONTransport extends AbstractTransport
27 {
28 private int _responses=0;
29 private PrintWriter _out;
30 protected String _contentType;
31 protected String _start;
32 protected String _end;
33 private boolean _commented;
34
35
36 public JSONTransport(boolean commented)
37 {
38 setJSONCommented(commented);
39 }
40
41
42
43
44
45 public boolean isJSONCommented()
46 {
47 return _commented;
48 }
49
50
51
52
53
54 public void setJSONCommented(boolean commented)
55 {
56 _commented=commented;
57 if (commented)
58 {
59 _contentType="text/json-comment-filtered; charset=utf-8";
60 _start="/*[";
61 _end="]*/\r\n";
62 }
63 else
64 {
65 _contentType="text/json; charset=utf-8";
66 _start="[";
67 _end="]\r\n";
68 }
69 }
70
71
72 public synchronized void send(Message message) throws IOException
73 {
74 if (message!=null)
75 {
76 if (message.size()==0)
77 throw new IllegalStateException();
78
79 String r=(message instanceof MessageImpl)
80 ?((MessageImpl)message).getJSON()
81 :JSON.toString(message);
82
83 ((MessageImpl)message).decRef();
84
85 HttpServletResponse response=getResponse();
86
87 switch(_responses)
88 {
89 case 0:
90 response.setStatus(200);
91 response.setContentType(_contentType);
92 _out=response.getWriter();
93 _out.write(_start);
94 _out.write(r);
95 break;
96
97 default:
98 _out.write(',');
99 _out.write(r);
100 }
101
102 _responses++;
103 }
104 }
105
106
107 public synchronized void complete() throws IOException
108 {
109 if (_responses==0)
110 {
111 HttpServletResponse response=getResponse();
112 response.setStatus(200);
113 _out=response.getWriter();
114 _out.write(_start);
115 }
116 _out.write(_end);
117 _out.close();
118 _responses=0;
119 }
120
121
122 public boolean resumePoll()
123 {
124 return false;
125 }
126 }