1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.plugins.jsr168.pluto.core;
35
36 import org.apache.pluto.om.common.ObjectID;
37 import org.apache.pluto.portalImpl.om.window.impl.PortletWindowImpl;
38
39 import java.net.URLEncoder;
40
41 import java.util.Iterator;
42 import java.util.Map;
43
44 import javax.portlet.PortletMode;
45 import javax.portlet.WindowState;
46
47 import javax.servlet.http.HttpServletRequest;
48
49
50
51
52
53 public class PortalURL
54 {
55
56
57
58 public static final String PREFIX = "_";
59
60
61
62
63 private static final String PORTLET_ID = "pid";
64
65
66
67
68 private static final String MODE = "md";
69
70
71
72
73 private static final String STATE = "st";
74
75
76
77
78 private static final String ACTION = "ac";
79
80
81
82
83 private final boolean _bAction;
84
85
86
87
88 private final PortletMode _portletMode;
89
90
91
92
93 private final WindowState _windowState;
94
95
96
97
98
99
100
101
102 public PortalURL( HttpServletRequest request )
103 {
104 _bAction = extractAction( request );
105 _portletMode = extractMode( request );
106 _windowState = extractState( request );
107 }
108
109
110
111
112
113
114 public boolean isAction( )
115 {
116 return _bAction;
117 }
118
119
120
121
122
123
124 public PortletMode getPortletMode( )
125 {
126 return _portletMode;
127 }
128
129
130
131
132
133
134 public WindowState getWindowState( )
135 {
136 return _windowState;
137 }
138
139
140
141
142
143
144 public void fillWindowPortlet( PortletWindowImpl portletWindow )
145 {
146 if ( getPortletMode( ) != null )
147 {
148 portletWindow.setPortletMode( getPortletMode( ) );
149 }
150
151 if ( getWindowState( ) != null )
152 {
153 portletWindow.setWindowState( getWindowState( ) );
154 }
155 }
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172 public static String buildParams( ObjectID portletID, boolean bAction, PortletMode portletMode,
173 WindowState windowState, Map parameters )
174 {
175 StringBuffer buf = new StringBuffer( );
176 String sep = "";
177
178 String portletIdParam = buildPortletIDParam( portletID );
179
180 if ( ( portletIdParam != null ) && ( portletIdParam.length( ) > 0 ) )
181 {
182 buf.append( sep ).append( portletIdParam );
183 sep = "&";
184 }
185
186 String actionParam = buildActionParam( bAction );
187
188 if ( ( actionParam != null ) && ( actionParam.length( ) > 0 ) )
189 {
190 buf.append( sep ).append( actionParam );
191 sep = "&";
192 }
193
194 String modeParam = buildModeParam( portletMode );
195
196 if ( ( modeParam != null ) && ( modeParam.length( ) > 0 ) )
197 {
198 buf.append( sep ).append( modeParam );
199 sep = "&";
200 }
201
202 String stateParam = buildStateParam( windowState );
203
204 if ( ( stateParam != null ) && ( stateParam.length( ) > 0 ) )
205 {
206 buf.append( sep ).append( stateParam );
207 sep = "&";
208 }
209
210 String renderParams = buildParameterParam( parameters );
211
212 if ( ( renderParams != null ) && ( renderParams.length( ) > 0 ) )
213 {
214 buf.append( sep ).append( renderParams );
215 sep = "&";
216 }
217
218 return buf.toString( );
219 }
220
221
222
223
224
225
226
227 public static String extractPortletId( HttpServletRequest servletRequest )
228 {
229 return servletRequest.getParameter( getPortletIdKey( ) );
230 }
231
232
233
234
235
236
237
238 public static boolean isActionURL( HttpServletRequest servletRequest )
239 {
240 final String actionParam = servletRequest.getParameter( getActionKey( ) );
241
242 return ( actionParam != null );
243 }
244
245
246
247
248
249
250
251 private static String buildPortletIDParam( ObjectID portletID )
252 {
253 if ( portletID != null )
254 {
255 return getPortletIdKey( ) + "=" + portletID;
256 }
257
258 return null;
259 }
260
261
262
263
264
265
266
267 private static String buildActionParam( final boolean bAction )
268 {
269 if ( bAction )
270 {
271 return getActionKey( ) + "=" + 1;
272 }
273
274 return null;
275 }
276
277
278
279
280
281
282
283 private static boolean extractAction( HttpServletRequest servletRequest )
284 {
285 String actionStr = servletRequest.getParameter( getActionKey( ) );
286
287 return ( actionStr != null );
288 }
289
290
291
292
293
294
295
296 private static String buildModeParam( PortletMode portletMode )
297 {
298 if ( portletMode != null )
299 {
300 return getModeKey( ) + "=" + portletMode;
301 }
302
303 return null;
304 }
305
306
307
308
309
310
311
312
313 private static PortletMode extractMode( HttpServletRequest servletRequest )
314 {
315 String mode = servletRequest.getParameter( getModeKey( ) );
316
317 if ( mode != null )
318 {
319 return new PortletMode( mode );
320 }
321
322 return null;
323 }
324
325
326
327
328
329
330
331 private static String buildStateParam( WindowState windowState )
332 {
333 if ( windowState != null )
334 {
335 return getStateKey( ) + "=" + windowState;
336 }
337
338 return null;
339 }
340
341
342
343
344
345
346
347
348 private static WindowState extractState( HttpServletRequest servletRequest )
349 {
350 String state = servletRequest.getParameter( getStateKey( ) );
351
352 if ( state != null )
353 {
354 return new WindowState( state );
355 }
356
357 return null;
358 }
359
360
361
362
363
364
365
366 private static String buildParameterParam( Map mapRenderParams )
367 {
368 String sep = "";
369 StringBuffer buf = new StringBuffer( );
370 Iterator entriesIt = mapRenderParams.entrySet( ).iterator( );
371
372 while ( entriesIt.hasNext( ) )
373 {
374 Map.Entry entry = (Map.Entry) entriesIt.next( );
375 Object key = entry.getKey( );
376 Object val = entry.getValue( );
377
378
379
380
381
382 if ( ( key == null ) || !( key instanceof String ) )
383 {
384 continue;
385 }
386
387 if ( val == null )
388 {
389 continue;
390 }
391
392 final String encKey = URLEncoder.encode( (String) key );
393
394
395 if ( val instanceof String )
396 {
397 String vals = (String) val;
398 String encVal = URLEncoder.encode( (String) vals );
399 buf.append( sep ).append( encKey ).append( '=' ).append( encVal );
400 sep = "&";
401 }
402 else if ( val instanceof String[] )
403 {
404 String[] vals = (String[]) val;
405
406 for ( int i = 0; i < vals.length; ++i )
407 {
408 String encVal = URLEncoder.encode( (String) vals[i] );
409 buf.append( sep ).append( encKey ).append( '=' ).append( encVal );
410 sep = "&";
411 }
412 }
413 }
414
415 return buf.toString( );
416 }
417
418
419
420
421
422
423 private static String getActionKey( )
424 {
425 return PREFIX + ACTION;
426 }
427
428
429
430
431
432
433 private static String getPortletIdKey( )
434 {
435 return PREFIX + PORTLET_ID;
436 }
437
438
439
440
441
442
443 private static String getModeKey( )
444 {
445 return PREFIX + MODE;
446 }
447
448
449
450
451
452
453 private static String getStateKey( )
454 {
455 return PREFIX + STATE;
456 }
457 }