You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2003/12/10 15:04:15 UTC

cvs commit: cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/event/impl DefaultEventManager.java

cziegeler    2003/12/10 06:04:15

  Modified:    src/blocks/portal/conf portal.xconf
               src/blocks/portal/java/org/apache/cocoon/portal/event/subscriber/impl
                        DefaultChangeAspectDataEventSubscriber.java
               src/blocks/portal/java/org/apache/cocoon/portal/event/impl
                        DefaultEventManager.java
  Log:
  Making the event manager configurable
  
  Revision  Changes    Path
  1.27      +8 -0      cocoon-2.1/src/blocks/portal/conf/portal.xconf
  
  Index: portal.xconf
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/conf/portal.xconf,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- portal.xconf	8 Dec 2003 15:56:26 -0000	1.26
  +++ portal.xconf	10 Dec 2003 14:04:15 -0000	1.27
  @@ -18,6 +18,14 @@
           <aspect type="full-screen-coplet"/>
           <aspect type="request-parameter"/>
       </event-aspects>
  +    <!-- add a new instance of each class as a subscriber: -->
  +    <subscriber-classes>
  +        <class name="org.apache.cocoon.portal.event.subscriber.impl.DefaultChangeAspectDataEventSubscriber"/>
  +    </subscriber-classes>
  +    <!-- add each component as a subscriber (the component should be thread safe): -->
  +    <subscriber-roles>
  +        <!-- <role name="AVALON-ROLE"/> -->
  +    </subscriber-roles>
    </component>
   
    <component class="org.apache.cocoon.portal.impl.PortalManagerImpl" logger="portal" role="org.apache.cocoon.portal.PortalManager"/>
  
  
  
  1.5       +2 -3      cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/event/subscriber/impl/DefaultChangeAspectDataEventSubscriber.java
  
  Index: DefaultChangeAspectDataEventSubscriber.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/event/subscriber/impl/DefaultChangeAspectDataEventSubscriber.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DefaultChangeAspectDataEventSubscriber.java	20 Oct 2003 13:36:42 -0000	1.4
  +++ DefaultChangeAspectDataEventSubscriber.java	10 Dec 2003 14:04:15 -0000	1.5
  @@ -50,7 +50,6 @@
   */
   package org.apache.cocoon.portal.event.subscriber.impl;
   
  -import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.cocoon.portal.aspect.Aspectalizable;
   import org.apache.cocoon.portal.event.Event;
   import org.apache.cocoon.portal.event.Filter;
  @@ -66,7 +65,7 @@
   public final class DefaultChangeAspectDataEventSubscriber 
       implements Subscriber {
   
  -    public DefaultChangeAspectDataEventSubscriber(ServiceManager manager) {
  +    public DefaultChangeAspectDataEventSubscriber() {
       }
   
       /* (non-Javadoc)
  
  
  
  1.11      +40 -3     cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/event/impl/DefaultEventManager.java
  
  Index: DefaultEventManager.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/event/impl/DefaultEventManager.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- DefaultEventManager.java	20 Oct 2003 13:36:42 -0000	1.10
  +++ DefaultEventManager.java	10 Dec 2003 14:04:15 -0000	1.11
  @@ -60,6 +60,7 @@
   import org.apache.avalon.framework.configuration.Configurable;
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
  +import org.apache.avalon.framework.container.ContainerUtil;
   import org.apache.avalon.framework.context.Context;
   import org.apache.avalon.framework.context.ContextException;
   import org.apache.avalon.framework.context.Contextualizable;
  @@ -80,6 +81,7 @@
   import org.apache.cocoon.portal.event.Subscriber;
   import org.apache.cocoon.portal.event.aspect.EventAspect;
   import org.apache.cocoon.portal.event.subscriber.impl.DefaultChangeAspectDataEventSubscriber;
  +import org.apache.cocoon.util.ClassUtils;
   
   /**
    *
  @@ -159,8 +161,43 @@
               this.getLogger().debug("Initialising eventClass " + eventClass);
           }
   
  -        // FIXME (CZ,HIGH) : Make this configurable
  -        this.subscribe(new DefaultChangeAspectDataEventSubscriber(this.manager));
  +        // FIXME - the following configuration is not portal specific, it's global!
  +        // subscribe all configured roles
  +        Configuration roles = this.configuration.getChild("subscriber-roles", false);
  +        if ( roles != null ) {
  +            Configuration[] rolesConf = roles.getChildren("role");
  +            if ( rolesConf != null ) {
  +                for(int i=0; i<rolesConf.length;i++) {
  +                    final Configuration current = rolesConf[i];
  +                    final String name = current.getAttribute("name");
  +                    
  +                    Subscriber subscriber = null;
  +                    try {
  +                        subscriber = (Subscriber) this.manager.lookup(name);
  +                        this.subscribe(subscriber);
  +                    } finally {
  +                        this.manager.release(subscriber);
  +                    }
  +                }
  +            }
  +        }
  +        // subscribe all configured classes
  +        Configuration classes = this.configuration.getChild("subscriber-classes", false);
  +        if ( classes != null ) {
  +            Configuration[] classesConf = classes.getChildren("class");
  +            if ( classesConf != null ) {
  +                for(int i=0; i<classesConf.length;i++) {
  +                    final Configuration current = classesConf[i];
  +                    final String name = current.getAttribute("name");
  +                    
  +                    Subscriber subscriber = (Subscriber) ClassUtils.newInstance(name);
  +                    ContainerUtil.enableLogging(subscriber, this.getLogger());
  +                    ContainerUtil.service(subscriber, this.manager );
  +                    ContainerUtil.initialize(subscriber);
  +                    this.subscribe(subscriber);
  +                }
  +            }
  +        }
       }
   
       public void publish( final Event event ) {