/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package javax.naming;
/**
* Binding extends <code>NameClassPair</code> to associate an object in a
* naming service with its name, specified class name and relative flag. As with
* <code>NameClassPair</code>, a class name is only specified when it is
* necessary to override the real class name of the associated object.
* <p>
* Multithreaded access to a <code>Binding</code> instance is only safe when
* client code locks the object first.
* </p>
*/
public class Binding extends NameClassPair {
private static final long serialVersionUID = 8839217842691845890L;
private Object boundObj;
/**
* Construct a <code>Binding</code> from a name and a class. Relative flag
* is true.
*
* @param name
* a name, may not be <code>null</code>.
* @param obj
* an object bound with the name, may be <code>null</code>.
*/
public Binding(String name, Object obj) {
this(name, null, obj, true);
}
/**
* Construct a <code>Binding</code> from a name, an object and a relative
* flag.
*
* @param name
* a name, which may not be <code>null</code>.
* @param obj
* an object bound with the name, may be <code>null</code>.
* @param relative
* a relative flag
*/
public Binding(String name, Object obj, boolean relative) {
this(name, null, obj, relative);
}
/**
* Construct a <code>Binding</code> from a name, a class, and an object.
* The class and object parameters may be null. Relative flag is true.
*
* @param name
* a name, which may not be <code>null</code>.
* @param className
* a class name, may be <code>null</code>.
* @param obj
* an object bound with the name, may be <code>null</code>.
*/
public Binding(String name, String className, Object obj) {
this(name, className, obj, true);
}
/**
* Construct a <code>Binding</code> from a name, a class, an object and a
* relative flag. The class and object parameters may be null.
*
* @param name
* a name, which may not be <code>null</code>.
* @param className
* a class name, may be <code>null</code>.
* @param obj
* an object bound with the name, may be <code>null</code>.
* @param relative
* a relative flag
*/
public Binding(String name, String className, Object obj, boolean relative) {
super(name, className, relative);
this.boundObj = obj;
}
/**
* Get the class name of this <code>Binding</code>. It may have been
* specified, in which case the class name field is set, and that is the
* string returned by this method. If the class name field has not been
* specified then the object associated with this <code>Binding</code> is
* interrogated to find its actual class name. If there is no class name
* field specified and no associated object then this method returns null.
*
* @return the class name
*/
@Override
public String getClassName() {
if (super.getClassName() != null) {
return super.getClassName();
}
if (boundObj != null) {
return boundObj.getClass().getName();
}
return null;
}
/**
* Get the object associated with this <code>Binding</code>. May return
* null.
*
* @return the object associated with this <code>Binding</code>. May
* return null.
*/
public Object getObject() {
return boundObj;
}
/**
* Set the object o associated with this <code>Binding</code>. The object
* may be null.
*
* @param object
* an object
*/
public void setObject(Object object) {
this.boundObj = object;
}
/**
* Provide a string representation of this object. This is the same as for
* <code>NameClassPair</code> but with the string representation of the
* <code>Binding</code> object appended to the end.
*
* @return a string representation of this <code>Binding</code>
*/
@Override
public String toString() {
return super.toString() + ":" + boundObj; //$NON-NLS-1$
}
}