Author: julien(a)jboss.com
Date: 2008-01-15 17:45:05 -0500 (Tue, 15 Jan 2008)
New Revision: 9517
Added:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/RequestParameters.java
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/PortletParametersStateString.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/ActionRequestImpl.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/ActionResponseImpl.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/EventRequestImpl.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/EventResponseImpl.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/PortletRequestImpl.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/RenderRequestImpl.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/StateAwareResponseImpl.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractActionContext.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractEventContext.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractPortletInvocationContext.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractRenderContext.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/info/NavigationInfo.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/info/ParameterInfo.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/invocation/response/StateResponse.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/invocation/response/UpdateNavigationalStateResponse.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/spi/PortletInvocationContext.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/support/info/NavigationInfoSupport.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/support/info/ParameterInfoSupport.java
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/support/spi/PortletInvocationContextSupport.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortalNavigationalState.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletController.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/TestActionContext.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/TestEventContext.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/TestRenderContext.java
Log:
more code for public parameters
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/PortletParametersStateString.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/PortletParametersStateString.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/PortletParametersStateString.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -75,6 +75,18 @@
}
}
+ public static PortletParametersStateString create(StateString stateString)
+ {
+ if (stateString instanceof PortletParametersStateString)
+ {
+ return (PortletParametersStateString)stateString;
+ }
+ else
+ {
+ return new PortletParametersStateString(stateString.getStringValue());
+ }
+ }
+
public static PortletParametersStateString create(Map<String, String[]>
parameterMap)
{
PortletParameters params = PortletParameters.wrap(parameterMap);
Added:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/RequestParameters.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/RequestParameters.java
(rev 0)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/RequestParameters.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -0,0 +1,197 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2006, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.portlet.impl.jsr168;
+
+import org.jboss.portal.common.util.ParameterMap;
+import org.jboss.portal.portlet.spi.PortletInvocationContext;
+import org.jboss.portal.portlet.spi.ActionContext;
+import org.jboss.portal.portlet.StateString;
+import org.jboss.portal.portlet.PortletParameters;
+import org.jboss.portal.portlet.PortletParametersStateString;
+
+/**
+ * The main responsibility of this class is to combine the different parameter sources
(private navigational state,
+ * public navigational state, interaction state, form) into the private map, public map
and parameter map.
+ *
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 630 $
+ */
+public class RequestParameters
+{
+
+ /** . */
+ protected final ParameterMap parameters;
+
+ /** . */
+ protected final ParameterMap privateParameters;
+
+ /** . */
+ protected final ParameterMap publicParameters;
+
+ public RequestParameters(PortletInvocationContext context)
+ {
+ if (context instanceof ActionContext)
+ {
+ ActionContext actionContext = (ActionContext)context;
+
+ // Get the possibly null interaction state
+ StateString interactionState = actionContext.getInteractionState();
+
+ // Take care of the interaction state if any
+ PortletParameters privateParameters = null;
+
+ //
+ if (interactionState != null)
+ {
+ // Unserialize the interaction state if necessary
+ PortletParametersStateString parametersState;
+ if (interactionState instanceof PortletParametersStateString)
+ {
+ parametersState = (PortletParametersStateString)interactionState;
+ }
+ else
+ {
+ parametersState = new
PortletParametersStateString(interactionState.getStringValue());
+ }
+
+ //
+ privateParameters = parametersState.getParameters();
+ }
+
+ //
+ PortletParameters form = actionContext.getForm();
+ if (form != null)
+ {
+ if (privateParameters == null)
+ {
+ privateParameters = form;
+ }
+ else
+ {
+ privateParameters = new PortletParameters(privateParameters);
+ privateParameters.append(form);
+ }
+ }
+
+ //
+ ParameterMap publicParameters = actionContext.getPublicNavigationalState();
+
+ //
+ ParameterMap parameters;
+ if (publicParameters != null)
+ {
+ if (privateParameters != null)
+ {
+ PortletParameters tmp = new PortletParameters(privateParameters);
+ tmp.append(publicParameters);
+ parameters = tmp;
+ }
+ else
+ {
+ parameters = publicParameters;
+ }
+ }
+ else
+ {
+ if (privateParameters != null)
+ {
+ parameters = privateParameters;
+ }
+ else
+ {
+ parameters = null;
+ }
+ }
+
+ //
+ this.privateParameters = privateParameters;
+ this.publicParameters = publicParameters;
+ this.parameters = parameters;
+ }
+ else
+ {
+ // Get the possibly null navigational state
+ StateString navigationalState = context.getNavigationalState();
+
+ //
+ ParameterMap privateParameters;
+ if (navigationalState == null)
+ {
+ privateParameters = null;
+ }
+ else
+ {
+ privateParameters =
PortletParametersStateString.create(navigationalState).getParameters();
+ }
+
+ //
+ ParameterMap publicParameters = context.getPublicNavigationalState();
+
+ // Build combined map
+ ParameterMap parameters;
+ if (publicParameters != null)
+ {
+ if (privateParameters != null)
+ {
+ parameters = new PortletParameters(privateParameters);
+ parameters.putAll(publicParameters);
+ }
+ else
+ {
+ parameters = publicParameters;
+ }
+ }
+ else
+ {
+ if (privateParameters != null)
+ {
+ parameters = privateParameters;
+ }
+ else
+ {
+ parameters = null;
+ }
+ }
+
+ //
+ this.privateParameters = privateParameters;
+ this.publicParameters = publicParameters;
+ this.parameters = parameters;
+ }
+ }
+
+ public ParameterMap getParameters()
+ {
+ return parameters;
+ }
+
+ public ParameterMap getPrivateParameters()
+ {
+ return privateParameters;
+ }
+
+ public ParameterMap getPublicParameters()
+ {
+ return publicParameters;
+ }
+}
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/ActionRequestImpl.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/ActionRequestImpl.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/ActionRequestImpl.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -26,6 +26,7 @@
import org.jboss.portal.portlet.PortletParametersStateString;
import org.jboss.portal.portlet.StateString;
import org.jboss.portal.portlet.invocation.ActionInvocation;
+import org.jboss.portal.common.util.ParameterMap;
import javax.portlet.ActionRequest;
@@ -35,45 +36,8 @@
*/
public class ActionRequestImpl extends ClientDataRequestImpl implements ActionRequest
{
-
public ActionRequestImpl(ActionInvocation invocation)
{
super(invocation);
-
- // Get the possibly null interaction state
- StateString interactionState = actionContext.getInteractionState();
-
- // Take care of the interaction state if any
- if (interactionState != null)
- {
- // Unserialize the interaction state if necessary
- PortletParametersStateString parametersState = null;
- if (interactionState instanceof PortletParametersStateString)
- {
- parametersState = (PortletParametersStateString)interactionState;
- }
- else
- {
- parametersState = new
PortletParametersStateString(interactionState.getStringValue());
- }
-
- //
- parameters = parametersState.getParameters();
- }
-
- //
- PortletParameters form = actionContext.getForm();
- if (form != null)
- {
- if (parameters == null)
- {
- parameters = form;
- }
- else
- {
- parameters = new PortletParameters(parameters);
- parameters.append(form);
- }
- }
}
}
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/ActionResponseImpl.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/ActionResponseImpl.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/ActionResponseImpl.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -22,11 +22,9 @@
******************************************************************************/
package org.jboss.portal.portlet.impl.jsr168.api;
-import org.apache.log4j.Logger;
import org.jboss.portal.common.NotYetImplemented;
import org.jboss.portal.portlet.PortletParametersStateString;
import org.jboss.portal.portlet.invocation.ActionInvocation;
-import org.jboss.portal.portlet.invocation.response.HTTPRedirectionResponse;
import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
import org.jboss.portal.portlet.invocation.response.UpdateNavigationalStateResponse;
@@ -40,14 +38,8 @@
public class ActionResponseImpl extends StateAwareResponseImpl implements ActionResponse
{
- private static final Logger log = Logger.getLogger(ActionResponseImpl.class);
-
- protected static final int WANT_NOTHING = 0;
- protected static final int WANT_RENDER = 1;
- protected static final int WANT_REDIRECT = 2;
-
+ /** . */
protected PortletInvocationResponse response;
- protected int decision;
public ActionResponseImpl(ActionInvocation invocation, PortletRequestImpl preq)
{
@@ -59,7 +51,6 @@
//
this.response = rr;
- this.decision = WANT_NOTHING;
}
public void sendRedirect(String s, String s1) throws IOException
@@ -74,9 +65,29 @@
// do something more clever than simply returning
return;
}
+
if (location.startsWith("http://") ||
location.startsWith("https://") || location.startsWith("/"))
{
- sendRedirect(new HTTPRedirectionResponse(location));
+ //
+ if (decision == null)
+ {
+ WantRedirect redirect = new WantRedirect();
+ redirect.location = location;
+
+ //
+ decision = redirect;
+ }
+ else if (decision instanceof WantRedirect)
+ {
+ WantRedirect redirect = (WantRedirect)decision;
+ redirect.location = location;
+ }
+ else
+ {
+ throw new IllegalStateException("sendRedirect cannot be called after
" +
+ "setPortletMode/setWindowState/setRenderParameter/setRenderParameters
" +
+ "has been called previously");
+ }
}
else
{
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/EventRequestImpl.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/EventRequestImpl.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/EventRequestImpl.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -24,9 +24,6 @@
import org.jboss.portal.portlet.invocation.EventInvocation;
import org.jboss.portal.portlet.spi.EventContext;
-import org.jboss.portal.portlet.spi.PortletInvocationContext;
-import org.jboss.portal.portlet.PortletParametersStateString;
-import org.jboss.portal.portlet.StateString;
import javax.portlet.EventRequest;
import javax.portlet.Event;
@@ -44,27 +41,6 @@
public EventRequestImpl(EventInvocation invocation)
{
super(invocation);
-
- //
- PortletInvocationContext context = invocation.getPortletContext();
-
- // Get the possibly null navigational state
- StateString navigationalState = context.getNavigationalState();
-
- //
- if (navigationalState == null)
- {
-
- }
- else if (navigationalState instanceof PortletParametersStateString)
- {
- parameters = ((PortletParametersStateString)navigationalState).getParameters();
- }
- else
- {
- PortletParametersStateString parametersState = new
PortletParametersStateString(navigationalState.getStringValue());
- parameters = parametersState.getParameters();
- }
}
public Event getEvent()
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/EventResponseImpl.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/EventResponseImpl.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/EventResponseImpl.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -23,8 +23,8 @@
package org.jboss.portal.portlet.impl.jsr168.api;
import org.jboss.portal.portlet.invocation.EventInvocation;
-import org.jboss.portal.portlet.invocation.response.UpdateNavigationalStateResponse;
import org.jboss.portal.portlet.spi.PortletInvocationContext;
+import org.jboss.portal.portlet.PortletParametersStateString;
import javax.portlet.EventResponse;
import javax.portlet.EventRequest;
@@ -55,8 +55,10 @@
PortletInvocationContext context = invocation.getPortletContext();
//
- ((UpdateNavigationalStateResponse)response).setMode(context.getMode());
-
((UpdateNavigationalStateResponse)response).setWindowState(context.getWindowState());
-
((UpdateNavigationalStateResponse)response).setNavigationalState(context.getNavigationalState());
+ WantUpdate update = (WantUpdate)decision;
+ update.mode = context.getMode();
+ update.windowState = context.getWindowState();
+ update.navigationalState =
PortletParametersStateString.create(context.getNavigationalState()).getParameters();
+ update.publicNavigationalState = context.getPublicNavigationalState();
}
}
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/PortletRequestImpl.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/PortletRequestImpl.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/PortletRequestImpl.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -24,15 +24,18 @@
import org.apache.log4j.Logger;
import org.jboss.portal.common.util.Tools;
+import org.jboss.portal.common.util.ParameterMap;
import org.jboss.portal.common.NotYetImplemented;
-import org.jboss.portal.portlet.PortletParameters;
import org.jboss.portal.portlet.container.PortletContainerInvoker;
import org.jboss.portal.portlet.impl.jsr168.PortletApplicationImpl;
import org.jboss.portal.portlet.impl.jsr168.PortletContainerImpl;
import org.jboss.portal.portlet.impl.jsr168.PortletUtils;
import org.jboss.portal.portlet.impl.jsr168.PortletRequestAttributes;
+import org.jboss.portal.portlet.impl.jsr168.RequestParameters;
import org.jboss.portal.portlet.impl.info.ContainerSecurityInfo;
import org.jboss.portal.portlet.impl.info.ContainerPreferencesInfo;
+import org.jboss.portal.portlet.impl.info.ContainerNavigationInfo;
+import org.jboss.portal.portlet.impl.info.ContainerPortletInfo;
import org.jboss.portal.portlet.invocation.PortletInvocation;
import org.jboss.portal.portlet.spi.RequestContext;
import org.jboss.portal.portlet.spi.SecurityContext;
@@ -84,39 +87,45 @@
protected PortalContext portalContext;
protected PortletSessionImpl psession;
protected int sessionStatus;
+ protected ContainerNavigationInfo navigationInfo;
/** . */
- protected PortletParameters parameters;
+ protected final PortletRequestAttributes attributes;
/** . */
- protected final PortletRequestAttributes attributes;
+ protected final RequestParameters requestParameters;
public PortletRequestImpl(PortletInvocation invocation)
{
+ PortletContainerImpl container =
(PortletContainerImpl)invocation.getAttribute(PortletInvocation.INVOCATION_SCOPE,
PortletContainerInvoker.PORTLET_CONTAINER);
+ int mode = this instanceof RenderRequest ? PortletPreferencesImpl.RENDER :
PortletPreferencesImpl.ACTION;
+ PropertyContext prefs =
(PropertyContext)invocation.getAttribute(PortletInvocation.INVOCATION_SCOPE,
PropertyContext.PREFERENCES_ATTRIBUTE);
+ PreferencesValidator validator = container.getPreferencesValidator();
+ ContainerPortletInfo info = container.getInfo();
+ ContainerPreferencesInfo containerPrefs = info.getPreferences();
+
//
this.invocation = invocation;
+ this.requestParameters = new RequestParameters(invocation.getPortletContext());
this.userContext = invocation.getUserContext();
this.securityContext = invocation.getSecurityContext();
this.requestContext = invocation.getRequestContext();
this.windowContext = invocation.getWindowContext();
- this.container =
(PortletContainerImpl)invocation.getAttribute(PortletInvocation.INVOCATION_SCOPE,
PortletContainerInvoker.PORTLET_CONTAINER);
+ this.container = container;
this.dreq = invocation.getDispatchedRequest();
this.portalContext = new PortalContextImpl(invocation.getPortalContext());
- this.parameters = null;
- this.attributes = new PortletRequestAttributes(container, userContext);
-
- //
- int mode = this instanceof RenderRequest ? PortletPreferencesImpl.RENDER :
PortletPreferencesImpl.ACTION;
- PropertyContext prefs =
(PropertyContext)invocation.getAttribute(PortletInvocation.INVOCATION_SCOPE,
PropertyContext.PREFERENCES_ATTRIBUTE);
- PreferencesValidator validator = container.getPreferencesValidator();
- ContainerPreferencesInfo containerPrefs = container.getInfo().getPreferences();
+ this.attributes = new PortletRequestAttributes(this.container, userContext);
this.preferences = new PortletPreferencesImpl(prefs, containerPrefs, validator,
mode);
+ this.navigationInfo = info.getNavigation();
}
// PLT.11.1.1
public String getParameter(String name)
{
+ ParameterMap parameters = requestParameters.getParameters();
+
+ //
if (name == null)
{
throw new IllegalArgumentException("name must not be null");
@@ -133,6 +142,9 @@
public Enumeration<String> getParameterNames()
{
+ ParameterMap parameters = requestParameters.getParameters();
+
+ //
if (parameters != null)
{
return Collections.enumeration(parameters.keySet());
@@ -149,6 +161,10 @@
{
throw new IllegalArgumentException("name must not be null");
}
+
+ ParameterMap parameters = requestParameters.getParameters();
+
+ //
if (parameters != null)
{
return parameters.getValues(name);
@@ -161,6 +177,9 @@
public Map<String, String[]> getParameterMap()
{
+ ParameterMap parameters = requestParameters.getParameters();
+
+ //
if (parameters != null)
{
return Collections.unmodifiableMap(parameters);
@@ -483,11 +502,31 @@
public Map<String, String[]> getPrivateParameterMap()
{
- throw new NotYetImplemented();
+ ParameterMap parameters = requestParameters.getPrivateParameters();
+
+ //
+ if (parameters != null)
+ {
+ return parameters;
+ }
+ else
+ {
+ return Collections.emptyMap();
+ }
}
public Map<String, String[]> getPublicParameterMap()
{
- throw new NotYetImplemented();
+ ParameterMap parameters = requestParameters.getPublicParameters();
+
+ //
+ if (parameters != null)
+ {
+ return parameters;
+ }
+ else
+ {
+ return Collections.emptyMap();
+ }
}
}
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/RenderRequestImpl.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/RenderRequestImpl.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/RenderRequestImpl.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -24,10 +24,12 @@
import org.jboss.portal.portlet.PortletParametersStateString;
import org.jboss.portal.portlet.StateString;
+import org.jboss.portal.portlet.PortletParameters;
import org.jboss.portal.portlet.invocation.RenderInvocation;
import org.jboss.portal.portlet.spi.RenderContext;
import org.jboss.portal.portlet.spi.PortletInvocationContext;
import org.jboss.portal.common.NotYetImplemented;
+import org.jboss.portal.common.util.ParameterMap;
import javax.portlet.RenderRequest;
import javax.servlet.http.Cookie;
@@ -44,27 +46,6 @@
public RenderRequestImpl(RenderInvocation invocation)
{
super(invocation);
-
- // Get the render context
- PortletInvocationContext context = invocation.getPortletContext();
-
- // Get the possibly null navigational state
- StateString navigationalState = context.getNavigationalState();
-
- //
- if (navigationalState == null)
- {
-
- }
- else if (navigationalState instanceof PortletParametersStateString)
- {
- parameters = ((PortletParametersStateString)navigationalState).getParameters();
- }
- else
- {
- PortletParametersStateString parametersState = new
PortletParametersStateString(navigationalState.getStringValue());
- parameters = parametersState.getParameters();
- }
}
public String getETag()
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/StateAwareResponseImpl.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/StateAwareResponseImpl.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/StateAwareResponseImpl.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -24,18 +24,21 @@
import org.jboss.portal.portlet.invocation.PortletInvocation;
import org.jboss.portal.portlet.invocation.response.UpdateNavigationalStateResponse;
-import org.jboss.portal.portlet.invocation.response.RedirectionResponse;
import org.jboss.portal.portlet.invocation.response.StateResponse;
+import org.jboss.portal.portlet.invocation.response.HTTPRedirectionResponse;
import org.jboss.portal.portlet.PortletParametersStateString;
+import org.jboss.portal.portlet.PortletParameters;
import org.jboss.portal.portlet.impl.jsr168.PortletUtils;
import org.jboss.portal.portlet.impl.jsr168.PortletApplicationImpl;
import org.jboss.portal.portlet.impl.info.ContainerEventingInfo;
import org.jboss.portal.portlet.impl.info.ContainerPortletApplicationInfo;
import org.jboss.portal.portlet.impl.info.ContainerTypeInfo;
import org.jboss.portal.portlet.impl.info.ContainerEventInfo;
+import org.jboss.portal.portlet.impl.info.ContainerParameterInfo;
import org.jboss.portal.Mode;
import org.jboss.portal.common.NotYetImplemented;
import org.jboss.portal.common.util.Tools;
+import org.jboss.portal.common.util.ParameterMap;
import org.apache.log4j.Logger;
import javax.portlet.StateAwareResponse;
@@ -51,6 +54,8 @@
import java.util.Calendar;
import java.util.Date;
import java.util.UUID;
+import java.util.List;
+import java.util.LinkedList;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.URI;
@@ -67,100 +72,85 @@
private static final Logger log = Logger.getLogger(ActionResponseImpl.class);
/** . */
- protected static final int WANT_NOTHING = 0;
+ protected Decision decision;
/** . */
- protected static final int WANT_RENDER = 1;
+ private List<StateResponse.Event> events;
- /** . */
- protected static final int WANT_REDIRECT = 2;
-
- /** . */
- protected StateResponse response;
-
- /** . */
- protected int decision;
-
public StateAwareResponseImpl(PortletInvocation invocation, PortletRequestImpl preq)
{
super(invocation, preq);
//
- UpdateNavigationalStateResponse rr = new UpdateNavigationalStateResponse();
- rr.setNavigationalState(new PortletParametersStateString());
-
- //
- this.response = rr;
- this.decision = WANT_NOTHING;
+ this.decision = null;
}
public StateResponse getResponse()
{
- return response;
+ Decision decision = this.decision;
+
+ //
+ if (decision == null)
+ {
+ decision = new WantUpdate();
+ }
+
+ //
+ return decision.getResponse();
}
- public void setWindowState(WindowState windowState) throws WindowStateException
+ protected WantUpdate wantUpdate(String errorMsg)
{
- if (decision == WANT_NOTHING || decision == WANT_RENDER)
+ if (decision instanceof WantUpdate)
{
- if (!preq.isWindowStateAllowed(windowState))
- {
- throw new WindowStateException("Not supported", windowState);
- }
-
((UpdateNavigationalStateResponse)response).setWindowState(org.jboss.portal.WindowState.create(windowState.toString()));
- decision = WANT_RENDER;
+ return (WantUpdate)decision;
}
+ else if (decision == null)
+ {
+ return new WantUpdate();
+ }
else
{
- throw new IllegalStateException("Window state cannot be set after
redirect");
+ throw new IllegalStateException(errorMsg);
}
}
- public void setPortletMode(PortletMode portletMode) throws PortletModeException
+ public void setWindowState(WindowState windowState) throws WindowStateException
{
- if (decision == WANT_NOTHING || decision == WANT_RENDER)
+ WantUpdate update = wantUpdate("Window state cannot be set after
redirect");
+
+ //
+ if (!preq.isWindowStateAllowed(windowState))
{
- if (portletMode == null)
- {
- // The spec does not define that case
- // we just issue a warn
- log.warn("Set null portlet mode");
- }
- else
- {
- if (!preq.isPortletModeAllowed(portletMode))
- {
- throw new PortletModeException("Not supported", portletMode);
- }
- Mode mode = Mode.create(portletMode.toString());
- ((UpdateNavigationalStateResponse)response).setMode(mode);
- }
- decision = WANT_RENDER;
+ throw new WindowStateException("Not supported", windowState);
}
- else
- {
- throw new IllegalStateException("Portlet mode cannot be set after
redirect");
- }
+
+ //
+ update.windowState = org.jboss.portal.WindowState.create(windowState.toString());
+ decision = update;
}
- /**
- * Generic send redirect.
- *
- * @param redirect
- * @throws IllegalStateException implement jsr168 behavior if the portlet as already
commited stuff
- */
- protected final void sendRedirect(RedirectionResponse redirect) throws
IllegalStateException
+ public void setPortletMode(PortletMode portletMode) throws PortletModeException
{
- if (decision == WANT_NOTHING || decision == WANT_REDIRECT)
+ WantUpdate update = wantUpdate("Portlet mode cannot be set after
redirect");
+
+ //
+ if (portletMode == null)
{
- response = redirect;
- decision = WANT_REDIRECT;
+ // The spec does not define that case
+ // we just issue a warn
+ log.warn("Set null portlet mode");
}
else
{
- throw new IllegalStateException("sendRedirect cannot be called after "
+
- "setPortletMode/setWindowState/setRenderParameter/setRenderParameters
" +
- "has been called previously");
+ if (!preq.isPortletModeAllowed(portletMode))
+ {
+ throw new PortletModeException("Not supported", portletMode);
+ }
+
+ //
+ update.mode = Mode.create(portletMode.toString());
+ decision = update;
}
}
@@ -169,15 +159,11 @@
PortletUtils.checkPortletParameterMapValidity(map);
//
- if (decision == WANT_NOTHING || decision == WANT_RENDER)
- {
-
((PortletParametersStateString)((UpdateNavigationalStateResponse)response).getNavigationalState()).replace(map);
- decision = WANT_RENDER;
- }
- else
- {
- throw new IllegalStateException("setRenderParameters cannot be called after
redirect");
- }
+ WantUpdate update = wantUpdate("setRenderParameters cannot be called after
redirect");
+
+ //
+ update.navigationalState.replace(map);
+ decision = update;
}
public void setRenderParameter(String name, String value)
@@ -185,15 +171,7 @@
PortletUtils.checkPortletParameterValidity(name, value);
//
- if (decision == WANT_NOTHING || decision == WANT_RENDER)
- {
-
((PortletParametersStateString)((UpdateNavigationalStateResponse)response).getNavigationalState()).setValue(name,
value);
- decision = WANT_RENDER;
- }
- else
- {
- throw new IllegalStateException("setRenderParameter cannot be called after
redirect");
- }
+ setRenderParameter(name, new String[]{value});
}
public void setRenderParameter(String name, String[] values)
@@ -201,15 +179,23 @@
PortletUtils.checkPortletParameterValidity(name, values);
//
- if (decision == WANT_NOTHING || decision == WANT_RENDER)
+ WantUpdate update = wantUpdate("setRenderParameter cannot be called after
redirect");
+
+ // Find out
+ ContainerParameterInfo pi = preq.navigationInfo.getPublicParameter(name);
+
+ //
+ if (pi != null)
{
-
((PortletParametersStateString)((UpdateNavigationalStateResponse)response).getNavigationalState()).setValues(name,
values);
- decision = WANT_RENDER;
+ update.publicNavigationalState.setValues(name, values);
}
else
{
- throw new IllegalStateException("setRenderParameter cannot be called after
redirect");
+ update.navigationalState.setValues(name, values);
}
+
+ //
+ decision = update;
}
private static final Set<? extends Class<? extends Serializable>>
acceptedFinalClasses = Tools.toSet(
@@ -313,7 +299,7 @@
}
//
- response.addEvent(new StateResponse.Event(name, value));
+ queueEvent(name, value);
}
public void setEvent(String localName, Serializable value)
@@ -348,4 +334,79 @@
{
throw new NotYetImplemented();
}
+
+ protected final void queueEvent(QName name, Serializable value)
+ {
+ if (events == null)
+ {
+ events = new LinkedList<StateResponse.Event>();
+ }
+ events.add(new StateResponse.Event(name, value));
+ }
+
+ private abstract class Decision
+ {
+
+ protected StateResponse getResponse()
+ {
+ StateResponse response = createResponse();
+
+ //
+ if (events != null)
+ {
+ for (StateResponse.Event event : events)
+ {
+ response.queueEvent(event);
+ }
+ }
+
+ //
+ return response;
+ }
+
+ protected abstract StateResponse createResponse();
+
+ }
+
+ protected class WantUpdate extends Decision
+ {
+
+ /** The navigational state returned. */
+ protected PortletParameters navigationalState = new PortletParameters();
+
+ /** The new window state requested. */
+ protected org.jboss.portal.WindowState windowState;
+
+ /** The new mode requested. */
+ protected Mode mode;
+
+ /** The update to the shared parameters. */
+ protected ParameterMap publicNavigationalState = new ParameterMap();
+
+ protected StateResponse createResponse()
+ {
+ UpdateNavigationalStateResponse response = new
UpdateNavigationalStateResponse();
+
+ //
+ response.setMode(mode);
+ response.setWindowState(windowState);
+ response.setPublicNavigationalState(publicNavigationalState);
+ response.setNavigationalState(new
PortletParametersStateString(navigationalState));
+
+ //
+ return response;
+ }
+ }
+
+ protected class WantRedirect extends Decision
+ {
+
+ /** . */
+ protected String location;
+
+ protected StateResponse createResponse()
+ {
+ return new HTTPRedirectionResponse(location);
+ }
+ }
}
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractActionContext.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractActionContext.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractActionContext.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -28,6 +28,7 @@
import org.jboss.portal.Mode;
import org.jboss.portal.WindowState;
import org.jboss.portal.common.util.MarkupInfo;
+import org.jboss.portal.common.util.ParameterMap;
import java.io.BufferedReader;
import java.io.IOException;
@@ -51,11 +52,14 @@
Mode mode,
WindowState windowState,
StateString navigationalState,
+ ParameterMap publicNavigationalState,
MarkupInfo markupInfo,
StateString interactionState,
PortletParameters form)
{
- super(mode, windowState, navigationalState, markupInfo);
+ super(mode, windowState, navigationalState, publicNavigationalState, markupInfo);
+
+ //
this.interactionState = interactionState;
this.form = form;
}
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractEventContext.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractEventContext.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractEventContext.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -28,6 +28,7 @@
import org.jboss.portal.Mode;
import org.jboss.portal.WindowState;
import org.jboss.portal.common.util.MarkupInfo;
+import org.jboss.portal.common.util.ParameterMap;
import javax.xml.namespace.QName;
import java.io.Serializable;
@@ -49,11 +50,12 @@
Mode mode,
WindowState windowState,
StateString navigationalState,
+ ParameterMap publicNavigationalState,
MarkupInfo markupInfo,
QName name,
Serializable payload)
{
- super(mode, windowState, navigationalState, markupInfo);
+ super(mode, windowState, navigationalState, publicNavigationalState, markupInfo);
//
this.name = name;
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractPortletInvocationContext.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractPortletInvocationContext.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractPortletInvocationContext.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -24,6 +24,7 @@
import org.jboss.portal.common.invocation.AbstractInvocationContext;
import org.jboss.portal.common.util.MarkupInfo;
+import org.jboss.portal.common.util.ParameterMap;
import org.jboss.portal.portlet.spi.PortletInvocationContext;
import org.jboss.portal.portlet.StateString;
import org.jboss.portal.Mode;
@@ -53,11 +54,20 @@
/** . */
protected StateString navigationalState;
- protected AbstractPortletInvocationContext(Mode mode, WindowState windowState,
StateString navigationalState, MarkupInfo markupInfo)
+ /** . */
+ protected ParameterMap publicNavigationalState;
+
+ protected AbstractPortletInvocationContext(
+ Mode mode,
+ WindowState windowState,
+ StateString navigationalState,
+ ParameterMap publicNavigationalState,
+ MarkupInfo markupInfo)
{
this.mode = mode;
this.windowState = windowState;
this.navigationalState = navigationalState;
+ this.publicNavigationalState = publicNavigationalState;
this.markupInfo = markupInfo;
}
@@ -105,6 +115,11 @@
return windowState;
}
+ public ParameterMap getPublicNavigationalState()
+ {
+ return publicNavigationalState;
+ }
+
public StateString getNavigationalState()
{
return navigationalState;
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractRenderContext.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractRenderContext.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/spi/AbstractRenderContext.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -27,6 +27,7 @@
import org.jboss.portal.Mode;
import org.jboss.portal.WindowState;
import org.jboss.portal.common.util.MarkupInfo;
+import org.jboss.portal.common.util.ParameterMap;
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
@@ -38,8 +39,9 @@
Mode mode,
WindowState windowState,
StateString navigationalState,
+ ParameterMap publicNavigationalState,
MarkupInfo markupInfo)
{
- super(mode, windowState, navigationalState, markupInfo);
+ super(mode, windowState, navigationalState, publicNavigationalState, markupInfo);
}
}
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/info/NavigationInfo.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/info/NavigationInfo.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/info/NavigationInfo.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -31,6 +31,8 @@
public interface NavigationInfo
{
+ ParameterInfo getPublicParameter(String id);
+
Collection<? extends ParameterInfo> getPublicParameters();
}
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/info/ParameterInfo.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/info/ParameterInfo.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/info/ParameterInfo.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -34,6 +34,8 @@
public interface ParameterInfo
{
+ String getId();
+
QName getName();
Collection<QName> getAliases();
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/invocation/response/StateResponse.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/invocation/response/StateResponse.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/invocation/response/StateResponse.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -38,7 +38,7 @@
/** . */
private List<Event> producedEvents = Collections.emptyList();
- public void addEvent(Event event)
+ public void queueEvent(Event event)
{
if (event == null)
{
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/invocation/response/UpdateNavigationalStateResponse.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/invocation/response/UpdateNavigationalStateResponse.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/invocation/response/UpdateNavigationalStateResponse.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -24,13 +24,12 @@
import org.jboss.portal.Mode;
import org.jboss.portal.WindowState;
+import org.jboss.portal.common.util.ParameterMap;
import org.jboss.portal.portlet.StateString;
/**
- * Want to be rendered.
+ * Update the navigational state.
*
- * @todo rename to UpdateNavigationalStateResponse
- *
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
* @version $Revision: 5477 $
*/
@@ -38,7 +37,7 @@
{
/** The navigational state returned. */
- protected StateString state;
+ protected StateString navigationalState;
/** The new window state requested. */
protected WindowState windowState;
@@ -46,11 +45,15 @@
/** The new mode requested. */
protected Mode mode;
+ /** The update to the shared parameters. */
+ protected ParameterMap publicNavigationalState;
+
public UpdateNavigationalStateResponse()
{
- state = null;
+ navigationalState = null;
windowState = null;
mode = null;
+ publicNavigationalState = null;
}
public Mode getMode()
@@ -75,11 +78,21 @@
public StateString getNavigationalState()
{
- return state;
+ return navigationalState;
}
public void setNavigationalState(StateString state)
{
- this.state = state;
+ this.navigationalState = state;
}
+
+ public ParameterMap getPublicNavigationalState()
+ {
+ return publicNavigationalState;
+ }
+
+ public void setPublicNavigationalState(ParameterMap publicNavigationalState)
+ {
+ this.publicNavigationalState = publicNavigationalState;
+ }
}
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/spi/PortletInvocationContext.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/spi/PortletInvocationContext.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/spi/PortletInvocationContext.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -26,6 +26,7 @@
import org.jboss.portal.WindowState;
import org.jboss.portal.common.invocation.InvocationContext;
import org.jboss.portal.common.util.MarkupInfo;
+import org.jboss.portal.common.util.ParameterMap;
import org.jboss.portal.portlet.PortletURL;
import org.jboss.portal.portlet.StateString;
@@ -44,6 +45,8 @@
*/
StateString getNavigationalState();
+ ParameterMap getPublicNavigationalState();
+
/**
* Returns the mode for this invocation.
*
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/support/info/NavigationInfoSupport.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/support/info/NavigationInfoSupport.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/support/info/NavigationInfoSupport.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -25,9 +25,9 @@
import org.jboss.portal.portlet.info.NavigationInfo;
import org.jboss.portal.portlet.info.ParameterInfo;
-import java.util.List;
-import java.util.ArrayList;
import java.util.Collection;
+import java.util.Map;
+import java.util.LinkedHashMap;
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
@@ -37,20 +37,25 @@
{
/** . */
- private final List<ParameterInfoSupport> publicParameters;
+ private final Map<String, ParameterInfoSupport> publicParameters;
public NavigationInfoSupport()
{
- publicParameters = new ArrayList<ParameterInfoSupport>();
+ publicParameters = new LinkedHashMap<String, ParameterInfoSupport>();
}
public void addPublicParameter(ParameterInfoSupport parameter)
{
- publicParameters.add(parameter);
+ publicParameters.put(parameter.getId(), parameter);
}
+ public ParameterInfo getPublicParameter(String id)
+ {
+ return publicParameters.get(id);
+ }
+
public Collection<? extends ParameterInfo> getPublicParameters()
{
- return publicParameters;
+ return publicParameters.values();
}
}
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/support/info/ParameterInfoSupport.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/support/info/ParameterInfoSupport.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/support/info/ParameterInfoSupport.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -38,25 +38,28 @@
{
/** . */
- private QName name;
+ private final String id;
/** . */
+ private final QName name;
+
+ /** . */
private LocalizedString description;
/** . */
private List<QName> aliases;
- public ParameterInfoSupport(QName name)
+ public ParameterInfoSupport(String id, QName name)
{
+ this.id = id;
this.name = name;
this.aliases = new ArrayList<QName>();
this.description = new LocalizedString("Description of event " + name);
}
- public ParameterInfoSupport(QName name, String type)
+ public String getId()
{
- this.name = name;
- this.aliases = new ArrayList<QName>();
+ return id;
}
public QName getName()
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/support/spi/PortletInvocationContextSupport.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/support/spi/PortletInvocationContextSupport.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/support/spi/PortletInvocationContextSupport.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -26,6 +26,7 @@
import org.jboss.portal.WindowState;
import org.jboss.portal.common.invocation.AbstractInvocationContext;
import org.jboss.portal.common.util.MarkupInfo;
+import org.jboss.portal.common.util.ParameterMap;
import org.jboss.portal.portlet.PortletURL;
import org.jboss.portal.portlet.StateString;
import org.jboss.portal.portlet.spi.PortletInvocationContext;
@@ -52,6 +53,11 @@
throw new UnsupportedOperationException();
}
+ public ParameterMap getPublicNavigationalState()
+ {
+ throw new UnsupportedOperationException();
+ }
+
public MarkupInfo getMarkupInfo()
{
throw new UnsupportedOperationException();
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortalNavigationalState.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortalNavigationalState.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortalNavigationalState.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -25,6 +25,7 @@
import org.jboss.portal.common.util.ParameterMap;
import org.jboss.portal.portlet.PortletParameters;
+import javax.xml.namespace.QName;
import java.util.Map;
import java.util.HashMap;
import java.util.zip.GZIPOutputStream;
@@ -47,21 +48,21 @@
private final Map<String, WindowNavigationalState> windows = new
HashMap<String, WindowNavigationalState>();
/** . */
- private final PortletParameters sharedParameters = new PortletParameters();
+ private final Map<QName, String[]> page = new HashMap<QName, String[]>();
- public WindowNavigationalState getWindow(String windowId)
+ public WindowNavigationalState getWindowNavigationalState(String windowId)
{
return windows.get(windowId);
}
- public void setWindow(String windowId, WindowNavigationalState window)
+ public void setWindowNavigationalState(String windowId, WindowNavigationalState
windowNS)
{
- windows.put(windowId, window);
+ windows.put(windowId, windowNS);
}
- public ParameterMap getSharedParameters()
+ public Map<QName, String[]> getPageNavigationalState()
{
- return sharedParameters;
+ return page;
}
public byte[] getBytes() throws IOException
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletController.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletController.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/PortletController.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -29,6 +29,8 @@
import org.jboss.portal.portlet.PortletInvokerException;
import org.jboss.portal.portlet.info.PortletInfo;
import org.jboss.portal.portlet.info.EventInfo;
+import org.jboss.portal.portlet.info.ParameterInfo;
+import org.jboss.portal.portlet.info.NavigationInfo;
import org.jboss.portal.portlet.impl.spi.AbstractRequestContext;
import org.jboss.portal.portlet.impl.spi.AbstractUserContext;
import org.jboss.portal.portlet.impl.spi.AbstractWindowContext;
@@ -52,12 +54,14 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.xml.namespace.QName;
import java.io.UnsupportedEncodingException;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
+import java.util.Map;
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
@@ -70,7 +74,7 @@
private MarkupInfo MARKUP_INFO = new MarkupInfo(MediaType.HTML, "UTF8");
/** . */
- private final boolean redirectAfterAction = true;
+ // private final boolean redirectAfterAction = true;
/** . */
private final Logger log;
@@ -80,6 +84,30 @@
log = Logger.getLogger(PortletController.class);
}
+ private ParameterMap getPublicNavigationalState(
+ PortletControllerContext context,
+ Portlet portlet)
+ {
+ PortletInfo portletInfo = portlet.getInfo();
+ PortalNavigationalState portalNS = context.getNavigationalState();
+ Map<QName, String[]> pm = portalNS.getPageNavigationalState();
+ ParameterMap publicNavigationalState = null;
+ for (ParameterInfo parameterInfo :
portletInfo.getNavigation().getPublicParameters())
+ {
+ String[] parameterValue = pm.get(parameterInfo.getName());
+ if (parameterValue != null)
+ {
+ String parameterId = parameterInfo.getId();
+ if (publicNavigationalState == null)
+ {
+ publicNavigationalState = new ParameterMap();
+ publicNavigationalState.put(parameterId, parameterValue);
+ }
+ }
+ }
+ return publicNavigationalState;
+ }
+
private PortletInvocationResponse handle(PortletControllerContext context, Action
action) throws PortletInvokerException, IOException
{
if (action instanceof PortletRender)
@@ -97,7 +125,7 @@
HttpServletResponse resp = context.getClientResponse();
PortalNavigationalState navState = context.getNavigationalState();
PortletURLRenderer renderer = new PortletURLRenderer(navState, portlet, req,
resp);
- WindowNavigationalState windowNS = navState.getWindow(action.portletId);
+ WindowNavigationalState windowNS =
navState.getWindowNavigationalState(action.portletId);
//
StateString portletNS = null;
@@ -129,12 +157,16 @@
}
//
+ ParameterMap publicNS = getPublicNavigationalState(context, portlet);
+
+ //
TestInstanceContext instanceContext = new TestInstanceContext(req,
portlet.getContext(), true);
TestActionContext actionContext = new TestActionContext(
renderer,
mode,
windowState,
portletNS,
+ publicNS,
MARKUP_INFO,
PortletParametersStateString.create(action.queryParameters),
action.bodyParameters != null ? new PortletParameters(action.bodyParameters)
: null);
@@ -170,7 +202,7 @@
HttpServletResponse resp = context.getClientResponse();
PortalNavigationalState navState = context.getNavigationalState();
PortletURLRenderer renderer = new PortletURLRenderer(navState, portlet, req,
resp);
- WindowNavigationalState windowNS =
navState.getWindow(portlet.getContext().getId());
+ WindowNavigationalState windowNS =
navState.getWindowNavigationalState(portlet.getContext().getId());
//
if (windowNS == null)
@@ -179,12 +211,16 @@
}
//
+ ParameterMap publicNS = getPublicNavigationalState(context, portlet);
+
+ //
TestInstanceContext instanceContext = new TestInstanceContext(req,
portlet.getContext(), true);
TestEventContext actionContext = new TestEventContext(
renderer,
windowNS.getMode(),
windowNS.getWindowState(),
windowNS.getPortletNavigationalState(),
+ publicNS,
MARKUP_INFO,
event.getName(),
event.getPayload());
@@ -373,7 +409,7 @@
StateString portletNS = null;
//
- WindowNavigationalState windowNS =
navState.getWindow(portlet.getContext().getId());
+ WindowNavigationalState windowNS =
navState.getWindowNavigationalState(portlet.getContext().getId());
if (windowNS != null)
{
if (windowNS.getMode() != null)
@@ -390,8 +426,12 @@
}
}
+ //
+ ParameterMap publicNS = getPublicNavigationalState(context, portlet);
+
+ //
TestInstanceContext instanceContext = new TestInstanceContext(req,
portlet.getContext(), false);
- TestRenderContext renderContext = new TestRenderContext(renderer, mode,
windowState, portletNS, MARKUP_INFO);
+ TestRenderContext renderContext = new TestRenderContext(renderer, mode,
windowState, portletNS, publicNS, MARKUP_INFO);
//
RenderInvocation render = new RenderInvocation(renderContext);
@@ -435,7 +475,7 @@
PortalNavigationalState portalNS = context.getNavigationalState();
//
- WindowNavigationalState windowNS = portalNS.getWindow(portletId);
+ WindowNavigationalState windowNS = portalNS.getWindowNavigationalState(portletId);
//
if (windowNS == null)
@@ -460,10 +500,26 @@
portletNS = update.getNavigationalState();
}
windowNS = new WindowNavigationalState(portletNS, mode, windowState);
- portalNS.setWindow(portletId, windowNS);
+ portalNS.setWindowNavigationalState(portletId, windowNS);
- // Now update shared state
-// portlet.getInfo().get
+ // Now update shared state scoped at page
+ ParameterMap publicNS = update.getPublicNavigationalState();
+ if (publicNS != null)
+ {
+ NavigationInfo navigationInfo = portlet.getInfo().getNavigation();
+ for (Map.Entry<String, String[]> entry : publicNS.entrySet())
+ {
+ String id = entry.getKey();
+ ParameterInfo parameterInfo = navigationInfo.getPublicParameter(id);
+
+ //
+ if (parameterInfo != null)
+ {
+ QName name = parameterInfo.getName();
+ portalNS.getPageNavigationalState().put(name, entry.getValue());
+ }
+ }
+ }
}
static class Action
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/TestActionContext.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/TestActionContext.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/TestActionContext.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -30,6 +30,7 @@
import org.jboss.portal.Mode;
import org.jboss.portal.WindowState;
import org.jboss.portal.common.util.MarkupInfo;
+import org.jboss.portal.common.util.ParameterMap;
import org.jboss.portal.common.invocation.resolver.PrincipalAttributeResolver;
import org.jboss.portal.common.invocation.resolver.MapAttributeResolver;
@@ -46,9 +47,17 @@
/** . */
private final PortletURLRenderer urlRenderer;
- public TestActionContext(PortletURLRenderer urlRenderer, Mode mode, WindowState
windowState, StateString navigationalState, MarkupInfo markupInfo, StateString
interactionState, PortletParameters form)
+ public TestActionContext(
+ PortletURLRenderer urlRenderer,
+ Mode mode,
+ WindowState windowState,
+ StateString navigationalState,
+ ParameterMap publicNavigationalState,
+ MarkupInfo markupInfo,
+ StateString interactionState,
+ PortletParameters form)
{
- super(mode, windowState, navigationalState, markupInfo, interactionState, form);
+ super(mode, windowState, navigationalState, publicNavigationalState, markupInfo,
interactionState, form);
//
this.urlRenderer = urlRenderer;
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/TestEventContext.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/TestEventContext.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/TestEventContext.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -30,6 +30,7 @@
import org.jboss.portal.Mode;
import org.jboss.portal.WindowState;
import org.jboss.portal.common.util.MarkupInfo;
+import org.jboss.portal.common.util.ParameterMap;
import org.jboss.portal.common.invocation.resolver.PrincipalAttributeResolver;
import org.jboss.portal.common.invocation.resolver.MapAttributeResolver;
@@ -53,11 +54,12 @@
Mode mode,
WindowState windowState,
StateString navigationalState,
+ ParameterMap publicNavigationalState,
MarkupInfo markupInfo,
QName name,
Serializable payload)
{
- super(mode, windowState, navigationalState, markupInfo, name, payload);
+ super(mode, windowState, navigationalState, publicNavigationalState, markupInfo,
name, payload);
//
this.urlRenderer = urlRenderer;
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/TestRenderContext.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/TestRenderContext.java 2008-01-15
21:14:33 UTC (rev 9516)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/TestRenderContext.java 2008-01-15
22:45:05 UTC (rev 9517)
@@ -29,6 +29,7 @@
import org.jboss.portal.Mode;
import org.jboss.portal.WindowState;
import org.jboss.portal.common.util.MarkupInfo;
+import org.jboss.portal.common.util.ParameterMap;
import org.jboss.portal.common.invocation.resolver.PrincipalAttributeResolver;
import org.jboss.portal.common.invocation.resolver.MapAttributeResolver;
@@ -45,9 +46,15 @@
/** . */
private final PortletURLRenderer urlRenderer;
- public TestRenderContext(PortletURLRenderer urlRenderer, Mode mode, WindowState
windowState, StateString navigationalState, MarkupInfo markupInfo)
+ public TestRenderContext(
+ PortletURLRenderer urlRenderer,
+ Mode mode,
+ WindowState windowState,
+ StateString navigationalState,
+ ParameterMap publicNavigationalState,
+ MarkupInfo markupInfo)
{
- super(mode, windowState, navigationalState, markupInfo);
+ super(mode, windowState, navigationalState, publicNavigationalState, markupInfo);
//
this.urlRenderer = urlRenderer;