| /* |
| * 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(); |
| } |
| |
| } |