Author: julien(a)jboss.com
Date: 2008-02-06 17:48:16 -0500 (Wed, 06 Feb 2008)
New Revision: 9813
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/PageNavigationalStateImpl.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/state/PageNavigationalState.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/ControllerServlet.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/Page.java
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/PagePortletControllerContext.java
Log:
stuff the page id in the public NS
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/PageNavigationalStateImpl.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/PageNavigationalStateImpl.java 2008-02-06
22:15:06 UTC (rev 9812)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/impl/state/PageNavigationalStateImpl.java 2008-02-06
22:48:16 UTC (rev 9813)
@@ -104,6 +104,11 @@
return publicNavigationalState;
}
+ public String[] getPublicNavigationalState(QName name)
+ {
+ return page.get(name).clone();
+ }
+
public void setWindowNavigationalState(String windowId, WindowNavigationalState
windowState) throws UnsupportedOperationException
{
throw new UnsupportedOperationException();
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/state/PageNavigationalState.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/state/PageNavigationalState.java 2008-02-06
22:15:06 UTC (rev 9812)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/controller/state/PageNavigationalState.java 2008-02-06
22:48:16 UTC (rev 9813)
@@ -24,6 +24,7 @@
import org.jboss.portal.common.util.ParameterMap;
+import javax.xml.namespace.QName;
import java.util.Map;
/**
@@ -74,4 +75,10 @@
* @throws UnsupportedOperationException if the page state is read only
*/
void setPublicNavigationalState(String windowId, Map<String, String[]> update)
throws UnsupportedOperationException;
+
+ String[] getPublicNavigationalState(QName name);
+
+ void setPublicNavigationalState(QName name, String[] value);
+
+ void removePublicNavigationalState(QName name);
}
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/ControllerServlet.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/ControllerServlet.java 2008-02-06
22:15:06 UTC (rev 9812)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/ControllerServlet.java 2008-02-06
22:48:16 UTC (rev 9813)
@@ -22,14 +22,11 @@
******************************************************************************/
package org.jboss.portal.portlet.test.jsp;
-import org.jboss.portal.portlet.test.jsp.response.ResponseBuffer;
import org.jboss.portal.portlet.test.jsp.response.Chunk;
import org.jboss.portal.portlet.test.jsp.response.BytesChunk;
import org.jboss.portal.portlet.test.jsp.response.CharsChunk;
import org.jboss.portal.portlet.test.jsp.response.PortletChunk;
-import org.jboss.portal.portlet.test.jsp.response.BufferingResponse;
import org.jboss.portal.portlet.PortletInvoker;
-import org.jboss.portal.portlet.Portlet;
import org.jboss.portal.portlet.PortletInvokerException;
import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
import org.jboss.portal.portlet.invocation.response.FragmentResponse;
@@ -37,13 +34,11 @@
import org.jboss.portal.portlet.controller.response.ControllerResponse;
import org.jboss.portal.portlet.controller.response.PageUpdateResponse;
import org.jboss.portal.portlet.controller.state.PageNavigationalState;
-import org.jboss.portal.portlet.info.PortletInfo;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
-import javax.servlet.RequestDispatcher;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
@@ -72,55 +67,9 @@
PortletInvoker invoker =
(PortletInvoker)getServletContext().getAttribute("ConsumerPortletInvoker");
//
- RequestDispatcher dispatcher = req.getRequestDispatcher("/index.jsp");
+ PagePortletControllerContext context = new PagePortletControllerContext(req, resp,
getServletContext(), invoker);
//
- BufferingResponse bufferingResponse = new BufferingResponse(resp);
-
- //
- dispatcher.include(req, bufferingResponse);
-
- //
- ResponseBuffer buffer = bufferingResponse.getBuffer();
- buffer.close();
-
- // Collect portlets to create the page
- int counter = 0;
- Page page = new Page();
- for (Chunk chunk : buffer.getChunks())
- {
- if (chunk instanceof PortletChunk)
- {
- PortletChunk portletChunk = (PortletChunk)chunk;
- String windowId = "" + counter++;
-
- //
- try
- {
- for (Portlet portlet : invoker.getPortlets())
- {
- PortletInfo portletInfo = portlet.getInfo();
- String portletName = portletInfo.getName();
- String applicationName = portletInfo.getApplicationName();
-
- //
- if (applicationName.equals(portletChunk.getApplicationName())
&& portletName.equals(portletChunk.getPortletName()))
- {
- page.addWindow(new Window(windowId, portlet));
- }
- }
- }
- catch (PortletInvokerException e)
- {
- throw new ServletException(e);
- }
- }
- }
-
- //
- PagePortletControllerContext context = new PagePortletControllerContext(req, resp,
getServletContext(), page, invoker);
-
- //
PageNavigationalState pageState = null;
if (context.getRequest() != null)
{
@@ -140,20 +89,23 @@
PageUpdateResponse pageUpdate = (PageUpdateResponse)controllerResponse;
pageState = pageUpdate.getPageState();
}
+ else
+ {
+ // todo
+ }
}
- else
- {
- pageState = context.getStateControllerContext().createPageState();
- }
//
+ Page page = context.getPage();
+
+ //
Map<String, PortletInvocationResponse> responses = page.render(context,
pageState);
//
resp.setContentType("text/html");
PrintWriter writer = resp.getWriter();
int count = 0;
- for (Chunk chunk : buffer.getChunks())
+ for (Chunk chunk : page.getChunks())
{
if (chunk instanceof BytesChunk)
{
@@ -203,8 +155,6 @@
}
}
}
-
- //
writer.close();
}
}
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/Page.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/Page.java 2008-02-06
22:15:06 UTC (rev 9812)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/Page.java 2008-02-06
22:48:16 UTC (rev 9813)
@@ -25,9 +25,17 @@
import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
import org.jboss.portal.portlet.controller.PortletControllerContext;
import org.jboss.portal.portlet.controller.state.PageNavigationalState;
+import org.jboss.portal.portlet.test.jsp.response.Chunk;
+import org.jboss.portal.portlet.test.jsp.response.PortletChunk;
+import org.jboss.portal.portlet.Portlet;
+import org.jboss.portal.portlet.PortletInvokerException;
+import org.jboss.portal.portlet.info.PortletInfo;
+import javax.servlet.ServletException;
+import javax.xml.namespace.QName;
import java.util.Map;
import java.util.HashMap;
+import java.util.List;
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
@@ -37,16 +45,27 @@
{
/** . */
+ public static final QName PAGE_ID_NAME = new
QName("urn:jboss-portlet-container", "pageid");
+
+ /** . */
private Map<String, Window> windows;
- public Page()
+ /** . */
+ private List<Chunk> chunks;
+
+ /** . */
+ private final String pageId;
+
+ public Page(List<Chunk> chunks, Map<String, Window> windows, String
pageId)
{
- this.windows = new HashMap<String, Window>();
+ this.chunks = chunks;
+ this.windows = windows;
+ this.pageId = pageId;
}
- public void addWindow(Window window)
+ public List<Chunk> getChunks()
{
- windows.put(window.getId(), window);
+ return chunks;
}
public Window getWindow(String windowId)
@@ -56,6 +75,13 @@
public Map<String, PortletInvocationResponse> render(PortletControllerContext
context, PageNavigationalState pageState)
{
+ if (pageState == null)
+ {
+ pageState = context.getStateControllerContext().createPageState();
+ pageState.setPublicNavigationalState(PAGE_ID_NAME, new String[]{pageId});
+ }
+
+ //
Map<String, PortletInvocationResponse> responses = new HashMap<String,
PortletInvocationResponse>();
//
Modified:
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/PagePortletControllerContext.java
===================================================================
---
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/PagePortletControllerContext.java 2008-02-06
22:15:06 UTC (rev 9812)
+++
modules/portlet/trunk/test/src/main/java/org/jboss/portal/portlet/test/jsp/PagePortletControllerContext.java 2008-02-06
22:48:16 UTC (rev 9813)
@@ -23,11 +23,19 @@
package org.jboss.portal.portlet.test.jsp;
import org.jboss.portal.portlet.test.controller.AbstractPortletControllerContext;
+import org.jboss.portal.portlet.test.jsp.response.Chunk;
+import org.jboss.portal.portlet.test.jsp.response.PortletChunk;
+import org.jboss.portal.portlet.test.jsp.response.BufferingResponse;
+import org.jboss.portal.portlet.test.jsp.response.ResponseBuffer;
import org.jboss.portal.portlet.Portlet;
import org.jboss.portal.portlet.PortletInvokerException;
import org.jboss.portal.portlet.PortletInvoker;
+import org.jboss.portal.portlet.info.PortletInfo;
import org.jboss.portal.portlet.controller.event.EventControllerContext;
import org.jboss.portal.portlet.controller.impl.event.EventControllerContextImpl;
+import org.jboss.portal.portlet.controller.request.PortletRequest;
+import org.jboss.portal.portlet.controller.request.PageScopedFullPortletResourceRequest;
+import org.jboss.portal.portlet.controller.state.PageNavigationalState;
import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
import org.jboss.portal.portlet.invocation.PortletInvocation;
import org.jboss.portal.web.IllegalRequestException;
@@ -35,7 +43,11 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.RequestDispatcher;
import java.io.IOException;
+import java.util.Map;
+import java.util.HashMap;
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
@@ -43,7 +55,7 @@
*/
public class PagePortletControllerContext extends AbstractPortletControllerContext
{
-
+
/** . */
private final Page page;
@@ -57,18 +69,97 @@
HttpServletRequest req,
HttpServletResponse resp,
ServletContext servletContext,
- Page page,
PortletInvoker invoker)
- throws IllegalRequestException, IOException, ClassNotFoundException
+ throws IllegalRequestException, IOException, ClassNotFoundException,
ServletException
{
super(req, resp, servletContext);
+
//
- this.page = page;
+ PageNavigationalState pageState = null;
+ if (getRequest() instanceof PortletRequest)
+ {
+ PortletRequest request = (PortletRequest)getRequest();
+ pageState = request.getPageState();
+ }
+ else if (getRequest() instanceof PageScopedFullPortletResourceRequest)
+ {
+ PageScopedFullPortletResourceRequest request =
(PageScopedFullPortletResourceRequest)getRequest();
+ pageState = request.getPageState();
+ }
+
+ //
+ String pageId = null;
+ if (pageState != null)
+ {
+ String[] values = pageState.getPublicNavigationalState(Page.PAGE_ID_NAME);
+ if (values != null && values.length > 0)
+ {
+ pageId = values[0];
+ }
+ }
+ if (pageId == null)
+ {
+ pageId = "/index.jsp";
+ }
+
+ //
+ RequestDispatcher dispatcher = req.getRequestDispatcher(pageId);
+
+ //
+ BufferingResponse bufferingResponse = new BufferingResponse(resp);
+
+ //
+ dispatcher.include(req, bufferingResponse);
+
+ //
+ ResponseBuffer buffer = bufferingResponse.getBuffer();
+ buffer.close();
+
+ // Collect portlets to create the page
+ int counter = 0;
+ Map<String, Window> windows = new HashMap<String, Window>();
+ for (Chunk chunk : buffer.getChunks())
+ {
+ if (chunk instanceof PortletChunk)
+ {
+ PortletChunk portletChunk = (PortletChunk)chunk;
+ String windowId = "" + counter++;
+
+ //
+ try
+ {
+ for (Portlet portlet : invoker.getPortlets())
+ {
+ PortletInfo portletInfo = portlet.getInfo();
+ String portletName = portletInfo.getName();
+ String applicationName = portletInfo.getApplicationName();
+
+ //
+ if (applicationName.equals(portletChunk.getApplicationName())
&& portletName.equals(portletChunk.getPortletName()))
+ {
+ windows.put(windowId, new Window(windowId, portlet));
+ }
+ }
+ }
+ catch (PortletInvokerException e)
+ {
+ throw new ServletException(e);
+ }
+ }
+ }
+
+ //
+ this.page = new Page(buffer.getChunks(), windows, pageId);
this.invoker = invoker;
this.eventControllerContext = new EventControllerContextImpl(invoker);
}
+ public Page getPage()
+ {
+ return page;
+ }
+
protected Portlet getPortlet(String windowId) throws PortletInvokerException
{
Window window = page.getWindow(windowId);