cziegeler    2003/08/21 05:44:18

  Added:       src/scratchpad/lib cornerstone-scheduler-api-20030821.jar
                        cornerstone-threads-impl-20030821.jar
                        excalibur-thread-1.1.1.jar
                        cornerstone-scheduler-impl-20030821.jar
                        cornerstone-threads-api-20030821.jar
               src/scratchpad/src/org/apache/cocoon/components/scheduler
                        TestTarget.java DefaultTimeScheduler.java
                        Scheduler.java readme.txt DefaultScheduler.java
                        DefaultThreadManager.java SchedulerAction.java
                        ConfigurableTarget.java
  Log:
  Simple configurable scheduler
  
  Revision  Changes    Path
  1.1                  
cocoon-2.1/src/scratchpad/lib/cornerstone-scheduler-api-20030821.jar
  
        <<Binary file>>
  
  
  1.1                  
cocoon-2.1/src/scratchpad/lib/cornerstone-threads-impl-20030821.jar
  
        <<Binary file>>
  
  
  1.1                  cocoon-2.1/src/scratchpad/lib/excalibur-thread-1.1.1.jar
  
        <<Binary file>>
  
  
  1.1                  
cocoon-2.1/src/scratchpad/lib/cornerstone-scheduler-impl-20030821.jar
  
        <<Binary file>>
  
  
  1.1                  
cocoon-2.1/src/scratchpad/lib/cornerstone-threads-api-20030821.jar
  
        <<Binary file>>
  
  
  1.1                  
