cziegeler    01/12/13 03:50:47

  Modified:    .        changes.xml
               src/org/apache/cocoon/components/url URLFactory.java
                        URLFactoryImpl.java
  Log:
  URLFactories can now be Configurable.
  
  Revision  Changes    Path
  1.56      +4 -1      xml-cocoon2/changes.xml
  
  Index: changes.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/changes.xml,v
  retrieving revision 1.55
  retrieving revision 1.56
  diff -u -r1.55 -r1.56
  --- changes.xml       2001/12/10 12:56:22     1.55
  +++ changes.xml       2001/12/13 11:50:47     1.56
  @@ -4,7 +4,7 @@
   
   <!--
     History of Cocoon changes
  -  $Id: changes.xml,v 1.55 2001/12/10 12:56:22 sylvain Exp $
  +  $Id: changes.xml,v 1.56 2001/12/13 11:50:47 cziegeler Exp $
   -->
   
   <changes title="History of Changes">
  @@ -28,6 +28,9 @@
    </devs>
   
    <release version="2.1-dev" date="@date@">
  +  <action dev="CZ" type="update">
  +    Added support for configurable URLFactories.
  +  </action>
     <action dev="SW" type="fix">
       Made the cach work again by updating cocoon.roles, sitemap.roles and making 
EventPipeline
       and StreamPipeline implement Recomposable instead of just Composable.
  
  
  
  1.6       +2 -2      xml-cocoon2/src/org/apache/cocoon/components/url/URLFactory.java
  
  Index: URLFactory.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/url/URLFactory.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- URLFactory.java   2001/10/11 07:28:19     1.5
  +++ URLFactory.java   2001/12/13 11:50:47     1.6
  @@ -14,9 +14,9 @@
   
   /**
    * @author <a href="mailto:[EMAIL PROTECTED]";>Giacomo Pati</a>
  - * @version $Id: URLFactory.java,v 1.5 2001/10/11 07:28:19 cziegeler Exp $
  + * @version $Id: URLFactory.java,v 1.6 2001/12/13 11:50:47 cziegeler Exp $
    */
  -public interface URLFactory extends ThreadSafe {
  +public interface URLFactory extends Component {
   
       String ROLE = "org.apache.cocoon.components.url.URLFactory";
       /**
  
  
  
  1.10      +69 -9     
xml-cocoon2/src/org/apache/cocoon/components/url/URLFactoryImpl.java
  
  Index: URLFactoryImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/url/URLFactoryImpl.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- URLFactoryImpl.java       2001/10/11 07:28:19     1.9
  +++ URLFactoryImpl.java       2001/12/13 11:50:47     1.10
  @@ -7,7 +7,11 @@
    *****************************************************************************/
   package org.apache.cocoon.components.url;
   
  +import org.apache.avalon.framework.activity.Disposable;
   import org.apache.avalon.framework.component.Component;
  +import org.apache.avalon.framework.component.ComponentException;
  +import org.apache.avalon.framework.component.ComponentManager;
  +import org.apache.avalon.framework.component.Composable;
   import org.apache.avalon.framework.configuration.Configurable;
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
  @@ -16,6 +20,7 @@
   import org.apache.avalon.framework.context.Contextualizable;
   import org.apache.avalon.framework.logger.AbstractLoggable;
   import org.apache.avalon.framework.logger.Loggable;
  +import org.apache.avalon.framework.thread.ThreadSafe;
   import org.apache.cocoon.Constants;
   import org.apache.cocoon.environment.http.HttpContext;
   import org.apache.cocoon.util.ClassUtils;
  @@ -30,9 +35,11 @@
   
   /**
    * @author <a href="mailto:[EMAIL PROTECTED]";>Giacomo Pati</a>
  - * @version $Id: URLFactoryImpl.java,v 1.9 2001/10/11 07:28:19 cziegeler Exp $
  + * @version $Id: URLFactoryImpl.java,v 1.10 2001/12/13 11:50:47 cziegeler Exp $
    */
  -public class URLFactoryImpl extends AbstractLoggable implements URLFactory, 
Component, Configurable, Contextualizable {
  +public class URLFactoryImpl 
  +extends AbstractLoggable 
  +implements ThreadSafe, Configurable, Disposable, Composable, Contextualizable, 
URLFactory {
   
       /**
        * The context
  @@ -44,6 +51,9 @@
        */
       protected Map factories;
   
  +    /** The component manager */
  +    private ComponentManager manager;
  +
       /**
        * Create a URL from a location. This method supports specific
        * pseudo-protocol as defined in its configuration
  @@ -123,7 +133,8 @@
       /**
        * Configure the URLFactories
        */
  -    public void configure(final Configuration conf) throws ConfigurationException {
  +    public void configure(final Configuration conf)
  +    throws ConfigurationException {
           try {
               getLogger().debug("Getting the URLFactories");
               factories = new HashMap();
  @@ -132,14 +143,12 @@
               String protocol = null;
               for (int i = 0; i < configs.length; i++) {
                   protocol = configs[i].getAttribute("name");
  +                if (factories.containsKey(protocol) == true) {
  +                    throw new ConfigurationException("URLFactory defined twice for 
protocol: " + protocol);
  +                }
                   getLogger().debug("\tfor protocol: " + protocol + " " + 
configs[i].getAttribute("class"));
                   urlFactory = (URLFactory) 
ClassUtils.newInstance(configs[i].getAttribute("class"));
  -                if (urlFactory instanceof Contextualizable) {
  -                    ((Contextualizable) urlFactory).contextualize (this.context);
  -                }
  -                if (urlFactory instanceof Loggable) {
  -                    ((Loggable) urlFactory).setLogger(getLogger());
  -                }
  +                this.init(urlFactory, configs[i]);
                   factories.put(protocol, urlFactory);
               }
           } catch (Exception e) {
  @@ -148,4 +157,55 @@
                                              e.getMessage());
           }
       }
  +
  +    /**
  +     * Set the current <code>ComponentManager</code> instance used by this
  +     * <code>Composable</code>.
  +     */
  +    public void compose(ComponentManager manager)
  +    throws ComponentException {
  +        this.manager = manager;
  +    }
  +
  +    /**
  +     * Dispose
  +     */
  +    public void dispose() {
  +        Iterator iter = this.factories.values().iterator();
  +        URLFactory current;
  +        while (iter.hasNext() == true) {
  +            current = (URLFactory) iter.next();
  +            this.deinit(current);
  +        }
  +        this.factories = null;
  +    }
  +
  +    /**
  +     * Init a url factory
  +     */
  +    private void init(URLFactory factory, Configuration config)
  +    throws ContextException, ComponentException, ConfigurationException {
  +        if (factory instanceof Loggable) {
  +            ((Loggable) factory).setLogger(getLogger());
  +        }
  +        if (factory instanceof Contextualizable) {
  +            ((Contextualizable) factory).contextualize (this.context);
  +        }
  +        if (factory instanceof Composable) {
  +            ((Composable) factory).compose(this.manager);
  +        }
  +        if (config != null && factory instanceof Configurable) {
  +            ((Configurable) factory).configure(config);
  +        }
  +    }
  +
  +    /**
  +     * Deinit a url factory
  +     */
  +    private void deinit(URLFactory factory) {
  +        if (factory instanceof Disposable) {
  +            ((Disposable) factory).dispose();
  +        }
  +    }
  +
   }
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to