cziegeler    2004/04/28 06:58:16

  Modified:    src/blocks/portal/java/org/apache/cocoon/portal/layout/impl
                        DefaultLayoutFactory.java
               src/blocks/portal/java/org/apache/cocoon/portal/source
                        CopletSourceFactory.java
               src/blocks/portal/java/org/apache/cocoon/portal/profile/impl
                        AbstractProfileManager.java
               
src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl
                        CIncludeCopletAspect.java
               src/blocks/portal/java/org/apache/cocoon/portal/generation
                        PortalGenerator.java
               src/blocks/portal/java/org/apache/cocoon/portal/impl
                        DefaultLinkService.java
  Log:
  Fixing NPE when a full screen coplet is removed (bug 28655) reported by 
[EMAIL PROTECTED] (roy huang)
  
  Revision  Changes    Path
  1.18      +16 -6     
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java
  
  Index: DefaultLayoutFactory.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- DefaultLayoutFactory.java 28 Apr 2004 11:53:09 -0000      1.17
  +++ DefaultLayoutFactory.java 28 Apr 2004 13:58:16 -0000      1.18
  @@ -48,6 +48,7 @@
   import org.apache.cocoon.portal.event.Filter;
   import org.apache.cocoon.portal.event.LayoutEvent;
   import org.apache.cocoon.portal.event.Subscriber;
  +import org.apache.cocoon.portal.event.impl.FullScreenCopletEvent;
   import org.apache.cocoon.portal.event.impl.LayoutRemoveEvent;
   import org.apache.cocoon.portal.layout.CompositeLayout;
   import org.apache.cocoon.portal.layout.Item;
  @@ -395,6 +396,9 @@
           }
       }
   
  +    /* (non-Javadoc)
  +     * @see 
org.apache.cocoon.portal.layout.LayoutFactory#remove(org.apache.cocoon.portal.layout.Layout)
  +     */
       public void remove(Layout layout) 
       throws ProcessingException {
           if ( layout != null ) {
  @@ -411,21 +415,27 @@
               }
               
               PortalService service = null;
  +            EventManager eventManager = null;
               try {
  -                service = 
(PortalService)this.manager.lookup(PortalService.ROLE);
  +                service = 
(PortalService)this.manager.lookup(PortalService.ROLE);                
  +                ProfileManager profileManager = 
service.getComponentManager().getProfileManager();
                   if ( layout instanceof CopletLayout ) {
  +                    // full screen?
  +                    if ( layout.equals(profileManager.getEntryLayout()) ) {
  +                        Event event = new 
FullScreenCopletEvent(((CopletLayout)layout).getCopletInstanceData(), null);
  +                        eventManager = 
(EventManager)this.manager.lookup(EventManager.ROLE);
  +                        eventManager.getPublisher().publish(event);
  +                        
service.getComponentManager().getLinkService().addEventToLink(event);
  +                    }
                       CopletFactory factory = 
service.getComponentManager().getCopletFactory();
                       factory.remove( 
((CopletLayout)layout).getCopletInstanceData());
                   }
  -                ProfileManager profileManager = 
service.getComponentManager().getProfileManager();
  -                if ( layout.equals(profileManager.getEntryLayout()) ) {
  -                    profileManager.setEntryLayout(null);
  -                }
                   profileManager.unregister(layout);
               } catch (ServiceException ce) {
                   throw new ProcessingException("Unable to lookup portal 
service.", ce);
               } finally {
                   this.manager.release( service );
  +                this.manager.release(eventManager);
               }
           }
       }
  
  
  
  1.8       +5 -3      
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/source/CopletSourceFactory.java
  
  Index: CopletSourceFactory.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/source/CopletSourceFactory.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- CopletSourceFactory.java  19 Apr 2004 14:47:31 -0000      1.7
  +++ CopletSourceFactory.java  28 Apr 2004 13:58:16 -0000      1.8
  @@ -78,10 +78,12 @@
               location = location.substring(position+2);
           }
           PortalService service = null;
  -        CopletInstanceData coplet = null;
           try {
               service = (PortalService)this.manager.lookup(PortalService.ROLE);
  -            coplet = 
service.getComponentManager().getProfileManager().getCopletInstanceData(location);
  +            CopletInstanceData coplet = 
service.getComponentManager().getProfileManager().getCopletInstanceData(location);
  +            if ( coplet == null ) {
  +                throw new IOException("Unable to get coplet for " + 
location);
  +            }
               CopletSource copletSource =
                   new CopletSource(uri, protocol,
                                    coplet);
  
  
  
  1.7       +6 -2      
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/AbstractProfileManager.java
  
  Index: AbstractProfileManager.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/profile/impl/AbstractProfileManager.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- AbstractProfileManager.java       5 Mar 2004 13:02:16 -0000       1.6
  +++ AbstractProfileManager.java       28 Apr 2004 13:58:16 -0000      1.7
  @@ -179,7 +179,11 @@
           PortalService service = null;
           try {
               service = (PortalService) 
this.manager.lookup(PortalService.ROLE);
  -            service.setTemporaryAttribute("DEFAULT_LAYOUT:" + layoutKey, 
object);
  +            if ( object == null ) {
  +                service.removeTemporaryAttribute("DEFAULT_LAYOUT:" + 
layoutKey);
  +            } else {
  +                service.setTemporaryAttribute("DEFAULT_LAYOUT:" + layoutKey, 
object);
  +            }
           } catch (ServiceException e) {
               throw new CascadingRuntimeException("Unable to lookup service 
manager.", e);
           } finally {
  
  
  
  1.6       +1 -2      
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/CIncludeCopletAspect.java
  
  Index: CIncludeCopletAspect.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/CIncludeCopletAspect.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- CIncludeCopletAspect.java 25 Apr 2004 20:09:34 -0000      1.5
  +++ CIncludeCopletAspect.java 28 Apr 2004 13:58:16 -0000      1.6
  @@ -58,7 +58,6 @@
                                PortalService service,
                                ContentHandler handler)
        throws SAXException {
  -
           CopletInstanceData cid = 
((CopletLayout)layout).getCopletInstanceData();
           
           XMLUtils.startElement(handler, "content");
  
  
  
  1.8       +1 -2      
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/generation/PortalGenerator.java
  
  Index: PortalGenerator.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/generation/PortalGenerator.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- PortalGenerator.java      14 Apr 2004 18:25:11 -0000      1.7
  +++ PortalGenerator.java      28 Apr 2004 13:58:16 -0000      1.8
  @@ -49,7 +49,6 @@
         */
        public void generate()
       throws IOException, SAXException, ProcessingException {
  -        
           // start the portal rendering
           // 1. event processing
           // 2. rendering
  
  
  
  1.13      +2 -2      
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/impl/DefaultLinkService.java
  
  Index: DefaultLinkService.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/impl/DefaultLinkService.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- DefaultLinkService.java   5 Mar 2004 13:02:13 -0000       1.12
  +++ DefaultLinkService.java   28 Apr 2004 13:58:16 -0000      1.13
  @@ -224,7 +224,7 @@
                   Object[] objects = (Object[])iter.next();
                   if ( 
((ComparableEvent)objects[0]).equalsEvent((ComparableEvent)event) ) {
                       found = true;
  -                    info.comparableEvents.remove(objects[0]);
  +                    info.comparableEvents.remove(objects);
                   }
               }
               info.comparableEvents.add( new Object[] {event, parameterName, 
value} );
  
  
  

Reply via email to