You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2006/03/15 15:57:17 UTC
svn commit: r386087 [8/45] - in /incubator/harmony/enhanced/classlib/trunk:
make/ make/patternsets/ modules/jndi/ modules/jndi/META-INF/
modules/jndi/make/ modules/jndi/make/common/ modules/jndi/src/
modules/jndi/src/main/ modules/jndi/src/main/java/ m...
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/InitialLdapContext.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/InitialLdapContext.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/InitialLdapContext.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/InitialLdapContext.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,167 @@
+/* Copyright 2004 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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;
+
+/**
+ * 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 {
+
+ /*
+ * -------------------------------------------------------------------
+ * Constants
+ * -------------------------------------------------------------------
+ */
+
+ /*
+ * 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 implementaton.
+ */
+ private static final String THIS_LDAP_VERSION = "3"; //$NON-NLS-1$
+
+ /*
+ * -------------------------------------------------------------------
+ * Constructors
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * 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.
+ */
+ public InitialLdapContext(Hashtable h, Control[] cs)
+ throws NamingException {
+ super(true);
+
+ /*
+ * Prepare the environment properties to be inherited by the
+ * service provider.
+ */
+ Hashtable newEnvironment = null;
+ if (null == h) {
+ newEnvironment = new Hashtable();
+ } else {
+ newEnvironment = (Hashtable) 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 enviroment property java.naming.ldap.version to be 3
+ newEnvironment.put(LDAP_VERSION, THIS_LDAP_VERSION);
+
+ // Initialize the initial context
+ super.init(newEnvironment);
+ }
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /*
+ * Gets the default initial context and verify that it's an instance of
+ * LdapContext.
+ */
+ private LdapContext getDefaultInitLdapContext() throws NamingException {
+ if (!(super.defaultInitCtx instanceof LdapContext)) {
+ throw new NotContextException("Expected an LdapContext object."); //$NON-NLS-1$
+ }
+ return (LdapContext) super.defaultInitCtx;
+ }
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods of Interface LdapContext
+ * -------------------------------------------------------------------
+ */
+
+ 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();
+ }
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/LdapContext.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/LdapContext.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/LdapContext.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/LdapContext.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,136 @@
+/* Copyright 2004 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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 javax.naming.NamingException;
+import javax.naming.directory.DirContext;
+
+/**
+ * An <code>LdapContext</code> is used when LDAPv3 extended operations and/or
+ * controls are required.
+ * <p>
+ * Extended operations are dealt with by the <code>extendedOperation</code>
+ * method. All other methods relate to the use of controls. Controls are extra
+ * information provided to or from an LDAP v3 server. Controls are either of the
+ * type <code>Request</code> or <code>Reponse</code>. There is a special type of
+ * request controls known as connection controls.</p>
+ * <p>
+ * Connection controls are used by a service provider when connecting or
+ * reconnecting to an LDAP server. These are associated with connections and are
+ * inherited by derived <code>Context</code>. It should be noted however that
+ * subsequent changes to a derived <code>Context</code>'s own connection
+ * controls has no impact on the <code>Context</code> from which it inherited.
+ * There are a number of environment properties which relate specifically to
+ * LDAP service providers. The one which is important here is:
+ * <code>java.naming.ldap.control.connect</code> which holds the array of
+ * connection controls for a <code>Context</code>. Service providers rely on
+ * this to pass on the connection controls to derived <code>Context</code>.</p>
+ * <p>
+ * Request controls are used by a service provider when performing operations
+ * other than connecting or reconnecting. These are referred to as Context
+ * Request Controls as they relate to the specific <code>Context</code>
+ * instance. It must be noted that, unlike connection controls, they are not
+ * inherited. Connection and request controls being split like this allows
+ * service provider implementations to pool connections.</p>
+ * <p>
+ * Response controls are generated by an LDAPv3 server.</p>
+ *
+ * @see DirContext
+ *
+ */
+public interface LdapContext extends DirContext {
+
+ /*
+ * -------------------------------------------------------------------
+ * Constants
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * This is set to the environment property java.naming.factory.control.
+ */
+ static final String CONTROL_FACTORIES = "java.naming.factory.control"; //$NON-NLS-1$
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Deals with extended operations of LDAPv3.
+ *
+ * @param e an extended request
+ * @return an extended response for the supplied request
+ * @throws NamingException If an error is encountered.
+ */
+ ExtendedResponse extendedOperation(ExtendedRequest e)
+ throws NamingException;
+
+ /**
+ * Creates a new instance of <code>LdapContext</code> using the supplied
+ * controls.
+ *
+ * @param ac an array of controls
+ * @return a new <code>LdapContext</code> instance
+ * @throws NamingException If an error is encountered.
+ */
+ LdapContext newInstance(Control[] ac) throws NamingException;
+
+ /**
+ * Reconnects using the supplied controls.
+ *
+ * @param ac an array of controls
+ * @throws NamingException If an error is encountered.
+ */
+ void reconnect(Control[] ac) throws NamingException;
+
+ /**
+ * Gets an array of connection controls.
+ *
+ * @return an array of connection controls
+ * @throws NamingException If an error is encountered.
+ */
+ Control[] getConnectControls() throws NamingException;
+
+ /**
+ * Sets the request controls.
+ *
+ * @param ac an array of request controls
+ * @throws NamingException If an error is encountered.
+ */
+ void setRequestControls(Control[] ac) throws NamingException;
+
+ /**
+ * Gets the request controls.
+ *
+ * @return an array of request controls
+ * @throws NamingException If an error is encountered.
+ */
+ Control[] getRequestControls() throws NamingException;
+
+ /**
+ * Gets the response controls.
+ *
+ * @return an array of response controls
+ * @throws NamingException If an error is encountered.
+ */
+ Control[] getResponseControls() throws NamingException;
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/LdapReferralException.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/LdapReferralException.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/LdapReferralException.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/LdapReferralException.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,107 @@
+/* Copyright 2004 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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.Context;
+import javax.naming.NamingException;
+import javax.naming.ReferralException;
+
+/**
+ * <code>LdapReferralException</code> is an abstract exception which extends
+ * <code>ReferralException</code> to handle LDAPv3 request controls.
+ *
+ */
+public abstract class LdapReferralException extends ReferralException {
+
+ /*
+ * -------------------------------------------------------------------
+ * Constants
+ * -------------------------------------------------------------------
+ */
+
+ /*
+ * This constant is used during deserialization to check the J2SE version which
+ * created the serialized object.
+ */
+ static final long serialVersionUID = -1668992791764950804L; // J2SE 1.4.2
+
+ /*
+ * -------------------------------------------------------------------
+ * Constructors
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Default constructor.
+ */
+ protected LdapReferralException() {
+ super();
+ }
+
+ /**
+ * Constructs an LdapReferralException instance using the supplied text of
+ * the message
+ * @param s the supplied text of the message, which may be null
+ */
+ protected LdapReferralException(String s) {
+ super(s);
+ }
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Gets referal context without environment properties.
+ *
+ * @return referral context
+ * @throws NamingException
+ * If cannot get referral context correctly.
+ */
+ public abstract Context getReferralContext() throws NamingException;
+
+ /**
+ * Gets referal context with environment properties.
+ *
+ * @param h environment properties
+ * @return referral context
+ * @throws NamingException
+ * If cannot get referral context correctly.
+ */
+ public abstract Context getReferralContext(Hashtable h)
+ throws NamingException;
+
+ /**
+ * Gets referal context with environment properties and an array of LDAPv3
+ * controls.
+ *
+ * @param h environment properties
+ * @param cs array of LDAPv3 controls
+ * @return referral context
+ * @throws NamingException
+ * If cannot get referral context correctly.
+ */
+ public abstract Context getReferralContext(Hashtable h, Control[] cs)
+ throws NamingException;
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/UnsolicitedNotification.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/UnsolicitedNotification.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/UnsolicitedNotification.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/UnsolicitedNotification.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,57 @@
+/* Copyright 2004 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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 javax.naming.NamingException;
+
+/**
+ * See RFC2251 for the definition of an <code>UnsolicitedNotification</code>.
+ *
+ * @see ExtendedResponse
+ * @see HasControls
+ *
+ */
+public interface UnsolicitedNotification
+ extends ExtendedResponse, HasControls {
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Gets the referrals associated with this <code>UnsolicitedNotification
+ * </code> instance.
+ *
+ * @return the referrals associated with this <code>
+ * UnsolicitedNotification</code> instance
+ */
+ String[] getReferrals();
+
+ /**
+ * Gets the naming exception associated with this <code>
+ * UnsolicitedNotification</code> instance.
+ *
+ * @return the naming exception associated with this <code>
+ * UnsolicitedNotification</code> instance
+ */
+ NamingException getException();
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/UnsolicitedNotificationEvent.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/UnsolicitedNotificationEvent.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/UnsolicitedNotificationEvent.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/UnsolicitedNotificationEvent.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,102 @@
+/* Copyright 2004 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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.EventObject;
+
+/**
+ * This event is fired when an LDAP server sends an unsolited notification.
+ * (See RFC2251).
+ *
+ *
+ */
+public class UnsolicitedNotificationEvent extends EventObject {
+
+ /*
+ * -------------------------------------------------------------------
+ * Constants
+ * -------------------------------------------------------------------
+ */
+
+ /*
+ * This constant is used during deserialization to check the J2SE version
+ * which created the serialized object.
+ */
+ static final long serialVersionUID = -2382603380799883705L; //J2SE 1.4.2
+
+ /*
+ * -------------------------------------------------------------------
+ * Instance variables
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * The specific notification.
+ *
+ * @serial
+ */
+ private UnsolicitedNotification notice;
+
+ /*
+ * -------------------------------------------------------------------
+ * Constructors
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Constructs an <code>UnsolicitedNotificationEvent</code> instance using
+ * the supplied <code>UnsolicitedNotification</code> instance.
+ *
+ * @param o the source of the event which cannot be null
+ * @param un the <code>UnsolicitedNotification</code> instance which
+ * cannot be null
+ */
+ public UnsolicitedNotificationEvent(Object o, UnsolicitedNotification un) {
+ super(o);
+ this.notice = un;
+ }
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Returns the <code>UnsolicitedNotification</code> instance associated with
+ * this event.
+ *
+ * @return the <code>UnsolicitedNotification</code> instance associated
+ * with this event
+ */
+ public UnsolicitedNotification getNotification() {
+ return notice;
+ }
+
+ /**
+ * Uses this event to trigger a notification received on the supplied
+ * listener.
+ *
+ * @param unl the listener to dispatch this event to. It cannot be null.
+ */
+ public void dispatch(UnsolicitedNotificationListener unl) {
+ unl.notificationReceived(this);
+ }
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/UnsolicitedNotificationListener.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/UnsolicitedNotificationListener.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/UnsolicitedNotificationListener.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/UnsolicitedNotificationListener.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,45 @@
+/* Copyright 2004 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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 javax.naming.event.NamingListener;
+
+/**
+ * A listener that wishes to receive unsolicited notifications.
+ * See RFC2251 for the definition of an <code>UnsolicitedNotification</code>.
+ *
+ * @see UnsolicitedNotification
+ *
+ */
+public interface UnsolicitedNotificationListener extends NamingListener {
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Accepts an unsolicited notification.
+ *
+ * @param e an unsolicited notification
+ */
+ void notificationReceived(UnsolicitedNotificationEvent e);
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/DirObjectFactory.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/DirObjectFactory.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/DirObjectFactory.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/DirObjectFactory.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,63 @@
+/* Copyright 2004 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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.spi;
+
+import java.util.Hashtable;
+import javax.naming.Name;
+import javax.naming.Context;
+import javax.naming.directory.Attributes;
+
+/**
+ * An <code>DirObjectFactory</code> creates objects of a specified type.
+ * <code>DirObjectFactory</code> is a specific version of
+ * <code>ObjectFactory</code> for <code>DirectoryManager</code>.
+ *
+ * @see ObjectFactory
+ * @see DirectoryManager
+ */
+public interface DirObjectFactory extends ObjectFactory {
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Similar to <code>ObjectFactory.getObjectInstance</code>, with an
+ * additional <code>attributes</code> parameter.
+ *
+ * @param o an object
+ * @param n a name
+ * @param c a context
+ * @param envmt a context environment
+ * @param a some attributes
+ * @return the created object
+ * @throws Exception if an exception occurs
+ * @see ObjectFactory#getObjectInstance(Object, Name, Context, Hashtable)
+ */
+ Object getObjectInstance(
+ Object o,
+ Name n,
+ Context c,
+ Hashtable envmt,
+ Attributes a)
+ throws Exception;
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/DirStateFactory.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/DirStateFactory.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/DirStateFactory.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/DirStateFactory.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,134 @@
+/* Copyright 2004 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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.spi;
+
+import java.util.Hashtable;
+import javax.naming.Name;
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.directory.Attributes;
+
+/**
+ * The <code>DirStateFactory</code> interface describes a factory used to get
+ * the state of an object to be bound. <code>DirStateFactory</code> is a
+ * specific version of <code>StateFactory</code> for
+ * <code>DirectoryManager</code>.
+ *
+ * @see StateFactory
+ * @see DirectoryManager
+ */
+public interface DirStateFactory extends StateFactory {
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Similar to <code>StateFactory.getStateToBind</code> with an additional
+ * <code>attributes</code> parameter.
+ *
+ * @param o an object
+ * @param n a name
+ * @param c a context
+ * @param envmt a context environment
+ * @param a some attributes
+ * @return the state as a <code>Result</code> instance, containing
+ * an object and associated attributes.
+ * @throws NamingException if an exception occurs
+ * @see StateFactory#getStateToBind(Object, Name, Context, Hashtable)
+ */
+ Result getStateToBind(
+ Object o,
+ Name n,
+ Context c,
+ Hashtable envmt,
+ Attributes a)
+ throws NamingException;
+
+ /*
+ * -------------------------------------------------------------------
+ * Inner classes
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Used by the <code>DirectoryManager.getStateToBind</code> method as
+ * the returning value.
+ */
+ public static class Result {
+
+ /*
+ * -------------------------------------------------------------------
+ * Instance variables
+ * -------------------------------------------------------------------
+ */
+
+ // the Object returned by DirectoryManager.getStateToBind.
+ private Object obj;
+
+ // the Attributes returned by DirectoryManager.getStateToBind.
+ private Attributes attrs;
+
+ /*
+ * -------------------------------------------------------------------
+ * Constructors
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Creates an instance of <code>DirStateFactory.Result</code>
+ *
+ * @param o the object returned by
+ * <code>DirectoryManager.getStateToBind</code>. May be null.
+ * @param a the attributes returned by
+ * <code>DirectoryManager.getStateToBind</code>. May be null.
+ */
+ public Result(Object o, Attributes a) {
+ this.obj = o;
+ this.attrs = a;
+ }
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Returns the object associated with this result.
+ *
+ * @return the object associated with this result.
+ */
+ public Object getObject() {
+ return this.obj;
+ }
+
+ /**
+ * Returns the attributes associated with this result.
+ *
+ * @return the attributes associated with this result.
+ */
+ public Attributes getAttributes() {
+ return this.attrs;
+ }
+ }
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/DirectoryManager.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/DirectoryManager.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/DirectoryManager.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/DirectoryManager.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,1116 @@
+/* Copyright 2004 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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.spi;
+
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.StringTokenizer;
+
+import javax.naming.CannotProceedException;
+import javax.naming.Context;
+import javax.naming.Name;
+import javax.naming.NameParser;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.RefAddr;
+import javax.naming.Reference;
+import javax.naming.Referenceable;
+import javax.naming.StringRefAddr;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.ModificationItem;
+import javax.naming.directory.SearchControls;
+import javax.naming.spi.DirStateFactory.Result;
+
+import com.ibm.jndi.EnvironmentReader;
+import com.ibm.jndi.UrlParser;
+
+/**
+ * The <code>DirectoryManager</code> class cannot be instantiated. All its
+ * methods are static. The methods are used by service providers for accessing
+ * object and state factories and for determining continuation contexts.
+ * <p>
+ * The <code>Name</code> and <code>Hashtable</code> arguments passed to the
+ * <code>DirectoryManager</code> methods remain owned purely by the calling
+ * method. They must not be changed or referenced.</p>
+ * <p>
+ * Multithreaded access to this class must be safe.</p>
+ *
+ */
+public class DirectoryManager extends NamingManager {
+
+ /*
+ * -------------------------------------------------------------------
+ * Class variables
+ * -------------------------------------------------------------------
+ */
+ /*
+ * -------------------------------------------------------------------
+ * Constructors
+ * -------------------------------------------------------------------
+ */
+ private DirectoryManager(){//private to prevent it being instanced
+ }
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Create an object using an object factory.
+ * Returns a new <code>Object</code> or the supplied <code>Object o</code>
+ * if one cannot be created.
+ *
+ * The behaviour is like that for the
+ * <code>getObjectInstance</code> method of <code>NamingManager</code>
+ * however it should be noted that the intermediate object factory may be
+ * either of type <code>DirObjectFactory</code> or of type
+ * <code>ObjectFactory</code>; in the former case, the supplied
+ * <code>Attributes</code> must be passed when getting the object,
+ * otherwise the supplied <code>Attributes</code> are ignored.
+ *
+ * @param o An object which may provide reference or location information.
+ * May be null.
+ * @param n The name of the <code>Object</code> relative to the default
+ * initial context (or relative to the Context c if it is supplied)
+ * @param c The <code>Context</code> to which the Name is relative
+ * @param h a <code>Hashtable</code> containing environment properties and
+ * values - may be null
+ * @param a <code>Attributes</code> - if some or all of the attributes of
+ * <code>Object o</code> are already known they can be supplied so
+ * that the factory does not have to do the work of looking them up.
+ * @return the created object
+ * @throws NamingException if one is encountered
+ * @throws Exception if any other exception is encountered
+ */
+ public static Object getObjectInstance(
+ Object o,
+ Name n,
+ Context c,
+ Hashtable h,
+ Attributes a)
+ throws NamingException, Exception {
+
+ // 1. try ObjectFactoryBuilder, if it is set
+ if (null != ofb) {
+ // use the builder to create an object factory
+ ObjectFactory factory = ofb.createObjectFactory(o, h);
+ // get object instance using the factory and return
+ return getObjectInstanceFromGivenFactory(factory, o, n, c, h, a);
+ }
+
+ // 2. see whether o is a Referenceable or a Reference
+ Reference ref = null;
+ if (o instanceof Referenceable) {
+ ref = ((Referenceable) o).getReference();
+ }
+ if (o instanceof Reference) {
+ ref = (Reference) o;
+ }
+ // if o is a Referenceable or a Reference
+ if (null != ref) {
+ // if a factory class name is supplied by the reference, use it to create
+ if (null != ref.getFactoryClassName()) {
+ return getObjectInstanceByFactoryInReference(ref, o, n, c, h, a);
+ }
+ // see if ref has any StringRefAddrs of address type URL,
+ Object result = getObjectInstanceByUrlRefAddr(n, c, h, ref);
+ // if success, return it
+ if (null != result) {
+ return result;
+ }
+ }
+
+ // 3. try Context.OBJECT_FACTORIES
+ Object result = getObjectInstanceByObjectFactory(o, n, c, h, a);
+ if (null != result) {
+ return result;
+ }
+
+ // all failed, just return o
+ return o;
+ }
+
+ /*
+ * Check the type of factory, DirObjectFactory or ObjectFactory, and
+ * call getObjectInstance() on the property type.
+ */
+ private static Object getObjectInstanceFromGivenFactory(
+ ObjectFactory factory,
+ Object o,
+ Name n,
+ Context c,
+ Hashtable h,
+ Attributes a) throws Exception {
+ if (factory instanceof DirObjectFactory) {
+ return ((DirObjectFactory) factory).getObjectInstance(o, n, c, h, a);
+ }
+ return factory.getObjectInstance(o, n, c, h);
+ }
+
+ private static Object getObjectInstanceByObjectFactory(
+ Object o,
+ Name n,
+ Context c,
+ Hashtable h,
+ Attributes a)
+ throws NamingException, Exception {
+ // obtain object factories from hashtable and service provider resource file
+ String fnames[] =
+ EnvironmentReader.getFactoryNamesFromEnvironmentAndProviderResource(
+ h,
+ c,
+ Context.OBJECT_FACTORIES);
+ // for each object factory
+ for (int i = 0; i < fnames.length; i++) {
+ // new factory instance by its class name
+ ObjectFactory factory = null;
+ try {
+ factory = (ObjectFactory) classForName(fnames[i]).newInstance();
+ } catch (Exception e) {
+ continue;
+ }
+ // create object using factory
+ Object obj = getObjectInstanceFromGivenFactory(factory, o, n, c, h, a);
+ if (null != obj) {
+ return obj;
+ }
+ }
+ // no object factory succeeded, return null
+ return null;
+ }
+
+ private static Object getObjectInstanceByUrlRefAddr(
+ Name n,
+ Context c,
+ Hashtable h,
+ Reference ref)
+ throws NamingException {
+ // obtain pkg prefixes from hashtable and service provider resource file
+ String pkgPrefixes[] =
+ EnvironmentReader.getFactoryNamesFromEnvironmentAndProviderResource(
+ h,
+ c,
+ Context.URL_PKG_PREFIXES);
+ // for each RefAddr
+ Enumeration enumeration = ref.getAll();
+ while (enumeration.hasMoreElements()) {
+ RefAddr addr = (RefAddr) enumeration.nextElement();
+ // if it is StringRefAddr and type is URL
+ if (addr instanceof StringRefAddr
+ && addr.getType().equalsIgnoreCase("URL")) { //$NON-NLS-1$
+ // get the url address
+ String url = (String) ((StringRefAddr) addr).getContent();
+ // try create using url context factory
+ Object obj =
+ getObjectInstanceByUrlContextFactory(
+ url,
+ n,
+ c,
+ h,
+ pkgPrefixes,
+ UrlParser.getScheme(url));
+ // if success, return the created obj
+ if (null != obj) {
+ return obj;
+ }
+ }
+ }
+ // failed to create using any StringRefAddr of address type URL, return null
+ return null;
+ }
+
+ private static Object getObjectInstanceByUrlContextFactory(
+ String url,
+ Name n,
+ Context c,
+ Hashtable h,
+ String pkgPrefixes[],
+ String schema)
+ throws NamingException {
+ // if schema is empty or null, fail, return null
+ if (null == schema || 0 == schema.length()) {
+ return null;
+ }
+
+ // for each pkg prefix
+ for (int i = 0; i < pkgPrefixes.length; i++) {
+ ObjectFactory factory = null;
+ try {
+ // create url context factory instance
+ String clsName =
+ pkgPrefixes[i] + "." + schema + "." + schema + "URLContextFactory"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ factory = (ObjectFactory) classForName(clsName).newInstance();
+ } catch (Exception e) {
+ // failed to create factory, continue trying
+ continue;
+ }
+ try {
+ // create obj using url context factory
+ /*
+ * Unit test shows it is ObjectFactory here, not DirObjectFactory
+ * // Object obj = factory.getObjectInstance(url, n, c, h, a);
+ */
+ Object obj = factory.getObjectInstance(url, n, c, h);
+ // if create success, return it
+ if (null != obj) {
+ return obj;
+ }
+ } catch (Exception e) {
+ // throw NamingException, if factory fails
+ if (e instanceof NamingException) {
+ throw (NamingException) e;
+ }
+ NamingException nex =
+ new NamingException("Failed to create object instance"); //$NON-NLS-1$
+ nex.setRootCause(e);
+ throw nex;
+ }
+ }
+ // fail to create using url context factory, return null
+ return null;
+ }
+
+ private static Object getObjectInstanceByFactoryInReference(
+ Reference ref,
+ Object o,
+ Name n,
+ Context c,
+ Hashtable h,
+ Attributes a)
+ throws Exception {
+ ObjectFactory factory = null;
+
+ // try load the factory by its class name
+ try {
+ factory =
+ (ObjectFactory) classForName(ref.getFactoryClassName()).newInstance();
+ } catch (ClassNotFoundException e) {
+ // Ignored.
+ }
+
+ // try load the factory from its class location
+ if (null == factory && null != ref.getFactoryClassLocation()) {
+ factory =
+ (ObjectFactory) loadFactoryFromLocation(ref.getFactoryClassName(),
+ ref.getFactoryClassLocation());
+ }
+ // if factory cannot be loaded
+ if (null == factory) {
+ // return o
+ return o;
+ }
+
+ // get object instance using the factory and return it
+ return getObjectInstanceFromGivenFactory(factory, ref, n, c, h, a);
+ }
+
+ /*
+ * If cannot load class, return null.
+ * Throws any exceptions except ClassNotFoundException
+ */
+ private static Object loadFactoryFromLocation(String clsName, String location)
+ throws Exception {
+
+ // convert location into an array of URL, separated by ' '
+ StringTokenizer st = new StringTokenizer(location, " "); //$NON-NLS-1$
+ URL urls[] = new URL[st.countTokens()];
+ for (int i = 0; i < urls.length; i++) {
+ urls[i] = new URL(st.nextToken());
+ }
+
+ // new a URLClassLoader from the URLs
+ URLClassLoader l = new URLClassLoader(urls);
+
+ // try load factory by URLClassLoader
+ try {
+ // return the new instance
+ return l.loadClass(clsName).newInstance();
+ } catch (ClassNotFoundException e) {
+ // return null if class loading failed
+ return null;
+ }
+ }
+
+ /**
+ * Get the state of an Object.
+ * Returns a <code>DirStateFactory</code>. Result which cannot be null. It
+ * contains the attributes and object to be bound, either of which may be
+ * null. Once returned the caller is the owner of it.
+ * The behaviour is like that for the <code>getStateToBind</code> method of
+ * <code>NamingManager</code> however it should be noted that the
+ * intermediate state factory may be of type <code>DirStateFactory</code>
+ * rather than just <code>StateFactory</code> in which case it should also
+ * use the supplied <code>Attributes</code> when getting the state.
+ *
+ * @param o An object which may provide reference or location information.
+ * May be null.
+ * @param n The name of the <code>Object</code> relative to the default
+ * initial context (or relative to the Context c if it is supplied)
+ * @param c The <code>Context</code> to which the <code>Name</code> is
+ * relative
+ * @param h a <code>Hashtable</code> containing environment properties and
+ * values - may be null
+ * @param a <code>Attributes</code> - if some or all of the attributes of
+ * <code>Object o</code> are already known they can be supplied so
+ * that the factory does not have to do the work of looking them up.
+ * @return the state of the object
+ * @throws NamingException if one is encountered
+ */
+ public static DirStateFactory.Result getStateToBind(
+ Object o,
+ Name n,
+ Context c,
+ Hashtable h,
+ Attributes a)
+ throws NamingException {
+
+ // obtain state factories from hashtable and service provider resource file
+ String fnames[] =
+ EnvironmentReader.getFactoryNamesFromEnvironmentAndProviderResource(
+ h,
+ c,
+ Context.STATE_FACTORIES);
+
+ // for each state factory
+ for (int i = 0; i < fnames.length; i++) {
+ // new factory instance by its class name
+ StateFactory factory = null;
+ try {
+ factory = (StateFactory) classForName(fnames[i]).newInstance();
+ } catch (Exception e) {
+ continue;
+ }
+ if (factory instanceof DirStateFactory) {
+ // try obtain state using the DirStateFactory
+ Result r = ((DirStateFactory) factory).getStateToBind(o, n, c, h, a);
+ // if the result is not null, return it
+ if (null != r) {
+ return r;
+ }
+ } else {
+ // try obtain state using the StateFactory
+ Object state = factory.getStateToBind(o, n, c, h);
+ // if a state obtained successfully, return it
+ if (null != state) {
+ return new Result(state, a);
+ }
+ }
+ }
+
+ // all factories failed, return the input argument o
+ return new Result(o, a);
+ }
+
+ /**
+ * Create the next <code>DirContext</code> when using federation so that
+ * the <code>DirContext</code> operation can be reinvoked.
+ * This should work similarly to
+ * <code>NamingManager.getContinuationContext</code> except that a
+ * reference to a <code>DirContext</code> is returned.
+ * <p>
+ * This method is also responsible for setting the property denoted by the
+ * <code>CPE</code> string to be the supplied
+ * <code>CannotProceedException</code> for that environment.</p>
+ *
+ * @param cpe the <code>CannotProceedException</code> generated by the
+ * <code>DirContext</code> of the previous naming system when
+ * it can proceed no further.
+ * @return the next <code>DirContext</code> when using federation
+ * @throws NamingException if the resolved object is not set or if a
+ * <code>DirContext</code> cannot be obtained from it either
+ * directly or indirectly.
+ */
+ public static DirContext getContinuationDirContext(CannotProceedException cpe)
+ throws NamingException {
+ // obtain next context using NamingManager
+ Context nextContext = null;
+ try {
+ nextContext = NamingManager.getContinuationContext(cpe);
+ } catch (CannotProceedException e) {
+ // tolerate CannotProceedException here
+ }
+
+ // if it is a DirContext
+ if (nextContext instanceof DirContext) {
+ // return as DirContext
+ return (DirContext) nextContext;
+ } else if (nextContext instanceof Context) {
+ // in case it's Context but not DirContext, wrap it as DirContext and return
+ return new Context2DirContextWrapper(nextContext, cpe);
+ } else {
+ // return a dummy DirContext, even if no context is obtained
+ return new Context2DirContextWrapper(null, cpe);
+ }
+ }
+
+ private static Class classForName(final String className)
+ throws ClassNotFoundException {
+
+ Class cls = (Class) AccessController.doPrivileged(new PrivilegedAction() {
+ public Object run() {
+ // try thread context class loader first
+ try {
+ return Class.forName(
+ className,
+ true,
+ Thread.currentThread().getContextClassLoader());
+ } catch (ClassNotFoundException e) {
+ // Could happen.
+ }
+ // try system class loader second
+ try {
+ return Class.forName(
+ className,
+ true,
+ ClassLoader.getSystemClassLoader());
+ } catch (ClassNotFoundException e1) {
+ // Not found here either.
+ }
+ // return null, if fail to load class
+ return null;
+ }
+ });
+
+ if (cls == null) {
+ throw new ClassNotFoundException("class " + className + " not found"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+ return cls;
+
+ }
+
+ /**
+ * An inner class that transforms a Context instance into DirContext.
+ */
+ private static class Context2DirContextWrapper implements DirContext {
+ private Context ctx;
+ private CannotProceedException cpe;
+
+ public Context2DirContextWrapper(Context ctx, CannotProceedException cpe) {
+ this.ctx = ctx;
+ this.cpe = cpe;
+ }
+
+ private Context getContext() throws CannotProceedException {
+ if (ctx instanceof Context) {
+ return ctx;
+ }
+ cpe.fillInStackTrace();
+ throw cpe;
+ }
+
+ private DirContext getDirContext() throws CannotProceedException {
+ if (ctx instanceof DirContext) {
+ return (DirContext) ctx;
+ }
+ cpe.fillInStackTrace();
+ throw cpe;
+ }
+
+ /**
+ * @param s
+ * @return
+ * @throws NamingException
+ */
+ public NamingEnumeration listBindings(String s) throws NamingException {
+ return getContext().listBindings(s);
+ }
+
+ /**
+ * @param s
+ * @return
+ * @throws NamingException
+ */
+ public Object removeFromEnvironment(String s) throws NamingException {
+ return getContext().removeFromEnvironment(s);
+ }
+
+ /**
+ * @param s
+ * @return
+ * @throws NamingException
+ */
+ public Object lookupLink(String s) throws NamingException {
+ return getContext().lookupLink(s);
+ }
+
+ /**
+ * @param n
+ * @return
+ * @throws NamingException
+ */
+ public NamingEnumeration list(Name n) throws NamingException {
+ return getContext().list(n);
+ }
+
+ /**
+ * @param s
+ * @return
+ * @throws NamingException
+ */
+ public Object lookup(String s) throws NamingException {
+ return getContext().lookup(s);
+ }
+
+ /**
+ * @param s
+ * @param o
+ * @return
+ * @throws NamingException
+ */
+ public Object addToEnvironment(String s, Object o) throws NamingException {
+ return getContext().addToEnvironment(s, o);
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ public String toString() {
+ try {
+ return getContext().toString();
+ } catch (CannotProceedException e) {
+ return super.toString();
+ }
+ }
+
+ /**
+ * @param s
+ * @return
+ * @throws NamingException
+ */
+ public Context createSubcontext(String s) throws NamingException {
+ return getContext().createSubcontext(s);
+ }
+
+ /**
+ * @param nOld
+ * @param nNew
+ * @throws NamingException
+ */
+ public void rename(Name nOld, Name nNew) throws NamingException {
+ getContext().rename(nOld, nNew);
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ public int hashCode() {
+ try {
+ return getContext().hashCode();
+ } catch (CannotProceedException e) {
+ return super.hashCode();
+ }
+ }
+
+ /**
+ * @param n
+ * @param o
+ * @throws NamingException
+ */
+ public void rebind(Name n, Object o) throws NamingException {
+ getContext().rebind(n, o);
+ }
+
+ /**
+ * @param sOld
+ * @param sNew
+ * @throws NamingException
+ */
+ public void rename(String sOld, String sNew) throws NamingException {
+ getContext().rename(sOld, sNew);
+ }
+
+ /**
+ * @param n
+ * @return
+ * @throws NamingException
+ */
+ public Context createSubcontext(Name n) throws NamingException {
+ return getContext().createSubcontext(n);
+ }
+
+ /**
+ * @param s
+ * @return
+ * @throws NamingException
+ */
+ public NameParser getNameParser(String s) throws NamingException {
+ return getContext().getNameParser(s);
+ }
+
+ /**
+ * @param s
+ * @param o
+ * @throws NamingException
+ */
+ public void rebind(String s, Object o) throws NamingException {
+ getContext().rebind(s, o);
+ }
+
+ /**
+ * @param n
+ * @return
+ * @throws NamingException
+ */
+ public NamingEnumeration listBindings(Name n) throws NamingException {
+ return getContext().listBindings(n);
+ }
+
+ /**
+ * @param n
+ * @return
+ * @throws NamingException
+ */
+ public NameParser getNameParser(Name n) throws NamingException {
+ return getContext().getNameParser(n);
+ }
+
+ /**
+ * @param s
+ * @return
+ * @throws NamingException
+ */
+ public NamingEnumeration list(String s) throws NamingException {
+ return getContext().list(s);
+ }
+
+ /**
+ * @return
+ * @throws NamingException
+ */
+ public String getNameInNamespace() throws NamingException {
+ return getContext().getNameInNamespace();
+ }
+
+ /**
+ * @param n
+ * @throws NamingException
+ */
+ public void unbind(Name n) throws NamingException {
+ getContext().unbind(n);
+ }
+
+ /**
+ * @param n
+ * @param pfx
+ * @return
+ * @throws NamingException
+ */
+ public Name composeName(Name n, Name pfx) throws NamingException {
+ return getContext().composeName(n, pfx);
+ }
+
+ /**
+ * @param n
+ * @param o
+ * @throws NamingException
+ */
+ public void bind(Name n, Object o) throws NamingException {
+ getContext().bind(n, o);
+ }
+
+ /**
+ * @param s
+ * @throws NamingException
+ */
+ public void unbind(String s) throws NamingException {
+ getContext().unbind(s);
+ }
+
+ /**
+ * @throws NamingException
+ */
+ public void close() throws NamingException {
+ getContext().close();
+ }
+
+ /**
+ * @param n
+ * @return
+ * @throws NamingException
+ */
+ public Object lookupLink(Name n) throws NamingException {
+ return getContext().lookupLink(n);
+ }
+
+ /**
+ * @param n
+ * @throws NamingException
+ */
+ public void destroySubcontext(Name n) throws NamingException {
+ getContext().destroySubcontext(n);
+ }
+
+ /**
+ * @param s
+ * @param pfx
+ * @return
+ * @throws NamingException
+ */
+ public String composeName(String s, String pfx) throws NamingException {
+ return getContext().composeName(s, pfx);
+ }
+
+ /**
+ * @param s
+ * @param o
+ * @throws NamingException
+ */
+ public void bind(String s, Object o) throws NamingException {
+ getContext().bind(s, o);
+ }
+
+ /**
+ * @param n
+ * @return
+ * @throws NamingException
+ */
+ public Object lookup(Name n) throws NamingException {
+ return getContext().lookup(n);
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals(Object arg0) {
+ try {
+ return getContext().equals(arg0);
+ } catch (CannotProceedException e) {
+ return super.equals(arg0);
+ }
+ }
+
+ /**
+ * @param s
+ * @throws NamingException
+ */
+ public void destroySubcontext(String s) throws NamingException {
+ getContext().destroySubcontext(s);
+ }
+
+ /**
+ * @return
+ * @throws NamingException
+ */
+ public Hashtable getEnvironment() throws NamingException {
+ return getContext().getEnvironment();
+ }
+
+ /**
+ * @param name
+ * @param obj
+ * @param attributes
+ * @throws NamingException
+ */
+ public void bind(Name name, Object obj, Attributes attributes)
+ throws NamingException {
+ getDirContext().bind(name, obj, attributes);
+ }
+
+ /**
+ * @param s
+ * @param obj
+ * @param attributes
+ * @throws NamingException
+ */
+ public void bind(String s, Object obj, Attributes attributes)
+ throws NamingException {
+ getDirContext().bind(s, obj, attributes);
+ }
+
+ /**
+ * @param name
+ * @param attributes
+ * @return
+ * @throws NamingException
+ */
+ public DirContext createSubcontext(Name name, Attributes attributes)
+ throws NamingException {
+ return getDirContext().createSubcontext(name, attributes);
+ }
+
+ /**
+ * @param s
+ * @param attributes
+ * @return
+ * @throws NamingException
+ */
+ public DirContext createSubcontext(String s, Attributes attributes)
+ throws NamingException {
+ return getDirContext().createSubcontext(s, attributes);
+ }
+
+ /**
+ * @param name
+ * @return
+ * @throws NamingException
+ */
+ public Attributes getAttributes(Name name) throws NamingException {
+ return getDirContext().getAttributes(name);
+ }
+
+ /**
+ * @param name
+ * @param as
+ * @return
+ * @throws NamingException
+ */
+ public Attributes getAttributes(Name name, String[] as) throws NamingException {
+ return getDirContext().getAttributes(name, as);
+ }
+
+ /**
+ * @param s
+ * @return
+ * @throws NamingException
+ */
+ public Attributes getAttributes(String s) throws NamingException {
+ return getDirContext().getAttributes(s);
+ }
+
+ /**
+ * @param s
+ * @param as
+ * @return
+ * @throws NamingException
+ */
+ public Attributes getAttributes(String s, String[] as) throws NamingException {
+ return getDirContext().getAttributes(s, as);
+ }
+
+ /**
+ * @param name
+ * @return
+ * @throws NamingException
+ */
+ public DirContext getSchema(Name name) throws NamingException {
+ return getDirContext().getSchema(name);
+ }
+
+ /**
+ * @param s
+ * @return
+ * @throws NamingException
+ */
+ public DirContext getSchema(String s) throws NamingException {
+ return getDirContext().getSchema(s);
+ }
+
+ /**
+ * @param name
+ * @return
+ * @throws NamingException
+ */
+ public DirContext getSchemaClassDefinition(Name name) throws NamingException {
+ return getDirContext().getSchemaClassDefinition(name);
+ }
+
+ /**
+ * @param s
+ * @return
+ * @throws NamingException
+ */
+ public DirContext getSchemaClassDefinition(String s) throws NamingException {
+ return getDirContext().getSchemaClassDefinition(s);
+ }
+
+ /**
+ * @param name
+ * @param i
+ * @param attributes
+ * @throws NamingException
+ */
+ public void modifyAttributes(Name name, int i, Attributes attributes)
+ throws NamingException {
+ getDirContext().modifyAttributes(name, i, attributes);
+ }
+
+ /**
+ * @param name
+ * @param modificationItems
+ * @throws NamingException
+ */
+ public void modifyAttributes(Name name, ModificationItem[] modificationItems)
+ throws NamingException {
+ getDirContext().modifyAttributes(name, modificationItems);
+ }
+
+ /**
+ * @param s
+ * @param i
+ * @param attributes
+ * @throws NamingException
+ */
+ public void modifyAttributes(String s, int i, Attributes attributes)
+ throws NamingException {
+ getDirContext().modifyAttributes(s, i, attributes);
+ }
+
+ /**
+ * @param s
+ * @param modificationItems
+ * @throws NamingException
+ */
+ public void modifyAttributes(String s, ModificationItem[] modificationItems)
+ throws NamingException {
+ getDirContext().modifyAttributes(s, modificationItems);
+ }
+
+ /**
+ * @param name
+ * @param obj
+ * @param attributes
+ * @throws NamingException
+ */
+ public void rebind(Name name, Object obj, Attributes attributes)
+ throws NamingException {
+ getDirContext().rebind(name, obj, attributes);
+ }
+
+ /**
+ * @param s
+ * @param obj
+ * @param attributes
+ * @throws NamingException
+ */
+ public void rebind(String s, Object obj, Attributes attributes)
+ throws NamingException {
+ getDirContext().rebind(s, obj, attributes);
+ }
+
+ /**
+ * @param name
+ * @param attributes
+ * @return
+ * @throws NamingException
+ */
+ public NamingEnumeration search(Name name, Attributes attributes)
+ throws NamingException {
+ return getDirContext().search(name, attributes);
+ }
+
+ /**
+ * @param name
+ * @param attributes
+ * @param as
+ * @return
+ * @throws NamingException
+ */
+ public NamingEnumeration search(Name name, Attributes attributes, String[] as)
+ throws NamingException {
+ return getDirContext().search(name, attributes, as);
+ }
+
+ /**
+ * @param name
+ * @param filter
+ * @param objs
+ * @param searchControls
+ * @return
+ * @throws NamingException
+ */
+ public NamingEnumeration search(
+ Name name,
+ String filter,
+ Object[] objs,
+ SearchControls searchControls)
+ throws NamingException {
+ return getDirContext().search(name, filter, objs, searchControls);
+ }
+
+ /**
+ * @param name
+ * @param filter
+ * @param searchControls
+ * @return
+ * @throws NamingException
+ */
+ public NamingEnumeration search(
+ Name name,
+ String filter,
+ SearchControls searchControls)
+ throws NamingException {
+ return getDirContext().search(name, filter, searchControls);
+ }
+
+ /**
+ * @param name
+ * @param attributes
+ * @return
+ * @throws NamingException
+ */
+ public NamingEnumeration search(String name, Attributes attributes)
+ throws NamingException {
+ return getDirContext().search(name, attributes);
+ }
+
+ /**
+ * @param name
+ * @param attributes
+ * @param as
+ * @return
+ * @throws NamingException
+ */
+ public NamingEnumeration search(String name, Attributes attributes, String[] as)
+ throws NamingException {
+ return getDirContext().search(name, attributes, as);
+ }
+
+ /**
+ * @param name
+ * @param filter
+ * @param objs
+ * @param searchControls
+ * @return
+ * @throws NamingException
+ */
+ public NamingEnumeration search(
+ String name,
+ String filter,
+ Object[] objs,
+ SearchControls searchControls)
+ throws NamingException {
+ return getDirContext().search(name, filter, objs, searchControls);
+ }
+
+ /**
+ * @param name
+ * @param filter
+ * @param searchControls
+ * @return
+ * @throws NamingException
+ */
+ public NamingEnumeration search(
+ String name,
+ String filter,
+ SearchControls searchControls)
+ throws NamingException {
+ return getDirContext().search(name, filter, searchControls);
+ }
+
+ }
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/InitialContextFactory.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/InitialContextFactory.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/InitialContextFactory.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/InitialContextFactory.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,53 @@
+/* Copyright 2004 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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.spi;
+
+import java.util.Hashtable;
+import javax.naming.Context;
+import javax.naming.NamingException;
+
+/**
+ * An implementation of <code>InitialContextFactory</code> creates an initial
+ * context so that the JNDI application can begin to invoke naming operations
+ * on that context. The class implementing this interface should be public and
+ * should also provide a public constructor taking no arguments.
+ *
+ */
+public interface InitialContextFactory {
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Returns a non-null initial context object on which naming operations can be
+ * invoked. The specified <code>envmt</code> parameter may be null or may be
+ * used to customise the requested <code>Context</code> object. The
+ * implementation may clone or copy the <code>envmt</code> object,
+ * but will not modify the original object.
+ *
+ * @param envmt the context environment as a <code>Hashtable</code>
+ * @return a non-null initial context object
+ * @throws NamingException if a naming exception occurs
+ */
+ Context getInitialContext(Hashtable envmt) throws NamingException;
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/InitialContextFactoryBuilder.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/InitialContextFactoryBuilder.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/InitialContextFactoryBuilder.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/spi/InitialContextFactoryBuilder.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,56 @@
+/* Copyright 2004 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed 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.spi;
+
+import java.util.Hashtable;
+import javax.naming.NamingException;
+
+/**
+ * An initial context factory builder creates an initial context factory, and
+ * an initial context factory creates initial contexts. A variety of different
+ * initial context implementations may be used by a JNDI application. The
+ * application uses <code>NamingManager.setInitialContextFactoryBuilder()</code>
+ * to specify its own or its preferred builder to override JNDI default policies.
+ * Any such builder must implement the <code>InitialContextFactoryBuilder</code>
+ * interface.
+ *
+ */
+public interface InitialContextFactoryBuilder {
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Uses the environment properties in the specified <code>envmt</code>
+ * parameter to create an initial context factory. If the implementation
+ * needs to keep a copy of <code>envmt</code> or to change it, it will
+ * clone or copy the specified object and use that instead.
+ * The <code>envmt</code> parameter may be null.
+ *
+ * @param envmt the context environment as a <code>Hashtable</code>
+ * @return an initial context factory - cannot be null.
+ * @throws NamingException if an initial context factory could not be created.
+ */
+ InitialContextFactory createInitialContextFactory(Hashtable envmt)
+ throws NamingException;
+
+}
+
+