/* * 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.spi; import javax.naming.Name; import javax.naming.InvalidNameException; import javax.naming.CompositeName; /** * An instance of <code>ResolveResult</code> is produced when a name * resolution operation has completed. The instance must contain the object * associated with the successfully resolved name, and any remaining portion of * the name yet to be resolved. Where a <code>String</code> parameter is used * to specify a name, it should be considered to be a composite name. * <p> * Multithreaded access to a single <code>ResolveResult</code> instance is * only safe when client code locks the object first. * </p> */ public class ResolveResult implements java.io.Serializable { private static final long serialVersionUID = -4552108072002407559L; /** * This field holds the object associated with the resolved name. It may be * null only when a subclass is constructed. It must be initialized to a * non-null value by constructors of this class. * * @serial */ protected Object resolvedObj; /** * This field holds the portion of a resolved name that remains to be * resolved. It may be null only when a subclass is constructed. It must be * initialized to a non-null value by constructors of this class. * * @serial */ protected Name remainingName; /** * This is the default constructor implicitly invoked by subclass * constructors. This constructor set both the resolved object and the * remaining name to null. */ protected ResolveResult() { this.resolvedObj = null; this.remainingName = null; } /** * This constructor creates a instance with the specified resolved object * and a specified remaining name of type <code>String</code>. The name * argument may not be null, but may be empty. The object argument may not * be null. * * @param o * may not be null * @param s * may not be null, but may be empty */ public ResolveResult(Object o, String s) { this.resolvedObj = o; try { this.remainingName = new CompositeName(s); } catch (InvalidNameException e) { this.remainingName = null; } } /** * This constructor creates a instance with the specified resolved object * and a remaining name of type <code>Name</code>. The name argument may * not be null, but may be empty. The object argument may not be null. * * @param o * may not be null * @param n * may not be null */ public ResolveResult(Object o, Name n) { this.resolvedObj = o; if (null == n) { this.remainingName = null; } else { this.remainingName = (Name) n.clone(); } } /** * Extends the remaining name (remainingName) with a single specified name * component. The name argument may be null, but this leaves the remaining * name unmodified. * * @param s * the name component to be added to the remaining name. A null * leaves the remaining name unmodified. */ public void appendRemainingComponent(String s) { if (null != s) { if (null == this.remainingName) { this.remainingName = new CompositeName(); } try { remainingName.add(s); } catch (InvalidNameException e) { throw new Error(e.getMessage()); } } } /** * Extends the remaining name (remainingName) with all components of the * specified name. The name argument may be null, but this leaves the * remaining name unmodified. * * @param n * the name to be added to the remaining name A null leaves the * remaining name unmodified. */ public void appendRemainingName(Name n) { if (null != n) { if (null == this.remainingName) { this.remainingName = (Name) n.clone(); } else { try { this.remainingName.addAll(n); } catch (InvalidNameException e) { throw new Error(e.getMessage()); } } } } /** * Returns any unresolved portion of the name that was resolved (the * remaining name). The returned <code>Name</code> may be empty, but may * not be null. * * @return any unresolved portion of the name that was resolved (the * remaining name). */ public Name getRemainingName() { return this.remainingName; } /** * Returns the non-null object that was resolved (resolved object). * * @return the non-null object that was resolved (resolved object). */ public Object getResolvedObj() { return this.resolvedObj; } /** * Sets the remaining name (remainingName) to a copy of the specified * <code>Name</code> parameter may be empty, but not null. * * @param n * a name, may be empty, but no null */ public void setRemainingName(Name n) { if (null == n) { this.remainingName = null; } else { this.remainingName = (Name) n.clone(); } } /** * Sets the resolved object (resolved object) to o which may not be null. * * @param o * an object, may not be null */ public void setResolvedObj(Object o) { this.resolvedObj = o; } }