1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.jetspeed.container.state;
18
19 import javax.portlet.PortletMode;
20 import javax.portlet.WindowState;
21
22 import org.apache.pluto.om.window.PortletWindow;
23
24 /***
25 * MutableNavigationalState
26 *
27 * Allows changing the PortletMode and/or WindowState of a PortletWindow state.
28 * <br>
29 * This interface extends the {@link NavigationState} interface to cleanly define the immutable contract of the latter.
30 * <br>
31 * Note: this is actually an ugly hack into the Portal as formally (per the portlet specs) the PortletMode and/or
32 * WindowState are only to be modified *and* then retained for the *next* subsequent renderRequest.
33 * <br>
34 * This interface is used for support of the Pluto required PortalActionProvider implementation (which definition
35 * is not undisputed, see: [todo: link to pluto-dev "Why PortalActionProvider?" mail discussion]).
36 * <br>
37 * Furthermore, this interface is also used by the Jetspeed-1 JetspeedFusionPortlet to synchronize the NavigationalState.
38 * Under which conditions that is done isn't clear yet (to me) but possibly that can/should be done differently also.
39 * <br>
40 * Modifying the Navigational State *during* a renderRequest (before the actual) rendering can result in a lost of these new states on a
41 * subsequent refresh of the Portlet if that doesn't trigger changing them again, because the state of these changes is
42 * only saved in PortletURLs created during the renderRequest, *not* in the session (if SessionNavigationalState is used).
43 * The session state has already been synchronized (if done) *before* these methods can be called.
44 * <br>
45 * Modifying the Navigational State *during* an actionRequest, as done by Pluto through the PortalActionProvider
46 * interface just before it sends a redirect, is kinda strange as it can more cleanly be done through the
47 * its PortalURLProvider interface (see above link to the mail discussion about this).
48 *
49 * @author <a href="mailto:ate@apache.org">Ate Douma</a>
50 * @version $Id: MutableNavigationalState.java 554926 2007-07-10 13:12:26Z ate $
51 */
52 public interface MutableNavigationalState extends NavigationalState
53 {
54 /***
55 * Sets the window state for the given portlet window.
56 *
57 * @param window
58 * @param windowState
59 */
60 void setState(PortletWindow window, WindowState windowState);
61
62 /***
63 * Sets the portlet mode for the given portlet window.
64 *
65 * @param window
66 * @param portletMode
67 */
68 void setMode(PortletWindow window, PortletMode portletMode);
69
70 /***
71 * Clear the request parameters to emulate an action reset
72 *
73 * @param window
74 */
75 void clearParameters(PortletWindow window);
76
77 /***
78 * Remove state for the given (possibly invalid) portlet window
79 */
80 void removeState(PortletWindow window);
81 }