bloritsch    01/10/11 07:34:44

  Modified:    src/org/apache/cocoon Main.java
               src/org/apache/cocoon/servlet CocoonServlet.java
  Added:       src/META-INF/services
                        org.apache.batik.util.ParsedURLProtocolHandler
               src/org/apache/cocoon/components/url
                        ParsedContextURLProtocolHandler.java
  Log:
  Add support for "context://" urls in Batik
  
  Revision  Changes    Path
  1.1                  
xml-cocoon2/src/META-INF/services/org.apache.batik.util.ParsedURLProtocolHandler
  
  Index: org.apache.batik.util.ParsedURLProtocolHandler
  ===================================================================
  org.apache.cocoon.components.url.ParsedContextURLProtocolHandler #context:// 
urls
  
  
  
  1.22      +3 -1      xml-cocoon2/src/org/apache/cocoon/Main.java
  
  Index: Main.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/Main.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- Main.java 2001/10/10 11:18:05     1.21
  +++ Main.java 2001/10/11 14:34:44     1.22
  @@ -23,6 +23,7 @@
   import org.apache.cocoon.util.IOUtils;
   import org.apache.cocoon.util.MIMEUtils;
   import org.apache.cocoon.util.NetUtils;
  +import org.apache.cocoon.components.url.ParsedContextURLProtocolHandler;
   import org.apache.log.Hierarchy;
   import org.apache.log.Logger;
   import org.apache.log.Priority;
  @@ -34,7 +35,7 @@
    * Command line entry point.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
  - * @version CVS $Revision: 1.21 $ $Date: 2001/10/10 11:18:05 $
  + * @version CVS $Revision: 1.22 $ $Date: 2001/10/11 14:34:44 $
    */
   
   public class Main {
  @@ -260,6 +261,7 @@
               CommandlineContext clContext = new 
CommandlineContext(contextDir);
               clContext.setLogger(log);
               appContext.put(Constants.CONTEXT_ENVIRONMENT_CONTEXT, clContext);
  +            ParsedContextURLProtocolHandler.setContext(clContext);
               DefaultLogKitManager logKitManager = null;
               if(logKit != null) {
                   final FileInputStream fis = new FileInputStream(logKit);
  
  
  
  1.1                  
xml-cocoon2/src/org/apache/cocoon/components/url/ParsedContextURLProtocolHandler.java
  
  Index: ParsedContextURLProtocolHandler.java
  ===================================================================
  /*****************************************************************************
   * Copyright (C) The Apache Software Foundation. All rights reserved.        *
   * ------------------------------------------------------------------------- *
   * This software is published under the terms of the Apache Software License *
   * version 1.1, a copy of which has been included  with this distribution in *
   * the LICENSE file.                                                         *
   
*****************************************************************************/
  package org.apache.cocoon.components.url;
  
  import org.apache.batik.util.AbstractParsedURLProtocolHandler;
  import org.apache.batik.util.ParsedURL;
  import org.apache.batik.util.ParsedURLData;
  import org.apache.cocoon.environment.Context;
  import java.net.MalformedURLException;
  
  
  /**
   * Provide an extension to Batik to handle the "context:" protocol.  This 
class
   * assumes it will live in a separate classloader as the Context is set 
statically.
   * Batik uses the Jar file Services extension, so the class is instantiated in
   * an uncontrolled manner (as far as Cocoon is concerned).
   *
   * @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
   * @version $Id: ParsedContextURLProtocolHandler.java,v 1.1 2001/10/11 
14:34:44 bloritsch Exp $
   */
  public class ParsedContextURLProtocolHandler extends 
AbstractParsedURLProtocolHandler {
      private static Context context = null;
  
      /**
       * Set the ServletContext for this protocol.  If it does not exist, you 
will
       * get NullPointerExceptions!
       */
      public static final void setContext(final Context newContext) {
          if (ParsedContextURLProtocolHandler.context == null) {
              ParsedContextURLProtocolHandler.context = newContext;
          }
      }
  
      /**
       * Create a new instance, this doesn't do much beyond register the type of
       * protocol we handle.
       */
      public ParsedContextURLProtocolHandler() {
          super("context");
      }
  
      /**
       * Getbase.getPath() the ParsedURLData for the context.  Absolute URIs 
are specified like
       * "context://".
       */
      public ParsedURLData parseURL(String uri) {
          try {
              return new ParsedURLData(ParsedContextURLProtocolHandler.context
                                   
.getResource(uri.substring("context://".length())));
          } catch (MalformedURLException mue) {
              StringBuffer baseFile = new 
StringBuffer(ParsedContextURLProtocolHandler
                                                       
.context.getRealPath("/"));
  
              if ( !baseFile.toString().endsWith("/")) {
                  baseFile.append("/");
              }
  
              baseFile.append(baseFile);
              baseFile.append(uri.substring("context://".length()));
  
              ParsedURLData purl = new ParsedURLData();
              purl.protocol = "file";
              purl.path = baseFile.toString();
              return purl;
          }
      }
  
      /**
       * The build the relative URL.  Relative URIs are specified like 
"context:".
       */
      public ParsedURLData parseURL(ParsedURL base, String uri) {
          StringBuffer newURI = new StringBuffer("context://");
          newURI.append(base.getPath());
  
          if ( !newURI.toString().endsWith("/") ) {
              newURI.append("/");
          }
  
          newURI.append(uri.substring("context:".length()));
  
          return this.parseURL(newURI.toString());
      }
  }
  
  
  1.44      +5 -2      
xml-cocoon2/src/org/apache/cocoon/servlet/CocoonServlet.java
  
  Index: CocoonServlet.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/org/apache/cocoon/servlet/CocoonServlet.java,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- CocoonServlet.java        2001/10/11 09:06:02     1.43
  +++ CocoonServlet.java        2001/10/11 14:34:44     1.44
  @@ -17,6 +17,7 @@
   import org.apache.avalon.framework.logger.Loggable;
   import org.apache.cocoon.*;
   import org.apache.cocoon.components.classloader.RepositoryClassLoader;
  +import org.apache.cocoon.components.url.ParsedContextURLProtocolHandler;
   import org.apache.cocoon.environment.Environment;
   import org.apache.cocoon.environment.http.HttpContext;
   import org.apache.cocoon.environment.http.HttpEnvironment;
  @@ -58,7 +59,7 @@
    * @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
    * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
    * @author <a href="mailto:[EMAIL PROTECTED]">Leo Sutic</a>
  - * @version CVS $Revision: 1.43 $ $Date: 2001/10/11 09:06:02 $
  + * @version CVS $Revision: 1.44 $ $Date: 2001/10/11 14:34:44 $
    */
   
   public class CocoonServlet extends HttpServlet {
  @@ -123,7 +124,9 @@
           String value;
   
           this.servletContext = conf.getServletContext();
  -        this.appContext.put(Constants.CONTEXT_ENVIRONMENT_CONTEXT, new 
HttpContext(this.servletContext));
  +        HttpContext envContext = new HttpContext(this.servletContext);
  +        this.appContext.put(Constants.CONTEXT_ENVIRONMENT_CONTEXT, 
envContext);
  +        ParsedContextURLProtocolHandler.setContext(envContext);
   
           this.initLogger();
   
  
  
  

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