/* * Copyright (c) 1999, 2004, 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.spi; import java.util.Hashtable; import javax.naming.Name;import javax.naming.NamingEnumeration;import javax.naming.CompositeName;import javax.naming.NamingException;import javax.naming.CannotProceedException;import javax.naming.OperationNotSupportedException;import javax.naming.Context; import javax.naming.directory.DirContext;import javax.naming.directory.Attributes;import javax.naming.directory.SearchControls;import javax.naming.directory.ModificationItem; /** * This class is the continuation context for invoking DirContext methods. * * @author Rosanna Lee * @author Scott Seligman * @since 1.3 */ class ContinuationDirContext extends ContinuationContext implements DirContext { ContinuationDirContext(CannotProceedException cpe, Hashtable env) { super(cpe, env); } protected DirContextNamePair getTargetContext(Name name) throws NamingException { if (cpe.getResolvedObj() == null) throw (NamingException)cpe.fillInStackTrace(); Context ctx = NamingManager.getContext(cpe.getResolvedObj(), cpe.getAltName(), cpe.getAltNameCtx(), env); if (ctx == null) throw (NamingException)cpe.fillInStackTrace(); if (ctx instanceof DirContext) return new DirContextNamePair((DirContext)ctx, name); if (ctx instanceof Resolver) { Resolver res = (Resolver)ctx; ResolveResult rr = res.resolveToClass(name, DirContext.class); // Reached a DirContext; return result. DirContext dctx = (DirContext)rr.getResolvedObj(); return (new DirContextNamePair(dctx, rr.getRemainingName())); } // Resolve all the way using lookup(). This may allow the operation // to succeed if it doesn't require the penultimate context. Object ultimate = ctx.lookup(name); if (ultimate instanceof DirContext) { return (new DirContextNamePair((DirContext)ultimate, new CompositeName())); } throw (NamingException)cpe.fillInStackTrace(); } protected DirContextStringPair getTargetContext(String name) throws NamingException { if (cpe.getResolvedObj() == null) throw (NamingException)cpe.fillInStackTrace(); Context ctx = NamingManager.getContext(cpe.getResolvedObj(), cpe.getAltName(), cpe.getAltNameCtx(), env); if (ctx instanceof DirContext) return new DirContextStringPair((DirContext)ctx, name); if (ctx instanceof Resolver) { Resolver res = (Resolver)ctx; ResolveResult rr = res.resolveToClass(name, DirContext.class); // Reached a DirContext; return result. DirContext dctx = (DirContext)rr.getResolvedObj(); Name tmp = rr.getRemainingName(); String remains = (tmp != null) ? tmp.toString() : ""; return (new DirContextStringPair(dctx, remains)); } // Resolve all the way using lookup(). This may allow the operation // to succeed if it doesn't require the penultimate context. Object ultimate = ctx.lookup(name); if (ultimate instanceof DirContext) { return (new DirContextStringPair((DirContext)ultimate, "")); } throw (NamingException)cpe.fillInStackTrace(); } public Attributes getAttributes(String name) throws NamingException { DirContextStringPair res = getTargetContext(name); return res.getDirContext().getAttributes(res.getString()); } public Attributes getAttributes(String name, String[] attrIds) throws NamingException { DirContextStringPair res = getTargetContext(name); return res.getDirContext().getAttributes(res.getString(), attrIds); } public Attributes getAttributes(Name name) throws NamingException { DirContextNamePair res = getTargetContext(name); return res.getDirContext().getAttributes(res.getName()); } public Attributes getAttributes(Name name, String[] attrIds) throws NamingException { DirContextNamePair res = getTargetContext(name); return res.getDirContext().getAttributes(res.getName(), attrIds); } public void modifyAttributes(Name name, int mod_op, Attributes attrs) throws NamingException { DirContextNamePair res = getTargetContext(name); res.getDirContext().modifyAttributes(res.getName(), mod_op, attrs); } public void modifyAttributes(String name, int mod_op, Attributes attrs) throws NamingException { DirContextStringPair res = getTargetContext(name); res.getDirContext().modifyAttributes(res.getString(), mod_op, attrs); } public void modifyAttributes(Name name, ModificationItem[] mods) throws NamingException { DirContextNamePair res = getTargetContext(name); res.getDirContext().modifyAttributes(res.getName(), mods); } public void modifyAttributes(String name, ModificationItem[] mods) throws NamingException { DirContextStringPair res = getTargetContext(name); res.getDirContext().modifyAttributes(res.getString(), mods); } public void bind(Name name, Object obj, Attributes attrs) throws NamingException { DirContextNamePair res = getTargetContext(name); res.getDirContext().bind(res.getName(), obj, attrs); } public void bind(String name, Object obj, Attributes attrs) throws NamingException { DirContextStringPair res = getTargetContext(name); res.getDirContext().bind(res.getString(), obj, attrs); } public void rebind(Name name, Object obj, Attributes attrs) throws NamingException { DirContextNamePair res = getTargetContext(name); res.getDirContext().rebind(res.getName(), obj, attrs); } public void rebind(String name, Object obj, Attributes attrs) throws NamingException { DirContextStringPair res = getTargetContext(name); res.getDirContext().rebind(res.getString(), obj, attrs); } public DirContext createSubcontext(Name name, Attributes attrs) throws NamingException { DirContextNamePair res = getTargetContext(name); return res.getDirContext().createSubcontext(res.getName(), attrs); } public DirContext createSubcontext(String name, Attributes attrs) throws NamingException { DirContextStringPair res = getTargetContext(name); return res.getDirContext().createSubcontext(res.getString(), attrs); } public NamingEnumeration search(Name name, Attributes matchingAttributes, String[] attributesToReturn) throws NamingException { DirContextNamePair res = getTargetContext(name); return res.getDirContext().search(res.getName(), matchingAttributes, attributesToReturn); } public NamingEnumeration search(String name, Attributes matchingAttributes, String[] attributesToReturn) throws NamingException { DirContextStringPair res = getTargetContext(name); return res.getDirContext().search(res.getString(), matchingAttributes, attributesToReturn); } public NamingEnumeration search(Name name, Attributes matchingAttributes) throws NamingException { DirContextNamePair res = getTargetContext(name); return res.getDirContext().search(res.getName(), matchingAttributes); } public NamingEnumeration search(String name, Attributes matchingAttributes) throws NamingException { DirContextStringPair res = getTargetContext(name); return res.getDirContext().search(res.getString(), matchingAttributes); } public NamingEnumeration search(Name name, String filter, SearchControls cons) throws NamingException { DirContextNamePair res = getTargetContext(name); return res.getDirContext().search(res.getName(), filter, cons); } public NamingEnumeration search(String name, String filter, SearchControls cons) throws NamingException { DirContextStringPair res = getTargetContext(name); return res.getDirContext().search(res.getString(), filter, cons); } public NamingEnumeration search(Name name, String filterExpr, Object[] args, SearchControls cons) throws NamingException { DirContextNamePair res = getTargetContext(name); return res.getDirContext().search(res.getName(), filterExpr, args, cons); } public NamingEnumeration search(String name, String filterExpr, Object[] args, SearchControls cons) throws NamingException { DirContextStringPair res = getTargetContext(name); return res.getDirContext().search(res.getString(), filterExpr, args, cons); } public DirContext getSchema(String name) throws NamingException { DirContextStringPair res = getTargetContext(name); return res.getDirContext().getSchema(res.getString()); } public DirContext getSchema(Name name) throws NamingException { DirContextNamePair res = getTargetContext(name); return res.getDirContext().getSchema(res.getName()); } public DirContext getSchemaClassDefinition(String name) throws NamingException { DirContextStringPair res = getTargetContext(name); return res.getDirContext().getSchemaClassDefinition(res.getString()); } public DirContext getSchemaClassDefinition(Name name) throws NamingException { DirContextNamePair res = getTargetContext(name); return res.getDirContext().getSchemaClassDefinition(res.getName()); }} class DirContextNamePair { DirContext ctx; Name name; DirContextNamePair(DirContext ctx, Name name) { this.ctx = ctx; this.name = name; } DirContext getDirContext() { return ctx; } Name getName() { return name; }} class DirContextStringPair { DirContext ctx; String str; DirContextStringPair(DirContext ctx, String str) { this.ctx = ctx; this.str = str; } DirContext getDirContext() { return ctx; } String getString() { return str; }}
/*
* Copyright (c) 1999, 2004, 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.spi;
import java.util.Hashtable;
import javax.naming.Name;
import javax.naming.NamingEnumeration;
import javax.naming.CompositeName;
import javax.naming.NamingException;
import javax.naming.CannotProceedException;
import javax.naming.OperationNotSupportedException;
import javax.naming.Context;
import javax.naming.directory.DirContext;
import javax.naming.directory.Attributes;
import javax.naming.directory.SearchControls;
import javax.naming.directory.ModificationItem;
/**
* This class is the continuation context for invoking DirContext methods.
*
* @author Rosanna Lee
* @author Scott Seligman
* @since 1.3
*/
class ContinuationDirContext extends ContinuationContext implements DirContext {
ContinuationDirContext(CannotProceedException cpe, Hashtable env) {
super(cpe, env);
}
protected DirContextNamePair getTargetContext(Name name)
throws NamingException {
if (cpe.getResolvedObj() == null)
throw (NamingException)cpe.fillInStackTrace();
Context ctx = NamingManager.getContext(cpe.getResolvedObj(),
cpe.getAltName(),
cpe.getAltNameCtx(),
env);
if (ctx == null)
throw (NamingException)cpe.fillInStackTrace();
if (ctx instanceof DirContext)
return new DirContextNamePair((DirContext)ctx, name);
if (ctx instanceof Resolver) {
Resolver res = (Resolver)ctx;
ResolveResult rr = res.resolveToClass(name, DirContext.class);
// Reached a DirContext; return result.
DirContext dctx = (DirContext)rr.getResolvedObj();
return (new DirContextNamePair(dctx, rr.getRemainingName()));
}
// Resolve all the way using lookup(). This may allow the operation
// to succeed if it doesn't require the penultimate context.
Object ultimate = ctx.lookup(name);
if (ultimate instanceof DirContext) {
return (new DirContextNamePair((DirContext)ultimate,
new CompositeName()));
}
throw (NamingException)cpe.fillInStackTrace();
}
protected DirContextStringPair getTargetContext(String name)
throws NamingException {
if (cpe.getResolvedObj() == null)
throw (NamingException)cpe.fillInStackTrace();
Context ctx = NamingManager.getContext(cpe.getResolvedObj(),
cpe.getAltName(),
cpe.getAltNameCtx(),
env);
if (ctx instanceof DirContext)
return new DirContextStringPair((DirContext)ctx, name);
if (ctx instanceof Resolver) {
Resolver res = (Resolver)ctx;
ResolveResult rr = res.resolveToClass(name, DirContext.class);
// Reached a DirContext; return result.
DirContext dctx = (DirContext)rr.getResolvedObj();
Name tmp = rr.getRemainingName();
String remains = (tmp != null) ? tmp.toString() : "";
return (new DirContextStringPair(dctx, remains));
}
// Resolve all the way using lookup(). This may allow the operation
// to succeed if it doesn't require the penultimate context.
Object ultimate = ctx.lookup(name);
if (ultimate instanceof DirContext) {
return (new DirContextStringPair((DirContext)ultimate, ""));
}
throw (NamingException)cpe.fillInStackTrace();
}
public Attributes getAttributes(String name) throws NamingException {
DirContextStringPair res = getTargetContext(name);
return res.getDirContext().getAttributes(res.getString());
}
public Attributes getAttributes(String name, String[] attrIds)
throws NamingException {
DirContextStringPair res = getTargetContext(name);
return res.getDirContext().getAttributes(res.getString(), attrIds);
}
public Attributes getAttributes(Name name) throws NamingException {
DirContextNamePair res = getTargetContext(name);
return res.getDirContext().getAttributes(res.getName());
}
public Attributes getAttributes(Name name, String[] attrIds)
throws NamingException {
DirContextNamePair res = getTargetContext(name);
return res.getDirContext().getAttributes(res.getName(), attrIds);
}
public void modifyAttributes(Name name, int mod_op, Attributes attrs)
throws NamingException {
DirContextNamePair res = getTargetContext(name);
res.getDirContext().modifyAttributes(res.getName(), mod_op, attrs);
}
public void modifyAttributes(String name, int mod_op, Attributes attrs)
throws NamingException {
DirContextStringPair res = getTargetContext(name);
res.getDirContext().modifyAttributes(res.getString(), mod_op, attrs);
}
public void modifyAttributes(Name name, ModificationItem[] mods)
throws NamingException {
DirContextNamePair res = getTargetContext(name);
res.getDirContext().modifyAttributes(res.getName(), mods);
}
public void modifyAttributes(String name, ModificationItem[] mods)
throws NamingException {
DirContextStringPair res = getTargetContext(name);
res.getDirContext().modifyAttributes(res.getString(), mods);
}
public void bind(Name name, Object obj, Attributes attrs)
throws NamingException {
DirContextNamePair res = getTargetContext(name);
res.getDirContext().bind(res.getName(), obj, attrs);
}
public void bind(String name, Object obj, Attributes attrs)
throws NamingException {
DirContextStringPair res = getTargetContext(name);
res.getDirContext().bind(res.getString(), obj, attrs);
}
public void rebind(Name name, Object obj, Attributes attrs)
throws NamingException {
DirContextNamePair res = getTargetContext(name);
res.getDirContext().rebind(res.getName(), obj, attrs);
}
public void rebind(String name, Object obj, Attributes attrs)
throws NamingException {
DirContextStringPair res = getTargetContext(name);
res.getDirContext().rebind(res.getString(), obj, attrs);
}
public DirContext createSubcontext(Name name, Attributes attrs)
throws NamingException {
DirContextNamePair res = getTargetContext(name);
return res.getDirContext().createSubcontext(res.getName(), attrs);
}
public DirContext createSubcontext(String name, Attributes attrs)
throws NamingException {
DirContextStringPair res = getTargetContext(name);
return
res.getDirContext().createSubcontext(res.getString(), attrs);
}
public NamingEnumeration search(Name name,
Attributes matchingAttributes,
String[] attributesToReturn)
throws NamingException {
DirContextNamePair res = getTargetContext(name);
return res.getDirContext().search(res.getName(), matchingAttributes,
attributesToReturn);
}
public NamingEnumeration search(String name,
Attributes matchingAttributes,
String[] attributesToReturn)
throws NamingException {
DirContextStringPair res = getTargetContext(name);
return res.getDirContext().search(res.getString(),
matchingAttributes,
attributesToReturn);
}
public NamingEnumeration search(Name name,
Attributes matchingAttributes)
throws NamingException {
DirContextNamePair res = getTargetContext(name);
return res.getDirContext().search(res.getName(), matchingAttributes);
}
public NamingEnumeration search(String name,
Attributes matchingAttributes)
throws NamingException {
DirContextStringPair res = getTargetContext(name);
return res.getDirContext().search(res.getString(),
matchingAttributes);
}
public NamingEnumeration search(Name name,
String filter,
SearchControls cons)
throws NamingException {
DirContextNamePair res = getTargetContext(name);
return res.getDirContext().search(res.getName(), filter, cons);
}
public NamingEnumeration search(String name,
String filter,
SearchControls cons)
throws NamingException {
DirContextStringPair res = getTargetContext(name);
return res.getDirContext().search(res.getString(), filter, cons);
}
public NamingEnumeration search(Name name,
String filterExpr,
Object[] args,
SearchControls cons)
throws NamingException {
DirContextNamePair res = getTargetContext(name);
return res.getDirContext().search(res.getName(), filterExpr, args,
cons);
}
public NamingEnumeration search(String name,
String filterExpr,
Object[] args,
SearchControls cons)
throws NamingException {
DirContextStringPair res = getTargetContext(name);
return res.getDirContext().search(res.getString(), filterExpr, args,
cons);
}
public DirContext getSchema(String name) throws NamingException {
DirContextStringPair res = getTargetContext(name);
return res.getDirContext().getSchema(res.getString());
}
public DirContext getSchema(Name name) throws NamingException {
DirContextNamePair res = getTargetContext(name);
return res.getDirContext().getSchema(res.getName());
}
public DirContext getSchemaClassDefinition(String name)
throws NamingException {
DirContextStringPair res = getTargetContext(name);
return res.getDirContext().getSchemaClassDefinition(res.getString());
}
public DirContext getSchemaClassDefinition(Name name)
throws NamingException {
DirContextNamePair res = getTargetContext(name);
return res.getDirContext().getSchemaClassDefinition(res.getName());
}
}
class DirContextNamePair {
DirContext ctx;
Name name;
DirContextNamePair(DirContext ctx, Name name) {
this.ctx = ctx;
this.name = name;
}
DirContext getDirContext() {
return ctx;
}
Name getName() {
return name;
}
}
class DirContextStringPair {
DirContext ctx;
String str;
DirContextStringPair(DirContext ctx, String str) {
this.ctx = ctx;
this.str = str;
}
DirContext getDirContext() {
return ctx;
}
String getString() {
return str;
}
}