cocoon-2.1/src/scratchpad/src/org/apache/cocoon/components/scheduler/TestTarget.java
  
  Index: TestTarget.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, are permitted provided that the following conditions are met:
  
   1. Redistributions of  source code must  retain the above copyright  notice,
      this list of conditions and the following disclaimer.
  
   2. Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
  
   3. The end-user documentation included with the redistribution, if any, must
      include  the following  acknowledgment:  "This product includes  software
      developed  by the  Apache Software Foundation  (http://www.apache.org/)."
      Alternately, this  acknowledgment may  appear in the software itself,  if
      and wherever such third-party acknowledgments normally appear.
  
   4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not  be
      used to  endorse or promote  products derived from  this software without
      prior written permission. For written permission, please contact
      [EMAIL PROTECTED]
  
   5. Products  derived from this software may not  be called "Apache", nor may
      "Apache" appear  in their name,  without prior written permission  of the
      Apache Software Foundation.
  
   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  
   This software  consists of voluntary contributions made  by many individuals
   on  behalf of the Apache Software  Foundation and was  originally created by
   Stefano Mazzocchi  <[EMAIL PROTECTED]>. For more  information on the Apache
   Software Foundation, please see <http://www.apache.org/>.
  
  */
  package org.apache.cocoon.components.scheduler;
  
  import java.util.Date;
  
  import org.apache.avalon.cornerstone.services.scheduler.Target;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  
  /**
   * A simple test target.
   * 
   * @since 2.1.1
   * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
   * @version CVS $Id: TestTarget.java,v 1.1 2003/08/21 12:44:18 cziegeler Exp $
   */
  public class TestTarget 
      extends AbstractLogEnabled
      implements Target {
      
      /* (non-Javadoc)
       * @see 
org.apache.avalon.cornerstone.services.scheduler.Target#targetTriggered(java.lang.String)
       */
      public void targetTriggered(String name) {
          System.out.println("Target " + name + " triggered at " + new Date());
      }
  
  }
  
  
  
  1.1                  
cocoon-2.1/src/scratchpad/src/org/apache/cocoon/components/scheduler/DefaultTimeScheduler.java
  
  Index: DefaultTimeScheduler.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, are permitted provided that the following conditions are met:
  
   1. Redistributions of  source code must  retain the above copyright  notice,
      this list of conditions and the following disclaimer.
  
   2. Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
  
   3. The end-user documentation included with the redistribution, if any, must
      include  the following  acknowledgment:  "This product includes  software
      developed  by the  Apache Software Foundation  (http://www.apache.org/)."
      Alternately, this  acknowledgment may  appear in the software itself,  if
      and wherever such third-party acknowledgments normally appear.
  
   4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not  be
      used to  endorse or promote  products derived from  this software without
      prior written permission. For written permission, please contact
      [EMAIL PROTECTED]
  
   5. Products  derived from this software may not  be called "Apache", nor may
      "Apache" appear  in their name,  without prior written permission  of the
      Apache Software Foundation.
  
   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  
   This software  consists of voluntary contributions made  by many individuals
   on  behalf of the Apache Software  Foundation and was  originally created by
   Stefano Mazzocchi  <[EMAIL PROTECTED]>. For more  information on the Apache
   Software Foundation, please see <http://www.apache.org/>.
  
  */
  package org.apache.cocoon.components.scheduler;
  
  import org.apache.avalon.framework.component.Component;
  import org.apache.avalon.framework.thread.ThreadSafe;
  
  /**
   * This makes the Time Scheduler usuable within ECM
   * 
   * @since 2.1.1
   * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
   * @version CVS $Id: DefaultTimeScheduler.java,v 1.1 2003/08/21 12:44:18 cziegeler 
Exp $
   */
  public class DefaultTimeScheduler 
      extends org.apache.avalon.cornerstone.blocks.scheduler.DefaultTimeScheduler    
      implements Component,
                 ThreadSafe {
  }
  
  
  
  1.1                  
cocoon-2.1/src/scratchpad/src/org/apache/cocoon/components/scheduler/Scheduler.java
  
  Index: Scheduler.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, are permitted provided that the following conditions are met:
  
   1. Redistributions of  source code must  retain the above copyright  notice,
      this list of conditions and the following disclaimer.
  
   2. Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
  
   3. The end-user documentation included with the redistribution, if any, must
      include  the following  acknowledgment:  "This product includes  software
      developed  by the  Apache Software Foundation  (http://www.apache.org/)."
      Alternately, this  acknowledgment may  appear in the software itself,  if
      and wherever such third-party acknowledgments normally appear.
  
   4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not  be
      used to  endorse or promote  products derived from  this software without
      prior written permission. For written permission, please contact
      [EMAIL PROTECTED]
  
   5. Products  derived from this software may not  be called "Apache", nor may
      "Apache" appear  in their name,  without prior written permission  of the
      Apache Software Foundation.
  
   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  
   This software  consists of voluntary contributions made  by many individuals
   on  behalf of the Apache Software  Foundation and was  originally created by
   Stefano Mazzocchi  <[EMAIL PROTECTED]>. For more  information on the Apache
   Software Foundation, please see <http://www.apache.org/>.
  
  */
  package org.apache.cocoon.components.scheduler;
  
  import java.util.Map;
  
  import org.apache.avalon.cornerstone.services.scheduler.TimeTrigger;
  import org.apache.avalon.framework.parameters.Parameters;
  
  /**
   * This component can either schedule tasks or directly call one.
   * 
   * @since 2.1.1
   * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
   * @version CVS $Id: Scheduler.java,v 1.1 2003/08/21 12:44:18 cziegeler Exp $
   */
  public interface Scheduler {
      
        String ROLE = Scheduler.class.getName();
  
      /**
       * Schedule a time based trigger.
       * Note that if a TimeTrigger already has same name then it is removed.
       *
       * @param name the name of the trigger
       * @param trigger the trigger
       * @param target the target
       */
      void addTriggeredTarget( String name, TimeTrigger trigger, String target );
  
      /**
       * Schedule a time based trigger.
       * Note that if a TimeTrigger already has same name then it is removed.
       *
       * @param name the name of the trigger
       * @param trigger the trigger
       * @param target the target
       * @param parameters optional parameters for the target
       * @param objects optional objects for the target
       */
      void addTriggeredTarget( String name, TimeTrigger trigger, String target,
                               Parameters parameters, Map objects );
  
      /**
       * Remove a scheduled trigger by name.
       *
       * @param name the name of the trigger
       */
      void removeTriggeredTarget( String name );
  
      /**
       * Force a trigger time to be recalculated.
       *
       * @param name the name of the trigger
       */
      void resetTriggeredTarget( String name );
        
      /**
         * Fire a target once
         */
        boolean fireTarget(String target); 
  
      /**
       * Fire a target once
       */
      boolean fireTarget(String target, Parameters parameters, Map objects); 
  }
  
  
  
  1.1                  
cocoon-2.1/src/scratchpad/src/org/apache/cocoon/components/scheduler/readme.txt
  
  Index: readme.txt
  ===================================================================
  This is a scheduling component based on the cornerstone scheduler.
  To get it running add these components to the cocoon.xconf:
  
  <!-- This is the cornerstone scheduler -->
  <component role="org.apache.avalon.cornerstone.services.scheduler.TimeScheduler" 
             class="org.apache.cocoon.components.scheduler.DefaultTimeScheduler"/>
  
  <!-- This is the cornerstone thread manager -->
  <component role="org.apache.avalon.cornerstone.services.threads.ThreadManager" 
             class="org.apache.cocoon.components.scheduler.DefaultThreadManager">
    <thread-group>
      <name>default</name>
    </thread-group>
  </component>
  
  <!-- This is an extended cocoon scheduler -->
  <component role="org.apache.cocoon.components.scheduler.Scheduler" 
             class="org.apache.cocoon.components.scheduler.DefaultScheduler">
      <triggers>
          <!-- This is a sample trigger -->
          <trigger name="test"
                   
target="org.apache.avalon.cornerstone.services.scheduler.Target/test">
              <timed type="periodic">
                  <period>480000</period> <!-- ms, e.g. 8 minutes --
              </timed>
          </trigger>
      </triggers>
  </component>
  
  <!-- This is a sample target, that is called as configured in the sample above -->
  <component role="org.apache.avalon.cornerstone.services.scheduler.Target/test" 
             class="org.apache.cocoon.components.scheduler.TestTarget"/>
  
  
  
  1.1                  
cocoon-2.1/src/scratchpad/src/org/apache/cocoon/components/scheduler/DefaultScheduler.java
  
  Index: DefaultScheduler.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, are permitted provided that the following conditions are met:
  
   1. Redistributions of  source code must  retain the above copyright  notice,
      this list of conditions and the following disclaimer.
  
   2. Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
  
   3. The end-user documentation included with the redistribution, if any, must
      include  the following  acknowledgment:  "This product includes  software
      developed  by the  Apache Software Foundation  (http://www.apache.org/)."
      Alternately, this  acknowledgment may  appear in the software itself,  if
      and wherever such third-party acknowledgments normally appear.
  
   4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not  be
      used to  endorse or promote  products derived from  this software without
      prior written permission. For written permission, please contact
      [EMAIL PROTECTED]
  
   5. Products  derived from this software may not  be called "Apache", nor may
      "Apache" appear  in their name,  without prior written permission  of the
      Apache Software Foundation.
  
   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  
   This software  consists of voluntary contributions made  by many individuals
   on  behalf of the Apache Software  Foundation and was  originally created by
   Stefano Mazzocchi  <[EMAIL PROTECTED]>. For more  information on the Apache
   Software Foundation, please see <http://www.apache.org/>.
  
  */
  package org.apache.cocoon.components.scheduler;
  
  import java.util.Map;
  
  import org.apache.avalon.cornerstone.services.scheduler.Target;
  import org.apache.avalon.cornerstone.services.scheduler.TimeScheduler;
  import org.apache.avalon.cornerstone.services.scheduler.TimeTrigger;
  import org.apache.avalon.cornerstone.services.scheduler.TimeTriggerFactory;
  import org.apache.avalon.framework.CascadingRuntimeException;
  import org.apache.avalon.framework.activity.Disposable;
  import org.apache.avalon.framework.component.Component;
  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.context.Context;
  import org.apache.avalon.framework.context.ContextException;
  import org.apache.avalon.framework.context.Contextualizable;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  import org.apache.avalon.framework.parameters.Parameters;
  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.excalibur.event.Queue;
  import org.apache.excalibur.event.Sink;
  import org.apache.excalibur.event.command.Command;
  
  /**
   * This component can either schedule tasks or directly call one.
   * 
   * @since 2.1.1
   * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
   * @version CVS $Id: DefaultScheduler.java,v 1.1 2003/08/21 12:44:18 cziegeler Exp $
   */
  public class DefaultScheduler 
      extends AbstractLogEnabled
      implements Component,
                 Serviceable,
                 Disposable,
                 ThreadSafe,
                 Scheduler,
                 Configurable,
                 Contextualizable {
      
      protected ServiceManager manager;
      
      protected TimeScheduler scheduler;
      
      protected Sink commandSink;
  
      public void service(ServiceManager manager) throws ServiceException {
          this.manager = manager;
          this.scheduler = (TimeScheduler) this.manager.lookup(TimeScheduler.ROLE);
      }
  
      /* (non-Javadoc)
       * @see 
org.apache.cocoon.components.tasks.TaskManager#addTriggeredTarget(java.lang.String, 
org.apache.avalon.cornerstone.services.scheduler.TimeTrigger, java.lang.String, 
org.apache.avalon.framework.parameters.Parameters, java.util.Map)
       */
      public void addTriggeredTarget(String name,
                                     TimeTrigger trigger,
                                     String target,
                                     Parameters parameters,
                                     Map objects) {
          Target t = this.getTarget(target, parameters, objects);
          this.scheduler.addTrigger(name, trigger, t);
      }
  
      /**
       * @param target
       * @param parameters
       * @param objects
       * @return
       */
      protected Target getTarget(String target, Parameters parameters, Map objects) {
          Target t = new TargetWrapper(this.manager, target, parameters, objects);
          return t;
      }
  
      /* (non-Javadoc)
       * @see 
org.apache.cocoon.components.tasks.TaskManager#addTriggeredTarget(java.lang.String, 
org.apache.avalon.cornerstone.services.scheduler.TimeTrigger, java.lang.String)
       */
      public void addTriggeredTarget(String name,
                                     TimeTrigger trigger,
                                     String target) {           
          this.addTriggeredTarget(name, trigger, target, null, null);
      }
  
      /* (non-Javadoc)
       * @see 
org.apache.cocoon.components.tasks.TaskManager#fireTarget(java.lang.String, 
org.apache.avalon.framework.parameters.Parameters, java.util.Map)
       */
      public boolean fireTarget(String target, Parameters parameters, Map objects) {   
     
          return this.commandSink.tryEnqueue(this.getCommand(target, parameters, 
objects));
      }
  
      /**
       * @param name
       * @param parameters
       * @param objects
       * @return
       */
      private Command getCommand(String target, Parameters parameters, Map objects) {
          Command t = new TargetWrapper(this.manager, target, parameters, objects);
          return t;
      }
  
      /* (non-Javadoc)
       * @see 
org.apache.cocoon.components.tasks.TaskManager#fireTarget(java.lang.String)
       */
      public boolean fireTarget(String target) {
          return this.fireTarget(target, null, null);
      }
  
      /* (non-Javadoc)
       * @see 
org.apache.cocoon.components.tasks.TaskManager#removeTriggeredTarget(java.lang.String)
       */
      public void removeTriggeredTarget(String name) {
          this.scheduler.removeTrigger(name);
      }
  
      /* (non-Javadoc)
       * @see 
org.apache.cocoon.components.tasks.TaskManager#resetTriggeredTarget(java.lang.String)
       */
      public void resetTriggeredTarget(String name) {
          this.scheduler.resetTrigger(name);
      }
  
      /**
       * Initializable
       */
      public void configure(Configuration config)
      throws ConfigurationException {
          Configuration[] triggers = 
config.getChild("triggers").getChildren("trigger");
          if ( triggers != null ) {
              TimeTriggerFactory factory = new TimeTriggerFactory();
              for (int i=0; i < triggers.length; i++) {
                  final Configuration current = triggers[i];
                  final String name = current.getAttribute("name"); 
                  final String target = current.getAttribute("target"); 
  
                  Configuration[] triggerConf = current.getChildren("timed");
                  if ( triggerConf != null ) {
                      for(int m=0; m < triggerConf.length; m++) {
                          TimeTrigger timeTrigger = 
factory.createTimeTrigger(triggerConf[m]);
                          this.addTriggeredTarget(name, timeTrigger, target);
                      }
                  }
              }
          }
      }
  
      /* (non-Javadoc)
       * @see 
org.apache.avalon.framework.context.Contextualizable#contextualize(org.apache.avalon.framework.context.Context)
       */
      public void contextualize(Context context) throws ContextException {
          this.commandSink = (Sink) context.get(Queue.ROLE);
      }
  
      /* (non-Javadoc)
       * @see org.apache.avalon.framework.activity.Disposable#dispose()
       */
      public void dispose() {
          if ( this.manager != null ) {
              this.manager.release( this.scheduler );
              this.scheduler = null;
              this.manager = null;
          }
  
      }
  
      class TargetWrapper implements Target, Command {
          
          protected ServiceManager manager;
          protected Parameters     parameters;
          protected Map            objects;
          protected String         target;
          
          public TargetWrapper(ServiceManager manager, String target,
                               Parameters p, Map o) {
              this.manager = manager;
              this.parameters = p;
              this.objects = o;
              this.target = target;
          }
          
          /* (non-Javadoc)
           * @see 
org.apache.avalon.cornerstone.services.scheduler.Target#targetTriggered(java.lang.String)
           */
          public void targetTriggered(String name) {
              // lookup real target
              Target t = null;
              try {
                  t = (Target) this.manager.lookup(this.target);
                  if ( t instanceof ConfigurableTarget ) {
                      ((ConfigurableTarget)t).setup(this.parameters, this.objects);
                  }
                  t.targetTriggered(name);
              } catch (ServiceException se) {
                  throw new CascadingRuntimeException("Unable to lookup target " + 
this.target, se); 
              } finally {
                  this.manager.release(t);
              }
          }
  
          /* (non-Javadoc)
           * @see org.apache.avalon.framework.activity.Executable#execute()
           */
          public void execute() throws Exception {
              // lookup real target
              Target t = null;
              try {
                  t = (Target) this.manager.lookup(this.target);
                  if ( t instanceof ConfigurableTarget ) {
                      ((ConfigurableTarget)t).setup(this.parameters, this.objects);
                  }
                  t.targetTriggered("direct");
              } finally {
                  this.manager.release(t);
              }
          }
  
      }
  }
  
  
  
  1.1                  
cocoon-2.1/src/scratchpad/src/org/apache/cocoon/components/scheduler/DefaultThreadManager.java
  
  Index: DefaultThreadManager.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, are permitted provided that the following conditions are met:
  
   1. Redistributions of  source code must  retain the above copyright  notice,
      this list of conditions and the following disclaimer.
  
   2. Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
  
   3. The end-user documentation included with the redistribution, if any, must
      include  the following  acknowledgment:  "This product includes  software
      developed  by the  Apache Software Foundation  (http://www.apache.org/)."
      Alternately, this  acknowledgment may  appear in the software itself,  if
      and wherever such third-party acknowledgments normally appear.
  
   4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not  be
      used to  endorse or promote  products derived from  this software without
      prior written permission. For written permission, please contact
      [EMAIL PROTECTED]
  
   5. Products  derived from this software may not  be called "Apache", nor may
      "Apache" appear  in their name,  without prior written permission  of the
      Apache Software Foundation.
  
   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  
   This software  consists of voluntary contributions made  by many individuals
   on  behalf of the Apache Software  Foundation and was  originally created by
   Stefano Mazzocchi  <[EMAIL PROTECTED]>. For more  information on the Apache
   Software Foundation, please see <http://www.apache.org/>.
  
  */
  package org.apache.cocoon.components.scheduler;
  
  import org.apache.avalon.framework.component.Component;
  import org.apache.avalon.framework.thread.ThreadSafe;
  
  /**
   * This makes the Thread Manager usuable within ECM
   * 
   * @since 2.1.1
   * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
   * @version CVS $Id: DefaultThreadManager.java,v 1.1 2003/08/21 12:44:18 cziegeler 
Exp $
   */
  public class DefaultThreadManager 
      extends org.apache.avalon.cornerstone.blocks.threads.DefaultThreadManager   
      implements Component,
                 ThreadSafe {
  }
  
  
  
  1.1                  
cocoon-2.1/src/scratchpad/src/org/apache/cocoon/components/scheduler/SchedulerAction.java
  
  Index: SchedulerAction.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, are permitted provided that the following conditions are met:
  
   1. Redistributions of  source code must  retain the above copyright  notice,
      this list of conditions and the following disclaimer.
  
   2. Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
  
   3. The end-user documentation included with the redistribution, if any, must
      include  the following  acknowledgment:  "This product includes  software
      developed  by the  Apache Software Foundation  (http://www.apache.org/)."
      Alternately, this  acknowledgment may  appear in the software itself,  if
      and wherever such third-party acknowledgments normally appear.
  
   4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not  be
      used to  endorse or promote  products derived from  this software without
      prior written permission. For written permission, please contact
      [EMAIL PROTECTED]
  
   5. Products  derived from this software may not  be called "Apache", nor may
      "Apache" appear  in their name,  without prior written permission  of the
      Apache Software Foundation.
  
   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  
   This software  consists of voluntary contributions made  by many individuals
   on  behalf of the Apache Software  Foundation and was  originally created by
   Stefano Mazzocchi  <[EMAIL PROTECTED]>. For more  information on the Apache
   Software Foundation, please see <http://www.apache.org/>.
  
  */
  package org.apache.cocoon.components.scheduler;
  
  import java.util.Map;
  
  import org.apache.avalon.framework.component.Component;
  import org.apache.avalon.framework.parameters.Parameters;
  import org.apache.cocoon.acting.ComposerAction;
  import org.apache.cocoon.environment.Redirector;
  import org.apache.cocoon.environment.SourceResolver;
  
  /**
   * A simple action firing a target
   * 
   * @since 2.1.1
   * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
   * @version CVS $Id: SchedulerAction.java,v 1.1 2003/08/21 12:44:18 cziegeler Exp $
   */
  public class SchedulerAction 
      extends ComposerAction {
      
      /* (non-Javadoc)
       * @see 
org.apache.cocoon.acting.Action#act(org.apache.cocoon.environment.Redirector, 
org.apache.cocoon.environment.SourceResolver, java.util.Map, java.lang.String, 
org.apache.avalon.framework.parameters.Parameters)
       */
      public Map act(
          Redirector redirector,
          SourceResolver resolver,
          Map objectModel,
          String source,
          Parameters parameters)
          throws Exception {
  
          Scheduler scheduler = null;
          try {
              scheduler = (Scheduler) this.manager.lookup(Scheduler.ROLE);
              
              if ( scheduler.fireTarget(source) ) {
                  return EMPTY_MAP;
              }
          } finally {
              this.manager.release((Component) scheduler);
          }
          return null;
      }
  
  }
  
  
  
  1.1                  
cocoon-2.1/src/scratchpad/src/org/apache/cocoon/components/scheduler/ConfigurableTarget.java
  
  Index: ConfigurableTarget.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, are permitted provided that the following conditions are met:
  
   1. Redistributions of  source code must  retain the above copyright  notice,
      this list of conditions and the following disclaimer.
  
   2. Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
  
   3. The end-user documentation included with the redistribution, if any, must
      include  the following  acknowledgment:  "This product includes  software
      developed  by the  Apache Software Foundation  (http://www.apache.org/)."
      Alternately, this  acknowledgment may  appear in the software itself,  if
      and wherever such third-party acknowledgments normally appear.
  
   4. The names "Apache Cocoon" and  "Apache Software Foundation" must  not  be
      used to  endorse or promote  products derived from  this software without
      prior written permission. For written permission, please contact
      [EMAIL PROTECTED]
  
   5. Products  derived from this software may not  be called "Apache", nor may
      "Apache" appear  in their name,  without prior written permission  of the
      Apache Software Foundation.
  
   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  
   This software  consists of voluntary contributions made  by many individuals
   on  behalf of the Apache Software  Foundation and was  originally created by
   Stefano Mazzocchi  <[EMAIL PROTECTED]>. For more  information on the Apache
   Software Foundation, please see <http://www.apache.org/>.
  
  */
  package org.apache.cocoon.components.scheduler;
  
  import java.util.Map;
  
  import org.apache.avalon.cornerstone.services.scheduler.Target;
  import org.apache.avalon.framework.parameters.Parameters;
  
  /**
   * This is a configurable target. Before the targetTriggered method is called
   * the setup method is invoked.
   * 
   * @since 2.1.1
   * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
   * @version CVS $Id: ConfigurableTarget.java,v 1.1 2003/08/21 12:44:18 cziegeler Exp 
$
   */
  public interface ConfigurableTarget extends Target {
      
      void setup(Parameters pars, Map objects);
      
      
  }
  
  
  

Reply via email to