cziegeler 2004/02/06 05:07:17
Modified: src/blocks/portal/java/org/apache/cocoon/portal/impl PortletPortalManager.java src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl PortletWindowAspect.java src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl PortletAdapter.java Log: No direct cast from a component to it's implementation - this will not work with Fortress :( Revision Changes Path 1.3 +10 -1 cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/impl/PortletPortalManager.java Index: PortletPortalManager.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/impl/PortletPortalManager.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- PortletPortalManager.java 23 Jan 2004 12:34:31 -0000 1.2 +++ PortletPortalManager.java 6 Feb 2004 13:07:17 -0000 1.3 @@ -66,6 +66,7 @@ import org.apache.cocoon.ProcessingException; import org.apache.cocoon.components.ContextHelper; import org.apache.cocoon.environment.http.HttpEnvironment; +import org.apache.cocoon.portal.PortalManager; import org.apache.cocoon.portal.event.Event; import org.apache.cocoon.portal.event.EventManager; import org.apache.cocoon.portal.event.Filter; @@ -116,6 +117,10 @@ */ public void contextualize(Context context) throws ContextException { this.servletConfig = (ServletConfig) context.get(CocoonServlet.CONTEXT_SERVLET_CONFIG); + // we have to somehow pass this component down to other components! + // This is ugly, but it's the only chance for sofisticated component containers + // that wrap component implementations! + this.servletConfig.getServletContext().setAttribute(PortalManager.ROLE, this); this.context = context; } @@ -146,6 +151,10 @@ this.portletContainerEnvironment = null; } catch (Throwable t) { this.getLogger().error("Destruction failed!", t); + } + if ( this.servletConfig != null ) { + this.servletConfig.getServletContext().removeAttribute(PortalManager.ROLE); + this.servletConfig = null; } } 1.2 +26 -16 cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/PortletWindowAspect.java Index: PortletWindowAspect.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/PortletWindowAspect.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- PortletWindowAspect.java 22 Jan 2004 14:01:22 -0000 1.1 +++ PortletWindowAspect.java 6 Feb 2004 13:07:17 -0000 1.2 @@ -52,11 +52,14 @@ import javax.portlet.PortletMode; import javax.portlet.WindowState; +import javax.servlet.ServletConfig; import javax.servlet.http.HttpServletRequest; +import org.apache.avalon.framework.context.Context; +import org.apache.avalon.framework.context.ContextException; +import org.apache.avalon.framework.context.Contextualizable; import org.apache.avalon.framework.parameters.ParameterException; import org.apache.avalon.framework.parameters.Parameters; -import org.apache.avalon.framework.service.ServiceException; import org.apache.cocoon.portal.PortalManager; import org.apache.cocoon.portal.PortalService; import org.apache.cocoon.portal.coplet.CopletInstanceData; @@ -69,6 +72,7 @@ import org.apache.cocoon.portal.layout.impl.CopletLayout; import org.apache.cocoon.portal.layout.renderer.aspect.RendererAspectContext; import org.apache.cocoon.portal.pluto.PortletURLProviderImpl; +import org.apache.cocoon.servlet.CocoonServlet; import org.apache.cocoon.xml.XMLUtils; import org.apache.pluto.om.portlet.PortletDefinition; import org.apache.pluto.om.window.PortletWindow; @@ -85,7 +89,24 @@ * * @version CVS $Id$ */ -public final class PortletWindowAspect extends AbstractAspect { +public final class PortletWindowAspect +extends AbstractAspect +implements Contextualizable { + + /** The environment */ + protected PortletContainerEnvironment environment; + + /* (non-Javadoc) + * @see org.apache.avalon.framework.context.Contextualizable#contextualize(org.apache.avalon.framework.context.Context) + */ + public void contextualize(Context context) throws ContextException { + // now get the portal manager + ServletConfig servletConfig = (ServletConfig) context.get(CocoonServlet.CONTEXT_SERVLET_CONFIG); + PortletPortalManager portalManager = (PortletPortalManager) servletConfig.getServletContext().getAttribute(PortalManager.ROLE); + if ( portalManager != null ) { + this.environment = portalManager.getPortletContainerEnvironment(); + } + } /* (non-Javadoc) * @see org.apache.cocoon.portal.layout.renderer.RendererAspect#toSAX(org.apache.cocoon.portal.layout.renderer.RendererAspectContext, org.apache.cocoon.portal.layout.Layout, org.apache.cocoon.portal.PortalService, org.xml.sax.ContentHandler) @@ -118,19 +139,8 @@ XMLUtils.createElement(contenthandler, "title", title); - PortletContainerEnvironment env = null; - PortletPortalManager portalManager = null; - try { - portalManager = (PortletPortalManager) this.manager.lookup(PortalManager.ROLE); - env = portalManager.getPortletContainerEnvironment(); - } catch (ServiceException ignore) { - // if this fails something is *really* wrong, so we ignore it - } finally { - this.manager.release(portalManager); - } - - if ( env != null ) { - InformationProviderService ips = (InformationProviderService) env.getContainerService(InformationProviderService.class); + if ( this.environment != null ) { + InformationProviderService ips = (InformationProviderService) this.environment.getContainerService(InformationProviderService.class); DynamicInformationProvider dip = ips.getDynamicProvider((HttpServletRequest) context.getObjectModel().get("portlet-request")); Event event; 1.4 +9 -18 cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/PortletAdapter.java Index: PortletAdapter.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/coplet/adapter/impl/PortletAdapter.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- PortletAdapter.java 27 Jan 2004 08:05:34 -0000 1.3 +++ PortletAdapter.java 6 Feb 2004 13:07:17 -0000 1.4 @@ -47,14 +47,13 @@ import java.util.Map; +import javax.servlet.ServletConfig; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.avalon.framework.context.Context; import org.apache.avalon.framework.context.ContextException; import org.apache.avalon.framework.context.Contextualizable; -import org.apache.avalon.framework.service.ServiceException; -import org.apache.avalon.framework.service.ServiceManager; import org.apache.cocoon.components.ContextHelper; import org.apache.cocoon.environment.http.HttpEnvironment; import org.apache.cocoon.portal.PortalManager; @@ -67,6 +66,7 @@ import org.apache.cocoon.portal.pluto.servlet.ServletRequestImpl; import org.apache.cocoon.portal.pluto.servlet.ServletResponseImpl; import org.apache.cocoon.portal.serialization.IncludingHTMLSerializer; +import org.apache.cocoon.servlet.CocoonServlet; import org.apache.cocoon.xml.AttributesImpl; import org.apache.pluto.PortletContainer; import org.apache.pluto.om.entity.PortletApplicationEntity; @@ -105,21 +105,12 @@ */ public void contextualize(Context context) throws ContextException { this.context = context; - } - - /* (non-Javadoc) - * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager) - */ - public void service(ServiceManager manager) throws ServiceException { - super.service(manager); - PortletPortalManager portalManager = null; - try { - portalManager = (PortletPortalManager) this.manager.lookup(PortalManager.ROLE); - this.portletContainer = portalManager.getPortletContainer(); - this.environment = portalManager.getPortletContainerEnvironment(); - } finally { - this.manager.release(portalManager); - } + // now get the portal manager + ServletConfig servletConfig = (ServletConfig) context.get(CocoonServlet.CONTEXT_SERVLET_CONFIG); + PortletPortalManager portalManager = (PortletPortalManager) servletConfig.getServletContext().getAttribute(PortalManager.ROLE); + + this.portletContainer = portalManager.getPortletContainer(); + this.environment = portalManager.getPortletContainerEnvironment(); } /* (non-Javadoc)