You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2002/10/29 19:38:06 UTC

cvs commit: jakarta-jetspeed/src/java/org/apache/jetspeed/util/rewriter ProxyRewriter.java TestRewriter.java FrameRewriterTest.java HTMLParserAdaptor.java HTMLRewriter.java Rewriter.java SampleRewriter.java SwingParserAdaptor.java

taylor      2002/10/29 10:38:06

  Modified:    src/java/org/apache/jetspeed/modules/actions/controllers
                        PanedControllerAction.java
               src/java/org/apache/jetspeed/portal/portlets
                        AggregatePortlet.java
               src/java/org/apache/jetspeed/util/rewriter
                        FrameRewriterTest.java HTMLParserAdaptor.java
                        HTMLRewriter.java Rewriter.java SampleRewriter.java
                        SwingParserAdaptor.java
  Added:       src/java/org/apache/jetspeed/portal/portlets
                        WebPagePortlet2.java
               src/java/org/apache/jetspeed/util Streams.java
               src/java/org/apache/jetspeed/util/rewriter
                        ProxyRewriter.java TestRewriter.java
  Log:
  - implementation of WebPagePortlet2
  - added starts of a Proxy-based rewriter. This is incomplete and shouldn't yet be used until all code is committed
  
  Revision  Changes    Path
  1.8       +9 -3      jakarta-jetspeed/src/java/org/apache/jetspeed/modules/actions/controllers/PanedControllerAction.java
  
  Index: PanedControllerAction.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/modules/actions/controllers/PanedControllerAction.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- PanedControllerAction.java	22 Mar 2002 18:42:06 -0000	1.7
  +++ PanedControllerAction.java	29 Oct 2002 18:38:05 -0000	1.8
  @@ -65,6 +65,7 @@
   import org.apache.jetspeed.om.profile.Entry;
   import org.apache.jetspeed.om.profile.MetaInfo;
   import org.apache.jetspeed.om.profile.Layout;
  +import org.apache.jetspeed.services.resources.JetspeedResources;
   
   // Turbine stuff
   import org.apache.turbine.util.Log;
  @@ -104,13 +105,18 @@
   
           Portlet portlet = null;
           String paneID = null;
  -        String paneName = rundata.getParameters().getString( "js_panename" );
  +        String paneName = rundata.getParameters().getString( JetspeedResources.PATH_PANENAME_KEY );
  +
           if (null != paneName)        
           {
               portlet = myPortlets.getPortletByName(paneName);
               if (portlet != null)
  +            {
                   paneID = portlet.getID();
  +                rundata.getParameters().setString(JetspeedResources.PATH_PANEID_KEY, paneID);
  +            }
           }
  +
           if (null == portlet)
           {
               paneID = cont.retrievePaneID(rundata, true);
  @@ -120,8 +126,8 @@
                   paneID = cont.retrievePaneID(rundata, false);
                   portlet = myPortlets.getPortletByID(paneID);
               }
  -
           }
  +
           if (portlet != null)
               context.put("pane", portlet);        
           cont.savePaneID(rundata, paneID);
  
  
  
  1.3       +5 -2      jakarta-jetspeed/src/java/org/apache/jetspeed/portal/portlets/AggregatePortlet.java
  
  Index: AggregatePortlet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/portal/portlets/AggregatePortlet.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AggregatePortlet.java	27 Sep 2002 19:54:26 -0000	1.2
  +++ AggregatePortlet.java	29 Oct 2002 18:38:05 -0000	1.3
  @@ -111,15 +111,18 @@
           {
               return new JetspeedClearElement("Path parameter not set");
           }
  -
  +System.err.println("path = " + path);
           ProfileLocator locator = new BaseProfileLocator();
           locator.createFromPath(path);
           String id = locator.getId();
  +System.err.println("id = " + id);
           
           try
           {
               Profile profile = Profiler.getProfile(locator);   
               PSMLDocument doc = profile.getDocument();
  +System.err.println("doc = " + doc);
  +
               if (doc == null)
               {
                   return null;
  
  
  
  1.1                  jakarta-jetspeed/src/java/org/apache/jetspeed/portal/portlets/WebPagePortlet2.java
  
  Index: WebPagePortlet2.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, 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" and "Apache Software Foundation" and
   *     "Apache Jetspeed" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache" or
   *    "Apache Jetspeed", 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 (INCLUDING, 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.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.jetspeed.portal.portlets;
  
  //Element Construction Set
  import org.apache.jetspeed.util.JetspeedClearElement;
  import org.apache.ecs.ConcreteElement;
  
  //Jetspeed stuff
  import org.apache.jetspeed.portal.PortletConfig;
  import org.apache.jetspeed.portal.PortletException;
  import org.apache.jetspeed.util.rewriter.Rewriter;
  import org.apache.jetspeed.util.rewriter.HTMLRewriter;
  import org.apache.jetspeed.util.Base64;
  
  //turbine
  import org.apache.turbine.util.Log;
  import org.apache.turbine.util.RunData;
  
  //standard java stuff
  import java.io.InputStreamReader;
  import java.io.IOException;
  import java.io.Reader;
  import java.net.URL;
  import java.net.URLConnection;
  
  /**
   * A class that loads a web page and filters it to have certain features
   * deleted.
   *
   * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
   */
  public class WebPagePortlet2 extends AbstractInstancePortlet {
  
      protected Rewriter rewriter = null;
      protected boolean initDone = false;
      protected boolean contentStale = true;
      protected boolean cacheContent = false;
      protected String  username = null;
      protected String  password = null;
      
      /**
       * Initialize this portlet by defining a HTML rewriter.
       * @throws PortletException Initialization failed
       */    
      public void init() throws PortletException {
    
          if (initDone) // Why is init called more than once per portlet?
              return;
  
          PortletConfig config = this.getPortletConfig();
          
          try 
          {
              rewriter = new HTMLRewriter();
  
              // fetch username and password for HTTP Basic Autentication
              username = config.getInitParameter("username");
              password = config.getInitParameter("password");
              
              contentStale = true;
              initDone = true;
          } catch (Exception e) {
              Log.info("Exception occurred:" + e.toString());
              e.printStackTrace();
              throw new PortletException( e.toString() );
          }
      }
      
      /**
       * took this from FileServerPortlet as it was private 
       *
      */
  
      // FIXME: Currently only the expiration the HTTP Response header is honored. 
      //        Expiration information in <meta> tags are not honored 
  
      protected Reader getReader(String url) throws IOException 
      {
          URL            pageUrl = new URL(url);
  
          URLConnection  pageConn = pageUrl.openConnection();
          try
          {
              // set HTTP Basic Authetication header if username and password are set
              if (username != null && password !=null)
              {
                  pageConn.setRequestProperty("Authorization", "Basic " +
                                          Base64.encodeAsString(username + ":" + password));
              }
                  
          }
          catch (Exception e)
          {
              Log.info("Exception occurred:" + e.toString());
              e.printStackTrace();
          }
          
          long           pageExpiration = pageConn.getExpiration();
          String         encoding = pageConn.getContentEncoding();
          String         tempString = null;
          String         noCache = "no-cache";
          
          if(encoding == null)
          {
              // Standard HTTP encoding
              encoding = "iso-8859-1";
          }
  
          /*
           * Determing if content should be cached.
           */
          cacheContent = true; // Assume content is cached
          if (pageExpiration == 0) {
              cacheContent = false;
          }
          // Check header field CacheControl
          tempString = pageConn.getHeaderField( "Cache-Control");
          if (tempString != null) {
              if (tempString.toLowerCase().indexOf(noCache) >= 0) {
                  cacheContent = false;
              }
          }
          // Check header field Pragma
          tempString = pageConn.getHeaderField( "Pragma");
          if (tempString != null) {
              if (tempString.toLowerCase().indexOf(noCache) >= 0) {
                  cacheContent = false;
              }
          }
              
          // Assign a reader
          Reader rdr = new InputStreamReader(pageConn.getInputStream(),
                                             encoding );
  
          // Only set the page expiration it the page has not expired
          if (pageExpiration > System.currentTimeMillis() && (cacheContent == true))
          {
              contentStale = false;
              Log.debug( "WebPagePortlet caching URL: " + 
                         url + 
                         " Expiration: " + 
                         pageExpiration +
                         ", " +
                         (pageExpiration - System.currentTimeMillis() ) +
                         " milliseconds into the future" );
              setExpirationMillis(pageExpiration);
          } else {
              contentStale = true;
          }
  
          return rdr;
      }
  
  
      /**
      This methods outputs the content of the portlet for a given 
      request.
  
      @param data the RunData object for the request
      @return the content to be displayed to the user-agent
      */
      public ConcreteElement getContent( RunData data ) 
      {
          PortletConfig config = this.getPortletConfig();
          
          if (contentStale == true)
              return getWebPageContent(data, config);
          
          if (null == getExpirationMillis())
              return getContent( data, null, true);
          
          if (getExpirationMillis().longValue() <= System.currentTimeMillis())
              return getWebPageContent(data, config);
  
          return getContent( data, null , true );
      }
  
      private ConcreteElement getWebPageContent( RunData data, PortletConfig config )
      {    
          
          String convertedString = null;  // parsed and re-written HTML
          JetspeedClearElement element = null;
  
          String url = selectUrl( data, config );
  
          try 
          {
              Reader htmlReader = getReader( url );
              convertedString = rewriter.rewrite(htmlReader, url);
              element = new JetspeedClearElement(convertedString);
  
              //FIXME: We should do a clearContent() for the media type, not ALL media types
              this.clearContent();  // doing this because setContent() is not overwriting current content.
              this.setContent(element);
  
              htmlReader.close();
  
          } catch (Exception e) {
              Log.info("Exception occurred:" + e.toString());
              e.printStackTrace();
          }        
  
          return element;
      }
      
      /**
       * Usually called by caching system when portlet is marked as expired, but
       * has not be idle longer then TimeToLive.
       *
       * Any cached content that is expired need to be refreshed.
       */
      public void refresh() {
          if (cacheContent == true) {
            getWebPageContent(null, this.getPortletConfig());
          }
      }
  
      /**
      * Select the URL to use for this portlet.
      * @return The URL to use for this portlet
      */
      protected String selectUrl( RunData data, PortletConfig config )
      {
          String url = config.getURL();
  
          return url;
  
      }   // selectUrl
  
  }
  
  
  
  
  1.1                  jakarta-jetspeed/src/java/org/apache/jetspeed/util/Streams.java
  
  Index: Streams.java
  ===================================================================
  /* ====================================================================
   * BBC Syndication Server 1.0
   *
   * Copyright (c) 2002-2003 The BBC.  All rights reserved.
   *
   */
  
  package org.apache.jetspeed.util;
  
  import java.io.ByteArrayOutputStream;
  import java.io.InputStream;
  import java.io.IOException;
  import java.io.OutputStream;
  import java.io.OutputStreamWriter;
  import java.io.Reader;
  import java.io.Writer;
  
  /**
   * <P>Utility functions related to Streams</P>
   *
   * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
   * @version $Id: Streams.java,v 1.1 2002/10/29 18:38:06 taylor Exp $
   */
  public class Streams
  {
    static final int BLOCK_SIZE=4096;
  
    public static void drain(InputStream r,OutputStream w) throws IOException
    {
        byte[] bytes=new byte[BLOCK_SIZE];
        try
        {
          int length=r.read(bytes);
          while(length!=-1)
          {
              if(length!=0)
                  {
                      w.write(bytes,0,length);
                  }
              length=r.read(bytes);
          }
      }
      finally
      {
        bytes=null;
      }
  
    }
  
    public static void drain(Reader r,Writer w) throws IOException
    {
      char[] bytes=new char[BLOCK_SIZE];
      try
      {
          int length=r.read(bytes);
          while(length!=-1)
          {
              if(length!=0)
              {
                  w.write(bytes,0,length);
              }
              length=r.read(bytes);
          }
      }
      finally
      {
          bytes=null;
      }
  
    }
  
    public static void drain(Reader r,OutputStream os) throws IOException
    {
          Writer w=new OutputStreamWriter(os);
          drain(r,w);
          w.flush();
    }
  
    public static byte[] drain(InputStream r) throws IOException
    {
          ByteArrayOutputStream bytes=new ByteArrayOutputStream();
          drain(r,bytes);
          return bytes.toByteArray();
    }
  
    public static String getAsString(InputStream is)
    {
        int c=0;
        char lineBuffer[]=new char[128], buf[]=lineBuffer;
        int room= buf.length, offset=0;
        try
        {
            loop: while (true)
            {
              // read chars into a buffer which grows as needed
                  switch (c = is.read() )
                  {
                      case -1: break loop;
  
                      default: if (--room < 0)
                               {
                                   buf = new char[offset + 128];
                                   room = buf.length - offset - 1;
                                   System.arraycopy(lineBuffer, 0,
                                            buf, 0, offset);
                                   lineBuffer = buf;
                               }
                               buf[offset++] = (char) c;
                               break;
                  }
            }
        }
        catch(IOException ioe)
        {
            ioe.printStackTrace();
        }
        if ((c == -1) && (offset == 0))
        {
            return null;
        }
        return String.copyValueOf(buf, 0, offset);
    }
  
    public static String getAsString(Reader is)
    {
        int c=0;
        char lineBuffer[]=new char[128], buf[]=lineBuffer;
        int room= buf.length, offset=0;
        try
        {
            loop: while (true)
            {
              // read chars into a buffer which grows as needed
                  switch (c = is.read() )
                  {
                      case -1: break loop;
  
                      default: if (--room < 0)
                               {
                                   buf = new char[offset + 128];
                                   room = buf.length - offset - 1;
                                   System.arraycopy(lineBuffer, 0,
                                            buf, 0, offset);
                                   lineBuffer = buf;
                               }
                               buf[offset++] = (char) c;
                               break;
                  }
            }
        }
        catch(IOException ioe)
        {
            ioe.printStackTrace();
        }
        if ((c == -1) && (offset == 0))
        {
            return null;
        }
        return String.copyValueOf(buf, 0, offset);
    }
  
  
  
  }
  
  
  
  
  1.2       +1 -1      jakarta-jetspeed/src/java/org/apache/jetspeed/util/rewriter/FrameRewriterTest.java
  
  Index: FrameRewriterTest.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/util/rewriter/FrameRewriterTest.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- FrameRewriterTest.java	26 Apr 2002 17:05:08 -0000	1.1
  +++ FrameRewriterTest.java	29 Oct 2002 18:38:06 -0000	1.2
  @@ -121,7 +121,7 @@
                       
               reader = new StringReader(HTML);                                           
               HTMLRewriter rewriter = new HTMLRewriter();
  -            String result = rewriter.rewrite(reader);
  +            String result = rewriter.rewrite(reader, null);
               System.out.println(result);
               reader.close();
               reader = null;
  
  
  
  1.2       +3 -17     jakarta-jetspeed/src/java/org/apache/jetspeed/util/rewriter/HTMLParserAdaptor.java
  
  Index: HTMLParserAdaptor.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/util/rewriter/HTMLParserAdaptor.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- HTMLParserAdaptor.java	27 Mar 2002 17:43:58 -0000	1.1
  +++ HTMLParserAdaptor.java	29 Oct 2002 18:38:06 -0000	1.2
  @@ -70,29 +70,15 @@
       /*
        * Parses and rewrites a HTML document, rewriting all URLs as either fully proxied
        * URLs or as web-application full URLs, not relative.
  -     * Given a relative URL, such a "/content/images/my.gif" it can be rewritten as either
  -     * a proxied URL, for example:
        *
  -     *   "http://www.webserver.com?js_path=/content/images/my.gif"
  -     *   
  -     * 
  -     * or a full path to the URL on the web server:
  -     *
  -     *   "http://www.webserver.com/content/images/my.gif"
  -     *
  -     *
  -     * @param html The html content to be converted.
  -     * @param proxyRoot The root URL of the Proxy Server.
  -     * @param baseURL The Base URL of the host being proxied.
  +     * @param reader to the source to be read
        
        * @throws MalformedURLException If the baseUrl is not a valid URL or if an URL inside
        * the document could not be converted.     
        * @return An HTML-String with rewritten URLs.
        */    
       
  -    String run(Reader html,
  -               String proxyRoot,
  -               String baseUrl) 
  +    String run(Reader reader)
               throws MalformedURLException;
   }
   
  
  
  
  1.3       +21 -171   jakarta-jetspeed/src/java/org/apache/jetspeed/util/rewriter/HTMLRewriter.java
  
  Index: HTMLRewriter.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/util/rewriter/HTMLRewriter.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- HTMLRewriter.java	26 Apr 2002 17:05:08 -0000	1.2
  +++ HTMLRewriter.java	29 Oct 2002 18:38:06 -0000	1.3
  @@ -87,80 +87,37 @@
       {
       }
   
  -    /*
  -     * Entry point into rewriting HTML content.
  -     *
  -     * Reads stream from proxied host, runs configured HTML parser against that stream,
  -     * rewriting relevant links, and writes the parsed stream back to the client.
  -     *
  -     * @param input the HTML input stream.
  -     * @param proxyRoot the base URL of the proxy server.
  -     * @param baseURL the base URL of the target host.
  -     * @return the rewritten HTML output stream.
  -     *
  -     * @exception MalformedURLException a servlet exception.
  -     */
  -    public String rewrite(Reader input, 
  -                          String proxyRoot, 
  -                          String baseURL)
  -                               throws MalformedURLException
  -    {
  -        String rewrittenHTML = "";
  -        
  -        this.proxyRoot = proxyRoot;
  -        this.baseURL = baseURL;
  -        HTMLParserAdaptor parser = new SwingParserAdaptor(this);
  -        rewrittenHTML = parser.run(input, proxyRoot, baseURL);
  -
  -        return rewrittenHTML;
  -    }
  -
  -    private String proxyRoot;
  -    private String baseURL;
  -
  -    public final static String DEFAULT_PROXY_PARAM = "js_path";
  +    protected String baseURL = null;
   
       /*    
        * This callback is called by the HTMLParserAdaptor implementation to write
        * back all rewritten URLs to point to the proxy server.
        * Given the targetURL, rewrites the link as a link back to the proxy server.
        *
  -     * @param targetURL the URL to be rewritten back to the proxy server.
  -     * @param baseURL the base URL of the target host.
  -     * @param proxyURL the base URL of the proxy server.
        * @return the rewritten URL to the proxy server.
        *
  -     * @exception MalformedURLException a servlet exception.
        */
       public String generateNewUrl( String targetURL, HTML.Tag tag, HTML.Attribute attribute)
  -                                //  String  targetURL, 
  -                                // String     baseURL,
  -                                // String     proxyURL,
  -                                // boolean proxied)
       {
  -        try {                
  -
  -            URL full = new URL(new URL(proxyRoot), targetURL);
  -            String fullPath = full.toString();
  -
  -            // some attributes shouldn't be proxied, like images, stylesheetrefs
  -
  -            StringBuffer buffer = new StringBuffer(proxyRoot.toString());
  -            buffer.append("?");
  -             buffer.append(DEFAULT_PROXY_PARAM);
  -            buffer.append("=");
  -            buffer.append(URLEncoder.encode(fullPath));
  -            String proxiedPath = buffer.toString().replace('&', '@');
  -            return proxiedPath;
  +        String fullPath = "";
  +        try
  +        {
   
  -        } 
  -        catch (Throwable t)
  +            if (baseURL != null)
  +            {
  +                URL full = new URL(new URL(baseURL), targetURL);
  +                fullPath = full.toString();
  +            }
  +            else
  +            {
  +                return targetURL; // leave as is
  +            }
  +        }
  +        catch (Exception e)
           {
  -            //FIXME: transient print to debug...
  -            System.err.println( "HTMLRewriter: BASE=" + proxyRoot);
  -            System.err.println( "target=" + targetURL);
  -            return URLEncoder.encode(targetURL);    
  +            System.err.println(e);
           }
  +        return fullPath;
   
       }
   
  @@ -175,124 +132,17 @@
           return true; //false;
       }
   
  -    public String rewrite(Reader input)
  +    public String rewrite(Reader input, String baseURL)
                                  throws MalformedURLException
       {
           String rewrittenHTML = "";
  +        this.baseURL = baseURL;
   
           HTMLParserAdaptor parser = new SwingParserAdaptor(this);
  -        rewrittenHTML = parser.run(input, this.proxyRoot, this.baseURL);
  +        rewrittenHTML = parser.run(input);
   
           return rewrittenHTML;
       }
  -
  -
  -    public static byte[] rewriteScript(String script, 
  -                                       String url,
  -                                       String proxyHost,
  -                                       String base)
  -                  throws IOException 
  -    {
  -        int baseLength = base.length();
  -
  -        int totalScriptLength = script.length();
  -        CharArrayWriter writer = new CharArrayWriter(totalScriptLength + 100);
  -        char chars[] = script.toCharArray();
  -        boolean translating = false;        
  -
  -        // now rewrite the script stream
  -        for (int ix=0; ix < chars.length; ix++)         
  -        {
  -            if (chars[ix] == '"')
  -            {
  -                //int endpos= ix + len + 1;
  -                if (translating) 
  -                    translating = false;
  -                else if (false == translating ) //&& 
  -                  //       endpos < totalScriptLength)
  -                {
  -                        translating = true;
  -                        writer.write(chars[ix]);
  -
  -                        if (!findImage(chars, ix + 1))
  -                            continue;
  -
  -                        String trans = translate(proxyHost, base);
  -                        writer.write(trans);
  -                        if (chars[ix+1] != PATH_SEPARATOR && base.charAt(baseLength - 1) != PATH_SEPARATOR) 
  -                            writer.write(PATH_SEPARATOR);
  -                        if (chars[ix+1] == PATH_SEPARATOR && base.charAt(baseLength - 1) == PATH_SEPARATOR)
  -                            ix++;
  -
  -                        continue;
  -                }
  -            }
  -            if (translating && chars[ix] == '&') 
  -                writer.write('@');
  -            else
  -                writer.write(chars[ix]);
  -        }
  -
  -        return writer.toString().getBytes();
  -    }
  -
  -
  -    public static String translate(String proxyURL, String targetURL)
  -     {
  -         StringBuffer buffer = new StringBuffer(proxyURL);
  -         buffer.append("?");
  -         buffer.append(DEFAULT_PROXY_PARAM);
  -         buffer.append("=");
  -         buffer.append(targetURL.replace('&', '@'));
  -         String proxiedPath = buffer.toString();                
  -
  -         return proxiedPath;
  -     }
  -
  -    /*
  -     * Finds an image hyperlink in a quoted string.
  -     * The image hyperlink is found by searching through the script text, searching
  -     * for references ending in typical image extensions (GIF, PNG, JPG).
  -     *
  -     * NOTE: this function is just the start of script-parsing.
  -     * A much more robust implementation will be necessary.
  -     *
  -     * @param chars The character array to search.
  -     * @param ix The starting index to search from in the character array.
  -     * @return If the image string is found, returns true otherwise false.
  -     *
  -     */
  -    protected static boolean findImage(char[] chars, int ix)
  -    {
  -        for (int iy=ix; iy < chars.length  ; iy++)
  -        {
  -            if (chars[iy] == '"')
  -                return false;
  -            if (chars[iy] == '.')                
  -            {
  -                int iw = 0;
  -                for (int iz = iy+1; iz < chars.length && iw < 3; iz++, iw++ )
  -                {
  -                    if (chars[iz] == GIF[iw] || chars[iz] == PNG[iw] || chars[iz] == JPG[iw])
  -                    {
  -                        continue;
  -                    }
  -                    else
  -                        return false;
  -                }
  -                if (iw == 3)
  -                    return true;
  -
  -                return false;
  -            }
  -        }
  -        return false;
  -    }
  -    
  -    private static final char[] GIF = {'g', 'i', 'f'};
  -    private static final char[] PNG = {'p', 'n', 'g'};
  -    private static final char[] JPG = {'j', 'p', 'g'};
  -    protected static final char PATH_SEPARATOR = '/';
   
       /*
        * Simple Tag Events
  
  
  
  1.3       +5 -5      jakarta-jetspeed/src/java/org/apache/jetspeed/util/rewriter/Rewriter.java
  
  Index: Rewriter.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/util/rewriter/Rewriter.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Rewriter.java	26 Apr 2002 17:05:08 -0000	1.2
  +++ Rewriter.java	29 Oct 2002 18:38:06 -0000	1.3
  @@ -84,14 +84,14 @@
        * rewriting relevant links, and writes the parsed stream back to the client.
        *
        * @param input the HTML input stream.
  -     * @param proxyRoot the base URL of the proxy server.
  -     * @param baseURL the base URL of the target host.
  +     * @param input the base URL host string used to create full links back to host
        * @return the rewritten HTML output stream.
        *
        * @exception MalformedURLException a servlet exception.
        */
  -    String rewrite(Reader input, String proxyRoot, String baseURL)
  -                               throws MalformedURLException;
  +    String rewrite(Reader input, String baseURL)
  +            throws MalformedURLException;
  +                               
   
       /* <p>
        * This callback is called by the HTMLParserAdaptor implementation to write
  
  
  
  1.3       +4 -4      jakarta-jetspeed/src/java/org/apache/jetspeed/util/rewriter/SampleRewriter.java
  
  Index: SampleRewriter.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/util/rewriter/SampleRewriter.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SampleRewriter.java	26 Apr 2002 17:12:46 -0000	1.2
  +++ SampleRewriter.java	29 Oct 2002 18:38:06 -0000	1.3
  @@ -126,20 +126,20 @@
        * rewriting relevant links, and writes the parsed stream back to the client.
        *
        * @param input the HTML input stream.
  -     * @param proxyRoot the base URL of the proxy server.
        * @param baseURL the base URL of the target host.
        * @return the rewritten HTML output stream.
        *
        * @exception MalformedURLException a servlet exception.
        */
   
  -    public String rewrite(Reader input)
  +    public String rewrite(Reader input, String baseURL)
                                  throws MalformedURLException
       {
           String rewrittenHTML = "";
  +        this.basePortalURL = baseURL;
   
           HTMLParserAdaptor parser = new SwingParserAdaptor(this);
  -        rewrittenHTML = parser.run(input, fullPortalURL, sampleURL);
  +        rewrittenHTML = parser.run(input);
   
           return rewrittenHTML;
       }
  
  
  
  1.3       +18 -38    jakarta-jetspeed/src/java/org/apache/jetspeed/util/rewriter/SwingParserAdaptor.java
  
  Index: SwingParserAdaptor.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/util/rewriter/SwingParserAdaptor.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SwingParserAdaptor.java	26 Apr 2002 17:05:08 -0000	1.2
  +++ SwingParserAdaptor.java	29 Oct 2002 18:38:06 -0000	1.3
  @@ -96,30 +96,16 @@
       }
   
       /*
  -     * Parses and rewrites a HTML document, rewriting all URLs as either fully proxied
  -     * URLs or as web-application full URLs, not relative.
  -     * Given a relative URL, such a "/content/images/my.gif" it can be rewritten as either
  -     * a proxied URL, for example:
  +     * Parses and an HTML document, rewriting all URLs as determined by the Rewriter callback
        *
  -     *   "http://proxyserver/proxy?pxpath=/content/images/my.gif"
  -     * 
  -     * or a full path to the URL on the web server:
        *
  -     *   "http://www.webserver.com/content/images/my.gif"
  +     * @param reader The input stream reader 
        *
  -     * In all cases in MMS, the proxy is rewritten as in the first example, proxied.
  +     * @throws MalformedURLException 
        *
  -     * @param html The html content to be converted.
  -     * @param proxyRoot The root URL of the Proxy Server.
  -     * @param baseURL The Base URL of the host being proxied.
  -     
  -     * @throws MalformedURLException If the baseUrl is not a valid URL or if an URL inside
  -     * the document could not be converted.     
        * @return An HTML-String with rewritten URLs.
        */    
  -    public String run(Reader reader, 
  -                      String proxyRoot,
  -                      String baseUrl)
  +    public String run(Reader reader)
       throws MalformedURLException
       {
           HTMLEditorKit.Parser parser = new SwingParserAdaptor.ParserGetter().getParser();        
  @@ -127,10 +113,6 @@
           String res ="";
           try
           {
  -//            cb.baseURL = new URL(baseUrl);
  -//            cb.proxyURL = new URL(proxyRoot);
  -            cb.baseURL = baseUrl;
  -            cb.proxyURL = proxyRoot;
               parser.parse(reader, cb, true);
               res = cb.getResult(); 
           } catch (Exception e)
  @@ -163,11 +145,6 @@
       class Callback extends HTMLEditorKit.ParserCallback
       {
   
  -        // the base-url of which the given html comes from.
  -//        private URL baseURL;
  -//        private URL proxyURL;
  -        private String baseURL;
  -        private String proxyURL;
   
           // either handling of <FORM> is buggy, or I made some weird mistake ... 
           // ... JDK 1.3 sends double "</form>"-tags on closing <form>
  @@ -193,10 +170,10 @@
            */
           public void handleText(char[] values,int param) 
           {
  -            if (false == emit)
  -                return;
  -            if (values[0] == '>')
  -                return;
  +             if (false == emit)                               
  +                 return;                                      
  +             if (values[0] == '>')                            
  +                 return;                                      
   
               addToResult(values);
           }
  @@ -262,14 +239,14 @@
   
   
           boolean isValidFragmentTag(HTML.Tag tag)
  -        {
  +        {                    
  +            /*
               if (false == emit)
                   return false;
   
               if (tag == HTML.Tag.HTML)  // always strip out HTML tag for fragments
                   return false;
   
  -
               if (tag == HTML.Tag.BODY)
                   return false;
   
  @@ -281,7 +258,7 @@
   
               if (tag == HTML.Tag.NOFRAMES)  
                   return false;
  -
  +              */
               return true;
           }
   
  @@ -313,8 +290,10 @@
               String appended = rewriter.exitEndTagEvent(tag);
               if (null != appended)
                   result.write(appended);
  +
           }
   
  +
           /*
            * Hot Java event callback for handling errors.
            *
  @@ -575,8 +554,9 @@
                       // always post
                       attrs.addAttribute(HTML.Attribute.METHOD, "POST");                      
                       //self referencing <FORM>
  -                    attrs.addAttribute(HTML.Attribute.ACTION,
  -                                       baseURL);
  +                    
  +                    // attrs.addAttribute(HTML.Attribute.ACTION,
  +                    //                   baseURL);
   
                   } else
                   {
  @@ -706,7 +686,7 @@
                                         boolean proxied)
           {
               String oldURL =  attrs.getAttribute( attr ).toString();
  -
  +            // System.out.println("Generating new url: " + oldURL);
               return rewriter.generateNewUrl(oldURL, tag, attr);
           }
   
  
  
  
  1.1                  jakarta-jetspeed/src/java/org/apache/jetspeed/util/rewriter/ProxyRewriter.java
  
  Index: ProxyRewriter.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, 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" and "Apache Software Foundation" and
   *     "Apache Jetspeed" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache" or
   *    "Apache Jetspeed", 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 (INCLUDING, 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.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.jetspeed.util.rewriter;
  
  // java.io
  import java.io.IOException;
  import java.io.CharArrayWriter;
  import java.io.Reader;
  
  // java.net
  import java.net.MalformedURLException;
  import java.net.URL;
  import java.net.URLEncoder;                 
  
  // this makes it dependent on Swing...need an abstraction WTP
  import javax.swing.text.html.HTML;
  import javax.swing.text.MutableAttributeSet;
   
  /**
   *                  
   * Proxy Rewriter for rewriting HTML content with links back to a proxy host.
   * URLs or as web-application full URLs, not relative.
   * Given a relative URL, such a "/content/images/my.gif" it can be rewritten as either
   * a proxied URL, for example:
   *
   *   "http://proxyserver/proxy?pxpath=/content/images/my.gif"
   * 
   * or a full path to the URL on the web server:
   *
   *   "http://www.webserver.com/content/images/my.gif" 
   *
   * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
   * @version $Id: ProxyRewriter.java,v 1.1 2002/10/29 18:38:06 taylor Exp $
   * 
   */
  
  public class ProxyRewriter implements Rewriter
  {
      /*
       * Construct a basic HTML Rewriter
       *
       */
      public ProxyRewriter()
      {
      }
  
      /*
       * Entry point into rewriting HTML content.
       *
       * Reads stream from proxied host, runs configured HTML parser against that stream,
       * rewriting relevant links, and writes the parsed stream back to the client.
       *
       * @param input the HTML input stream.
       * @param proxyRoot the base URL of the proxy server.
       * @param baseURL the base URL of the target host.
       * @return the rewritten HTML output stream.
       *
       * @exception MalformedURLException a servlet exception.
       */
      public String rewrite(Reader input, 
                            String proxyRoot, 
                            String baseURL)
                                 throws MalformedURLException
      {
          String rewrittenHTML = "";
          
          this.proxyRoot = proxyRoot;
          this.baseURL = baseURL;
          HTMLParserAdaptor parser = new SwingParserAdaptor(this);
          rewrittenHTML = parser.run(input);
  
          return rewrittenHTML;
      }
  
      private String proxyRoot;
      private String baseURL;
  
      public final static String DEFAULT_PROXY_PARAM = "js_path";
  
      /*    
       * This callback is called by the HTMLParserAdaptor implementation to write
       * back all rewritten URLs to point to the proxy server.
       * Given the targetURL, rewrites the link as a link back to the proxy server.
       *
       * @param targetURL the URL to be rewritten back to the proxy server.
       * @param baseURL the base URL of the target host.
       * @param proxyURL the base URL of the proxy server.
       * @return the rewritten URL to the proxy server.
       *
       * @exception MalformedURLException a servlet exception.
       */
      public String generateNewUrl( String targetURL, HTML.Tag tag, HTML.Attribute attribute)
                                  //  String  targetURL, 
                                  // String     baseURL,
                                  // String     proxyURL,
                                  // boolean proxied)
      {
          try {                
  
              URL full = new URL(new URL(proxyRoot), targetURL);
              String fullPath = full.toString();
  
              StringBuffer buffer = new StringBuffer(proxyRoot.toString());
              buffer.append("?");
               buffer.append(DEFAULT_PROXY_PARAM);
              buffer.append("=");
              buffer.append(URLEncoder.encode(fullPath));
              String proxiedPath = buffer.toString().replace('&', '@');
              return proxiedPath;
  
          } 
          catch (Throwable t)
          {
              //FIXME: transient print to debug...
              System.err.println( "HTMLRewriter: BASE=" + proxyRoot);
              System.err.println( "target=" + targetURL);
              return URLEncoder.encode(targetURL);    
          }
  
      }
  
      
      /*
       * Returns true if all rewritten URLs should be sent back to the proxy server.
       *
       * @return true if all URLs are rewritten back to proxy server.
       */
      public boolean proxyAllTags()
      {
          return true; //false;
      }
  
      public String rewrite(Reader input, String baseURL)
                                 throws MalformedURLException
      {
          String rewrittenHTML = "";
          this.baseURL = baseURL;
  
          HTMLParserAdaptor parser = new SwingParserAdaptor(this);
          rewrittenHTML = parser.run(input);
  
          return rewrittenHTML;
      }
  
  
      public static byte[] rewriteScript(String script, 
                                         String url,
                                         String proxyHost,
                                         String base)
                    throws IOException 
      {
          int baseLength = base.length();
  
          int totalScriptLength = script.length();
          CharArrayWriter writer = new CharArrayWriter(totalScriptLength + 100);
          char chars[] = script.toCharArray();
          boolean translating = false;        
  
          // now rewrite the script stream
          for (int ix=0; ix < chars.length; ix++)         
          {
              if (chars[ix] == '"')
              {
                  //int endpos= ix + len + 1;
                  if (translating) 
                      translating = false;
                  else if (false == translating ) //&& 
                    //       endpos < totalScriptLength)
                  {
                          translating = true;
                          writer.write(chars[ix]);
  
                          if (!findImage(chars, ix + 1))
                              continue;
  
                          String trans = translate(proxyHost, base);
                          writer.write(trans);
                          if (chars[ix+1] != PATH_SEPARATOR && base.charAt(baseLength - 1) != PATH_SEPARATOR) 
                              writer.write(PATH_SEPARATOR);
                          if (chars[ix+1] == PATH_SEPARATOR && base.charAt(baseLength - 1) == PATH_SEPARATOR)
                              ix++;
  
                          continue;
                  }
              }
              if (translating && chars[ix] == '&') 
                  writer.write('@');
              else
                  writer.write(chars[ix]);
          }
  
          return writer.toString().getBytes();
      }
  
  
      public static String translate(String proxyURL, String targetURL)
       {
           StringBuffer buffer = new StringBuffer(proxyURL);
           buffer.append("?");
           buffer.append(DEFAULT_PROXY_PARAM);
           buffer.append("=");
           buffer.append(targetURL.replace('&', '@'));
           String proxiedPath = buffer.toString();                
  
           return proxiedPath;
       }
  
      /*
       * Finds an image hyperlink in a quoted string.
       * The image hyperlink is found by searching through the script text, searching
       * for references ending in typical image extensions (GIF, PNG, JPG).
       *
       * NOTE: this function is just the start of script-parsing.
       * A much more robust implementation will be necessary.
       *
       * @param chars The character array to search.
       * @param ix The starting index to search from in the character array.
       * @return If the image string is found, returns true otherwise false.
       *
       */
      protected static boolean findImage(char[] chars, int ix)
      {
          for (int iy=ix; iy < chars.length  ; iy++)
          {
              if (chars[iy] == '"')
                  return false;
              if (chars[iy] == '.')                
              {
                  int iw = 0;
                  for (int iz = iy+1; iz < chars.length && iw < 3; iz++, iw++ )
                  {
                      if (chars[iz] == GIF[iw] || chars[iz] == PNG[iw] || chars[iz] == JPG[iw])
                      {
                          continue;
                      }
                      else
                          return false;
                  }
                  if (iw == 3)
                      return true;
  
                  return false;
              }
          }
          return false;
      }
      
      private static final char[] GIF = {'g', 'i', 'f'};
      private static final char[] PNG = {'p', 'n', 'g'};
      private static final char[] JPG = {'j', 'p', 'g'};
      protected static final char PATH_SEPARATOR = '/';
  
      /*
       * Simple Tag Events
       */
      public boolean enterSimpleTagEvent(HTML.Tag tag, MutableAttributeSet attrs)
      {
          return true;
      }
  
      public String exitSimpleTagEvent(HTML.Tag tag, MutableAttributeSet attrs)
      {
          return null;
      }
  
      /*
       * Start Tag Events
       */
      public boolean enterStartTagEvent(HTML.Tag tag, MutableAttributeSet attrs)
      {
          return true;
      }
  
      public String exitStartTagEvent(HTML.Tag tag, MutableAttributeSet attrs)
      {
          return null;
      }
  
      /*
       * Exit Tag Events
       */
      public boolean enterEndTagEvent(HTML.Tag tag)
      {
          return true;
      }
  
      public String exitEndTagEvent(HTML.Tag tag)
      {
          return null;
      }
  
  
      /*
       * Convert Tag Events
       */
      public void convertTagEvent(HTML.Tag tag, MutableAttributeSet attrs)
      {
      }
  
  }
  
  
  
  
  
  1.1                  jakarta-jetspeed/src/java/org/apache/jetspeed/util/rewriter/TestRewriter.java
  
  Index: TestRewriter.java
  ===================================================================
  /* ====================================================================
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, 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" and "Apache Software Foundation" and
   *     "Apache Jetspeed" must not be used to endorse or promote products
   *    derived from this software without prior written permission. For
   *    written permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache" or
   *    "Apache Jetspeed", 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 (INCLUDING, 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.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  package org.apache.jetspeed.util.rewriter;
  
  import junit.framework.Test;
  import junit.framework.TestCase;
  import junit.framework.TestSuite;
  import junit.framework.Assert;
   
  import java.io.Reader;
  import java.io.StringReader;
  import java.io.FileReader;
  import java.io.BufferedReader;
  import java.io.InputStreamReader;
  import java.io.IOException;
  
  import java.net.URL;
  import java.net.URLConnection;
  
  import org.apache.jetspeed.util.Streams;
  
  
  public class TestRewriter // extends TestCase 
  {
      /*
      static public Test suite()
      {
          TestSuite suite = new TestSuite(TestRewriter.class);
          return(suite);
      }
        */
      public TestRewriter(String name)
      {
          //super(name);
      }
  
      ///////////////////////////////////////////////////////////////////////////
              
  
      protected void setUp()
      {
      }
  
      protected void tearDown()
      {
      }
  
  
      ///////////////////////////////////////////////////////////////////////////
  
      public void testPage()
      {
          Reader reader = null;
  
          try 
          {
              String baseURL = "http://java.sun.com/";
              String fullURL = "http://java.sun.com/";
  
              //URL pageUrl = new URL("http://www.devx.com/Java/Article/9747/");
              URL pageUrl = new URL(fullURL);
  
              URLConnection  pageConn = pageUrl.openConnection();
              String         encoding = pageConn.getContentEncoding();
  
              if(encoding == null)
              {
                  // Standard HTTP encoding
                  encoding = "iso-8859-1";
              }
  
              reader = new InputStreamReader(pageConn.getInputStream(),
                                                 encoding );
              
              //String crap = Streams.getAsString(reader);
              //System.out.println("crap = " + crap);
              
              HTMLRewriter rewriter = new HTMLRewriter();
  
              // String result = rewriter.rewrite(reader, "XXXX", "YYYY");
              String result = rewriter.rewrite(reader, baseURL);
              System.out.println(result);
              
              reader.close();
              reader = null;
  
          } catch (Exception e) 
          {
              System.err.println("Exception occurred:" + e.toString());
              e.printStackTrace();
          }
          finally
          {
              try
              {
                  if (null != reader)
                      reader.close();
              }
              catch (Exception e)
              {}
          }
      }
  
      ///////////////////////////////////////////////////////////////////////////
  
      static public void main(String[] argv)
      {
          // String[] testCaseName = {TestRewriter.class.getName()};
          // junit.swingui.TestRunner.main(testCaseName);
          TestRewriter trw = new TestRewriter("test");
          trw.testPage();
  
      }
  
  }
  
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>