public Object lookup()

in client/src/main/java/org/apache/qpid/jndi/ReadOnlyContext.java [222:312]


    public Object lookup(String name) throws NamingException
    {
        if (name.length() == 0)
        {
            return this;
        }

        Object result = treeBindings.get(name);
        if (result == null)
        {
            result = bindings.get(name);
        }

        if (result == null)
        {
            int pos = name.indexOf(':');
            if (pos > 0)
            {
                String scheme = name.substring(0, pos);
                Context ctx = NamingManager.getURLContext(scheme, environment);
                if (ctx == null)
                {
                    throw new NamingException("scheme " + scheme + " not recognized");
                }

                return ctx.lookup(name);
            }
            else
            {
                // Split out the first name of the path
                // and look for it in the bindings map.
                CompositeName path = new CompositeName(name);

                if (path.size() == 0)
                {
                    return this;
                }
                else
                {
                    String first = path.get(0);
                    Object obj = bindings.get(first);
                    if (obj == null)
                    {
                        throw new NameNotFoundException(name);
                    }
                    else if ((obj instanceof Context) && (path.size() > 1))
                    {
                        Context subContext = (Context) obj;
                        obj = subContext.lookup(path.getSuffix(1));
                    }

                    return obj;
                }
            }
        }

        if (result instanceof LinkRef)
        {
            LinkRef ref = (LinkRef) result;
            result = lookup(ref.getLinkName());
        }

        if (result instanceof Reference)
        {
            try
            {
                result = NamingManager.getObjectInstance(result, null, null, this.environment);
            }
            catch (NamingException e)
            {
                throw e;
            }
            catch (Exception e)
            {
                throw (NamingException) new NamingException("could not look up : " + name).initCause(e);
            }
        }

        if (result instanceof ReadOnlyContext)
        {
            String prefix = getNameInNamespace();
            if (prefix.length() > 0)
            {
                prefix = prefix + SEPARATOR;
            }

            result = new ReadOnlyContext((ReadOnlyContext) result, environment, prefix + name);
        }

        return result;
    }