blob: a2f7ca078b53873f2a800dc5a7b963c40faae963 [file] [log] [blame]
/*
* 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.ldap;
import java.util.Hashtable;
import javax.naming.directory.InitialDirContext;
import javax.naming.NamingException;
import javax.naming.NotContextException;
import org.apache.harmony.jndi.internal.nls.Messages;
/**
* This is used as the starting context when the LDAPv3 extended functionality
* provided by the <code>javax.naming.ldap</code> package is required.
*
* See <code>LdapContext</code> for a description of the Request and Response
* controls.
*
* @see LdapContext
*/
public class InitialLdapContext extends InitialDirContext implements
LdapContext {
/*
* This is set to the environment property java.naming.ldap.version.
*/
private static final String LDAP_VERSION = "java.naming.ldap.version"; //$NON-NLS-1$
/*
* This is set to the environment property java.naming.ldap.control.connect.
*/
private static final String CONNECT_CONTROL = "java.naming.ldap.control.connect"; //$NON-NLS-1$
/*
* The version of this LDAP context implementation.
*/
private static final String THIS_LDAP_VERSION = "3"; //$NON-NLS-1$
/**
* Constructs an <code>InitialLdapContext</code> instance without using
* any environment properties or connection controls.
*
* @throws NamingException
* If an error is encountered.
*/
public InitialLdapContext() throws NamingException {
this(null, null);
}
/**
* Constructs an <code>InitialLdapContext</code> instance using the
* supplied environment properties and connection controls.
*
* @param h
* the environment properties which may be null
* @param cs
* the connection controls which may be null
* @throws NamingException
* If an error is encountered.
*/
@SuppressWarnings("unchecked")
public InitialLdapContext(Hashtable<?, ?> h, Control[] cs)
throws NamingException {
super(true);
/*
* Prepare the environment properties to be inherited by the service
* provider.
*/
Hashtable<Object, Object> newEnvironment = null;
if (null == h) {
newEnvironment = new Hashtable<Object, Object>();
} else {
newEnvironment = (Hashtable<Object, Object>) h.clone();
}
// Set the environment property java.naming.ldap.control.connect
if (null != cs) {
Control[] cloneOfCs = new Control[cs.length];
System.arraycopy(cs, 0, cloneOfCs, 0, cs.length);
newEnvironment.put(CONNECT_CONTROL, cloneOfCs);
}
// Set the environment property java.naming.ldap.version to be 3
newEnvironment.put(LDAP_VERSION, THIS_LDAP_VERSION);
// Initialize the initial context
super.init(newEnvironment);
}
/*
* Gets the default initial context and verify that it's an instance of
* LdapContext.
*/
private LdapContext getDefaultInitLdapContext() throws NamingException {
if (!(super.defaultInitCtx instanceof LdapContext)) {
// jndi.1D=Expected an LdapContext object.
throw new NotContextException(Messages.getString("jndi.1D")); //$NON-NLS-1$
}
return (LdapContext) super.defaultInitCtx;
}
public ExtendedResponse extendedOperation(ExtendedRequest e)
throws NamingException {
return getDefaultInitLdapContext().extendedOperation(e);
}
public LdapContext newInstance(Control[] ac) throws NamingException {
return getDefaultInitLdapContext().newInstance(ac);
}
public void reconnect(Control[] ac) throws NamingException {
getDefaultInitLdapContext().reconnect(ac);
}
public Control[] getConnectControls() throws NamingException {
return getDefaultInitLdapContext().getConnectControls();
}
public void setRequestControls(Control[] ac) throws NamingException {
getDefaultInitLdapContext().setRequestControls(ac);
}
public Control[] getRequestControls() throws NamingException {
return getDefaultInitLdapContext().getRequestControls();
}
public Control[] getResponseControls() throws NamingException {
return getDefaultInitLdapContext().getResponseControls();
}
}