pier        2003/02/18 08:21:40

  Modified:    src/blocks/proxy/java/org/apache/cocoon/generation
                        HttpProxyGenerator.java
  Log:
  More javadocs.
  Private methods moved at the bottom.
  Better exception handling in generate().
  
  Revision  Changes    Path
  1.3       +107 -55   
xml-cocoon2/src/blocks/proxy/java/org/apache/cocoon/generation/HttpProxyGenerator.java
  
  Index: HttpProxyGenerator.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/blocks/proxy/java/org/apache/cocoon/generation/HttpProxyGenerator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- HttpProxyGenerator.java   18 Feb 2003 14:47:43 -0000      1.2
  +++ HttpProxyGenerator.java   18 Feb 2003 16:21:39 -0000      1.3
  @@ -62,6 +62,7 @@
   import org.apache.avalon.framework.parameters.Parameters;
   
   import org.apache.cocoon.ProcessingException;
  +import org.apache.cocoon.ResourceNotFoundException;
   import org.apache.cocoon.environment.SourceResolver;
   
   import org.apache.commons.httpclient.HttpConnection;
  @@ -82,7 +83,7 @@
   
   /**
    * The <code>HttpProxyGenerator</code> is a Cocoon generator using the
  - * <b>Jakarta Commons HTTPClient Library</code> to access an XML stream
  + * <b>Jakarta Commons HTTPClient Library</b> to access an XML stream
    * over HTTP.
    * 
    * @version CVS $Revision$
  @@ -104,62 +105,19 @@
       private boolean debug = false;
   
       /**
  -     * Prepare a map of parameters from an array of <code>Configuration</code>
  -     * items.
  -     *
  -     * @param configurations An array of <code>Configuration</code> elements.
  -     * @return A <code>List</code> of <code>NameValuePair</code> elements.
  -     * @exception ConfigurationException If a parameter doesn't specify a name.
  +     * Default (empty) constructor.
        */
  -    private ArrayList getParams(Configuration configurations[])
  -    throws ConfigurationException {
  -        ArrayList list = new ArrayList();
  -
  -        if (configurations.length < 1) return (list);
  -
  -        for (int x = 0; x < configurations.length; x++) {
  -            Configuration configuration = configurations[x];
  -            String name = configuration.getAttribute("name", null);
  -            if (name == null) {
  -                throw new ConfigurationException("No name specified for parameter 
at "
  -                        + configuration.getLocation());
  -            }
  -
  -            String value = configuration.getAttribute("value", null);
  -            if (value != null) list.add(new NameValuePair(name, value));
  -
  -            Configuration subconfigurations[] = configuration.getChildren("value");
  -            for (int y = 0; y < subconfigurations.length; y++) {
  -                value = subconfigurations[y].getValue(null);
  -                if (value != null) list.add(new NameValuePair(name, value));
  -            }
  -        }
  -        
  -        return (list);
  +    public HttpProxyGenerator() {
  +        super();
       }
   
       /**
  -     * Override the value for a named parameter in a specfied <code>ArrayList</code>
  -     * or add it if the parameter was not found.
  +     * Set up this <code>Generator</code> instance from its sitemap 
<code>Configuration</code>
        *
  -     * @param list The <code>ArrayList</code> where the parameter is stored.
  -     * @param name The parameter name.
  -     * @param list The new parameter value.
  -     * @return The same <code>List</code> of <code>NameValuePair</code> elements.
  +     * @param configuration The base <code>Configuration</code> for this 
<code>Generator</code>.
  +     * @throws ConfigurationException If this instance cannot be configured 
properly.
  +     * @see #recycle()
        */
  -    private ArrayList overrideParams(ArrayList list, String name, String value) {
  -        Iterator iterator = list.iterator();
  -        while (iterator.hasNext()) {
  -            NameValuePair param = (NameValuePair) iterator.next();
  -            if (param.getName().equals(name)) {
  -                iterator.remove();
  -                break;
  -            }
  -        }
  -        list.add(new NameValuePair(name, value));
  -        return (list);
  -    }
  -
       public void configure(Configuration configuration)
       throws ConfigurationException {
   
  @@ -190,6 +148,19 @@
           this.qryParams = this.getParams(configuration.getChildren("query"));
       }
   
  +    /**
  +     * Setup this <code>Generator</code> with its runtime configurations and 
parameters
  +     * specified in the sitemap, and prepare it for generation.
  +     *
  +     * @param sourceResolver The <code>SourceResolver</code> instance resolving 
sources by
  +     *                       system identifiers.
  +     * @param objectModel The Cocoon "object model" <code>Map</code>
  +     * @param parameters The runtime <code>Parameters</code> instance.
  +     * @throws ProcessingException If this instance could not be setup.
  +     * @throws SAXException If a SAX error occurred during setup.
  +     * @throws IOException If an I/O error occurred during setup.
  +     * @see #recycle()
  +     */
       public void setup(SourceResolver sourceResolver, Map objectModel,
               String source, Parameters parameters)
       throws ProcessingException, SAXException, IOException {
  @@ -269,6 +240,14 @@
           this.debug = parameters.getParameterAsBoolean("debug", false);
       }
   
  +    /**
  +     * Recycle this instance, clearing all done during setup and generation, and 
reverting
  +     * back to what was configured in the sitemap.
  +     *
  +     * @see #configure(Configuration)
  +     * @see #setup(SourceResolver, Map, String, Parameters)
  +     * @see #generate()
  +     */
       public void recycle() {
           /* Recycle the method */
           this.method.recycle();
  @@ -279,8 +258,16 @@
           super.recycle();
       }
   
  +    /**
  +     * Parse the remote <code>InputStream</code> accessed over HTTP.
  +     *
  +     * @throws ResourceNotFoundException If the remote HTTP resource could not be 
found.
  +     * @throws ProcessingException If an error occurred processing generation.
  +     * @throws SAXException If an error occurred parsing or processing XML in the 
pipeline.
  +     * @throws IOException If an I/O error occurred accessing the HTTP server.
  +     */
       public void generate()
  -    throws IOException, SAXException, ProcessingException {
  +    throws ResourceNotFoundException, ProcessingException, SAXException, 
IOException {
           /* Do the boring stuff in case we have to do a debug output (blablabla) */
           if (this.debug) {
               this.generateDebugOutput();
  @@ -292,12 +279,16 @@
           HttpState state = new HttpState();
           this.method.setFollowRedirects(true);
           int status = this.method.execute(state, connection);
  -        if ((status < 200) || (status > 299)) {
  -            throw new ProcessingException("Unable to access HTTP resource at \""
  +        if (status == 404) {
  +            throw new ResourceNotFoundException("Unable to access \"" + 
this.method.getURI()
  +                    + "\" (HTTP 404 Error)");
  +        } else if ((status < 200) || (status > 299)) {
  +            throw new IOException("Unable to access HTTP resource at \""
                       + this.method.getURI().toString() + "\" (status=" + status + 
")");
           }
           InputStream response = this.method.getResponseBodyAsStream();
   
  +        /* Let's try to set up our InputSource from the response output stream and 
to parse it */
           SAXParser parser = null;
           try {
               InputSource inputSource = new InputSource(response);
  @@ -312,8 +303,14 @@
           }
       }
   
  +    /**
  +     * Generate debugging output as XML data from the current configuration.
  +     *
  +     * @throws SAXException If an error occurred parsing or processing XML in the 
pipeline.
  +     * @throws IOException If an I/O error occurred accessing the HTTP server.
  +     */
       private void generateDebugOutput()
  -    throws IOException, SAXException, ProcessingException {
  +    throws SAXException, IOException {
           super.xmlConsumer.startDocument();
   
           AttributesImpl attributes = new AttributesImpl();
  @@ -350,6 +347,61 @@
           return;
       }
   
  +    /**
  +     * Prepare a map of parameters from an array of <code>Configuration</code>
  +     * items.
  +     *
  +     * @param configurations An array of <code>Configuration</code> elements.
  +     * @return A <code>List</code> of <code>NameValuePair</code> elements.
  +     * @throws ConfigurationException If a parameter doesn't specify a name.
  +     */
  +    private ArrayList getParams(Configuration configurations[])
  +    throws ConfigurationException {
  +        ArrayList list = new ArrayList();
  +
  +        if (configurations.length < 1) return (list);
   
  +        for (int x = 0; x < configurations.length; x++) {
  +            Configuration configuration = configurations[x];
  +            String name = configuration.getAttribute("name", null);
  +            if (name == null) {
  +                throw new ConfigurationException("No name specified for parameter 
at "
  +                        + configuration.getLocation());
  +            }
  +
  +            String value = configuration.getAttribute("value", null);
  +            if (value != null) list.add(new NameValuePair(name, value));
  +
  +            Configuration subconfigurations[] = configuration.getChildren("value");
  +            for (int y = 0; y < subconfigurations.length; y++) {
  +                value = subconfigurations[y].getValue(null);
  +                if (value != null) list.add(new NameValuePair(name, value));
  +            }
  +        }
  +        
  +        return (list);
  +    }
  +
  +    /**
  +     * Override the value for a named parameter in a specfied <code>ArrayList</code>
  +     * or add it if the parameter was not found.
  +     *
  +     * @param list The <code>ArrayList</code> where the parameter is stored.
  +     * @param name The parameter name.
  +     * @param list The new parameter value.
  +     * @return The same <code>List</code> of <code>NameValuePair</code> elements.
  +     */
  +    private ArrayList overrideParams(ArrayList list, String name, String value) {
  +        Iterator iterator = list.iterator();
  +        while (iterator.hasNext()) {
  +            NameValuePair param = (NameValuePair) iterator.next();
  +            if (param.getName().equals(name)) {
  +                iterator.remove();
  +                break;
  +            }
  +        }
  +        list.add(new NameValuePair(name, value));
  +        return (list);
  +    }
   }
   
  
  
  

----------------------------------------------------------------------
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