diff -r 4ebc2e2fb97c -r 71c04702a3d5 src/java.naming/share/classes/javax/naming/Binding.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/java.naming/share/classes/javax/naming/Binding.java Tue Sep 12 19:03:39 2017 +0200 @@ -0,0 +1,199 @@ +/* + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package javax.naming; + +/** + * This class represents a name-to-object binding found in a context. + *

+ * A context consists of name-to-object bindings. + * The Binding class represents such a binding. It consists + * of a name and an object. The Context.listBindings() + * method returns an enumeration of Binding. + *

+ * Use subclassing for naming systems that generate contents of + * a binding dynamically. + *

+ * A Binding instance is not synchronized against concurrent access by multiple + * threads. Threads that need to access a Binding concurrently should + * synchronize amongst themselves and provide the necessary locking. + * + * @author Rosanna Lee + * @author Scott Seligman + * @since 1.3 + */ + +public class Binding extends NameClassPair { + /** + * Contains this binding's object. + * It is initialized by the constructor and can be updated using + * {@code setObject}. + * @serial + * @see #getObject + * @see #setObject + */ + private Object boundObj; + + /** + * Constructs an instance of a Binding given its name and object. + *

+ * {@code getClassName()} will return + * the class name of {@code obj} (or null if {@code obj} is null) + * unless the class name has been explicitly set using {@code setClassName()} + * + * @param name The non-null name of the object. It is relative + * to the target context (which is + * named by the first parameter of the listBindings() method) + * @param obj The possibly null object bound to name. + * @see NameClassPair#setClassName + */ + public Binding(String name, Object obj) { + super(name, null); + this.boundObj = obj; + } + + /** + * Constructs an instance of a Binding given its name, object, and whether + * the name is relative. + *

+ * {@code getClassName()} will return the class name of {@code obj} + * (or null if {@code obj} is null) unless the class name has been + * explicitly set using {@code setClassName()} + * + * @param name The non-null string name of the object. + * @param obj The possibly null object bound to name. + * @param isRelative true if name is a name relative + * to the target context (which is named by + * the first parameter of the listBindings() method); + * false if name is a URL string. + * @see NameClassPair#isRelative + * @see NameClassPair#setRelative + * @see NameClassPair#setClassName + */ + public Binding(String name, Object obj, boolean isRelative) { + super(name, null, isRelative); + this.boundObj = obj; + } + + /** + * Constructs an instance of a Binding given its name, class name, and object. + * + * @param name The non-null name of the object. It is relative + * to the target context (which is + * named by the first parameter of the listBindings() method) + * @param className The possibly null class name of the object + * bound to {@code name}. If null, the class name of {@code obj} is + * returned by {@code getClassName()}. If {@code obj} is also + * null, {@code getClassName()} will return null. + * @param obj The possibly null object bound to name. + * @see NameClassPair#setClassName + */ + public Binding(String name, String className, Object obj) { + super(name, className); + this.boundObj = obj; + } + + /** + * Constructs an instance of a Binding given its + * name, class name, object, and whether the name is relative. + * + * @param name The non-null string name of the object. + * @param className The possibly null class name of the object + * bound to {@code name}. If null, the class name of {@code obj} is + * returned by {@code getClassName()}. If {@code obj} is also + * null, {@code getClassName()} will return null. + * @param obj The possibly null object bound to name. + * @param isRelative true if name is a name relative + * to the target context (which is named by + * the first parameter of the listBindings() method); + * false if name is a URL string. + * @see NameClassPair#isRelative + * @see NameClassPair#setRelative + * @see NameClassPair#setClassName + */ + public Binding(String name, String className, Object obj, boolean isRelative) { + super(name, className, isRelative); + this.boundObj = obj; + } + + /** + * Retrieves the class name of the object bound to the name of this binding. + * If the class name has been set explicitly, return it. + * Otherwise, if this binding contains a non-null object, + * that object's class name is used. Otherwise, null is returned. + * + * @return A possibly null string containing class name of object bound. + */ + public String getClassName() { + String cname = super.getClassName(); + if (cname != null) { + return cname; + } + if (boundObj != null) + return boundObj.getClass().getName(); + else + return null; + } + + /** + * Retrieves the object bound to the name of this binding. + * + * @return The object bound; null if this binding does not contain an object. + * @see #setObject + */ + + public Object getObject() { + return boundObj; + } + + /** + * Sets the object associated with this binding. + * @param obj The possibly null object to use. + * @see #getObject + */ + public void setObject(Object obj) { + boundObj = obj; + } + + /** + * Generates the string representation of this binding. + * The string representation consists of the string representation + * of the name/class pair and the string representation of + * this binding's object, separated by ':'. + * The contents of this string is useful + * for debugging and is not meant to be interpreted programmatically. + * + * @return The non-null string representation of this binding. + */ + + public String toString() { + return super.toString() + ":" + getObject(); + } + + /** + * Use serialVersionUID from JNDI 1.1.1 for interoperability + */ + private static final long serialVersionUID = 8839217842691845890L; +};