1 /*
   2  * Copyright (c) 1999, 2004, 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.spi;
  27 
  28 import java.util.Hashtable;
  29 import javax.naming.*;
  30 
  31 /**
  32   * This class is for dealing with federations/continuations.
  33   *
  34   * @author Rosanna Lee
  35   * @author Scott Seligman
  36   * @since 1.3
  37   */
  38 
  39 class ContinuationContext implements Context, Resolver {
  40     protected CannotProceedException cpe;
  41     protected Hashtable<?,?> env;
  42     protected Context contCtx = null;
  43 
  44     protected ContinuationContext(CannotProceedException cpe,
  45                         Hashtable<?,?> env) {
  46         this.cpe = cpe;
  47         this.env = env;
  48     }
  49 
  50     protected Context getTargetContext() throws NamingException {
  51         if (contCtx == null) {
  52             if (cpe.getResolvedObj() == null)
  53                 throw (NamingException)cpe.fillInStackTrace();
  54 
  55             contCtx = NamingManager.getContext(cpe.getResolvedObj(),
  56                                                cpe.getAltName(),
  57                                                cpe.getAltNameCtx(),
  58                                                env);
  59             if (contCtx == null)
  60                 throw (NamingException)cpe.fillInStackTrace();
  61         }
  62         return contCtx;
  63     }
  64 
  65     public Object lookup(Name name) throws NamingException {
  66         Context ctx = getTargetContext();
  67         return ctx.lookup(name);
  68     }
  69 
  70     public Object lookup(String name) throws NamingException {
  71         Context ctx = getTargetContext();
  72         return ctx.lookup(name);
  73     }
  74 
  75     public void bind(Name name, Object newObj) throws NamingException {
  76         Context ctx = getTargetContext();
  77         ctx.bind(name, newObj);
  78     }
  79 
  80     public void bind(String name, Object newObj) throws NamingException {
  81         Context ctx = getTargetContext();
  82         ctx.bind(name, newObj);
  83     }
  84 
  85     public void rebind(Name name, Object newObj) throws NamingException {
  86         Context ctx = getTargetContext();
  87         ctx.rebind(name, newObj);
  88     }
  89     public void rebind(String name, Object newObj) throws NamingException {
  90         Context ctx = getTargetContext();
  91         ctx.rebind(name, newObj);
  92     }
  93 
  94     public void unbind(Name name) throws NamingException {
  95         Context ctx = getTargetContext();
  96         ctx.unbind(name);
  97     }
  98     public void unbind(String name) throws NamingException {
  99         Context ctx = getTargetContext();
 100         ctx.unbind(name);
 101     }
 102 
 103     public void rename(Name name, Name newName) throws NamingException {
 104         Context ctx = getTargetContext();
 105         ctx.rename(name, newName);
 106     }
 107     public void rename(String name, String newName) throws NamingException {
 108         Context ctx = getTargetContext();
 109         ctx.rename(name, newName);
 110     }
 111 
 112     public NamingEnumeration<NameClassPair> list(Name name) throws NamingException {
 113         Context ctx = getTargetContext();
 114         return ctx.list(name);
 115     }
 116     public NamingEnumeration<NameClassPair> list(String name) throws NamingException {
 117         Context ctx = getTargetContext();
 118         return ctx.list(name);
 119     }
 120 
 121 
 122     public NamingEnumeration<Binding> listBindings(Name name)
 123         throws NamingException
 124     {
 125         Context ctx = getTargetContext();
 126         return ctx.listBindings(name);
 127     }
 128 
 129     public NamingEnumeration<Binding> listBindings(String name) throws NamingException {
 130         Context ctx = getTargetContext();
 131         return ctx.listBindings(name);
 132     }
 133 
 134     public void destroySubcontext(Name name) throws NamingException {
 135         Context ctx = getTargetContext();
 136         ctx.destroySubcontext(name);
 137     }
 138     public void destroySubcontext(String name) throws NamingException {
 139         Context ctx = getTargetContext();
 140         ctx.destroySubcontext(name);
 141     }
 142 
 143     public Context createSubcontext(Name name) throws NamingException {
 144         Context ctx = getTargetContext();
 145         return ctx.createSubcontext(name);
 146     }
 147     public Context createSubcontext(String name) throws NamingException {
 148         Context ctx = getTargetContext();
 149         return ctx.createSubcontext(name);
 150     }
 151 
 152     public Object lookupLink(Name name) throws NamingException {
 153         Context ctx = getTargetContext();
 154         return ctx.lookupLink(name);
 155     }
 156     public Object lookupLink(String name) throws NamingException {
 157         Context ctx = getTargetContext();
 158         return ctx.lookupLink(name);
 159     }
 160 
 161     public NameParser getNameParser(Name name) throws NamingException {
 162         Context ctx = getTargetContext();
 163         return ctx.getNameParser(name);
 164     }
 165 
 166     public NameParser getNameParser(String name) throws NamingException {
 167         Context ctx = getTargetContext();
 168         return ctx.getNameParser(name);
 169     }
 170 
 171     public Name composeName(Name name, Name prefix)
 172         throws NamingException
 173     {
 174         Context ctx = getTargetContext();
 175         return ctx.composeName(name, prefix);
 176     }
 177 
 178     public String composeName(String name, String prefix)
 179             throws NamingException {
 180         Context ctx = getTargetContext();
 181         return ctx.composeName(name, prefix);
 182     }
 183 
 184     public Object addToEnvironment(String propName, Object value)
 185         throws NamingException {
 186         Context ctx = getTargetContext();
 187         return ctx.addToEnvironment(propName, value);
 188     }
 189 
 190     public Object removeFromEnvironment(String propName)
 191         throws NamingException {
 192         Context ctx = getTargetContext();
 193         return ctx.removeFromEnvironment(propName);
 194     }
 195 
 196     public Hashtable<?,?> getEnvironment() throws NamingException {
 197         Context ctx = getTargetContext();
 198         return ctx.getEnvironment();
 199     }
 200 
 201     public String getNameInNamespace() throws NamingException {
 202         Context ctx = getTargetContext();
 203         return ctx.getNameInNamespace();
 204     }
 205 
 206     public ResolveResult
 207         resolveToClass(Name name, Class<? extends Context> contextType)
 208         throws NamingException
 209     {
 210         if (cpe.getResolvedObj() == null)
 211             throw (NamingException)cpe.fillInStackTrace();
 212 
 213         Resolver res = NamingManager.getResolver(cpe.getResolvedObj(),
 214                                                  cpe.getAltName(),
 215                                                  cpe.getAltNameCtx(),
 216                                                  env);
 217         if (res == null)
 218             throw (NamingException)cpe.fillInStackTrace();
 219         return res.resolveToClass(name, contextType);
 220     }
 221 
 222     public ResolveResult
 223         resolveToClass(String name, Class<? extends Context> contextType)
 224         throws NamingException
 225     {
 226         if (cpe.getResolvedObj() == null)
 227             throw (NamingException)cpe.fillInStackTrace();
 228 
 229         Resolver res = NamingManager.getResolver(cpe.getResolvedObj(),
 230                                                  cpe.getAltName(),
 231                                                  cpe.getAltNameCtx(),
 232                                                  env);
 233         if (res == null)
 234             throw (NamingException)cpe.fillInStackTrace();
 235         return res.resolveToClass(name, contextType);
 236     }
 237 
 238     public void close() throws NamingException {
 239         cpe = null;
 240         env = null;
 241         if (contCtx != null) {
 242             contCtx.close();
 243             contCtx = null;
 244         }
 245     }
 246 }