1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package net.wotonomy.web;
20
21
22 /***
23 * An implementation of WORequestHandler that dispatches Component actions.
24 *
25 * @author michael@mpowers.net
26 * @author $Author: cgruber $
27 * @version $Revision: 905 $
28 */
29 public class WOComponentRequestHandler
30 extends WORequestHandler
31 {
32 public WOResponse handleRequest( WORequest aRequest )
33 {
34 WOApplication application = aRequest.application();
35 WOContext context = WOContext.contextWithRequest( aRequest );
36 WOResponse response = null;
37
38
39
40 synchronized ( aRequest.request.getSession() )
41 {
42 try
43 {
44 application.awake();
45
46 WOSession session = null;
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 String sessionID = aRequest.sessionID();
73 if ( sessionID != null )
74 {
75 session = application.restoreSessionWithID( sessionID, context );
76 }
77
78 if ( session == null )
79 {
80 session = application.createSessionForRequest( aRequest );
81 if ( session == null )
82 {
83 response = application.handleSessionCreationErrorInContext( context );
84 }
85 else
86 {
87 session.setContext( context );
88 }
89 }
90
91 context.setSession( session );
92
93 session.awake();
94
95 if ( response == null )
96 {
97
98 WOComponent page;
99 String contextID = aRequest.contextID();
100
101 if ( contextID != null )
102 {
103 page = session.restorePageForContextID( contextID );
104 }
105 else
106 {
107 page = application.pageWithName( aRequest.pageName(), context );
108 }
109
110 if ( page == null )
111 {
112
113
114 page = application.pageWithName( aRequest.pageName(), context );
115
116 }
117
118 {
119 context.pushElement( page );
120 page.ensureAwakeInContext( context );
121
122
123 System.out.println("should I takeValuesFromRequest ? " + ( aRequest.formValueKeys().count() > 0 ));
124 if ( aRequest.formValueKeys().count() > 0 )
125 {
126 application.takeValuesFromRequest( aRequest, context );
127 }
128
129
130 WOActionResults result;
131 System.out.println("senderID: " + aRequest.senderID());
132 if ( aRequest.senderID() != null )
133 {
134 result = application.invokeAction( aRequest, context );
135 }
136 else
137 {
138 result = null;
139 }
140
141 if ( result == null || result == page )
142 {
143 result = page;
144
145
146 response = new WOResponse();
147 application.appendToResponse( response, context );
148 page.sleep();
149 }
150 else
151 if ( result instanceof WOComponent )
152 {
153 page.sleep();
154 page = (WOComponent) result;
155 page.ensureAwakeInContext( context );
156 context.popElement();
157 context.pushElement( page );
158
159
160 response = new WOResponse();
161 application.appendToResponse( response, context );
162 page.sleep();
163 }
164 else
165 {
166 response = (WOResponse) result;
167 }
168
169 context.popElement();
170 session.sleep();
171 session.savePage( page );
172 session.setContext( null );
173 application.saveSessionForContext( context );
174 }
175 }
176 }
177 catch ( Throwable t )
178 {
179 response = application.handleException( t, context );
180 }
181
182 application.sleep();
183 }
184 return response;
185 }
186 }
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229