remm        01/01/11 22:59:08

  Modified:    catalina/src/share/org/apache/naming/resources
                        BaseDirContext.java FileDirContext.java
  Added:       catalina/src/share/org/apache/naming/resources
                        DirContextURLConnection.java
                        DirContextURLStreamHandler.java
  Log:
  - Add a URL handler for the "jndi" protocol, which allow access to JNDI
    directory contexts. I don't know yet if a StreamHandlerFactory will be
    necessary to solve the classloader repository initialization problems.
  - Add additional constructors for the contexts.
  
  Revision  Changes    Path
  1.2       +13 -5     
jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/resources/BaseDirContext.java
  
  Index: BaseDirContext.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/resources/BaseDirContext.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BaseDirContext.java       2001/01/10 04:46:49     1.1
  +++ BaseDirContext.java       2001/01/12 06:59:08     1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/resources/BaseDirContext.java,v
 1.1 2001/01/10 04:46:49 remm Exp $
  - * $Revision: 1.1 $
  - * $Date: 2001/01/10 04:46:49 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/resources/BaseDirContext.java,v
 1.2 2001/01/12 06:59:08 remm Exp $
  + * $Revision: 1.2 $
  + * $Date: 2001/01/12 06:59:08 $
    *
    * ====================================================================
    *
  @@ -85,7 +85,7 @@
    * Directory Context implementation helper class.
    *
    * @author Remy Maucherat
  - * @version $Revision: 1.1 $ $Date: 2001/01/10 04:46:49 $
  + * @version $Revision: 1.2 $ $Date: 2001/01/12 06:59:08 $
    */
   
   public abstract class BaseDirContext implements DirContext {
  @@ -98,7 +98,15 @@
   
   
       /**
  -     * Builds a proxy directory context using the given environment.
  +     * Builds a base directory context.
  +     */
  +    public BaseDirContext() {
  +        this.env = new Hashtable();
  +    }
  +
  +
  +    /**
  +     * Builds a base directory context using the given environment.
        */
       public BaseDirContext(Hashtable env) {
           this.env = env;
  
  
  
  1.2       +16 -7     
jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/resources/FileDirContext.java
  
  Index: FileDirContext.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/resources/FileDirContext.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- FileDirContext.java       2001/01/10 04:46:49     1.1
  +++ FileDirContext.java       2001/01/12 06:59:08     1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/resources/FileDirContext.java,v
 1.1 2001/01/10 04:46:49 remm Exp $
  - * $Revision: 1.1 $
  - * $Date: 2001/01/10 04:46:49 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/resources/FileDirContext.java,v
 1.2 2001/01/12 06:59:08 remm Exp $
  + * $Revision: 1.2 $
  + * $Date: 2001/01/12 06:59:08 $
    *
    * ====================================================================
    *
  @@ -97,7 +97,7 @@
    * Filesystem Directory Context implementation helper class.
    *
    * @author Remy Maucherat
  - * @version $Revision: 1.1 $ $Date: 2001/01/10 04:46:49 $
  + * @version $Revision: 1.2 $ $Date: 2001/01/12 06:59:08 $
    */
   
   public class FileDirContext extends BaseDirContext {
  @@ -118,6 +118,14 @@
       /**
        * Builds a file directory context using the given environment.
        */
  +    public FileDirContext() {
  +        super();
  +    }
  +
  +
  +    /**
  +     * Builds a file directory context using the given environment.
  +     */
       public FileDirContext(Hashtable env) {
           super(env);
       }
  @@ -517,7 +525,7 @@
       public void bind(String name, Object obj, Attributes attrs)
           throws NamingException {
           // No custom attributes
  -        bind(name, obj);
  +        // FIXME
       }
   
   
  @@ -542,7 +550,7 @@
       public void rebind(String name, Object obj, Attributes attrs)
           throws NamingException {
           // No custom attributes
  -        rebind(name, obj);
  +        // FIXME
       }
   
   
  @@ -565,7 +573,8 @@
        */
       public DirContext createSubcontext(String name, Attributes attrs)
           throws NamingException {
  -        return (DirContext) createSubcontext(name);
  +        // FIXME
  +        return null;
       }
   
   
  
  
  
  1.1                  
jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/resources/DirContextURLConnection.java
  
  Index: DirContextURLConnection.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/resources/DirContextURLConnection.java,v
 1.1 2001/01/12 06:59:08 remm Exp $
   * $Revision: 1.1 $
   * $Date: 2001/01/12 06:59:08 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999 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 acknowlegement:  
   *       "This product includes software developed by the 
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written 
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 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/>.
   *
   * [Additional notices, if required by prior licensing conditions]
   *
   */ 
  
  package org.apache.naming.resources;
  
  import java.net.URL;
  import java.net.URLConnection;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.FileNotFoundException;
  import javax.naming.NamingException;
  import javax.naming.directory.DirContext;
  import javax.naming.directory.Attribute;
  import javax.naming.directory.Attributes;
  import org.apache.naming.resources.Resource;
  import org.apache.naming.resources.ResourceAttributes;
  
  /**
   * Connection to a JNDI directory context.
   * <p/>
   * Note: All the object attribute names are the WebDAV names, not the HTTP 
   * names, so this class overrides some methods from URLConnection to do the
   * queries using the right names. Content handler is also not used; the 
   * content is directly returned.
   * 
   * @author <a href="mailto:[EMAIL PROTECTED]">Remy Maucherat</a>
   * @version $Revision: 1.1 $
   */
  public class DirContextURLConnection 
      extends URLConnection {
      
      
      // ----------------------------------------------------------- Constructors
      
      
      public DirContextURLConnection(DirContext context, URL url) {
          super(url);
          this.context = context;
      }
      
      
      // ----------------------------------------------------- Instance Variables
      
      
      /**
       * Directory context.
       */
      protected DirContext context;
      
      
      /**
       * Associated resource.
       */
      protected Resource resource;
      
      
      /**
       * Associated DirContext.
       */
      protected DirContext collection;
      
      
      /**
       * Other unknown object.
       */
      protected Object object;
      
      
      /**
       * Attributes.
       */
      protected Attributes attributes;
      
      
      // ------------------------------------------------------------- Properties
      
      
      /**
       * Connect to the DirContext, and retrive the bound object, as well as
       * its attributes. If no object is bound with the name specified in the
       * URL, then an IOException is thrown.
       * 
       * @throws IOException Object not found
       */
      public void connect()
          throws IOException {
          
          try {
              object = context.lookup(getURL().getFile());
              attributes = context.getAttributes(getURL().getFile());
              if (object instanceof Resource)
                  resource = (Resource) object;
              if (object instanceof DirContext)
                  collection = (DirContext) object;
          } catch (NamingException e) {
              // Object not found
          }
          
          connected = true;
          
      }
      
      
      /**
       * Return the content length value.
       */
      public int getContentLength() {
          return getHeaderFieldInt(ResourceAttributes.CONTENT_LENGTH, -1);
      }
      
      
      /**
       * Return the content type value.
       */
      public String getContentType() {
          return getHeaderField(ResourceAttributes.CONTENT_TYPE);
      }
      
      
      /**
       * Return the last modified date.
       */
      public long getLastModified() {
          return getHeaderFieldDate(ResourceAttributes.LAST_MODIFIED, 0);
      }
      
      
      /**
       * Returns the name of the specified header field.
       */
      public String getHeaderField(String name) {
          Attribute attribute = attributes.get(name);
          try {
              return attribute.get().toString();
          } catch (Exception e) {
              // Shouldn't happen, unless the attribute has no value
          }
          return (null);
      }
      
      
      /**
       * Get object content.
       */
      public Object getContent()
          throws IOException {
          
          if (resource != null)
              return resource;
          if (collection != null)
              return collection;
          if (object != null)
              return object;
          
          throw new FileNotFoundException();
          
      }
      
      
      /**
       * Get object content.
       */
      public Object getContent(Class[] classes)
          throws IOException {
          
          Object object = getContent();
          
          for (int i = 0; i < classes.length; i++) {
              if (classes[i].isInstance(object))
                  return object;
          }
          
          return null;
          
      }
      
      
      /**
       * Get input stream.
       */
      public InputStream getInputStream() 
          throws IOException {
          
          if (resource == null)
              throw new IOException();
          
          return (resource.streamContent());
          
      }
      
      
  }
  
  
  
  1.1                  
jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/resources/DirContextURLStreamHandler.java
  
  Index: DirContextURLStreamHandler.java
  ===================================================================
  /*
   * $Header: 
/home/cvs/jakarta-tomcat-4.1/catalina/src/share/org/apache/naming/resources/DirContextURLStreamHandler.java,v
 1.1 2001/01/12 06:59:08 remm Exp $
   * $Revision: 1.1 $
   * $Date: 2001/01/12 06:59:08 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999 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 acknowlegement:  
   *       "This product includes software developed by the 
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written 
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 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/>.
   *
   * [Additional notices, if required by prior licensing conditions]
   *
   */ 
  
  package org.apache.naming.resources;
  
  import java.net.URL;
  import java.net.URLConnection;
  import java.net.URLStreamHandler;
  import java.io.IOException;
  import javax.naming.NamingException;
  import javax.naming.directory.DirContext;
  
  /**
   * Stream handler to a JNDI directory context.
   * 
   * @author <a href="mailto:[EMAIL PROTECTED]">Remy Maucherat</a>
   * @version $Revision: 1.1 $
   */
  public class DirContextURLStreamHandler 
      extends URLStreamHandler {
      
      
      // ----------------------------------------------------------- Constructors
      
      
      public DirContextURLStreamHandler(DirContext context) {
          this.context = context;
      }
      
      
      // ----------------------------------------------------- Instance Variables
      
      
      /**
       * Directory context.
       */
      protected DirContext context;
      
      
      // ------------------------------------------------------------- Properties
      
      
      // ----------------------------------------------- URLStreamHandler Methods
      
      
      /**
       * Opens a connection to the object referenced by the <code>URL</code> 
       * argument.
       */
      protected URLConnection openConnection(URL u) 
          throws IOException {
          return new DirContextURLConnection(context, u);
      }
      
      
  }
  
  
  

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

Reply via email to