sebb        2004/02/08 15:36:00

  Added:       src/protocol/http/org/apache/jmeter/protocol/http/parser
                        URLCollection.java URLString.java
  Log:
  New classes to support Collections of URLs (for use by HTMLParser)
  
  Revision  Changes    Path
  1.1                  
jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/parser/URLCollection.java
  
  Index: URLCollection.java
  ===================================================================
  // $Id: URLCollection.java,v 1.1 2004/02/08 23:36:00 sebb Exp $
  /*
   * Copyright 2004 Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *   http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   * 
  */
  
  package org.apache.jmeter.protocol.http.parser;
  
  import java.net.MalformedURLException;
  import java.net.URL;
  import java.util.Collection;
  import java.util.Iterator;
  
  /**
   * Collection class designed for handling URLs
   * 
   * Before a URL is added to the collection, it is wrapped in a URLString class.
   * The iterator unwraps the URL before return.
   * 
   * N.B.
   * Designed for use by HTMLParser, so is not a full implementation 
   * - e.g. does not support remove()
   * 
   * @author sebb AT apache DOT org
   * @version $Revision: 1.1 $ $Date: 2004/02/08 23:36:00 $
   */
  public class URLCollection
  {
        Collection coll;
  
      // Inaccessible default constructor
      private URLCollection(){}
      
      /**
       * Creates a new URLCollection from an existing Collection
       * 
       */
      public URLCollection(Collection c)
      {
          coll = c;
      }
  
      /**
       * Adds the URL to the Collection, first wrapping
       * it in the URLString class
       * 
       * @param u URL to add
       * @return boolean condition returned by the add() method of the underlying 
collection
       */
      public boolean add(URL u)
      {
        return coll.add(new URLString(u));
      }
      
        /*
         * Adds the string to the Collection, first wrapping
         * it in the URLString class
         * 
         * @param s string to add
         * @return boolean condition returned by the add() method of the underlying 
collection
         */
        private boolean add(String s)
        {
                return coll.add(new URLString(s));
        }
      
      /**
       * Convenience method for adding URLs to the collection
       * If the url parameter is null or empty, nothing is done
       * 
       * @param url String, may be null or empty
       * @param baseUrl
       * @return boolean condition returned by the add() method of the underlying 
collection
       */
      public boolean addURL(String url, URL baseUrl)
        {
                if (url == null || url.length() == 0) return false;
                boolean b=false;
                try
                {
                        b=this.add(new URL(baseUrl, url));
                }
                catch(MalformedURLException mfue)
                {
                        //TODO log a warning message?
                        b=this.add(url);// Add the string if cannot create the URL
                }
                return b;
        }
      
      
        public Iterator iterator()
        {
                return new UrlIterator(coll.iterator());
        }
  
      /*
       * Private iterator used to unwrap the URL from the URLString class
       * 
       */
        private static class UrlIterator implements Iterator
        {
                Iterator iter;
                
                UrlIterator(Iterator i)
                {
                        iter=i;
                }
        
                public boolean hasNext()
                {
                        return iter.hasNext();
                }
        
                /*
                 * Unwraps the URLString class to return the URL 
                 */
                public Object next()
                {
                        return ((URLString) iter.next()).getURL();
                }
        
                public void remove()
                {
                        throw new UnsupportedOperationException();
                }
        }
  }
  
  
  
  1.1                  
jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/parser/URLString.java
  
  Index: URLString.java
  ===================================================================
  // $Id: URLString.java,v 1.1 2004/02/08 23:36:00 sebb Exp $
  /*
   * Copyright 2004 Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *   http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   * 
  */
  
  package org.apache.jmeter.protocol.http.parser;
  
  import java.net.URL;
  
  /**
   * Helper class to allow URLs to be stored in Collections without
   * incurring the cost of the hostname lookup performed by the
   * URL methods equals() and hashCode()
   * URL is a final class, so cannot be extended ...
   * 
   * @author sebb AT apache DOT org
   * @version $Revision: 1.1 $ $Date: 2004/02/08 23:36:00 $
   */
  public class URLString
        implements Comparable // To allow use in Sorted Collections
  {
  
       private URL url;
       private String urlAsString;
       private int hashCode;
       
      private URLString()// not instantiable
      {
      }
  
        public URLString(URL u)
        {
                url=u;
                urlAsString=u.toExternalForm();
                /*
                 * TODO improve string version to better match browser behaviour?
                 * e.g. do browsers regard http://host/ and http://Host:80/ as the
                 * same? If so, it would be better to reflect this in the string
                */
                
                hashCode=urlAsString.hashCode();
        }
  
      /*
       * Parsers can return the URL as a string if it does not parse properly
       */
        public URLString(String s)
        {
                url=null;
                urlAsString=s;
                hashCode=urlAsString.hashCode();
        }
  
      public String toString()
      {
        return urlAsString;
      }
  
      public URL getURL()
      {
        return url;
      }
      
      public int compareTo(Object o)
      {
        return urlAsString.compareTo(o.toString());
      }
      
      public boolean equals(Object o)
      {
        return (o instanceof URLString && urlAsString.equals(o.toString()));
      }
  
        public int hashCode()
        {
                return hashCode;
        }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to