cziegeler    2004/02/02 00:39:37

  Modified:    src/blocks/portal/java/org/apache/cocoon/portal/pluto/factory
                        PortletInvokerFactoryImpl.java
                        LocalPortletInvokerImpl.java
  Log:
  Implement destroy() of local portlets
  
  Revision  Changes    Path
  1.3       +27 -2     
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/pluto/factory/PortletInvokerFactoryImpl.java
  
  Index: PortletInvokerFactoryImpl.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/pluto/factory/PortletInvokerFactoryImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PortletInvokerFactoryImpl.java    27 Jan 2004 09:56:37 -0000      1.2
  +++ PortletInvokerFactoryImpl.java    2 Feb 2004 08:39:37 -0000       1.3
  @@ -45,6 +45,12 @@
   */
   package org.apache.cocoon.portal.pluto.factory;
   
  +import java.util.ArrayList;
  +import java.util.Collections;
  +import java.util.Iterator;
  +import java.util.List;
  +
  +import org.apache.avalon.framework.activity.Disposable;
   import org.apache.avalon.framework.container.ContainerUtil;
   import org.apache.avalon.framework.context.Context;
   import org.apache.avalon.framework.context.ContextException;
  @@ -52,6 +58,7 @@
   import org.apache.avalon.framework.service.ServiceException;
   import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.avalon.framework.service.Serviceable;
  +import org.apache.avalon.framework.thread.ThreadSafe;
   import org.apache.cocoon.portal.pluto.om.PortletDefinitionImpl;
   import org.apache.pluto.factory.PortletInvokerFactory;
   import org.apache.pluto.invoker.PortletInvoker;
  @@ -67,7 +74,7 @@
    */
   public class PortletInvokerFactoryImpl 
   extends AbstractFactory
  -implements PortletInvokerFactory, Serviceable, Contextualizable {
  +implements PortletInvokerFactory, Serviceable, Contextualizable, ThreadSafe, 
Disposable {
   
       /** The avalon context */
       protected Context context;
  @@ -75,6 +82,9 @@
       /** The service manager */
       protected ServiceManager manager;
       
  +    /** All local portlets */
  +    protected List localPortlets = Collections.synchronizedList(new 
ArrayList());
  +    
       /* (non-Javadoc)
        * @see 
org.apache.avalon.framework.context.Contextualizable#contextualize(org.apache.avalon.framework.context.Context)
        */
  @@ -90,6 +100,20 @@
       }
   
       /* (non-Javadoc)
  +     * @see org.apache.avalon.framework.activity.Disposable#dispose()
  +     */
  +    public void dispose() {
  +        final Iterator i = this.localPortlets.iterator();
  +        while (i.hasNext()) {
  +            LocalPortletInvokerImpl current = 
(LocalPortletInvokerImpl)i.next();
  +            current.destroy();
  +        }
  +        this.localPortlets.clear();
  +        this.manager = null;
  +        this.context = null;
  +    }
  +
  +    /* (non-Javadoc)
        * @see 
org.apache.pluto.factory.PortletInvokerFactory#getPortletInvoker(org.apache.pluto.om.portlet.PortletDefinition)
        */
       public PortletInvoker getPortletInvoker(PortletDefinition 
portletDefinition) {
  @@ -103,6 +127,7 @@
               invoker = 
((PortletDefinitionImpl)portletDefinition).getLocalPortletInvoker();
               if ( invoker == null ) {
                   invoker = new LocalPortletInvokerImpl(portletDefinition, 
this.servletConfig);
  +                this.localPortlets.add(invoker);
                   
((PortletDefinitionImpl)portletDefinition).setLocalPortletInvoker(invoker);
                   try {
                       ContainerUtil.enableLogging(invoker, this.getLogger());
  
  
  
  1.3       +10 -1     
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/pluto/factory/LocalPortletInvokerImpl.java
  
  Index: LocalPortletInvokerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/pluto/factory/LocalPortletInvokerImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- LocalPortletInvokerImpl.java      27 Jan 2004 09:56:38 -0000      1.2
  +++ LocalPortletInvokerImpl.java      2 Feb 2004 08:39:37 -0000       1.3
  @@ -188,4 +188,13 @@
           this.portlet.init(portletConfig);
       }
   
  +    /**
  +     * Destroy the associated portlet
  +     */
  +    public void destroy() {
  +        if (this.portlet != null ) {
  +            this.portlet.destroy();
  +            this.portlet = null;
  +        }
  +    }
   }
  
  
  

Reply via email to