jdk/src/java.naming/share/classes/javax/naming/Binding.java
changeset 25859 3317bb8137f4
parent 23010 6dadb192ad81
child 32029 a5538163e144
equal deleted inserted replaced
25858:836adbf7a2cd 25859:3317bb8137f4
       
     1 /*
       
     2  * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.  Oracle designates this
       
     8  * particular file as subject to the "Classpath" exception as provided
       
     9  * by Oracle in the LICENSE file that accompanied this code.
       
    10  *
       
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    14  * version 2 for more details (a copy is included in the LICENSE file that
       
    15  * accompanied this code).
       
    16  *
       
    17  * You should have received a copy of the GNU General Public License version
       
    18  * 2 along with this work; if not, write to the Free Software Foundation,
       
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    20  *
       
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    22  * or visit www.oracle.com if you need additional information or have any
       
    23  * questions.
       
    24  */
       
    25 
       
    26 package javax.naming;
       
    27 
       
    28 /**
       
    29   * This class represents a name-to-object binding found in a context.
       
    30   *<p>
       
    31   * A context consists of name-to-object bindings.
       
    32   * The Binding class represents such a binding.  It consists
       
    33   * of a name and an object. The <code>Context.listBindings()</code>
       
    34   * method returns an enumeration of Binding.
       
    35   *<p>
       
    36   * Use subclassing for naming systems that generate contents of
       
    37   * a binding dynamically.
       
    38   *<p>
       
    39   * A Binding instance is not synchronized against concurrent access by multiple
       
    40   * threads. Threads that need to access a Binding concurrently should
       
    41   * synchronize amongst themselves and provide the necessary locking.
       
    42   *
       
    43   * @author Rosanna Lee
       
    44   * @author Scott Seligman
       
    45   * @since 1.3
       
    46   */
       
    47 
       
    48 public class Binding extends NameClassPair {
       
    49     /**
       
    50      * Contains this binding's object.
       
    51      * It is initialized by the constructor and can be updated using
       
    52      * <tt>setObject</tt>.
       
    53      * @serial
       
    54      * @see #getObject
       
    55      * @see #setObject
       
    56      */
       
    57     private Object boundObj;
       
    58 
       
    59     /**
       
    60       * Constructs an instance of a Binding given its name and object.
       
    61       *<p>
       
    62       * <tt>getClassName()</tt> will return
       
    63       * the class name of <tt>obj</tt> (or null if <tt>obj</tt> is null)
       
    64       * unless the class name has been explicitly set using <tt>setClassName()</tt>
       
    65       *
       
    66       * @param  name    The non-null name of the object. It is relative
       
    67       *             to the <em>target context</em> (which is
       
    68       * named by the first parameter of the <code>listBindings()</code> method)
       
    69       * @param  obj     The possibly null object bound to name.
       
    70       * @see NameClassPair#setClassName
       
    71       */
       
    72     public Binding(String name, Object obj) {
       
    73         super(name, null);
       
    74         this.boundObj = obj;
       
    75     }
       
    76 
       
    77     /**
       
    78       * Constructs an instance of a Binding given its name, object, and whether
       
    79       * the name is relative.
       
    80       *<p>
       
    81       * <tt>getClassName()</tt> will return the class name of <tt>obj</tt>
       
    82       * (or null if <tt>obj</tt> is null) unless the class name has been
       
    83       * explicitly set using <tt>setClassName()</tt>
       
    84       *
       
    85       * @param  name    The non-null string name of the object.
       
    86       * @param  obj     The possibly null object bound to name.
       
    87       * @param isRelative true if <code>name</code> is a name relative
       
    88       *         to the target context (which is named by
       
    89       *         the first parameter of the <code>listBindings()</code> method);
       
    90       *         false if <code>name</code> is a URL string.
       
    91       * @see NameClassPair#isRelative
       
    92       * @see NameClassPair#setRelative
       
    93       * @see NameClassPair#setClassName
       
    94       */
       
    95     public Binding(String name, Object obj, boolean isRelative) {
       
    96         super(name, null, isRelative);
       
    97         this.boundObj = obj;
       
    98     }
       
    99 
       
   100     /**
       
   101       * Constructs an instance of a Binding given its name, class name, and object.
       
   102       *
       
   103       * @param  name    The non-null name of the object. It is relative
       
   104       *             to the <em>target context</em> (which is
       
   105       * named by the first parameter of the <code>listBindings()</code> method)
       
   106       * @param  className       The possibly null class name of the object
       
   107       *         bound to <tt>name</tt>. If null, the class name of <tt>obj</tt> is
       
   108       *         returned by <tt>getClassName()</tt>. If <tt>obj</tt> is also
       
   109       *         null, <tt>getClassName()</tt> will return null.
       
   110       * @param  obj     The possibly null object bound to name.
       
   111       * @see NameClassPair#setClassName
       
   112       */
       
   113     public Binding(String name, String className, Object obj) {
       
   114         super(name, className);
       
   115         this.boundObj = obj;
       
   116     }
       
   117 
       
   118     /**
       
   119       * Constructs an instance of a Binding given its
       
   120       * name, class name, object, and whether the name is relative.
       
   121       *
       
   122       * @param  name    The non-null string name of the object.
       
   123       * @param  className       The possibly null class name of the object
       
   124       *         bound to <tt>name</tt>. If null, the class name of <tt>obj</tt> is
       
   125       *         returned by <tt>getClassName()</tt>. If <tt>obj</tt> is also
       
   126       *         null, <tt>getClassName()</tt> will return null.
       
   127       * @param  obj     The possibly null object bound to name.
       
   128       * @param isRelative true if <code>name</code> is a name relative
       
   129       *         to the target context (which is named by
       
   130       *         the first parameter of the <code>listBindings()</code> method);
       
   131       *         false if <code>name</code> is a URL string.
       
   132       * @see NameClassPair#isRelative
       
   133       * @see NameClassPair#setRelative
       
   134       * @see NameClassPair#setClassName
       
   135       */
       
   136     public Binding(String name, String className, Object obj, boolean isRelative) {
       
   137         super(name, className, isRelative);
       
   138         this.boundObj = obj;
       
   139     }
       
   140 
       
   141     /**
       
   142       * Retrieves the class name of the object bound to the name of this binding.
       
   143       * If the class name has been set explicitly, return it.
       
   144       * Otherwise, if this binding contains a non-null object,
       
   145       * that object's class name is used. Otherwise, null is returned.
       
   146       *
       
   147       * @return A possibly null string containing class name of object bound.
       
   148       */
       
   149     public String getClassName() {
       
   150         String cname = super.getClassName();
       
   151         if (cname != null) {
       
   152             return cname;
       
   153         }
       
   154         if (boundObj != null)
       
   155             return boundObj.getClass().getName();
       
   156         else
       
   157             return null;
       
   158     }
       
   159 
       
   160     /**
       
   161       * Retrieves the object bound to the name of this binding.
       
   162       *
       
   163       * @return The object bound; null if this binding does not contain an object.
       
   164       * @see #setObject
       
   165       */
       
   166 
       
   167     public Object getObject() {
       
   168         return boundObj;
       
   169     }
       
   170 
       
   171     /**
       
   172      * Sets the object associated with this binding.
       
   173      * @param obj The possibly null object to use.
       
   174      * @see #getObject
       
   175      */
       
   176     public void setObject(Object obj) {
       
   177         boundObj = obj;
       
   178     }
       
   179 
       
   180     /**
       
   181       * Generates the string representation of this binding.
       
   182       * The string representation consists of the string representation
       
   183       * of the name/class pair and the string representation of
       
   184       * this binding's object, separated by ':'.
       
   185       * The contents of this string is useful
       
   186       * for debugging and is not meant to be interpreted programmatically.
       
   187       *
       
   188       * @return The non-null string representation of this binding.
       
   189       */
       
   190 
       
   191     public String toString() {
       
   192         return super.toString() + ":" + getObject();
       
   193     }
       
   194 
       
   195     /**
       
   196      * Use serialVersionUID from JNDI 1.1.1 for interoperability
       
   197      */
       
   198     private static final long serialVersionUID = 8839217842691845890L;
       
   199 };