KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > nl > justobjects > pushlet > core > Command


1 // Copyright (c) 2000 Just Objects B.V. <just@justobjects.nl>
2
// Distributable under LGPL license. See terms of license at gnu.org.
3

4 package nl.justobjects.pushlet.core;
5
6 import nl.justobjects.pushlet.util.PushletException;
7 import nl.justobjects.pushlet.util.Servlets;
8
9 import javax.servlet.http.HttpServletRequest JavaDoc;
10 import javax.servlet.http.HttpServletResponse JavaDoc;
11
12 /**
13  * Wraps pushlet request/response data.
14  *
15  * @version $Id: Command.java,v 1.2 2005/02/28 17:25:15 justb Exp $
16  * @author Just van den Broecke - Just Objects &copy;
17  **/

18 public class Command implements Protocol {
19
20     /** Pushlet request event. */
21     public final Event reqEvent;
22
23     /** Pushlet response event. */
24     private Event rspEvent;
25
26     /** HTTP Servlet GET/POST request. */
27     public final HttpServletRequest JavaDoc httpReq;
28
29     /** HTTP Servlet GET/POST response. */
30     public final HttpServletResponse JavaDoc httpRsp;
31
32     /** Pushlet session. */
33     public final Session session;
34
35     /** Per-response client adapter. */
36     private ClientAdapter clientAdapter;
37
38     /** Constructor. */
39     private Command(Session aSession, Event aRequestEvent, HttpServletRequest JavaDoc aHTTPReq, HttpServletResponse JavaDoc aHTTPRsp) {
40         session = aSession;
41         reqEvent = aRequestEvent;
42         httpReq = aHTTPReq;
43         httpRsp = aHTTPRsp;
44     }
45
46     /** Create new Command object. */
47     public static Command create(Session aSession, Event aReqEvent, HttpServletRequest JavaDoc aHTTPReq, HttpServletResponse JavaDoc aHTTPRsp) {
48         return new Command(aSession, aReqEvent, aHTTPReq, aHTTPRsp);
49     }
50
51     /** Set pushlet response event. */
52     public void setResponseEvent(Event aResponseEvent) {
53         rspEvent = aResponseEvent;
54     }
55
56     /** Get pushlet response event. */
57     public Event getResponseEvent() {
58         return rspEvent;
59     }
60
61     /** Get client adapter for request. */
62     public ClientAdapter getClientAdapter() throws PushletException {
63         if (clientAdapter == null) {
64             // Create and initialize client-specific adapter.
65
clientAdapter = createClientAdapter();
66         }
67         return clientAdapter;
68     }
69
70     /** Create client notifier based on "format" parameter passed in request. */
71     protected ClientAdapter createClientAdapter() throws PushletException {
72
73         // Assumed to be set by parent.
74
String JavaDoc outputFormat = session.getFormat();
75
76         // Determine client adapter to create.
77
if (outputFormat.equals(FORMAT_JAVASCRIPT)) {
78             // Client expects to receive Events as JavaScript dispatch calls..
79
return new BrowserAdapter(httpRsp);
80         } else if (outputFormat.equals(FORMAT_SERIALIZED_JAVA_OBJECT)) {
81             // Client expects to receive Events as Serialized Java Objects.
82
return new SerializedAdapter(httpRsp);
83         } else if (outputFormat.equals(FORMAT_XML)) {
84             // Client expects to receive Events as XML.
85
return new XMLAdapter(httpRsp);
86         } else {
87             throw new PushletException("Null or invalid output format: " + outputFormat);
88         }
89     }
90
91     /** Sends HTTP response headers. */
92     protected void sendResponseHeaders() {
93         // Just to try to prevent caching in any form.
94
Servlets.setNoCacheHeaders(httpRsp);
95
96         // Close connection for Java enabled browsers
97
if (session.getUserAgent().indexOf("java") > 0) {
98             // The connection should be closed after this request
99
// NB: this allows sending a "long response". Some clients
100
// in particular java.net.URL in VMs > 1.1 that use HTTP/1.1
101
// will block if
102
// - the content length is not sent
103
// - if Connection: close HTTP header is not sent.
104
//
105
// Since we don't know the content length we will assume
106
// the underlying servlet engine will use chunked encoding.
107
httpRsp.setHeader("Connection", "close");
108         }
109     }
110
111
112 }
113
114 /*
115   * $Log: Command.java,v $
116   * Revision 1.2 2005/02/28 17:25:15 justb
117   * commented
118   *
119   * Revision 1.1 2005/02/28 12:45:59 justb
120   * introduced Command class
121   *
122   *
123   */

124
Popular Tags