Author: julien(a)jboss.com
Date: 2008-02-08 18:32:02 -0500 (Fri, 08 Feb 2008)
New Revision: 9877
Added:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/taglib/PageParamTag.java
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/PortalResponse.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/taglib/PageTag.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/taglib/PortletTag.java
modules/portlet/trunk/test/src/test/resources/simple-portal-war/WEB-INF/portal.tld
modules/portlet/trunk/test/src/test/resources/simple-portal-war/layouts/default.jsp
Log:
add page param that allow to set public render param on page before rendering has occured
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/PortalResponse.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/PortalResponse.java 2008-02-08
22:18:30 UTC (rev 9876)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/PortalResponse.java 2008-02-08
23:32:02 UTC (rev 9877)
@@ -22,16 +22,28 @@
******************************************************************************/
package org.jboss.portal.portlet.test.jsp;
-import org.jboss.portal.portlet.test.jsp.PagePortletControllerContext;
+import org.jboss.portal.portlet.test.controller.TestInstanceContext;
+import org.jboss.portal.portlet.test.controller.TestPortalContext;
import org.jboss.portal.portlet.controller.state.PageNavigationalState;
import org.jboss.portal.portlet.controller.state.WindowNavigationalState;
+import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
+import org.jboss.portal.portlet.invocation.RenderInvocation;
+import org.jboss.portal.portlet.PortletInvokerException;
+import org.jboss.portal.portlet.Portlet;
+import org.jboss.portal.portlet.StateString;
+import org.jboss.portal.portlet.impl.spi.AbstractClientContext;
+import org.jboss.portal.portlet.impl.spi.AbstractServerContext;
+import org.jboss.portal.portlet.impl.spi.AbstractUserContext;
+import org.jboss.portal.portlet.impl.spi.AbstractWindowContext;
+import org.jboss.portal.portlet.impl.spi.AbstractSecurityContext;
+import org.jboss.portal.portlet.spi.PortletInvocationContext;
import org.jboss.portal.WindowState;
+import org.jboss.portal.Mode;
+import org.jboss.portal.common.util.ParameterMap;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
-import javax.servlet.ServletOutputStream;
-import java.io.IOException;
-import java.io.PrintWriter;
+import javax.xml.namespace.QName;
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
@@ -41,17 +53,17 @@
{
/** . */
-// private final ResponseBuffer buffer = new ResponseBuffer();
-
- /** . */
private final PagePortletControllerContext portletControllerContext;
/** . */
- private final PageNavigationalState pageState;
+ private PageNavigationalState pageState;
/** . */
private int count = 0;
+ /** Wether or not the page state can be modified. */
+ private boolean pageStateModifiable;
+
public PortalResponse(
HttpServletResponse response,
PagePortletControllerContext portletControllerContext,
@@ -62,6 +74,7 @@
//
this.portletControllerContext = portletControllerContext;
this.pageState = pageState;
+ this.pageStateModifiable = true;
}
/**
@@ -74,46 +87,108 @@
return pageState;
}
- public String getMaximizedWindowId()
+ public PortletInvocationResponse render(Portlet portlet, String windowId) throws
PortletInvokerException
{
+ WindowNavigationalState windowNS = null;
if (pageState != null)
{
- for (String windowId : pageState.getWindowIds())
+ windowNS = pageState.getWindowNavigationalState(windowId);
+ }
+
+ //
+ ParameterMap publicNS = null;
+ if (pageState != null)
+ {
+ publicNS = pageState.getPublicNavigationalState(windowId);
+ }
+
+ //
+ Mode mode = Mode.VIEW;
+ WindowState windowState = WindowState.NORMAL;
+ StateString portletNS = null;
+
+ //
+ if (windowNS != null)
+ {
+ if (windowNS.getMode() != null)
{
- WindowNavigationalState windowNS =
pageState.getWindowNavigationalState(windowId);
- if (WindowState.MAXIMIZED.equals(windowNS.getWindowState()))
- {
- return windowId;
- }
+ mode = windowNS.getMode();
}
+ if (windowNS.getWindowState() != null)
+ {
+ windowState = windowNS.getWindowState();
+ }
+ if (windowNS.getPortletNavigationalState() != null)
+ {
+ portletNS = windowNS.getPortletNavigationalState();
+ }
}
//
- return null;
+ PortletInvocationContext renderContext =
portletControllerContext.createPortletInvocationContext(windowId, pageState);
+ RenderInvocation render = new RenderInvocation(renderContext);
+ render.setClientContext(new
AbstractClientContext(portletControllerContext.getClientRequest()));
+ render.setServerContext(new
AbstractServerContext(portletControllerContext.getClientRequest(),
portletControllerContext.getClientResponse()));
+ render.setInstanceContext(new
TestInstanceContext(portletControllerContext.getClientRequest(), portlet.getContext(),
false));
+ render.setUserContext(new
AbstractUserContext(portletControllerContext.getClientRequest()));
+ render.setWindowContext(new AbstractWindowContext(windowId));
+ render.setPortalContext(new TestPortalContext());
+ render.setSecurityContext(new
AbstractSecurityContext(portletControllerContext.getClientRequest()));
+ render.setTarget(portlet.getContext());
+ render.setMode(mode);
+ render.setWindowState(windowState);
+ render.setNavigationalState(portletNS);
+ render.setPublicNavigationalState(publicNS);
+
+ //
+ pageStateModifiable = false;
+
+ //
+ return portletControllerContext.invoke(render);
}
- public boolean isRenderable(String windowId)
+ public boolean isPageStateModifiable()
{
- if (windowId == null)
+ return pageStateModifiable;
+ }
+
+ public String getPageParameter(QName name)
+ {
+ return pageState != null ? pageState.getPublicNavigationalState(name)[0] : null;
+ }
+
+ public void setPageParameter(QName name, String value)
+ {
+ if (pageStateModifiable)
{
- throw new IllegalArgumentException();
+ if (pageState == null)
+ {
+ pageState =
portletControllerContext.getStateControllerContext().createPageState(true);
+ }
+ pageState.setPublicNavigationalState(name, new String[]{value});
}
-
- //
- if (pageState == null)
+ else
{
- return false;
+ throw new IllegalStateException("Page state cannot be modified");
}
+ }
- //
- String maximizedWindowId = getMaximizedWindowId();
- if (maximizedWindowId != null)
+ public String getMaximizedWindowId()
+ {
+ if (pageState != null)
{
- return maximizedWindowId.equals(windowId);
+ for (String windowId : pageState.getWindowIds())
+ {
+ WindowNavigationalState windowNS =
pageState.getWindowNavigationalState(windowId);
+ if (WindowState.MAXIMIZED.equals(windowNS.getWindowState()))
+ {
+ return windowId;
+ }
+ }
}
//
- return true;
+ return null;
}
public PagePortletControllerContext getPortletControllerContext()
@@ -121,38 +196,8 @@
return portletControllerContext;
}
-// public ResponseBuffer getBuffer()
-// {
-// return buffer;
-// }
-//
-// public ServletOutputStream getOutputStream() throws IOException
-// {
-// return buffer.getOutputStream();
-// }
-//
-// public PrintWriter getWriter() throws IOException
-// {
-// return buffer.getWriter();
-// }
-//
-// public void close()
-// {
-// buffer.close();
-// }
-
public String nextId()
{
return "" + count++;
}
-
-// public ServletOutputStream getOutputStream() throws IOException
-// {
-// return out.getOutputStream();
-// }
-//
-// public PrintWriter getWriter() throws IOException
-// {
-// return out.getWriter();
-// }
}
Added:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/taglib/PageParamTag.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/taglib/PageParamTag.java
(rev 0)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/taglib/PageParamTag.java 2008-02-08
23:32:02 UTC (rev 9877)
@@ -0,0 +1,106 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2008, 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.test.jsp.taglib;
+
+import org.jboss.portal.portlet.test.jsp.PortalResponse;
+
+import javax.servlet.jsp.JspException;
+import javax.xml.namespace.QName;
+import java.io.IOException;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 630 $
+ */
+public class PageParamTag extends PortalSimpleTagSupport
+{
+
+ /** . */
+ private String namespaceURI;
+
+ /** . */
+ private String localName;
+
+ /** . */
+ private String value;
+
+ /** . */
+ private String frozen;
+
+ public String getNamespaceURI()
+ {
+ return namespaceURI;
+ }
+
+ public void setNamespaceURI(String namespaceURI)
+ {
+ this.namespaceURI = namespaceURI;
+ }
+
+ public String getLocalName()
+ {
+ return localName;
+ }
+
+ public void setLocalName(String localName)
+ {
+ this.localName = localName;
+ }
+
+ public String getValue()
+ {
+ return value;
+ }
+
+ public void setValue(String value)
+ {
+ this.value = value;
+ }
+
+ public String getFrozen()
+ {
+ return frozen;
+ }
+
+ public void setFrozen(String frozen)
+ {
+ this.frozen = frozen;
+ }
+
+ public void internalDoTag() throws JspException, IOException
+ {
+ PortalResponse response = getPortalResponse();
+
+ //
+ if (response.isPageStateModifiable())
+ {
+ QName name = new QName(namespaceURI, localName);
+
+ //
+ if (!"true".equals(frozen) || response.getPageParameter(name) ==
null)
+ {
+ response.setPageParameter(name, value);
+ }
+ }
+ }
+}
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/taglib/PageTag.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/taglib/PageTag.java 2008-02-08
22:18:30 UTC (rev 9876)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/taglib/PageTag.java 2008-02-08
23:32:02 UTC (rev 9877)
@@ -25,7 +25,9 @@
import org.jboss.portal.portlet.test.jsp.PortalResponse;
import javax.servlet.jsp.JspException;
+import javax.xml.namespace.QName;
import java.io.IOException;
+import java.util.Map;
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
@@ -39,10 +41,16 @@
INACTIVE, ACTIVE, SUSPENDED
}
+ /** . */
+ Map<QName, String> params;
+
+ /** . */
String maximizedId;
+ /** . */
String content;
+ /** . */
Status status = Status.INACTIVE;
public int doStartTag() throws JspException
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/taglib/PortletTag.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/taglib/PortletTag.java 2008-02-08
22:18:30 UTC (rev 9876)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/taglib/PortletTag.java 2008-02-08
23:32:02 UTC (rev 9877)
@@ -24,28 +24,15 @@
import org.jboss.portal.portlet.test.jsp.PortalResponse;
import org.jboss.portal.portlet.test.jsp.PagePortletControllerContext;
-import org.jboss.portal.portlet.test.controller.TestInstanceContext;
-import org.jboss.portal.portlet.test.controller.TestPortalContext;
import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
import org.jboss.portal.portlet.invocation.response.FragmentResponse;
import org.jboss.portal.portlet.invocation.response.ErrorResponse;
import org.jboss.portal.portlet.invocation.response.UnavailableResponse;
-import org.jboss.portal.portlet.invocation.RenderInvocation;
-import org.jboss.portal.portlet.controller.state.PageNavigationalState;
-import org.jboss.portal.portlet.controller.state.WindowNavigationalState;
-import org.jboss.portal.portlet.StateString;
import org.jboss.portal.portlet.PortletInvokerException;
import org.jboss.portal.portlet.Portlet;
-import org.jboss.portal.portlet.impl.spi.AbstractClientContext;
-import org.jboss.portal.portlet.impl.spi.AbstractServerContext;
-import org.jboss.portal.portlet.impl.spi.AbstractUserContext;
-import org.jboss.portal.portlet.impl.spi.AbstractWindowContext;
-import org.jboss.portal.portlet.impl.spi.AbstractSecurityContext;
-import org.jboss.portal.portlet.spi.PortletInvocationContext;
import org.jboss.portal.Mode;
import org.jboss.portal.WindowState;
import org.jboss.portal.common.util.Tools;
-import org.jboss.portal.common.util.ParameterMap;
import javax.servlet.jsp.JspException;
import javax.servlet.RequestDispatcher;
@@ -64,15 +51,6 @@
{
/** . */
- private static final int SKIPPED = 0;
-
- /** . */
- private static final int BUFFERED = 1;
-
- /** . */
- private static final int RENDERED = 2;
-
- /** . */
private static final Set<Mode> DEFAULT_MODES =
Collections.unmodifiableSet(Tools.toSet(Mode.VIEW, Mode.EDIT, Mode.HELP));
/** . */
@@ -96,7 +74,6 @@
/** . */
private String errorPageAttr;
- private int status;
private Set<WindowState> supportedWindowStates;
private Set<Mode> supportedModes;
private Mode initialMode;
@@ -249,22 +226,15 @@
{
if (windowId.equals(pageTag.maximizedId))
{
- status = BUFFERED;
-
- //
return render(portlet, windowId, EVAL_BODY_BUFFERED);
}
else
{
- status = SKIPPED;
return SKIP_BODY;
}
}
else
{
- status = RENDERED;
-
- //
return render(portlet, windowId, EVAL_BODY_INCLUDE);
}
}
@@ -286,67 +256,9 @@
public int render(Portlet portlet, String windowId, int rt)
{
- PagePortletControllerContext context = response.getPortletControllerContext();
-
- //
- PageNavigationalState pageNS = response.getPageState();
-
- //
- WindowNavigationalState windowNS = null;
- if (pageNS != null)
- {
- windowNS = pageNS.getWindowNavigationalState(windowId);
- }
-
- //
- ParameterMap publicNS = null;
- if (pageNS != null)
- {
- publicNS = pageNS.getPublicNavigationalState(windowId);
- }
-
- //
- Mode mode = Mode.VIEW;
- WindowState windowState = WindowState.NORMAL;
- StateString portletNS = null;
-
- //
- if (windowNS != null)
- {
- if (windowNS.getMode() != null)
- {
- mode = windowNS.getMode();
- }
- if (windowNS.getWindowState() != null)
- {
- windowState = windowNS.getWindowState();
- }
- if (windowNS.getPortletNavigationalState() != null)
- {
- portletNS = windowNS.getPortletNavigationalState();
- }
- }
-
- //
- PortletInvocationContext renderContext =
context.createPortletInvocationContext(windowId, pageNS);
- RenderInvocation render = new RenderInvocation(renderContext);
- render.setClientContext(new AbstractClientContext(context.getClientRequest()));
- render.setServerContext(new AbstractServerContext(context.getClientRequest(),
context.getClientResponse()));
- render.setInstanceContext(new TestInstanceContext(context.getClientRequest(),
portlet.getContext(), false));
- render.setUserContext(new AbstractUserContext(context.getClientRequest()));
- render.setWindowContext(new AbstractWindowContext(windowId));
- render.setPortalContext(new TestPortalContext());
- render.setSecurityContext(new
AbstractSecurityContext(context.getClientRequest()));
- render.setTarget(portlet.getContext());
- render.setMode(mode);
- render.setWindowState(windowState);
- render.setNavigationalState(portletNS);
- render.setPublicNavigationalState(publicNS);
-
- //
try
{
- PortletInvocationResponse portletResponse = context.invoke(render);
+ PortletInvocationResponse portletResponse = response.render(portlet, windowId);
//
if (portletResponse instanceof FragmentResponse)
Modified:
modules/portlet/trunk/test/src/test/resources/simple-portal-war/WEB-INF/portal.tld
===================================================================
---
modules/portlet/trunk/test/src/test/resources/simple-portal-war/WEB-INF/portal.tld 2008-02-08
22:18:30 UTC (rev 9876)
+++
modules/portlet/trunk/test/src/test/resources/simple-portal-war/WEB-INF/portal.tld 2008-02-08
23:32:02 UTC (rev 9877)
@@ -86,14 +86,45 @@
<body-content>empty</body-content>
<attribute>
<name>name</name>
+ <required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
</attribute>
<attribute>
<name>value</name>
+ <required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
</attribute>
</tag>
+ <tag>
+ <name>pageparam</name>
+
<tag-class>org.jboss.portal.portlet.test.jsp.taglib.PageParamTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <name>namespaceURI</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>java.lang.String</type>
+ </attribute>
+ <attribute>
+ <name>localName</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>java.lang.String</type>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>java.lang.String</type>
+ </attribute>
+ <attribute>
+ <name>frozen</name>
+ <rtexprvalue>true</rtexprvalue>
+ <type>java.lang.String</type>
+ </attribute>
+ </tag>
+
</taglib>
Modified:
modules/portlet/trunk/test/src/test/resources/simple-portal-war/layouts/default.jsp
===================================================================
---
modules/portlet/trunk/test/src/test/resources/simple-portal-war/layouts/default.jsp 2008-02-08
22:18:30 UTC (rev 9876)
+++
modules/portlet/trunk/test/src/test/resources/simple-portal-war/layouts/default.jsp 2008-02-08
23:32:02 UTC (rev 9877)
@@ -26,6 +26,9 @@
<div id="content">
<portal:page>
+
+ <portal:pageparam namespaceURI="urn:jboss:portal:simple:google"
localName="zipcode" value="80201"/>
+
<jbp:layout1>
<jsp:attribute name="leftcol">
<jbp:portlet name="RemoteControl"
applicationName="remotecontrol-portlet" />