Author: julien(a)jboss.com
Date: 2007-04-04 12:14:41 -0400 (Wed, 04 Apr 2007)
New Revision: 6917
Added:
trunk/theme/src/main/org/jboss/portal/theme/impl/RendererFactoryImpl.java
trunk/theme/src/main/org/jboss/portal/theme/page/PageRendition.java
trunk/theme/src/main/org/jboss/portal/theme/render/RendererFactory.java
Removed:
trunk/theme/src/main/org/jboss/portal/theme/PageRendition.java
trunk/theme/src/main/org/jboss/portal/theme/navigation/WindowNavigationalState.java
trunk/theme/src/main/org/jboss/portal/theme/page/WindowRenderContextImpl.java
Modified:
trunk/core/src/main/org/jboss/portal/core/aspects/controller/PageCustomizerInterceptor.java
trunk/core/src/main/org/jboss/portal/core/controller/ajax/AjaxController.java
trunk/core/src/main/org/jboss/portal/core/controller/ajax/AjaxInterceptor.java
trunk/core/src/main/org/jboss/portal/core/controller/classic/ClassicResponseHandler.java
trunk/core/src/main/org/jboss/portal/core/model/instance/command/InvokePortletInstanceRenderCommand.java
trunk/core/src/main/org/jboss/portal/core/model/portal/command/RenderPageCommand.java
trunk/theme/src/main/org/jboss/portal/test/theme/servlet/TestThemeServlet.java
trunk/theme/src/main/org/jboss/portal/theme/LayoutDispatcher.java
trunk/theme/src/main/org/jboss/portal/theme/PortalLayout.java
trunk/theme/src/main/org/jboss/portal/theme/impl/JSPLayout.java
trunk/theme/src/main/org/jboss/portal/theme/impl/LayoutServiceImpl.java
trunk/theme/src/main/org/jboss/portal/theme/page/DecorationRenderContextImpl.java
trunk/theme/src/main/org/jboss/portal/theme/page/PageResult.java
trunk/theme/src/main/org/jboss/portal/theme/page/PortletRenderContextImpl.java
trunk/theme/src/main/org/jboss/portal/theme/page/Region.java
trunk/theme/src/main/org/jboss/portal/theme/page/WindowContext.java
trunk/theme/src/main/org/jboss/portal/theme/render/PageRenderContext.java
trunk/theme/src/main/org/jboss/portal/theme/render/RenderContext.java
Log:
improve the theme stuff: better dispatch of responsibilities with better encapsulation
Modified:
trunk/core/src/main/org/jboss/portal/core/aspects/controller/PageCustomizerInterceptor.java
===================================================================
---
trunk/core/src/main/org/jboss/portal/core/aspects/controller/PageCustomizerInterceptor.java 2007-04-04
12:25:59 UTC (rev 6916)
+++
trunk/core/src/main/org/jboss/portal/core/aspects/controller/PageCustomizerInterceptor.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -48,7 +48,7 @@
import org.jboss.portal.security.PortalSecurityException;
import org.jboss.portal.security.spi.auth.PortalAuthorizationManagerFactory;
import org.jboss.portal.server.request.URLContext;
-import org.jboss.portal.theme.PageRendition;
+import org.jboss.portal.theme.page.PageRendition;
import org.jboss.portal.theme.ThemeConstants;
import org.jboss.portal.theme.impl.render.dynamic.DynaConstants;
import org.jboss.portal.theme.page.Region;
Modified: trunk/core/src/main/org/jboss/portal/core/controller/ajax/AjaxController.java
===================================================================
---
trunk/core/src/main/org/jboss/portal/core/controller/ajax/AjaxController.java 2007-04-04
12:25:59 UTC (rev 6916)
+++
trunk/core/src/main/org/jboss/portal/core/controller/ajax/AjaxController.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -49,10 +49,8 @@
import org.jboss.portal.server.ServerInvocation;
import org.jboss.portal.theme.page.WindowResult;
import org.jboss.portal.theme.page.PageResult;
+import org.jboss.portal.theme.page.WindowContext;
import org.jboss.portal.theme.render.RenderContext;
-import org.jboss.portal.theme.render.WindowRenderContext;
-import org.jboss.portal.theme.render.DecorationRenderContext;
-import org.jboss.portal.theme.render.PortletRenderContext;
import org.jboss.portal.theme.PortalLayout;
import org.jboss.portal.theme.LayoutService;
import org.jboss.portal.theme.impl.render.dynamic.response.UpdatePageLocationResponse;
@@ -68,7 +66,6 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.ServletException;
import java.io.IOException;
-import java.util.Collection;
import java.util.Iterator;
import java.util.ArrayList;
import java.util.Set;
@@ -363,13 +360,13 @@
LayoutService layoutService = getPageService().getLayoutService();
PortalLayout layout = RenderPageCommand.getLayout(layoutService, page);
+ //
+ UpdatePageStateResponse updatePage = new
UpdatePageStateResponse(ctx.getViewId());
+
// Call to the theme framework
PageResult res = new PageResult(page.getName(), page.getProperties(),
portal.getProperties());
//
- UpdatePageStateResponse updatePage = new
UpdatePageStateResponse(ctx.getViewId());
-
- //
for (Iterator i = windowToRefresh.iterator();i.hasNext();)
{
final PortalObject _window = (PortalObject)i.next();
@@ -382,82 +379,28 @@
final WindowResult windowResult = (WindowResult)wresp;
//
- WindowRenderContext wrc = new WindowRenderContext()
- {
- public String getId()
- {
- return _window.getName();
- }
+ WindowContext wc = new WindowContext(
+ _window.getName(),
+ _window.getId().toString(PortalObjectId.LEGACY_BASE64_FORMAT),
+ "ABC",
+ 0,
+ windowResult);
- public int getOrder()
- {
- return 0;
- }
+ //
+ MarkupInfo markupInfo =
(MarkupInfo)invocation.getResponse().getContentInfo();
- public WindowState getWindowState()
- {
- return windowResult.getWindowState();
- }
+ //
+ RenderContext renderContext = layout.getRenderContext(markupInfo,
invocation);
- public Mode getMode()
- {
- return windowResult.getMode();
- }
+ // Should push region context as well
+ renderContext.setAttribute(DynaConstants.AJAX_WINDOW_ENABLED,
Boolean.TRUE);
+ renderContext.pushObjectRenderContext(res);
- public DecorationRenderContext getDecoration()
- {
- return new DecorationRenderContext()
- {
- public String getId()
- {
- return _window.getName();
- }
+ //
+ renderContext.render(wc);
- public String getTitle()
- {
- return windowResult.getTitle();
-
- }
-
- public Collection getTriggerableActions(String familyName)
- {
- return windowResult.getTriggerableActions(familyName);
- }
-
- public String getProperty(String name)
- {
- return
(String)windowResult.getWindowProperties().get(name);
- }
- };
- }
-
- public PortletRenderContext getPortlet()
- {
- return new PortletRenderContext()
- {
- public String getMarkup()
- {
- return windowResult.getContent();
- }
-
- public String getProperty(String name)
- {
- return
(String)windowResult.getWindowProperties().get(name);
- }
- };
- }
-
- public String getProperty(String name)
- {
- return (String)windowResult.getWindowProperties().get(name);
- }
- };
-
//
- RenderContext renderCtx = new RenderContext(layout,
(MarkupInfo)invocation.getResponse().getContentInfo(), res);
- renderCtx.setAttribute(DynaConstants.AJAX_WINDOW_ENABLED,
Boolean.TRUE);
- renderCtx.render(wrc);
- updatePage.addFragment(_window.getName(),
renderCtx.getMarkupFragment().toString());
+ updatePage.addFragment(_window.getName(),
renderContext.getMarkupFragment().toString());
}
}
catch (Exception e)
Modified: trunk/core/src/main/org/jboss/portal/core/controller/ajax/AjaxInterceptor.java
===================================================================
---
trunk/core/src/main/org/jboss/portal/core/controller/ajax/AjaxInterceptor.java 2007-04-04
12:25:59 UTC (rev 6916)
+++
trunk/core/src/main/org/jboss/portal/core/controller/ajax/AjaxInterceptor.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -28,7 +28,7 @@
import org.jboss.portal.core.controller.ControllerContext;
import org.jboss.portal.core.model.portal.command.RenderPageCommand;
import org.jboss.portal.core.model.portal.ns.PortalObjectNavigationalStateContext;
-import org.jboss.portal.theme.PageRendition;
+import org.jboss.portal.theme.page.PageRendition;
import org.jboss.portal.theme.impl.render.dynamic.DynaConstants;
import javax.servlet.http.HttpServletRequest;
Modified:
trunk/core/src/main/org/jboss/portal/core/controller/classic/ClassicResponseHandler.java
===================================================================
---
trunk/core/src/main/org/jboss/portal/core/controller/classic/ClassicResponseHandler.java 2007-04-04
12:25:59 UTC (rev 6916)
+++
trunk/core/src/main/org/jboss/portal/core/controller/classic/ClassicResponseHandler.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -26,7 +26,7 @@
import org.jboss.portal.server.ServerInvocation;
import org.jboss.portal.server.ServerInvocationContext;
import org.jboss.portal.server.request.URLContext;
-import org.jboss.portal.theme.PageRendition;
+import org.jboss.portal.theme.page.PageRendition;
import org.jboss.portal.core.controller.command.response.SignOutResponse;
import org.jboss.portal.core.controller.command.response.StreamContentResponse;
import org.jboss.portal.core.controller.ControllerCommand;
Modified:
trunk/core/src/main/org/jboss/portal/core/model/instance/command/InvokePortletInstanceRenderCommand.java
===================================================================
---
trunk/core/src/main/org/jboss/portal/core/model/instance/command/InvokePortletInstanceRenderCommand.java 2007-04-04
12:25:59 UTC (rev 6916)
+++
trunk/core/src/main/org/jboss/portal/core/model/instance/command/InvokePortletInstanceRenderCommand.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -34,7 +34,7 @@
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.theme.PageRendition;
+import org.jboss.portal.theme.page.PageRendition;
import org.jboss.portal.theme.LayoutService;
import org.jboss.portal.theme.PortalLayout;
import org.jboss.portal.theme.ThemeConstants;
Modified:
trunk/core/src/main/org/jboss/portal/core/model/portal/command/RenderPageCommand.java
===================================================================
---
trunk/core/src/main/org/jboss/portal/core/model/portal/command/RenderPageCommand.java 2007-04-04
12:25:59 UTC (rev 6916)
+++
trunk/core/src/main/org/jboss/portal/core/model/portal/command/RenderPageCommand.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -39,7 +39,7 @@
import org.jboss.portal.security.spi.auth.PortalAuthorizationManager;
import org.jboss.portal.server.ServerInvocation;
import org.jboss.portal.theme.LayoutService;
-import org.jboss.portal.theme.PageRendition;
+import org.jboss.portal.theme.page.PageRendition;
import org.jboss.portal.theme.PortalLayout;
import org.jboss.portal.theme.PortalTheme;
import org.jboss.portal.theme.ServerRegistrationID;
Modified: trunk/theme/src/main/org/jboss/portal/test/theme/servlet/TestThemeServlet.java
===================================================================
---
trunk/theme/src/main/org/jboss/portal/test/theme/servlet/TestThemeServlet.java 2007-04-04
12:25:59 UTC (rev 6916)
+++
trunk/theme/src/main/org/jboss/portal/test/theme/servlet/TestThemeServlet.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -127,16 +127,16 @@
}
// set the renderctx and req/res attr
- RenderContext renderCtx = new RenderContext(layout, markupInfo, pageResult);
- response.setContentType(renderCtx.getContentType().toString());
- response.setCharacterEncoding(renderCtx.getCharset());
- request.setAttribute(LayoutConstants.ATTR_RENDERCONTEXT, renderCtx);
- request.setAttribute(LayoutConstants.ATTR_PAGE, pageResult);
- request.setAttribute(ThemeConstants.ATTR_THEME, theme);
+// RenderContext renderCtx = new RenderContext(layout, markupInfo, pageResult);
+// response.setContentType(renderCtx.getContentType().toString());
+// response.setCharacterEncoding(renderCtx.getCharset());
+// request.setAttribute(LayoutConstants.ATTR_RENDERCONTEXT, renderCtx);
+// request.setAttribute(LayoutConstants.ATTR_PAGE, pageResult);
+// request.setAttribute(ThemeConstants.ATTR_THEME, theme);
//
- LayoutDispatcher dispatcher1 = new LayoutDispatcher(renderCtx, request, response,
pageResult);
- dispatcher1.include();
+// LayoutDispatcher dispatcher1 = new LayoutDispatcher(renderCtx, request, response,
pageResult);
+// dispatcher1.include();
}
/**
Modified: trunk/theme/src/main/org/jboss/portal/theme/LayoutDispatcher.java
===================================================================
--- trunk/theme/src/main/org/jboss/portal/theme/LayoutDispatcher.java 2007-04-04 12:25:59
UTC (rev 6916)
+++ trunk/theme/src/main/org/jboss/portal/theme/LayoutDispatcher.java 2007-04-04 16:14:41
UTC (rev 6917)
@@ -23,20 +23,16 @@
package org.jboss.portal.theme;
import org.jboss.logging.Logger;
-import org.jboss.portal.common.util.Tools;
import org.jboss.portal.server.servlet.FilterCommand;
-import org.jboss.portal.theme.page.PageResult;
import org.jboss.portal.theme.render.RenderContext;
-import org.jboss.portal.theme.render.RenderException;
+import org.jboss.portal.theme.render.PageRenderContext;
-import javax.servlet.FilterChain;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
-import java.io.Writer;
/**
* Dispatches the request to the target layout. The major side effect is to change the
context path returned by the
@@ -51,19 +47,27 @@
private static final Logger log = Logger.getLogger(LayoutDispatcher.class);
- /** The layout */
private final HttpServletRequest request;
private final HttpServletResponse response;
- private final PageResult markupResult;
+ private final PageRenderContext markupResult;
private final RenderContext renderContext;
+ private final String layoutURI;
+ private final LayoutInfo layoutInfo;
/**
* @param renderContext
* @throws IllegalArgumentException if the layout is null
*/
- public LayoutDispatcher(RenderContext renderContext, HttpServletRequest request,
HttpServletResponse response, PageResult result)
+ public LayoutDispatcher(
+ RenderContext renderContext,
+ HttpServletRequest request,
+ HttpServletResponse response,
+ PageRenderContext result,
+ String layoutURI,
+ LayoutInfo layoutInfo)
throws IllegalArgumentException
{
+
if (request == null)
{
throw new IllegalArgumentException("No null request allowed here");
@@ -81,7 +85,7 @@
{
throw new IllegalArgumentException("No render context provided");
}
- if (result.getLayoutURI() == null)
+ if (layoutURI == null)
{
throw new IllegalArgumentException("No null layout allowed here");
}
@@ -90,10 +94,10 @@
this.response = response;
this.markupResult = result;
this.renderContext = renderContext;
+ this.layoutURI = layoutURI;
+ this.layoutInfo = layoutInfo;
}
- /** Perform the dispatch to the target layout */
-// public void include(PortalRequest req, PortalResponse resp) throws IOException,
ServletException
public void include() throws IOException, ServletException
{
try
@@ -101,64 +105,47 @@
// Set charset and content type on the response
response.setContentType(renderContext.getContentType().toString());
response.setCharacterEncoding(renderContext.getCharset());
- request.setAttribute(LayoutConstants.ATTR_RENDERCONTEXT, renderContext);
- if (markupResult instanceof PageResult)
+ RequestDispatcher dispatcher =
layoutInfo.getServletContext().getRequestDispatcher(layoutURI);
+
+ log.debug("got request dispatcher for layout resource: " + (dispatcher
!= null));
+ if (dispatcher == null)
{
- RequestDispatcher dispatcher =
renderContext.getLayoutInfo().getServletContext().getRequestDispatcher(markupResult.getLayoutURI());
+ throw new IOException("No dispatcher found for : " +
layoutInfo.getName() + " [" + layoutURI + "]");
+ }
- log.debug("got request dispatcher for layout resource: " +
(dispatcher != null));
- if (dispatcher == null)
+ //
+ request.setAttribute(LayoutConstants.ATTR_RENDERCONTEXT, renderContext);
+ request.setAttribute(FilterCommand.REQ_ATT_KEY, this);
+ request.setAttribute(LayoutConstants.ATTR_PAGE, markupResult);
+
+ // This request returns a context path which is the one of the war file in which
the target is
+ HttpServletRequest wrapper = new HttpServletRequestWrapper(request)
+ {
+ public String getContextPath()
{
- throw new IOException("No dispatcher found for : " +
renderContext.getLayoutInfo().getName() + " [" + markupResult.getLayoutURI() +
"]");
+ return layoutInfo.getContextPath();
}
+ };
- request.setAttribute(FilterCommand.REQ_ATT_KEY, this);
- // add the results to the request
- request.setAttribute(LayoutConstants.ATTR_PAGE, markupResult);
- // This request returns a context path which is the one of the war file in
which the target is
- HttpServletRequest wrapper = new HttpServletRequestWrapper(request)
- {
- public String getContextPath()
- {
- return renderContext.getLayoutInfo().getContextPath();
- }
- };
+ dispatcher.include(wrapper, response);
-
- dispatcher.include(wrapper, response);
-
- log.debug("done with the layout");
- }
- else
- {
- // for page fragments , render via the render context (which uses the render
set in turn)...
- try
- {
- renderContext.render();
- writeResponse(renderContext, response);
- }
- catch (RenderException e)
- {
- throw new ServletException(e);
- }
- }
+ log.debug("done with the layout");
}
finally
{
- request.removeAttribute(FilterCommand.REQ_ATT_KEY);
request.removeAttribute(LayoutConstants.ATTR_PAGE);
request.removeAttribute(LayoutConstants.ATTR_RENDERCONTEXT);
}
}
- private static void writeResponse(RenderContext renderCtx, HttpServletResponse
response)
- throws IOException
- {
- Writer out = response.getWriter();
- out.write(renderCtx.getMarkupFragment().toString());
- out.flush();
- Tools.safeClose(out);
- }
+// private static void writeResponse(RenderContext renderCtx, HttpServletResponse
response)
+// throws IOException
+// {
+// Writer out = response.getWriter();
+// out.write(renderCtx.getMarkupFragment().toString());
+// out.flush();
+// Tools.safeClose(out);
+// }
}
Deleted: trunk/theme/src/main/org/jboss/portal/theme/PageRendition.java
===================================================================
--- trunk/theme/src/main/org/jboss/portal/theme/PageRendition.java 2007-04-04 12:25:59 UTC
(rev 6916)
+++ trunk/theme/src/main/org/jboss/portal/theme/PageRendition.java 2007-04-04 16:14:41 UTC
(rev 6917)
@@ -1,133 +0,0 @@
-/******************************************************************************
- * 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.theme;
-
-import org.jboss.portal.server.ServerInvocation;
-import org.jboss.portal.theme.page.PageService;
-import org.jboss.portal.theme.page.PageResult;
-import org.jboss.portal.theme.page.WindowResult;
-import org.jboss.portal.theme.page.WindowContext;
-import org.jboss.portal.WindowState;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Iterator;
-
-/**
- * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
- * @version $Revision: 1.1 $
- */
-public class PageRendition
-{
-
- /** . */
- private PortalLayout layout;
-
- /** . */
- private PageResult pageResult;
-
- /** . */
- private PageService pageService;
-
- public PageRendition(PortalLayout layout, PageResult markupResult, PageService
pageService)
- {
- this.layout = layout;
- this.pageResult = markupResult;
- this.pageService = pageService;
- }
-
- /** Performs the page rendition. */
- public void render(ServerInvocation invocation) throws IOException, ServletException
- {
- //
- HttpServletRequest clientRequest =
invocation.getServerContext().getClientRequest();
-
- // Take care of maximized window
- // if one window is maximized then we do chose the maximized layout for the
rendition
- // and put that window on the maximized region of this layout
- for (Iterator i = pageResult.getWindowIds().iterator();i.hasNext();)
- {
- Object windowId = i.next();
- WindowContext wc = pageResult.getWindowContext(windowId);
- WindowResult res = wc.getResult();
- if (WindowState.MAXIMIZED.equals(res.getWindowState()))
- {
- // TODO: Deep clone instead ?
- PageResult newRes = new PageResult(
- pageResult.getPageName(),
- pageResult.getPageProperties(),
- pageResult.getPortalProperties());
- newRes.setThemeResult(pageResult.getThemeResult());
- Collection set = pageResult.getWindowContextMap().values();
- Iterator setIterator = set.iterator();
- while (setIterator.hasNext())
- {
- WindowContext windowContext = (WindowContext)setIterator.next();
- newRes.addWindowContext(windowContext);
- }
-
- //
- WindowContext ctx = pageResult.getWindowContext(windowId);
-
- //
- newRes.setLayoutState("maximized");
- newRes.setLayoutURI(layout.getLayoutInfo().getURI("maximized"));
-
- //
- ctx.setRegionName("maximized");
- ctx.setOrder(0);
-
- //
- newRes.addWindowContext(ctx);
-
- //
- pageResult = newRes;
-
- break;
- }
- }
-
- try
- {
-
- // Place a reference to the theme service into the request so that the theme tag
can get to a theme via a theme
- // name (specified as tag attribute); this is useful if no theme was defined for
the portal or the page
- clientRequest.setAttribute(ThemeConstants.ATTR_THEMESERVER,
pageService.getThemeService());
- clientRequest.setAttribute(ThemeConstants.ATTR_THEME, pageResult.getTheme());
- clientRequest.setAttribute(ThemeConstants.ATTR_THEMERESULT,
pageResult.getThemeResult());
- // now delegate to the layout to do the rest (assemble the markup fragments into
a response)
- layout.assembleResponse(invocation, pageResult);
- }
- finally
- {
- clientRequest.removeAttribute(ThemeConstants.ATTR_THEMESERVER);
- }
- }
-
- public PageResult getPageResult()
- {
- return pageResult;
- }
-}
Modified: trunk/theme/src/main/org/jboss/portal/theme/PortalLayout.java
===================================================================
--- trunk/theme/src/main/org/jboss/portal/theme/PortalLayout.java 2007-04-04 12:25:59 UTC
(rev 6916)
+++ trunk/theme/src/main/org/jboss/portal/theme/PortalLayout.java 2007-04-04 16:14:41 UTC
(rev 6917)
@@ -23,15 +23,10 @@
package org.jboss.portal.theme;
import org.jboss.portal.server.ServerInvocation;
-import org.jboss.portal.server.ServerRequest;
import org.jboss.portal.common.util.MarkupInfo;
import org.jboss.portal.theme.render.RenderContext;
-import org.jboss.portal.theme.render.PageRenderContext;
-import org.jboss.portal.theme.page.PageResult;
+import org.jboss.portal.theme.render.PageRenderer;
-import javax.servlet.ServletException;
-import java.io.IOException;
-
/**
* Implementation of a <code>PortalLayout</code>. <p>An instance of
this class represents the meta data of a portal
* layout.</p>
@@ -41,68 +36,34 @@
*/
public abstract class PortalLayout
{
- private LayoutInfo info;
- private LayoutServiceInfo serviceInfo;
- /** Layouts need an empty constructor (they are loaded via reflection) */
- public PortalLayout()
- {
- }
+ /** . */
+ protected LayoutInfo info;
- /**
- * Assemble the fragments created by the portlet render process into a response and
send it back to the client (write
- * it to the response)
- *
- * @param invocation
- * @param markupResult the result containing the information about what was rendered
and what the resulting markup
- * fragments are
- * @throws ServletException
- * @throws IOException
- */
- public abstract void assembleResponse(ServerInvocation invocation, PageResult
markupResult)
- throws ServletException, IOException;
+ /** . */
+ protected LayoutServiceInfo serviceInfo;
- /**
- * Initialize the layout with a handle to the layout service and the layout's meta
data
- *
- * @param serviceInfo a reference to the layout service
- * @param info the layout's meta data (the parsed content of the layout
descriptor)
- */
public void init(LayoutServiceInfo serviceInfo, LayoutInfo info)
{
this.info = info;
this.serviceInfo = serviceInfo;
}
- /** destroy this layout (cleanup time) */
public void destroy()
{
info = null;
serviceInfo = null;
}
- /** @return the parsed meta data of this layout */
public LayoutInfo getLayoutInfo()
{
return info;
}
- /** @return a reference to the layout service */
public LayoutServiceInfo getServiceInfo()
{
return serviceInfo;
}
- /**
- * Create a new render context for this request and layout
- *
- * @param markupInfo the information about the content type and encoding this layout
should produce
- * @param request the current server request
- * @param markupResult the result of the portlet render process
- * @return a new render context
- */
- public RenderContext getRenderContext(MarkupInfo markupInfo, ServerRequest request,
PageRenderContext markupResult)
- {
- return new RenderContext(this, markupInfo, markupResult);
- }
+ public abstract RenderContext getRenderContext(MarkupInfo markupInfo, ServerInvocation
invocation);
}
Modified: trunk/theme/src/main/org/jboss/portal/theme/impl/JSPLayout.java
===================================================================
--- trunk/theme/src/main/org/jboss/portal/theme/impl/JSPLayout.java 2007-04-04 12:25:59
UTC (rev 6916)
+++ trunk/theme/src/main/org/jboss/portal/theme/impl/JSPLayout.java 2007-04-04 16:14:41
UTC (rev 6917)
@@ -27,13 +27,22 @@
import org.jboss.portal.theme.LayoutDispatcher;
import org.jboss.portal.theme.PortalLayout;
import org.jboss.portal.theme.page.PageResult;
+import org.jboss.portal.theme.page.WindowContext;
+import org.jboss.portal.theme.page.WindowResult;
import org.jboss.portal.theme.render.RenderContext;
+import org.jboss.portal.theme.render.PageRenderContext;
+import org.jboss.portal.theme.render.PageRenderer;
+import org.jboss.portal.theme.render.RenderException;
+import org.jboss.portal.theme.render.RendererFactory;
+import org.jboss.portal.WindowState;
import org.jboss.portal.common.util.MarkupInfo;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
+import java.util.Iterator;
+import java.util.Collection;
/**
* Layout implementation that uses JSPs (and tags) to render the response back to the
client.
@@ -42,16 +51,88 @@
* @version $Revision$
* @see LayoutDispatcher
*/
-public final class JSPLayout extends PortalLayout
+public final class JSPLayout extends PortalLayout implements PageRenderer
{
- public void assembleResponse(ServerInvocation invocation, PageResult markupResult)
- throws ServletException, IOException
+ public RenderContext getRenderContext(MarkupInfo markupInfo, ServerInvocation
invocation)
{
- HttpServletRequest httpRequest = invocation.getServerContext().getClientRequest();
- HttpServletResponse httpResponse =
invocation.getServerContext().getClientResponse();
- RenderContext renderCtx =
getRenderContext((MarkupInfo)invocation.getResponse().getContentInfo(),
invocation.getRequest(), markupResult);
- LayoutDispatcher dispatcher = new LayoutDispatcher(renderCtx, httpRequest,
httpResponse, markupResult);
- dispatcher.include();
+ //
+ RendererFactory factory = new RendererFactoryImpl(this, serviceInfo, info);
+
+ //
+ return new RenderContext(factory, invocation, markupInfo);
}
+
+ public void render(RenderContext renderContext, PageRenderContext prc) throws
RenderException
+ {
+ PageResult pageResult = (PageResult)prc;
+
+ // Take care of maximized window
+ // if one window is maximized then we do chose the maximized layout for the
rendition
+ // and put that window on the maximized region of this layout
+ for (Iterator i = pageResult.getWindowIds().iterator();i.hasNext();)
+ {
+ String windowId = (String)i.next();
+ WindowContext wc = pageResult.getWindowContext(windowId);
+ WindowResult res = wc.getResult();
+ if (WindowState.MAXIMIZED.equals(res.getWindowState()))
+ {
+ // TODO: Deep clone instead ?
+ PageResult newRes = new PageResult(
+ pageResult.getPageName(),
+ pageResult.getPageProperties(),
+ pageResult.getPortalProperties());
+ newRes.setThemeResult(pageResult.getThemeResult());
+ Collection set = pageResult.getWindowContextMap().values();
+ Iterator setIterator = set.iterator();
+ while (setIterator.hasNext())
+ {
+ WindowContext windowContext = (WindowContext)setIterator.next();
+ newRes.addWindowContext(windowContext);
+ }
+
+ //
+ WindowContext ctx = pageResult.getWindowContext(windowId);
+
+ //
+ newRes.setLayoutState("maximized");
+ newRes.setLayoutURI(getLayoutInfo().getURI("maximized"));
+
+ //
+ ctx.setRegionName("maximized");
+ ctx.setOrder(0);
+
+ //
+ newRes.addWindowContext(ctx);
+
+ //
+ pageResult = newRes;
+
+ break;
+ }
+ }
+
+ try
+ {
+ ServerInvocation invocation = renderContext.getServerInvocation();
+ HttpServletRequest httpRequest =
invocation.getServerContext().getClientRequest();
+ HttpServletResponse httpResponse =
invocation.getServerContext().getClientResponse();
+ LayoutDispatcher dispatcher = new LayoutDispatcher(
+ renderContext,
+ httpRequest,
+ httpResponse,
+ prc,
+ pageResult.getLayoutURI(),
+ getLayoutInfo());
+ dispatcher.include();
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ catch (ServletException e)
+ {
+ e.printStackTrace();
+ }
+ }
}
Modified: trunk/theme/src/main/org/jboss/portal/theme/impl/LayoutServiceImpl.java
===================================================================
--- trunk/theme/src/main/org/jboss/portal/theme/impl/LayoutServiceImpl.java 2007-04-04
12:25:59 UTC (rev 6916)
+++ trunk/theme/src/main/org/jboss/portal/theme/impl/LayoutServiceImpl.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -62,16 +62,22 @@
public class LayoutServiceImpl extends AbstractJBossService implements LayoutService,
Service
{
private static Logger log = Logger.getLogger(LayoutServiceImpl.class);
+
// map of layout id to layout
private Map layouts;
+
// map of layout name to layout id
private Map layoutNames;
+
// map of appID + "." + layout name to layout id
private Map exactLayoutNames;
+
// map of renderSet registration id to list of rendersets
private Map renderSets;
+
// map of render set name to render set
private Map renderSetNames;
+
// map of appID + "." + render set name to render set
private Map exactRenderSetNames;
Added: trunk/theme/src/main/org/jboss/portal/theme/impl/RendererFactoryImpl.java
===================================================================
--- trunk/theme/src/main/org/jboss/portal/theme/impl/RendererFactoryImpl.java
(rev 0)
+++ trunk/theme/src/main/org/jboss/portal/theme/impl/RendererFactoryImpl.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -0,0 +1,235 @@
+/******************************************************************************
+ * 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.theme.impl;
+
+import org.jboss.portal.theme.render.RendererFactory;
+import org.jboss.portal.theme.render.ObjectRenderer;
+import org.jboss.portal.theme.render.RenderContext;
+import org.jboss.portal.theme.render.ObjectRenderContext;
+import org.jboss.portal.theme.render.RegionRenderContext;
+import org.jboss.portal.theme.render.WindowRenderContext;
+import org.jboss.portal.theme.render.PortletRenderContext;
+import org.jboss.portal.theme.render.DecorationRenderContext;
+import org.jboss.portal.theme.render.PortalRenderSet;
+import org.jboss.portal.theme.render.PageRenderContext;
+import org.jboss.portal.theme.render.PageRenderer;
+import org.jboss.portal.theme.LayoutServiceInfo;
+import org.jboss.portal.theme.ThemeConstants;
+import org.jboss.portal.theme.LayoutInfo;
+import org.jboss.portal.common.util.ContentInfo;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public class RendererFactoryImpl implements RendererFactory
+{
+
+ /** . */
+ private PageRenderer pageRenderer;
+
+ /** . */
+ private LayoutServiceInfo layoutServiceInfo;
+
+ /** . */
+ private LayoutInfo layoutInfo;
+
+ public RendererFactoryImpl(
+ PageRenderer pageRenderer,
+ LayoutServiceInfo layoutServiceInfo,
+ LayoutInfo layoutInfo)
+ {
+ this.pageRenderer = pageRenderer;
+ this.layoutServiceInfo = layoutServiceInfo;
+ this.layoutInfo = layoutInfo;
+ }
+
+ public ObjectRenderer getRenderer(RenderContext renderContext, ObjectRenderContext
objectRenderContext)
+ {
+ if (objectRenderContext instanceof PageRenderContext)
+ {
+ return pageRenderer;
+ }
+ if (objectRenderContext instanceof RegionRenderContext)
+ {
+ return getRegionRenderer(renderContext,
(RegionRenderContext)objectRenderContext);
+ }
+ else if (objectRenderContext instanceof WindowRenderContext)
+ {
+ return getWindowRenderer(renderContext,
(WindowRenderContext)objectRenderContext);
+ }
+ else if (objectRenderContext instanceof PortletRenderContext)
+ {
+ return getPortletRenderer(renderContext,
(PortletRenderContext)objectRenderContext);
+ }
+ else if (objectRenderContext instanceof DecorationRenderContext)
+ {
+ return getDecorationRenderer(renderContext,
(DecorationRenderContext)objectRenderContext);
+ }
+ return null;
+ }
+
+ private ObjectRenderer getRegionRenderer(RenderContext renderContext,
RegionRenderContext objectRenderContext)
+ {
+ return getRenderSet(renderContext).getRegionRenderer();
+ }
+
+ /**
+ * Get the window renderer for the provided window. <p>The window result can
optionally contain a window property
+ * that points to a render set to use when getting the window renderer. If no window
property was provided, then the
+ * default render set of this context will be used.</p>
+ *
+ * @param result the window result possibly containing the window property that
specifies an alternative render set
+ * name for the window renderer to use
+ * @return a window renderer
+ */
+ public ObjectRenderer getWindowRenderer(RenderContext renderContext,
WindowRenderContext result)
+ {
+ String renderSetName = null;
+ if (result != null)
+ {
+ renderSetName = result.getProperty(ThemeConstants.PORTAL_PROP_WINDOW_RENDERER);
+ }
+
+ //
+ if (result != null && renderSetName == null)
+ {
+ renderSetName =
renderContext.getProperty(ThemeConstants.PORTAL_PROP_WINDOW_RENDERER);
+ }
+
+ //
+ if (renderSetName != null)
+ {
+ PortalRenderSet renderSet = layoutServiceInfo.getRenderSet(renderSetName,
renderContext.getContentType());
+
+ //
+ if (renderSet != null)
+ {
+ return renderSet.getWindowRenderer();
+ }
+ }
+
+ //
+ return getRenderSet(renderContext).getWindowRenderer();
+ }
+
+ /**
+ * Get the decoration renderer for the window that the provided window result is
associated with. <p>If the window
+ * result contains a window property that points to a render set, that render set will
be used to determine the
+ * decoration renderer. Otherwise, the render set that was determined for this context
will be used.</p>
+ *
+ * @param result the window result possibly containing the window property that
specifies an alternative render set
+ * name for the decoration renderer to use
+ * @return a decoration renderer
+ */
+ public ObjectRenderer getDecorationRenderer(RenderContext renderContext,
DecorationRenderContext result)
+ {
+ String renderSetName = null;
+
+ if (result != null)
+ {
+ renderSetName =
result.getProperty(ThemeConstants.PORTAL_PROP_DECORATION_RENDERER);
+ }
+
+ //
+ if (result != null && renderSetName == null)
+ {
+ renderSetName =
renderContext.getProperty(ThemeConstants.PORTAL_PROP_DECORATION_RENDERER);
+ }
+
+ //
+ if (renderSetName != null)
+ {
+ PortalRenderSet renderSet = layoutServiceInfo.getRenderSet(renderSetName,
renderContext.getContentType());
+
+ //
+ if (renderSet != null)
+ {
+ return renderSet.getDecorationRenderer();
+ }
+ }
+
+ //
+ return getRenderSet(renderContext).getDecorationRenderer();
+ }
+
+ /**
+ * Get the portlet renderer for the render set defined in the window properties that
were provided. <p>If the
+ * provided window result doesn't contain any window property that defines a
render set name, the default render set
+ * that was determined for this context will be used to get the portlet
renderer.</p>
+ *
+ * @param result the window result containing the window properties to introspect for
a render set name to get the
+ * portlet renderer from
+ * @return a portlet renderer
+ */
+ public ObjectRenderer getPortletRenderer(RenderContext renderContext,
PortletRenderContext result)
+ {
+ String renderSetName = null;
+
+ //
+ if (result != null)
+ {
+ renderSetName =
result.getProperty(ThemeConstants.PORTAL_PROP_PORTLET_RENDERER);
+ }
+
+ //
+ if (result != null && renderSetName == null)
+ {
+ renderSetName =
renderContext.getProperty(ThemeConstants.PORTAL_PROP_PORTLET_RENDERER);
+ }
+
+ //
+ if (renderSetName != null)
+ {
+ PortalRenderSet renderSet = layoutServiceInfo.getRenderSet(renderSetName,
renderContext.getContentType());
+
+ //
+ if (renderSet != null)
+ {
+ return renderSet.getPortletRenderer();
+ }
+ }
+
+ //
+ return getRenderSet(renderContext).getPortletRenderer();
+ }
+
+ private PortalRenderSet getRenderSet(RenderContext renderContext)
+ {
+ // Find the render set name
+ String renderSetName =
renderContext.getProperty(ThemeConstants.PORTAL_PROP_RENDERSET);
+
+// if (renderSetName == null)
+// {
+// throw new IllegalArgumentException("No RenderSet determined");
+// }
+
+ ContentInfo contentInfo = renderContext.getMarkupInfo();
+
+ return layoutServiceInfo.getRenderSet(layoutInfo, contentInfo, renderSetName);
+// if (renderSet == null)
+// {
+// throw new IllegalArgumentException("No RenderSet determined for " +
renderSetName);
+// }
+ }
+}
Deleted:
trunk/theme/src/main/org/jboss/portal/theme/navigation/WindowNavigationalState.java
===================================================================
---
trunk/theme/src/main/org/jboss/portal/theme/navigation/WindowNavigationalState.java 2007-04-04
12:25:59 UTC (rev 6916)
+++
trunk/theme/src/main/org/jboss/portal/theme/navigation/WindowNavigationalState.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -1,73 +0,0 @@
-/******************************************************************************
- * 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.theme.navigation;
-
-import org.jboss.portal.Mode;
-import org.jboss.portal.WindowState;
-
-import java.io.Serializable;
-
-/**
- * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
- * @version $Revision$
- */
-public class WindowNavigationalState implements Serializable
-{
-
- /** . */
- private WindowState windowState;
-
- /** . */
- private Mode mode;
-
- public WindowNavigationalState()
- {
- this(WindowState.NORMAL, Mode.VIEW);
- }
-
- public WindowNavigationalState(WindowState windowState, Mode mode)
- {
- this.windowState = windowState;
- this.mode = mode;
- }
-
- public WindowState getWindowState()
- {
- return windowState;
- }
-
- public void setWindowState(WindowState windowState)
- {
- this.windowState = windowState;
- }
-
- public Mode getMode()
- {
- return mode;
- }
-
- public void setMode(Mode mode)
- {
- this.mode = mode;
- }
-}
Modified:
trunk/theme/src/main/org/jboss/portal/theme/page/DecorationRenderContextImpl.java
===================================================================
---
trunk/theme/src/main/org/jboss/portal/theme/page/DecorationRenderContextImpl.java 2007-04-04
12:25:59 UTC (rev 6916)
+++
trunk/theme/src/main/org/jboss/portal/theme/page/DecorationRenderContextImpl.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -33,9 +33,9 @@
public class DecorationRenderContextImpl implements DecorationRenderContext
{
- final WindowRenderContextImpl wrc;
+ final WindowContext wrc;
- public DecorationRenderContextImpl(WindowRenderContextImpl wrc)
+ public DecorationRenderContextImpl(WindowContext wrc)
{
this.wrc = wrc;
}
@@ -47,12 +47,12 @@
public String getTitle()
{
- return wrc.context.result.getTitle();
+ return wrc.result.getTitle();
}
public Collection getTriggerableActions(String familyName)
{
- return wrc.context.result.getTriggerableActions(familyName);
+ return wrc.result.getTriggerableActions(familyName);
}
public String getProperty(String name)
Copied: trunk/theme/src/main/org/jboss/portal/theme/page/PageRendition.java (from rev
6916, trunk/theme/src/main/org/jboss/portal/theme/PageRendition.java)
===================================================================
--- trunk/theme/src/main/org/jboss/portal/theme/page/PageRendition.java
(rev 0)
+++ trunk/theme/src/main/org/jboss/portal/theme/page/PageRendition.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -0,0 +1,108 @@
+/******************************************************************************
+ * 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.theme.page;
+
+import org.jboss.portal.server.ServerInvocation;
+import org.jboss.portal.theme.page.PageService;
+import org.jboss.portal.theme.page.PageResult;
+import org.jboss.portal.theme.page.WindowResult;
+import org.jboss.portal.theme.page.WindowContext;
+import org.jboss.portal.theme.render.RenderContext;
+import org.jboss.portal.theme.render.PageRenderer;
+import org.jboss.portal.theme.render.RenderException;
+import org.jboss.portal.theme.PortalLayout;
+import org.jboss.portal.theme.ThemeConstants;
+import org.jboss.portal.WindowState;
+import org.jboss.portal.common.util.MarkupInfo;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public class PageRendition
+{
+
+ /** . */
+ private PortalLayout layout;
+
+ /** . */
+ private PageResult pageResult;
+
+ /** . */
+ private PageService pageService;
+
+ public PageRendition(PortalLayout layout, PageResult markupResult, PageService
pageService)
+ {
+ this.layout = layout;
+ this.pageResult = markupResult;
+ this.pageService = pageService;
+ }
+
+ /** Performs the page rendition. */
+ public void render(ServerInvocation invocation) throws IOException, ServletException
+ {
+ //
+ HttpServletRequest clientRequest =
invocation.getServerContext().getClientRequest();
+
+
+ //
+
+
+ try
+ {
+
+ // Place a reference to the theme service into the request so that the theme tag
can get to a theme via a theme
+ // name (specified as tag attribute); this is useful if no theme was defined for
the portal or the page
+ clientRequest.setAttribute(ThemeConstants.ATTR_THEMESERVER,
pageService.getThemeService());
+ clientRequest.setAttribute(ThemeConstants.ATTR_THEME, pageResult.getTheme());
+ clientRequest.setAttribute(ThemeConstants.ATTR_THEMERESULT,
pageResult.getThemeResult());
+
+ MarkupInfo markupInfo = (MarkupInfo)invocation.getResponse().getContentInfo();
+
+ RenderContext renderContext = layout.getRenderContext(markupInfo, invocation);
+
+
+ renderContext.render(pageResult);
+
+ }
+ catch (RenderException e)
+ {
+ e.printStackTrace();
+ }
+ finally
+ {
+ clientRequest.removeAttribute(ThemeConstants.ATTR_THEMESERVER);
+ }
+ }
+
+ public PageResult getPageResult()
+ {
+ return pageResult;
+ }
+}
Modified: trunk/theme/src/main/org/jboss/portal/theme/page/PageResult.java
===================================================================
--- trunk/theme/src/main/org/jboss/portal/theme/page/PageResult.java 2007-04-04 12:25:59
UTC (rev 6916)
+++ trunk/theme/src/main/org/jboss/portal/theme/page/PageResult.java 2007-04-04 16:14:41
UTC (rev 6917)
@@ -25,6 +25,7 @@
import org.jboss.portal.theme.render.PortalRenderSet;
import org.jboss.portal.theme.render.PageRenderContext;
import org.jboss.portal.theme.render.RegionRenderContext;
+import org.jboss.portal.theme.render.WindowRenderContext;
import org.jboss.portal.theme.ThemeResult;
import org.jboss.portal.theme.PortalTheme;
@@ -181,34 +182,18 @@
return windowContexts.keySet();
}
-// /**
-// * Get the <code>WindowResult</code> for a specific portlet window.
-// *
-// * @param windowId the window id identifying the portlet window to get the window
result for
-// * @return the window result for the provided window id
-// */
-// public WindowResult getWindowResult(Object windowId)
-// {
-// return (WindowResult)results.get(windowId);
-// }
+ public WindowRenderContext getWindow(String windowId)
+ {
+ return getWindowContext(windowId);
+ }
-// /**
-// * Get a map of <code>WindowResult</code>s keyed by window id
-// *
-// * @return a map of window results
-// */
-// public Map getWindowResultMap()
-// {
-// return results;
-// }
-
/**
* Get the <code>WindowContext</code> for the provided window id.
*
* @param windowId the window id identifying the portlet to get the context for
* @return the window context for the provided window id
*/
- public WindowContext getWindowContext(Object windowId)
+ public WindowContext getWindowContext(String windowId)
{
return (WindowContext)windowContexts.get(windowId);
}
@@ -233,15 +218,6 @@
this.layoutState = layoutState;
}
-// public void addWindowResult(Object windowId, WindowResult result)
-// {
-// if (!windowContexts.keySet().contains(windowId))
-// {
-// throw new IllegalArgumentException("there was no window added for this
window:" + windowId);
-// }
-// results.put(windowId, result);
-// }
-
public void addWindowContext(WindowContext windowContext)
{
windowContexts.put(windowContext.getId(), windowContext);
Modified: trunk/theme/src/main/org/jboss/portal/theme/page/PortletRenderContextImpl.java
===================================================================
---
trunk/theme/src/main/org/jboss/portal/theme/page/PortletRenderContextImpl.java 2007-04-04
12:25:59 UTC (rev 6916)
+++
trunk/theme/src/main/org/jboss/portal/theme/page/PortletRenderContextImpl.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -32,16 +32,16 @@
public class PortletRenderContextImpl implements PortletRenderContext
{
- final WindowRenderContextImpl wrc;
+ final WindowContext wrc;
- public PortletRenderContextImpl(WindowRenderContextImpl wrc)
+ public PortletRenderContextImpl(WindowContext wrc)
{
this.wrc = wrc;
}
public String getMarkup()
{
- return wrc.context.result.getContent();
+ return wrc.result.getContent();
}
public String getProperty(String name)
Modified: trunk/theme/src/main/org/jboss/portal/theme/page/Region.java
===================================================================
--- trunk/theme/src/main/org/jboss/portal/theme/page/Region.java 2007-04-04 12:25:59 UTC
(rev 6916)
+++ trunk/theme/src/main/org/jboss/portal/theme/page/Region.java 2007-04-04 16:14:41 UTC
(rev 6917)
@@ -23,7 +23,6 @@
package org.jboss.portal.theme.page;
import org.jboss.portal.theme.render.RegionRenderContext;
-import org.jboss.portal.theme.render.WindowRenderContext;
import org.jboss.portal.theme.Orientation;
import java.util.ArrayList;
@@ -32,7 +31,6 @@
import java.util.List;
import java.util.Map;
import java.util.Collection;
-import java.util.Iterator;
/**
* A region on a page. <p>A region wraps one or more portlets to allow them to act
as one unit inside the layout of a
@@ -146,14 +144,7 @@
public Collection getWindows()
{
- ArrayList wrcs = new ArrayList(windows.size());
- for (Iterator i = windows.iterator(); i.hasNext();)
- {
- WindowContext wc = (WindowContext)i.next();
- WindowRenderContext wrc = new WindowRenderContextImpl(this, wc);
- wrcs.add(wrc);
- }
- return wrcs;
+ return windows;
}
public Orientation getOrientation()
Modified: trunk/theme/src/main/org/jboss/portal/theme/page/WindowContext.java
===================================================================
--- trunk/theme/src/main/org/jboss/portal/theme/page/WindowContext.java 2007-04-04
12:25:59 UTC (rev 6916)
+++ trunk/theme/src/main/org/jboss/portal/theme/page/WindowContext.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -22,6 +22,12 @@
******************************************************************************/
package org.jboss.portal.theme.page;
+import org.jboss.portal.theme.render.WindowRenderContext;
+import org.jboss.portal.theme.render.DecorationRenderContext;
+import org.jboss.portal.theme.render.PortletRenderContext;
+import org.jboss.portal.WindowState;
+import org.jboss.portal.Mode;
+
import java.io.Serializable;
/**
@@ -33,7 +39,7 @@
* @author <a href="mailto:mholzner@novell.com">Martin Holzner</a>
* @version $Revision$
*/
-public final class WindowContext implements Comparable, Serializable
+public final class WindowContext implements Comparable, Serializable,
WindowRenderContext
{
/** The serialVersionUID */
@@ -45,6 +51,12 @@
/** . */
private final String name;
+ /** . */
+ private final DecorationRenderContextImpl decoration = new
DecorationRenderContextImpl(this);
+
+ /** . */
+ private final PortletRenderContextImpl portlet = new PortletRenderContextImpl(this);
+
// Mutable properties
/** . */
@@ -70,26 +82,51 @@
return name;
}
- public Object getId()
+ public String getId()
{
return id;
}
+ public int getOrder()
+ {
+ return order;
+ }
+
public String getRegionName()
{
return regionName;
}
- public void setRegionName(String regionName)
+ public WindowState getWindowState()
{
- this.regionName = regionName;
+ return result.getWindowState();
}
- public int getOrder()
+ public Mode getMode()
{
- return order;
+ return result.getMode();
}
+ public DecorationRenderContext getDecoration()
+ {
+ return decoration;
+ }
+
+ public PortletRenderContext getPortlet()
+ {
+ return portlet;
+ }
+
+ public String getProperty(String name)
+ {
+ return (String)result.getWindowProperties().get(name);
+ }
+
+ public void setRegionName(String regionName)
+ {
+ this.regionName = regionName;
+ }
+
public void setOrder(int order)
{
this.order = order;
Deleted: trunk/theme/src/main/org/jboss/portal/theme/page/WindowRenderContextImpl.java
===================================================================
---
trunk/theme/src/main/org/jboss/portal/theme/page/WindowRenderContextImpl.java 2007-04-04
12:25:59 UTC (rev 6916)
+++
trunk/theme/src/main/org/jboss/portal/theme/page/WindowRenderContextImpl.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -1,83 +0,0 @@
-/******************************************************************************
- * 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.theme.page;
-
-import org.jboss.portal.theme.render.WindowRenderContext;
-import org.jboss.portal.theme.render.DecorationRenderContext;
-import org.jboss.portal.theme.render.PortletRenderContext;
-import org.jboss.portal.WindowState;
-import org.jboss.portal.Mode;
-
-/**
- * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
- * @version $Revision: 1.1 $
- */
-public class WindowRenderContextImpl implements WindowRenderContext
-{
-
- final Region region;
- final WindowContext context;
- private final DecorationRenderContextImpl drc = new
DecorationRenderContextImpl(this);
- private final PortletRenderContextImpl prc = new PortletRenderContextImpl(this);
-
- public WindowRenderContextImpl(Region region, WindowContext context)
- {
- this.region = region;
- this.context = context;
- }
-
- public String getId()
- {
- return context.getId().toString();
- }
-
- public int getOrder()
- {
- return context.getOrder();
- }
-
- public WindowState getWindowState()
- {
- return context.result.getWindowState();
- }
-
- public Mode getMode()
- {
- return context.result.getMode();
- }
-
- public DecorationRenderContext getDecoration()
- {
- return drc;
- }
-
- public PortletRenderContext getPortlet()
- {
- return prc;
- }
-
- public String getProperty(String name)
- {
- return (String)context.result.getWindowProperties().get(name);
- }
-}
Modified: trunk/theme/src/main/org/jboss/portal/theme/render/PageRenderContext.java
===================================================================
--- trunk/theme/src/main/org/jboss/portal/theme/render/PageRenderContext.java 2007-04-04
12:25:59 UTC (rev 6916)
+++ trunk/theme/src/main/org/jboss/portal/theme/render/PageRenderContext.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -33,4 +33,6 @@
Collection getRegions();
RegionRenderContext getRegion(String regionName);
+
+ WindowRenderContext getWindow(String windowId);
}
Modified: trunk/theme/src/main/org/jboss/portal/theme/render/RenderContext.java
===================================================================
--- trunk/theme/src/main/org/jboss/portal/theme/render/RenderContext.java 2007-04-04
12:25:59 UTC (rev 6916)
+++ trunk/theme/src/main/org/jboss/portal/theme/render/RenderContext.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -24,9 +24,7 @@
import org.jboss.portal.common.util.MediaType;
import org.jboss.portal.common.util.MarkupInfo;
-import org.jboss.portal.theme.LayoutInfo;
-import org.jboss.portal.theme.PortalLayout;
-import org.jboss.portal.theme.ThemeConstants;
+import org.jboss.portal.server.ServerInvocation;
import java.util.ArrayList;
import java.util.Map;
@@ -44,15 +42,13 @@
{
/** . */
- private PortalRenderSet renderSet;
+// private PortalRenderSet renderSet;
+ private RendererFactory rendererFactory;
/** . */
- private PageRenderContext pageRenderContext;
+ private ServerInvocation serverInvocation;
/** . */
- private PortalLayout layout;
-
- /** . */
private StringBuffer markup;
/** . */
@@ -67,49 +63,36 @@
/**
* Create a new render context for the provided result. <p>The result contains
information about the markup container
* (page, region , window context) to render.</p>
- *
- * @param layout the layout that is used for this render context
- * @param markupInfo information about the content type and encoding to use when
writing the response
- * @param pageRenderContext the rendered result(s) from the portlet container
(PageResult, RegionResult, WindowResult)
*/
- public RenderContext(PortalLayout layout, MarkupInfo markupInfo, PageRenderContext
pageRenderContext)
+ public RenderContext(
+ RendererFactory rendererFactory,
+ ServerInvocation serverInvocation,
+ MarkupInfo markupInfo)
{
- if (layout == null)
+ if (rendererFactory == null)
{
- throw new IllegalArgumentException("no layout provided");
+ throw new IllegalArgumentException("no renderer factory provided");
}
+ if (serverInvocation == null)
+ {
+ throw new IllegalArgumentException("no server invocation provided");
+ }
if (markupInfo == null)
{
throw new IllegalArgumentException("no stream info provided");
}
- if (pageRenderContext == null)
- {
- throw new IllegalArgumentException("no result provided");
- }
- // Find a valid render set
- String renderSetName =
pageRenderContext.getProperty(ThemeConstants.PORTAL_PROP_RENDERSET);
- if (renderSetName == null)
- {
- throw new IllegalArgumentException("No RenderSet determined");
- }
- PortalRenderSet renderSet =
layout.getServiceInfo().getRenderSet(layout.getLayoutInfo(), markupInfo, renderSetName);
- if (renderSet == null)
- {
- throw new IllegalArgumentException("No RenderSet determined for " +
renderSetName);
- }
-
- //
- this.renderSet = renderSet;
- this.layout = layout;
- this.pageRenderContext = pageRenderContext;
+ this.rendererFactory = rendererFactory;
+ this.serverInvocation = serverInvocation;
this.markupInfo = markupInfo;
this.stack = new ArrayList(6);
this.markup = new StringBuffer();
this.attributes = new HashMap();
+ }
- //
- this.stack.add(this.pageRenderContext);
+ public ServerInvocation getServerInvocation()
+ {
+ return serverInvocation;
}
public StringBuffer getMarkupFragment()
@@ -117,6 +100,11 @@
return markup;
}
+ public MarkupInfo getMarkupInfo()
+ {
+ return markupInfo;
+ }
+
public MediaType getContentType()
{
return markupInfo.getContentType();
@@ -127,11 +115,6 @@
return markupInfo.getCharset();
}
- public LayoutInfo getLayoutInfo()
- {
- return layout.getLayoutInfo();
- }
-
public Object getAttribute(String attrName)
{
if (attrName == null)
@@ -171,154 +154,39 @@
return null;
}
- public RegionRenderer getRegionRenderer(RegionRenderContext result)
+ public void pushObjectRenderContext(ObjectRenderContext ctx)
{
- return renderSet.getRegionRenderer();
+ stack.add(ctx);
}
- /**
- * Get the window renderer for the provided window. <p>The window result can
optionally contain a window property
- * that points to a render set to use when getting the window renderer. If no window
property was provided, then the
- * default render set of this context will be used.</p>
- *
- * @param result the window result possibly containing the window property that
specifies an alternative render set
- * name for the window renderer to use
- * @return a window renderer
- */
- public WindowRenderer getWindowRenderer(WindowRenderContext result)
+ public ObjectRenderContext popObjectRenderContext()
{
- String renderSetName = null;
- if (result != null)
- {
- renderSetName = result.getProperty(ThemeConstants.PORTAL_PROP_WINDOW_RENDERER);
- }
-
- //
- if (result != null && renderSetName == null)
- {
- renderSetName = getProperty(ThemeConstants.PORTAL_PROP_WINDOW_RENDERER);
- }
-
- //
- if (renderSetName != null)
- {
- PortalRenderSet renderSet = layout.getServiceInfo().getRenderSet(renderSetName,
markupInfo.getContentType());
-
- //
- if (renderSet != null)
- {
- return renderSet.getWindowRenderer();
- }
- }
-
- //
- return renderSet.getWindowRenderer();
+ return (ObjectRenderContext)stack.remove(stack.size() - 1);
}
- /**
- * Get the decoration renderer for the window that the provided window result is
associated with. <p>If the window
- * result contains a window property that points to a render set, that render set will
be used to determine the
- * decoration renderer. Otherwise, the render set that was determined for this context
will be used.</p>
- *
- * @param result the window result possibly containing the window property that
specifies an alternative render set
- * name for the decoration renderer to use
- * @return a decoration renderer
- */
- public DecorationRenderer getDecorationRenderer(DecorationRenderContext result)
- {
- String renderSetName = null;
-
- if (result != null)
- {
- renderSetName =
result.getProperty(ThemeConstants.PORTAL_PROP_DECORATION_RENDERER);
- }
-
- //
- if (result != null && renderSetName == null)
- {
- renderSetName = getProperty(ThemeConstants.PORTAL_PROP_DECORATION_RENDERER);
- }
-
- //
- if (renderSetName != null)
- {
- PortalRenderSet renderSet = layout.getServiceInfo().getRenderSet(renderSetName,
markupInfo.getContentType());
-
- //
- if (renderSet != null)
- {
- return renderSet.getDecorationRenderer();
- }
- }
-
- //
- return renderSet.getDecorationRenderer();
- }
-
- /**
- * Get the portlet renderer for the render set defined in the window properties that
were provided. <p>If the
- * provided window result doesn't contain any window property that defines a
render set name, the default render set
- * that was determined for this context will be used to get the portlet
renderer.</p>
- *
- * @param result the window result containing the window properties to introspect for
a render set name to get the
- * portlet renderer from
- * @return a portlet renderer
- */
- public PortletRenderer getPortletRenderer(PortletRenderContext result)
- {
- String renderSetName = null;
-
- //
- if (result != null)
- {
- renderSetName =
result.getProperty(ThemeConstants.PORTAL_PROP_PORTLET_RENDERER);
- }
-
- //
- if (result != null && renderSetName == null)
- {
- renderSetName = getProperty(ThemeConstants.PORTAL_PROP_PORTLET_RENDERER);
- }
-
- //
- if (renderSetName != null)
- {
- PortalRenderSet renderSet = layout.getServiceInfo().getRenderSet(renderSetName,
markupInfo.getContentType());
-
- //
- if (renderSet != null)
- {
- return renderSet.getPortletRenderer();
- }
- }
-
- //
- return renderSet.getPortletRenderer();
- }
-
- public void render() throws RenderException
- {
- render(pageRenderContext);
- }
-
-
public void render(ObjectRenderContext ctx) throws RenderException
{
- stack.add(ctx);
+ pushObjectRenderContext(ctx);
//
try
{
+ if (ctx instanceof PageRenderContext)
+ {
+ PageRenderContext prc = (PageRenderContext)ctx;
+ PageRenderer renderer = (PageRenderer)rendererFactory.getRenderer(this,
prc);
+ renderer.render(this, prc);
+ }
if (ctx instanceof WindowRenderContext)
{
WindowRenderContext wrc = (WindowRenderContext)ctx;
- WindowRenderer renderer = getWindowRenderer(wrc);
+ WindowRenderer renderer = (WindowRenderer)rendererFactory.getRenderer(this,
wrc);
renderer.render(this, wrc);
}
else if (ctx instanceof RegionRenderContext)
{
RegionRenderContext rrc = (RegionRenderContext)ctx;
- RegionRenderer renderer = getRegionRenderer(rrc);
+ RegionRenderer renderer = (RegionRenderer)rendererFactory.getRenderer(this,
rrc);
//
renderer.renderHeader(this, rrc);
@@ -328,13 +196,13 @@
else if (ctx instanceof PortletRenderContext)
{
PortletRenderContext prc = (PortletRenderContext)ctx;
- PortletRenderer renderer = getPortletRenderer(prc);
+ PortletRenderer renderer = (PortletRenderer)rendererFactory.getRenderer(this,
prc);
renderer.render(this, prc);
}
else if (ctx instanceof DecorationRenderContext)
{
DecorationRenderContext drc = (DecorationRenderContext)ctx;
- DecorationRenderer renderer = getDecorationRenderer(drc);
+ DecorationRenderer renderer =
(DecorationRenderer)rendererFactory.getRenderer(this, drc);
//
renderer.render(this, drc);
@@ -342,7 +210,7 @@
}
finally
{
- stack.remove(stack.size() - 1);
+ popObjectRenderContext();
}
}
}
\ No newline at end of file
Added: trunk/theme/src/main/org/jboss/portal/theme/render/RendererFactory.java
===================================================================
--- trunk/theme/src/main/org/jboss/portal/theme/render/RendererFactory.java
(rev 0)
+++ trunk/theme/src/main/org/jboss/portal/theme/render/RendererFactory.java 2007-04-04
16:14:41 UTC (rev 6917)
@@ -0,0 +1,34 @@
+/******************************************************************************
+ * 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.theme.render;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 1.1 $
+ */
+public interface RendererFactory
+{
+
+ ObjectRenderer getRenderer(RenderContext renderContext, ObjectRenderContext
objectRenderContext);
+
+}