giacomo     00/10/08 14:09:28

  Modified:    src/org/apache/cocoon/sitemap Tag: xml-cocoon2
                        AbstractSitemap.java ResourcePipeline.java
                        XSLTFactoryLoader.java
  Log:
  extended sitemap component handling because of pooling
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.10  +8 -15     
xml-cocoon/src/org/apache/cocoon/sitemap/Attic/AbstractSitemap.java
  
  Index: AbstractSitemap.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/AbstractSitemap.java,v
  retrieving revision 1.1.2.9
  retrieving revision 1.1.2.10
  diff -u -r1.1.2.9 -r1.1.2.10
  --- AbstractSitemap.java      2000/09/28 19:14:05     1.1.2.9
  +++ AbstractSitemap.java      2000/10/08 21:09:26     1.1.2.10
  @@ -17,9 +17,11 @@
   import org.apache.avalon.Composer;
   import org.apache.avalon.Configurable;
   import org.apache.avalon.Configuration;
  +
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.Processor;
   import org.apache.cocoon.environment.Environment;
  +import org.apache.cocoon.sitemap.ComponentHolderFactory;
   import org.apache.cocoon.util.ClassUtils;
   
   import org.xml.sax.SAXException;
  @@ -28,7 +30,7 @@
    * Base class for generated <code>Sitemap</code> classes
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
  - * @version CVS $Revision: 1.1.2.9 $ $Date: 2000/09/28 19:14:05 $
  + * @version CVS $Revision: 1.1.2.10 $ $Date: 2000/10/08 21:09:26 $
    */
   public abstract class AbstractSitemap implements Sitemap {
       
  @@ -76,22 +78,13 @@
         * Loads a class specified in a sitemap component definition and
         * initialize it
         */
  -    protected Component load_component(String classURL, Configuration conf) 
throws Exception {
  -        Object comp = ClassUtils.newInstance(classURL);
  -        if (!(comp instanceof Component)) {
  +    protected ComponentHolder load_component(String classURL, Configuration 
configuration) throws Exception {
  +        if (!(ClassUtils.implementsInterface (classURL, 
Component.class.getName()))) {
               throw new IllegalAccessException ("Object " + classURL + " is 
not a Component");
  -        }
  -        /* (GP)FIXME: The new AvalonAware release should contain Interfaces 
to mark classes
  -           an ThreadSafe, Recyclable or Poolable and depending on that 
should instanciate
  -           and configurate these objects accordingly
  -        if (comp instanceof Composer) {
  -            ((Composer) comp).setComponentManager(this.manager);
  -        }
  -        if (comp instanceof Configurable) {
  -            ((Configurable) comp).setConfiguration(conf);
           }
  -        */
  -        return ((Component) comp);
  +        ComponentHolder componentHolder;
  +        componentHolder = ComponentHolderFactory.getComponentHolder 
(classURL, configuration, this.manager);
  +        return (componentHolder);
       }
   
        /**
  
  
  
  1.1.2.16  +75 -72    
xml-cocoon/src/org/apache/cocoon/sitemap/Attic/ResourcePipeline.java
  
  Index: ResourcePipeline.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/ResourcePipeline.java,v
  retrieving revision 1.1.2.15
  retrieving revision 1.1.2.16
  diff -u -r1.1.2.15 -r1.1.2.16
  --- ResourcePipeline.java     2000/09/29 01:05:19     1.1.2.15
  +++ ResourcePipeline.java     2000/10/08 21:09:26     1.1.2.16
  @@ -24,7 +24,6 @@
   import org.apache.cocoon.reading.Reader;
   import org.apache.cocoon.transformation.Transformer;
   import org.apache.cocoon.serialization.Serializer;
  -import org.apache.cocoon.util.ClassUtils;
   import org.apache.cocoon.xml.XMLProducer;
   
   import org.xml.sax.SAXException;
  @@ -32,20 +31,20 @@
   
   /**
    * @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
  - * @version CVS $Revision: 1.1.2.15 $ $Date: 2000/09/29 01:05:19 $
  + * @version CVS $Revision: 1.1.2.16 $ $Date: 2000/10/08 21:09:26 $
    */
   public class ResourcePipeline implements Composer {
  -    private Generator generator = null;
  +    private ComponentHolder generator = null;
       private Parameters generatorParam = null;
       private String generatorSource = null;
  -    private Reader reader = null;
  +    private ComponentHolder reader = null;
       private Parameters readerParam = null;
       private String readerSource = null;
       private String readerMimeType = null;
       private Vector transformers = new Vector();
       private Vector transformerParams = new Vector();
       private Vector transformerSources = new Vector();
  -    private Serializer serializer = null;
  +    private ComponentHolder serializer = null;
       private Parameters serializerParam = null;
       private String serializerSource = null;
       private String serializerMimeType = null;
  @@ -60,79 +59,82 @@
           this.manager = manager;
       }
   
  -    public void setGenerator (Generator generator, String source,
  -                              Configuration conf, Parameters param)
  +    public void setGenerator (ComponentHolder holder, String source, 
Parameters param)
       throws Exception {
  -        this.generator = 
(Generator)ClassUtils.newInstance(generator.getClass().getName());
  -        this.initComponent (this.generator, conf);
  +        if (this.generator != null) {
  +            throw new ProcessingException ("Generator " + holder.getName() + 
" already set. You can only select one Generator");
  +        }
  +        this.generator = holder;
           this.generatorSource = source;
           this.generatorParam = param;
       }
   
  -    public Generator getGenerator () {
  +    public ComponentHolder getGenerator () {
           return this.generator;
       }
   
  -    public void setReader (Reader reader, String source,
  -                           Configuration conf, Parameters param)
  +    public void setReader (ComponentHolder holder, String source, Parameters 
param)
       throws Exception {
  -        this.setReader (reader, source, conf, param, null);
  +        this.setReader (holder, source, param, null);
       }
   
  -    public void setReader (Reader reader, String source,
  -                           Configuration conf, Parameters param, String 
mimeType)
  +    public void setReader (ComponentHolder holder, String source, Parameters 
param, String mimeType)
       throws Exception {
  -        this.reader = 
(Reader)ClassUtils.newInstance(reader.getClass().getName());
  -        this.initComponent (this.reader, conf);
  +        if (this.reader != null) {
  +            throw new ProcessingException ("Reader " + holder.getName() + " 
already set. You can only select one Reader");
  +        }
  +        this.reader = holder;
           this.readerSource = source;
           this.readerParam = param;
           this.readerMimeType = mimeType;
       }
   
  -    public void setSerializer (Serializer serializer, String source,
  -                               Configuration conf, Parameters param)
  +    public void setSerializer (ComponentHolder holder, String source, 
Parameters param)
       throws Exception {
  -        this.setSerializer (serializer, source, conf, param, null);
  +        this.setSerializer (holder, source, param, null);
       }
   
  -    public void setSerializer (Serializer serializer, String source,
  -                               Configuration conf, Parameters param, String 
mimeType)
  +    public void setSerializer (ComponentHolder holder, String source, 
Parameters param, String mimeType)
       throws Exception {
  -        this.serializer = 
(Serializer)ClassUtils.newInstance(serializer.getClass().getName());
  -        this.initComponent (this.serializer, conf);
  +        if (this.serializer != null) {
  +            throw new ProcessingException ("Serializer " + holder.getName() 
+ " already set. You can only select one Serializer");
  +        }
  +        this.serializer = holder;
           this.serializerSource = source;
           this.serializerParam = param;
           this.serializerMimeType = mimeType;
       }
   
  -    public void addTransformer (Transformer transformer, String source,
  -                               Configuration conf, Parameters param)
  +    public void addTransformer (ComponentHolder holder, String source, 
Parameters param)
       throws Exception {
  -        Transformer transfmr = 
(Transformer)ClassUtils.newInstance(transformer.getClass().getName());
  -        this.initComponent (transfmr, conf);
  -        this.transformers.add (transfmr);
  +        this.transformers.add (holder);
           this.transformerSources.add (source);
           this.transformerParams.add (param);
       }
   
       public boolean process (Environment environment)
  -                            throws ProcessingException, IOException, 
SAXException {
  -        String mime_type = null;
  +                            throws Exception {
  +        String mime_type;
   
           if (generator == null) {
               if (reader != null) {
  -                reader.setup ((EntityResolver) environment, 
environment.getObjectModel(), readerSource, readerParam);
  -                mime_type = this.reader.getMimeType();
  -                if (mime_type != null) {
  -                    environment.setContentType (mime_type);
  -                } else if (readerMimeType != null) {
  -                    environment.setContentType (readerMimeType);
  -                } else {
  -                    /* (GP)FIXME: Reaching here we havn't set a mime-type. 
This
  -                     * case should be prevented by the sitemap generating 
stylesheet */
  +                Reader myReader = (Reader) reader.get();
  +                try {
  +                    myReader.setup ((EntityResolver) environment, 
environment.getObjectModel(), readerSource, readerParam);
  +                    mime_type = myReader.getMimeType();
  +                    if (mime_type != null) {
  +                        environment.setContentType (mime_type);
  +                    } else if (readerMimeType != null) {
  +                        environment.setContentType (readerMimeType);
  +                    } else {
  +                        /* (GP)FIXME: Reaching here we havn't set a 
mime-type. This
  +                         * case should be prevented by the sitemap 
generating stylesheet */
  +                    }
  +                    myReader.setOutputStream (environment.getOutputStream());
  +                    myReader.generate();
  +                } finally {
  +                    reader.put(myReader);
                   }
  -                reader.setOutputStream (environment.getOutputStream());
  -                reader.generate();
               } else {
                   throw new ProcessingException ("Generator or Reader not 
specified");
               }
  @@ -141,41 +143,42 @@
                   throw new ProcessingException ("Serializer not specified");
               }
   
  -            generator.setup ((EntityResolver) environment, 
environment.getObjectModel(), generatorSource, generatorParam);
  -            Transformer transformer = null;
  -            XMLProducer producer = generator;
  +            Generator myGenerator = (Generator) generator.get();
               int i = transformers.size();
  +            Transformer myTransformer[] = new Transformer[i];
               for (int j=0; j < i; j++) {
  -                transformer = (Transformer) transformers.elementAt (j);
  -                transformer.setup ((EntityResolver) environment, 
environment.getObjectModel(),
  -                               (String)transformerSources.elementAt (j),
  -                               (Parameters)transformerParams.elementAt (j));
  -                producer.setConsumer (transformer);
  -                producer = transformer;
  +                myTransformer[j] = (Transformer)((ComponentHolder) 
transformers.elementAt (j)).get();
               }
  +            Serializer mySerializer = (Serializer) serializer.get();
  +
  +            try {
  +                myGenerator.setup ((EntityResolver) environment, 
environment.getObjectModel(), generatorSource, generatorParam);
  +                Transformer transformer = null;
  +                XMLProducer producer = myGenerator;
  +                for (int j=0; j < i; j++) {
  +                    myTransformer[j].setup ((EntityResolver) environment, 
environment.getObjectModel(),
  +                                   (String)transformerSources.elementAt (j),
  +                                   (Parameters)transformerParams.elementAt 
(j));
  +                    producer.setConsumer (myTransformer[j]);
  +                    producer = myTransformer[j];
  +                }
   
  -            mime_type = this.serializer.getMimeType();
  -            if (mime_type != null)
  -                    environment.setContentType (mime_type);
  -            else if (serializerMimeType != null)
  -                    environment.setContentType (serializerMimeType);
  -            serializer.setOutputStream (environment.getOutputStream());
  -            producer.setConsumer (serializer);
  -            generator.generate();
  +                mime_type = mySerializer.getMimeType();
  +                if (mime_type != null)
  +                        environment.setContentType (mime_type);
  +                else if (serializerMimeType != null)
  +                        environment.setContentType (serializerMimeType);
  +                mySerializer.setOutputStream (environment.getOutputStream());
  +                producer.setConsumer (mySerializer);
  +                myGenerator.generate();
  +            } finally {
  +                serializer.put(mySerializer);
  +                for (int j=0; j < i; j++) {
  +                    ((ComponentHolder) transformers.elementAt 
(j)).put(myTransformer[j]);
  +                }
  +                generator.put(myGenerator);
  +            }
           }
           return true;
  -    }
  -
  -    /**
  -     * Initializes a Component (inversion of control)
  -     *
  -     * @param comp <code>Component</code> to initialize
  -     * @param conf <code>Configuration</code> of the <code>Component</code>
  -     */
  -    private void initComponent (Component comp, Configuration conf) {
  -        if (comp instanceof Composer)
  -            ((Composer)comp).setComponentManager (manager);
  -        if (comp instanceof Configurable)
  -            ((Configurable)comp).setConfiguration (conf);
       }
   }
  
  
  
  1.1.2.3   +11 -5     
xml-cocoon/src/org/apache/cocoon/sitemap/Attic/XSLTFactoryLoader.java
  
  Index: XSLTFactoryLoader.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon/src/org/apache/cocoon/sitemap/Attic/XSLTFactoryLoader.java,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- XSLTFactoryLoader.java    2000/09/06 23:22:25     1.1.2.2
  +++ XSLTFactoryLoader.java    2000/10/08 21:09:26     1.1.2.3
  @@ -21,7 +21,7 @@
    * <code>SelectorFactory</code>s to get the generated source code.
    * 
    * @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a> 
  - * @version CVS $Revision: 1.1.2.2 $ $Date: 2000/09/06 23:22:25 $ 
  + * @version CVS $Revision: 1.1.2.3 $ $Date: 2000/10/08 21:09:26 $ 
    */ 
   
   public class XSLTFactoryLoader {
  @@ -30,8 +30,7 @@
   
       public String getClassSource(String className, String prefix, String 
pattern, DocumentFragment conf) 
       throws ClassNotFoundException, InstantiationException, 
IllegalAccessException, Exception { 
  -        
  -        Object factory = obj.get(className); 
  +        Object factory = obj.get(className);
           if (factory == null) factory = ClassUtils.newInstance(className); 
           obj.put(className, factory); 
           
  @@ -45,8 +44,7 @@
                      
       public String getMethodSource(String className, String prefix, String 
pattern, DocumentFragment conf) 
       throws ClassNotFoundException, InstantiationException, 
IllegalAccessException, Exception { 
  -
  -        Object factory = obj.get(className); 
  +        Object factory = obj.get(className);
           if (factory == null) factory = ClassUtils.newInstance(className); 
           obj.put (className, factory); 
   
  @@ -56,5 +54,13 @@
           
           throw new Exception ("Wrong class \"" + factory.getClass().getName()
                               + "\". Should implement the CodeFactory 
interface");
  +    }
  +
  +    public boolean isFactory (String className) {
  +        boolean result = false;
  +        try {
  +            result = ClassUtils.implementsInterface (className, 
CodeFactory.class.getName());
  +        } catch (Exception e) {}
  +        return result;
       }
   }
  
  
  

Reply via email to