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 [7/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/directory/InvalidSearchFilterException.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/InvalidSearchFilterException.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/InvalidSearchFilterException.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/InvalidSearchFilterException.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,73 @@
+/* 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.directory;
+
+import javax.naming.NamingException;
+
+/**
+ * Thrown when the search filter specification is invalid.
+ * <p>
+ * Search filters are part of the search API on a <code>DirContext</code>.
+ * If the API is invoked with a search filter that has invalid syntax, or
+ * an invalid parameter, etc. then the <code>InvalidSearchFilterException</code>
+ * is thrown.</p>
+ * <p>
+ * Serialization and multithreaded issues for <code>NamingException</code>
+ * apply equally here.</p>
+ *
+ * @see NamingException
+ */
+public class InvalidSearchFilterException extends NamingException {
+
+ /*
+ * -------------------------------------------------------------------
+ * Constants
+ * -------------------------------------------------------------------
+ */
+
+ /* Serialization information - start. */
+ private static final long serialVersionUID = 0x284877205a985231L;
+ /* Serialization information - end. */
+
+ /*
+ * -------------------------------------------------------------------
+ * Constructors
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Default constructor.
+ * <p>
+ * All fields are initialized to null.</p>
+ */
+ public InvalidSearchFilterException() {
+ super();
+ }
+
+ /**
+ * Constructs an <code>InvalidSearchFilterException</code> instance
+ * using the supplied text of the message.
+ * <p>
+ * All fields are initialized to null.</p>
+ *
+ * @param s message about the problem
+ */
+ public InvalidSearchFilterException(String s) {
+ super(s);
+ }
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/ModificationItem.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/ModificationItem.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/ModificationItem.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/ModificationItem.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,155 @@
+/* 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.directory;
+
+import java.io.Serializable;
+
+/**
+ * This class is a combination of a modification code and attribute.
+ * <p>
+ * It is used by exception reporting (see
+ * <code>AttributeModificationException</code> for an example).</p>
+ * <p>
+ * The class is not thread-safe.</p>
+ *
+ *
+ */
+public class ModificationItem implements Serializable {
+
+ /*
+ * -------------------------------------------------------------------
+ * Constants
+ * -------------------------------------------------------------------
+ */
+
+ /*
+ * This constant is used during deserialization to check the J2SE version which
+ * created the serialized object
+ */
+ private static final long serialVersionUID = 0x69199e89ac11aae2L;
+
+ /*
+ * -------------------------------------------------------------------
+ * Instance variables
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Contains the modification to be performed.
+ *
+ * @serial
+ * @see DirContext
+ */
+ private int mod_op;
+
+ /**
+ * The Attribute or value that is the source of the modification.
+ *
+ * @serial
+ */
+ private Attribute attr;
+
+ /*
+ * -------------------------------------------------------------------
+ * Constructors
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Constructs a <code>ModificaitionItem</code> instance with all parameters.
+ *
+ * @param operation an operation code chosen from <code>DirContext.ADD_ATTRIBUTE</code>,
+ * <code>DirContext.REPLACE_ATTRIBUTE</code>,
+ * <code>DirContext.REMOVE_ATTRIBUTE</code>
+ * @param attribute the <code>Attribute</code> or value that is the
+ * source of the modification
+ */
+ public ModificationItem(int operation, Attribute attribute) {
+ if (null == attribute) {
+ throw new IllegalArgumentException("Non-null attribute is required for modification"); //$NON-NLS-1$
+ }
+ if (!(DirContext.ADD_ATTRIBUTE == operation
+ || DirContext.REPLACE_ATTRIBUTE == operation
+ || DirContext.REMOVE_ATTRIBUTE == operation)) {
+ throw new IllegalArgumentException(
+ "Modification code " //$NON-NLS-1$
+ + operation
+ + " must be one of DirContext.ADD_ATTRIBUTE, DirContext.REPLACE_ATTRIBUTE and DirContext.REMOVE_ATTRIBUTE"); //$NON-NLS-1$
+ }
+ this.mod_op = operation;
+ this.attr = attribute;
+ }
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Gets the <code>Attribute</code> or value that is the source of the
+ * modification.
+ *
+ * @return the <code>Attribute</code> or value that is the
+ * source of the modification
+ */
+ public Attribute getAttribute() {
+ return this.attr;
+ }
+
+ /**
+ * Gets the operation code.
+ *
+ * @return an operation code chosen from <code>
+ * DirContext.ADD_ATTRIBUTE</code>, <code>
+ * DirContext.REPLACE_ATTRIBUTE</code>, <code>
+ * DirContext.REMOVE_ATTRIBUTE</code>
+ */
+ public int getModificationOp() {
+ return this.mod_op;
+ }
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods override parent class Object
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Returns string representations of this <code>ModificationItem</code>
+ * instance.
+ *
+ * @return a concatenation of string values for the operation
+ * and the attribute
+ */
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ switch (mod_op) {
+ case DirContext.ADD_ATTRIBUTE :
+ sb.append("Operation is add attribute: "); //$NON-NLS-1$
+ break;
+ case DirContext.REMOVE_ATTRIBUTE :
+ sb.append("Operation is remove attribute: "); //$NON-NLS-1$
+ break;
+ case DirContext.REPLACE_ATTRIBUTE :
+ sb.append("Operation is replace attribute: "); //$NON-NLS-1$
+ break;
+ }
+ return sb.append(attr.toString()).toString();
+ }
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/NoSuchAttributeException.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/NoSuchAttributeException.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/NoSuchAttributeException.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/NoSuchAttributeException.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,59 @@
+/* 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.directory;
+
+import javax.naming.NamingException;
+
+/**
+ * Thrown when an attempt is made to access a non-existant attribute.
+ */
+public class NoSuchAttributeException extends NamingException {
+
+ /*
+ * -------------------------------------------------------------------
+ * Constants
+ * -------------------------------------------------------------------
+ */
+
+ /* Serialization information - start. */
+ private static final long serialVersionUID = 0x431e6668495bfb09L;
+ /* Serialization information - end. */
+
+ /*
+ * -------------------------------------------------------------------
+ * Constructors
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * This is the default constructor. All fields are initialized to null.
+ */
+ public NoSuchAttributeException() {
+ super();
+ }
+
+ /**
+ * Construct a <code>NoSuchAttributeException</code> with given message.
+ * @param s a message about the exception detail
+ */
+ public NoSuchAttributeException(String s) {
+ super(s);
+ }
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/SchemaViolationException.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/SchemaViolationException.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/SchemaViolationException.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/SchemaViolationException.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,70 @@
+/* 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.directory;
+
+import javax.naming.NamingException;
+
+/**
+ * Thrown when attempting to make a modification that contravenes the directory
+ * schema.<p>
+ *
+ * For example, this exception is thrown if an attempt is made to modify the set
+ * of attributes that is defined on an entry to a state that is invalid by the
+ * object attributes schema. Another example is if the naming schema is contravened
+ * by attempting to move the entry to a new part of the directory.<p>
+ *
+ * The directory service provider throws these exceptions.<p>
+ *
+ * The specification for serialization and thread-safety of <code>NamingException</code>
+ * applies equally to this class.<p>
+ *
+ */
+public class SchemaViolationException extends NamingException {
+
+ /*
+ * -------------------------------------------------------------------
+ * Constants
+ * -------------------------------------------------------------------
+ */
+
+ /* Serialization information - start. */
+ private static final long serialVersionUID = 0xd5c97d2fb107bec1L;
+ /* Serialization information - end. */
+
+ /*
+ * -------------------------------------------------------------------
+ * Constructors
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * This is the default constructor. All fields are initialized to null.
+ */
+ public SchemaViolationException() {
+ super();
+ }
+
+ /**
+ * Construct a <code>SchemaViolationException</code> with given message.
+ * @param s a message about exception detail
+ */
+ public SchemaViolationException(String s) {
+ super(s);
+ }
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/SearchControls.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/SearchControls.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/SearchControls.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/SearchControls.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,333 @@
+/* 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.directory;
+
+import java.io.Serializable;
+
+/**
+ *
+ * This class represents the scope of a search, and the list of attributes that
+ * the search encompasses.
+ * <p>
+ * The various scopes are defined by class constants representing Object,
+ * Single-depth, and Full-depth searches of the directory.</p>
+ * <p>
+ * This class is not thread-safe.</p>
+ *
+ *
+ */
+public class SearchControls implements Serializable {
+
+ /*
+ * -------------------------------------------------------------------
+ * Constants
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Bounds the search to the object scope only.
+ * <p>
+ * The search takes place over the given object. The resulting enumeration
+ * will therefore only contain either zero or one (the given) object depending
+ * upon whether the object matches the search criteria.</p>
+ * <p>
+ * If the object does match, its name in the enumeration will be empty since
+ * names are specified relative to the root of the search.</p>
+ */
+ public static final int OBJECT_SCOPE = 0;
+
+ /**
+ * Bounds the search to a single level of the naming context rooted at the
+ * given object.
+ * <p>
+ * The search will take place over the object, or if the object is a context
+ * then the object and all objects that are one level removed from the given
+ * context.</p>
+ * <p>
+ * Matches are named by a relative name to the given root, so will have atomic
+ * (single level valid) names.</p>
+ */
+ public static final int ONELEVEL_SCOPE = 1;
+
+ /**
+ * Bounds the search to the subtree rooted at the given object or naming
+ * context.
+ * <p>
+ * The search will take place over the object, or if the object is a
+ * context then the object and all objects that are reachable fromt he
+ * given context.</p>
+ * <p>
+ * The names that are returned in the enumeration are defined to be
+ * either relative names to the given root, or full URIs of the matching
+ * objects.</p>
+ * <p>
+ * The seach is defined to no cross naming system boundaries.</p>
+ */
+ public static final int SUBTREE_SCOPE = 2;
+
+ /*
+ * This constant is used during deserialization to check the J2SE version which
+ * created the serialized object
+ */
+ private static final long serialVersionUID = 0xdd935921dd0f3e33L;
+
+ /*
+ * -------------------------------------------------------------------
+ * Instance variables
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * The scope of the search.
+ * <p>
+ * Constrained to be one of ONELEVEL_SCOPE, OBJECT_SCOPE, or SUBTREE_SCOPE.</p>
+ *
+ * @serial
+ */
+ private int searchScope;
+
+ /**
+ * Seach time limitation.
+ * <p>
+ * Maximum number of milliseconds to wait for the search to complete.</p>
+ *
+ * @serial
+ */
+ private int timeLimit;
+
+ /**
+ * Flag showing whether searches should dereference JNDI links.
+ *
+ * @serial
+ */
+ private boolean derefLink;
+
+ /**
+ * Flag showing whether object is returned in the search results.
+ *
+ * @serial
+ */
+ private boolean returnObj;
+
+ /**
+ * Contains the maximum number of search results to return.
+ *
+ * @serial
+ */
+ private long countLimit;
+
+ /**
+ * Lists attributes to match.
+ * <p>
+ * Contains a single entry for each attribute that is to be matches -- or it
+ * is null if all attributes are to be matched.</p>
+ *
+ * @serial
+ */
+ private String attributesToReturn[];
+
+ /*
+ * -------------------------------------------------------------------
+ * Constructors
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Default constructor.
+ * <p>
+ * Equivalent to:
+ * <code>SearchControls (ONELEVEL_SCOPE, 0, 0, null, false, false)</code>.</p>
+ */
+ public SearchControls() {
+ this(ONELEVEL_SCOPE, 0, 0, null, false, false);
+ }
+
+ /**
+ * Constructs a search control instance with all parameters.
+ *
+ * @param searchScope the search scope, chosen from OBJECT_SCOPE,
+ * ONELEVEL_SCOPE or SUBTREE_SCOPE.
+ * @param countLimit the maximum number of search results. If is zero,
+ * then the number of search results returned is
+ * unlimited.
+ * @param timeLimit the maximum number of search time in milliseconds,
+ * for the search. If is zero, then there is no time
+ * limit for the search.
+ * @param attributesToReturn
+ * an array of identifiers of attributes to return for
+ * each result. If is null, then all attributes are
+ * returned for each result.
+ * @param returnObj an flag. If true then search results contain an object,
+ * otherwise they contain only a name and class pair.
+ * @param derefLink an flag. If true then <code>LinkRef</code> references
+ * are followed in the search, otherwise they are not.
+ *
+ */
+ public SearchControls(
+ int searchScope,
+ long countLimit,
+ int timeLimit,
+ String attributesToReturn[],
+ boolean returnObj,
+ boolean derefLink) {
+ this.searchScope = searchScope;
+ this.countLimit = countLimit;
+ this.timeLimit = timeLimit;
+ this.attributesToReturn = attributesToReturn;
+ this.derefLink = derefLink;
+ this.returnObj = returnObj;
+ }
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Gets the maximum number of search results.
+ *
+ * @return the maximum number of search results to return.
+ */
+ public long getCountLimit() {
+ return countLimit;
+ }
+
+ /**
+ * Gets the flag indicates whether search will follow LinkRef references.
+ *
+ * @return flag indicates whether searches will follow
+ * <code>LinkRef</code> references. If true then
+ * <code>LinkRef</code> references are
+ * followed in the search, otherwise they are not.
+ */
+ public boolean getDerefLinkFlag() {
+ return derefLink;
+ }
+
+ /**
+ * Gets identifiers of attributes to return for each result.
+ *
+ * @return an array of identifiers of attributes to return for
+ * each result. If is null, then all attributes are
+ * returned for each result.
+ */
+ public String[] getReturningAttributes() {
+ return attributesToReturn;
+ }
+
+ /**
+ * Gets the flag whether search results will include the object (true) or
+ * not (false).
+ *
+ * @return if true then search results contain an object,
+ * otherwise they contain only a name and class pair.
+ */
+ public boolean getReturningObjFlag() {
+ return returnObj;
+ }
+
+ /**
+ * Gets the search scope.
+ *
+ * @return the search scope, chosen from OBJECT_SCOPE,
+ * ONELEVEL_SCOPE or SUBTREE_SCOPE.
+ */
+ public int getSearchScope() {
+ return searchScope;
+ }
+
+ /**
+ * Gets the the maximum number of search time.
+ *
+ * @return the maximum number of search time in milliseconds,
+ * for the search. If is zero, then there is no time
+ * limit for the search.
+ */
+ public int getTimeLimit() {
+ return timeLimit;
+ }
+
+ /**
+ * Sets the maximum number of search results.
+ *
+ * @param l the maximum number of search results. If is zero,
+ * then the number of search results returned is
+ * unlimited.
+ */
+ public void setCountLimit(long l) {
+ countLimit = l;
+ }
+
+ /**
+ * Sets the flag indicates whether search will follow <code>LinkRef</code>
+ * references.
+ *
+ * @param flag flag indicates whether searches will follow
+ * <code>LinkRef</code> references. If true then
+ * <code>LinkRef</code> references are
+ * followed in the search, otherwise they are not.
+ */
+ public void setDerefLinkFlag(boolean flag) {
+ derefLink = flag;
+ }
+
+ /**
+ * Sets identifiers of attributes to return for each result.
+ *
+ * @param as an array of identifiers of attributes to return for
+ * each result. If is null, then all attributes are
+ * returned for each result.
+ */
+ public void setReturningAttributes(String as[]) {
+ attributesToReturn = as;
+ }
+
+ /**
+ * Sets the flag whether search results will include the object (true) or
+ * not (false).
+ *
+ * @param flag if true then search results contain an object,
+ * otherwise they contain only a name and class pair.
+ */
+ public void setReturningObjFlag(boolean flag) {
+ returnObj = flag;
+ }
+
+ /**
+ * Sets the search scope.
+ *
+ * @param i the search scope, chosen from OBJECT_SCOPE,
+ * ONELEVEL_SCOPE or SUBTREE_SCOPE.
+ */
+ public void setSearchScope(int i) {
+ searchScope = i;
+ }
+
+ /**
+ * Sets the the maximum number of search time.
+ *
+ * @param i the maximum number of search time in milliseconds,
+ * for the search. If is zero, then there is no time
+ * limit for the search.
+ */
+ public void setTimeLimit(int i) {
+ timeLimit = i;
+ }
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/SearchResult.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/SearchResult.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/SearchResult.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/directory/SearchResult.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,226 @@
+/* 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.directory;
+
+import javax.naming.Binding;
+
+/**
+ * <code>SearchResult</code> returned from a search on a directory context
+ * and is provided by a <code>NaminEnumeration</code>.
+ * <p>
+ * This class is not thread-safe.</p>
+ *
+ *
+ */
+public class SearchResult extends Binding {
+
+ /*
+ * -------------------------------------------------------------------
+ * Constants
+ * -------------------------------------------------------------------
+ */
+ /*
+ * This constant is used during deserialization to check the J2SE version which
+ * created the serialized object.
+ */
+ private static final long serialVersionUID = 0x80e805ecc9ed1c5cL;
+
+ /*
+ * -------------------------------------------------------------------
+ * Instance variables
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * The attributes that were matched for this object.
+ *
+ * @serial
+ */
+ private Attributes attrs;
+
+ /*
+ * -------------------------------------------------------------------
+ * Constructors
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Creates a new instance of <code>SearchResult</code> with name <code>s</code>,
+ * bound object <code>o</code> and an <code>attributes</code>
+ *
+ * @param s the name of this result. <code>s</code> should be
+ * relative to the target context for the search that
+ * produces this result.
+ * @param o bound object of this result. The class of
+ * <code>o</code> is the value that will
+ * be returned by <code>Binding.getClassName()</code>
+ * for this search result, except where
+ * <code>setClassName()</code> is used to set a different
+ * value. If <code>o</code> is null,
+ * <code>getClassName()</code> will return null.
+ * @param attributes The <code>attributes</code> should not be null. If
+ * there are no attributes for this search result,
+ * this parameter should be an empty collection.
+ */
+ public SearchResult(String s, Object o, Attributes attributes) {
+ this(s, null, o, attributes, true);
+ }
+
+ /**
+ * Creates a new instance of <code>SearchResult</code> with name <code>s</code>,
+ * bound object <code>o</code>, an <code>attributes</code> and a boolean
+ * <code>flag</code>
+ *
+ * @param s the name of this result. A true value of
+ * <code>flag</code> means <code>s</code> is relative
+ * to the target context of the search that produces
+ * this result. A false value of <code>flag</code>
+ * means that <code>s</code> is a URL string.
+ * @param o bound object of this result. The class of
+ * <code>o</code> is the value that will
+ * be returned by <code>Binding.getClassName()</code>
+ * for this search result, except where
+ * <code>setClassName()</code> is used
+ * to set a different value. If <code>o</code> is null,
+ * <code>getClassName()</code> will return null.
+ * @param attributes The <code>attributes</code> should not be null. If
+ * there are no attributes for this search result,
+ * this parameter should be an empty collection.
+ * @param flag A true value of <code>flag</code> means <code>s</code>
+ * is relative to the target context of the search that
+ * produces this result. A false value of <code>flag</code>
+ * means that <code>s</code> is a URL string.
+ *
+ */
+ public SearchResult(String s, Object o, Attributes attributes, boolean flag) {
+ this(s, null, o, attributes, flag);
+ }
+
+ /**
+ * Creates a new instance of <code>SearchResult</code> with name <code>s</code>,
+ * class name <code>s1</code> bound object <code>o</code> and an
+ * <code>attributes</code>
+ *
+ * @param s the name of this result. <code>s</code> should be
+ * relative to the target context for the search that
+ * produces this result.
+ * @param s1 If <code>s1</code> is not null, it specifies the
+ * name of the class of the bound object <code>o</code>.
+ * Passing a null value for <code>s1</code> will not
+ * stop <code>Binding.getClassName()</code> returning the
+ * name of the class of <code>o</code>.
+ * @param o bound object of this result. The class of
+ * <code>o</code> is the value that will
+ * be returned by <code>Binding.getClassName()</code> for
+ * this search result, except where
+ * <code>setClassName()</code> is used
+ * to set a different value. If <code>o</code> is null,
+ * <code>getClassName()</code> will return null.
+ * @param attributes The <code>attributes</code> should not be null. If
+ * there are no attributes for this search result,
+ * this parameter should be an empty collection.
+ */
+ public SearchResult(String s, String s1, Object o, Attributes attributes) {
+ this(s, s1, o, attributes, true);
+ }
+
+ /**
+ * Creates a new instance of <code>SearchResult</code> with name <code>s</code>,
+ * class name <code>s1</code> bound object <code>o</code> , an
+ * <code>attributes</code> and a boolean <code>flag</code>
+ *
+ * @param s the name of this result. A true value of
+ * <code>flag</code> means <code>s</code> is relative
+ * to the target context of the search that produces
+ * this result. A false value of <code>flag</code>
+ * means that <code>s</code> is a URL string.
+ * @param s1 If <code>s1</code> is not null, it specifies the
+ * name of the class of the bound object <code>o</code>.
+ * Passing a null value for <code>s1</code> will not
+ * stop <code>Binding.getClassName()</code> returning
+ * the name of the class of <code>o</code>.
+ * @param o bound object of this result. The class of
+ * <code>o</code> is the value that will
+ * be returned by <code>Binding.getClassName()</code>
+ * for this search result, except where
+ * <code>setClassName()</code> is used
+ * to set a different value. If <code>o</code> is null,
+ * <code>getClassName()</code> will return null.
+ * @param attributes The <code>attributes</code> should not be null. If
+ * there are no attributes for this search result,
+ * this parameter should be an empty collection.
+ * @param flag A true value of <code>flag</code> means <code>s</code>
+ * is relative to the target context of the search that
+ * produces this result. A false value of <code>flag</code>
+ * means that <code>s</code> is a URL string.
+ */
+ public SearchResult(
+ String s,
+ String s1,
+ Object o,
+ Attributes attributes,
+ boolean flag) {
+ super(s, s1, o, flag);
+ this.attrs = attributes;
+ }
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Gets attributes of this search result
+ *
+ * @return an attributes. It should not be null.
+ */
+ public Attributes getAttributes() {
+ return attrs;
+ }
+
+ /**
+ * Sets attributes of this search result
+ *
+ * @param attributes an attributes. It should not be null.
+ */
+ public void setAttributes(Attributes attributes) {
+ attrs = attributes;
+ }
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods override parent class Object
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Return a concatenation of the <code>toString()</code> value for the
+ * binding, and the <code>toString()</code> values for the attributes,
+ * joined by colons.
+ *
+ * @return string representation of this search result
+ */
+ public String toString() {
+ return new StringBuffer(super.toString())
+ .append(":") //$NON-NLS-1$
+ .append(attrs.toString())
+ .toString();
+ }
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/EventContext.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/EventContext.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/EventContext.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/EventContext.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,154 @@
+/* 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.event;
+
+import javax.naming.Context;
+import javax.naming.Name;
+import javax.naming.NamingException;
+
+/**
+ * This interface is for registering and deregistering to receive events about
+ * objects that are bound in a context.
+ * <p>
+ * Listeners register an interest in a target object or objects. The context
+ * might not yet have a binding for the target, and it is optional whether a
+ * context will support registering for events about an object that is not
+ * bound. If the context does not support it then
+ * <code>addNamingListener()</code> should throw a
+ * <code>NameNotFoundException</code>. Alternatively, if this is not possible,
+ * the <code>EventContext</code> should send the listener a
+ * <code>NamingExceptionEvent</code> with the information. A
+ * <code>NamingExceptionEvent</code> is also used to notify listeners who
+ * have registered interest in a target that is subsequently deleted, if the
+ * context only allows registration for currently bound objects.</p>
+ * <p>
+ * Listeners can register for events affecting the context itself, which as
+ * usual is referred to by the empty name.</p>
+ * <p>
+ * When a listener receives a <code>NamingExceptionEvent</code> it is deregistered.
+ * </p>
+ * <p>
+ * When <code>Context</code>.closed is called on an <code>EventContext</code>,
+ * all of its listeners are deregistered.</p>
+ * <p>
+ * Listener implementations may choose to implement more than one sub-interface
+ * of <code>NamingListener</code>, in order to be notified of more than one type
+ * of event.</p>
+ * <p>
+ * Event context implementations are not expected to be thread safe. </p>
+ *
+ *
+ */
+public interface EventContext extends Context{
+
+ /*
+ * -------------------------------------------------------------------
+ * Constants
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * This constant indicates interest in the named object only.
+ */
+ public static final int OBJECT_SCOPE = 0;
+
+ /**
+ * This constant indicates interest in objects bound in the named context,
+ * but not the context itself.
+ */
+ public static final int ONELEVEL_SCOPE = 1;
+
+ /**
+ * This constant indicates interest in the named object and its subtree.
+ * <p>
+ * When the named object is not a context, "subtree" here refers to the
+ * subtree of the context that contains the bound object. Where the named
+ * object is itself a context, "subtree" refers to the subtree of the
+ * named context.</p>
+ */
+ public static final int SUBTREE_SCOPE = 2;
+
+ /*
+ * -----------------------------------------
+ * methods
+ * -----------------------------------------
+ */
+
+ /**
+ * Registers <code>namingListener</code> for events concerning <code>name</code>,
+ * with scope <code>i</code>.
+ * <p>
+ * The scope must be one of <code>OBJECT_SCOPE</code>,
+ * <code>NELEVEL_SCOPE</code>, or <code>SUBTREE_SCOPE</code>.
+ * </p>
+ * <p>
+ * When the scope is <code>ONELEVEL_SCOPE</code>, <code>name</code> must be a context.
+ * Otherwise <code>name</code> can be a context or a bound object.
+ * </p>
+ * <p>
+ * Name is relative to this context.
+ * </p>
+ * @param name the concerning name
+ * @param i the scope
+ * @param namingListener the listener to be registered
+ * @throws NamingException If any exception occured.
+ */
+ void addNamingListener(
+ Name name,
+ int i,
+ NamingListener namingListener)
+ throws NamingException;
+
+ /**
+ * Registers <code>namingListener</code> for events concerning name, with
+ * scope <code>i</code>.
+ *
+ * @param s the concerning name string
+ * @param i the scope
+ * @param namingListener the listener to be registered
+ * @throws NamingException If any exception occured.
+ * @see #addNamingListener(Name, int, NamingListener)
+ */
+ void addNamingListener(
+ String s,
+ int i,
+ NamingListener namingListener)
+ throws NamingException;
+
+ /**
+ * Removes all registrations for <code>namingListener</code> in this
+ * <code>EventContext</code>. If there are no registrations this method
+ * does nothing.
+ *
+ * @param namingListener the listener to be unregistered
+ * @throws NamingException If any exception occured.
+ */
+ void removeNamingListener(NamingListener namingListener)
+ throws NamingException;
+
+ /**
+ * Checks if the implementation supports registration for names that are
+ * not (yet) bound in this context.
+ *
+ * @return false if implemention supports this, otherwise
+ * true if the implementation does not support this.
+ * @throws NamingException If the support is not known.
+ */
+ boolean targetMustExist() throws NamingException;
+}
+
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/EventDirContext.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/EventDirContext.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/EventDirContext.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/EventDirContext.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,138 @@
+/* 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.event;
+
+import javax.naming.Name;
+import javax.naming.NamingException;
+import javax.naming.directory.DirContext;
+import javax.naming.directory.SearchControls;
+
+/**
+ * This interface allows registering of listeners for events concerning objects
+ * bound in a directory context.
+ * <p>
+ * The registration methods take an RFC2254 search filter as a parameter, which
+ * is used to select the objects to generate events for.</p>
+ * <p>
+ * Sometimes objects that satisfy a search filter may be bound after a listener
+ * is registered, specifying the filter. Where the directory service will not
+ * support this, and generate events for objects bound after a given filter is
+ * specified, then the <code>addNamingListener</code> methods will throw an
+ * <code>InvalidSearchFilterException</code>.</p>
+ *
+ *
+ */
+public interface EventDirContext extends EventContext, DirContext {
+
+ /*
+ * -----------------------------------------
+ * methods
+ * -----------------------------------------
+ */
+
+ /**
+ * Registers naming listener for events concerning objects selected by the
+ * given search at <code>name</code>. The <code>name</code> parameter is
+ * relative to this context.
+ *
+ * @param name the concerning <code>Name</code>
+ * @param filter a RFC2254 search filter
+ * @param filterArgs filter arguments
+ * @param searchControls Further specifies the selection of objects to
+ * generate events for, and the information
+ * contained in <code>NamingEvents</code> that may
+ * be generated.
+ * @param namingListener the <code>NamingListener</code> to be registered
+ * @throws NamingException If any exception occured.
+ */
+ void addNamingListener(
+ Name name,
+ String filter,
+ Object filterArgs[],
+ SearchControls searchControls,
+ NamingListener namingListener)
+ throws NamingException;
+
+ /**
+ * Registers naming listener for events concerning objects selected by the
+ * given search at <code>name</code>. The <code>name</code> parameter is
+ * relative to this context.
+ *
+ * @param name the concerning <code>Name</code>
+ * @param filter a RFC2254 search filter string with no arguments
+ * @param searchControls further specifies the selection of objects to
+ * generate events for, and the information
+ * contained in <code>NamingEvents</code> that may
+ * be generated
+ * @param namingListener the <code>NamingListener</code> to be registered
+ * @throws NamingException If any exception occured.
+ * @see #addNamingListener(Name, String, Object[], SearchControls, NamingListener)
+ */
+ void addNamingListener(
+ Name name,
+ String filter,
+ SearchControls searchControls,
+ NamingListener namingListener)
+ throws NamingException;
+
+ /**
+ * Registers naming listener for events concerning objects selected by the
+ * given search at name string <code>name</code>. The <code>s</code>
+ * parameter is relative to this context.
+ *
+ * @param name the concerning <code>Name</code>
+ * @param filter a RFC2254 search filter
+ * @param filterArgs filter arguments
+ * @param searchControls further specifies the selection of objects to
+ * generate events for, and the information
+ * contained in <code>NamingEvents</code> that may
+ * be generated
+ * @param namingListener the <code>NamingListener</code> to be registered
+ * @throws NamingException If any exception occured.
+ * @see #addNamingListener(Name, String, Object[], SearchControls, NamingListener)
+ */
+ void addNamingListener(
+ String name,
+ String filter,
+ Object filterArgs[],
+ SearchControls searchControls,
+ NamingListener namingListener)
+ throws NamingException;
+
+ /**
+ * Registers naming listener for events concerning objects selected by the
+ * given search at name string <code>name</code>. The <code>s</code>
+ * parameter is relative to this context.
+ *
+ * @param name the concerning <code>Name</code>
+ * @param filter a RFC2254 search filter string with no arguments
+ * @param searchControls further specifies the selection of objects to
+ * generate events for, and the information
+ * contained in <code>NamingEvents</code> that may
+ * be generated
+ * @param namingListener the <code>NamingListener</code> to be registered
+ * @throws NamingException If any exception occured.
+ * @see #addNamingListener(String, String, Object[], SearchControls, NamingListener)
+ */
+ void addNamingListener(
+ String name,
+ String filter,
+ SearchControls searchControls,
+ NamingListener namingListener)
+ throws NamingException;
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamespaceChangeListener.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamespaceChangeListener.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamespaceChangeListener.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamespaceChangeListener.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,59 @@
+/* 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.event;
+/**
+ * The listener interface to get notification of namespace change events.
+ * <p>
+ * These events include naming events with event type <code>OBJECT_ADDED</code>,
+ * <code>OBJECT_RENAMED</code>, or <code>OBJECT_REMOVED</code>. A service
+ * provider will call one of these interface methods to notify a listener of
+ * an event, passing in a <code>NamingEvent</code> parameter.
+ * This <code>NamingEvent</code> provides methods to get various bits
+ * information about the event.</p>
+ *
+ *
+ */
+public interface NamespaceChangeListener extends NamingListener{
+
+ /*
+ * -----------------------------------------
+ * methods
+ * -----------------------------------------
+ */
+
+ /**
+ * Called by a service provider when there is a new binding.
+ *
+ * @param namingevent the event notification
+ */
+ void objectAdded(NamingEvent namingevent);
+
+ /**
+ * Called by a service provider when a binding is removed.
+ *
+ * @param namingevent the event notification
+ */
+ void objectRemoved(NamingEvent namingevent);
+
+ /**
+ * Called by a service provider when a binding is renamed.
+ *
+ * @param namingevent the event notification
+ */
+ void objectRenamed(NamingEvent namingevent);
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamingEvent.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamingEvent.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamingEvent.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamingEvent.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,282 @@
+/* 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.event;
+
+import java.util.EventObject;
+import javax.naming.Binding;
+
+/**
+ * An event from a directory or naming service, for passing to a listener.
+ * <p>
+ * The source of the event is always the <code>EventContext</code> that the
+ * listener registered with. Names in the <code>NamingEvent</code> object
+ * are all relative to this context.</p>
+ * <p>
+ * Note the discussion about threads and synchronization in the description for
+ * this package.</p>
+ *
+ *
+ */
+public class NamingEvent extends EventObject {
+
+ /*
+ * -----------------------------------------
+ * Constants
+ * -----------------------------------------
+ */
+
+ /**
+ * A <code>NamingEvent</code> type constant, indicating that an object was
+ * added.
+ */
+ public static final int OBJECT_ADDED = 0;
+
+ /**
+ * A <code>NamingEvent</code> type constant, indicating that an object was
+ * changed.
+ */
+ public static final int OBJECT_CHANGED = 3;
+
+ /**
+ * A <code>NamingEvent</code> type constant, indicating that an object was
+ * removed.
+ */
+ public static final int OBJECT_REMOVED = 1;
+
+ /**
+ * A <code>NamingEvent</code> type constant, indicating that an object was
+ * renamed.
+ */
+ public static final int OBJECT_RENAMED = 2;
+
+ /*
+ * This constant is used during deserialization to check the J2SE version which
+ * created the serialized object.
+ */
+ private static final long serialVersionUID = 0x9d18b00289d22f45L; //J2SE 1.4.2
+
+ /*
+ * -------------------------------------------------------------------
+ * Instance variables
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Some information about the event, whose format is specified by the
+ * service provider.
+ *
+ * @serial
+ */
+ protected Object changeInfo;
+
+ /**
+ * The binding after the event.
+ *
+ * @serial
+ */
+ protected Binding newBinding;
+
+ /**
+ * The binding before the event.
+ *
+ * @serial
+ */
+ protected Binding oldBinding;
+
+ /**
+ * The type of this event. Its value is one of the constant event types
+ * above.
+ *
+ * @serial
+ */
+ protected int type;
+
+ // the context that generated this event
+ private transient EventContext eventContext;
+
+ /*
+ * -----------------------------------------
+ * Constructors
+ * -----------------------------------------
+ */
+
+ /**
+ *
+ * Constructs an <code>NamingEvent</code> with all parameters.
+ *
+ * @param eventContext the context that generated this event. It is the
+ * originator of this event and cannot be null.
+ * @param type the constant value that specifies the type of event
+ * @param newBinding binding after the event. <code>newBinding</code> might
+ * be null depending on the value of the <code>type</code>
+ * paramater as follows:
+ * <ul>
+ * <li>
+ * <code>OBJECT_ADDED</code> - <code>newBinding</code> cannot be null
+ * </li>
+ * <li>
+ * <code>OBJECT_CHANGED</code> - <code>newBinding</code> cannot be null
+ * </li>
+ * <li>
+ * <code>OBJECT_REMOVED</code> - <code>newBinding</code> can be null
+ * </li>
+ * <li>
+ * <code>OBJECT_RENAMED</code> - <code>newBinding</code> can be null
+ * </li>
+ * </ul>
+ * The names are relative to the <code>eventContext</code>
+ * @param oldBinding the binding before the event. <code>oldBinding</code> might
+ * be null depending on the value of the <code>type</code>
+ * paramater as follows:
+ * <ul>
+ * <li>
+ * <code>OBJECT_ADDED</code> - <code>oldBinding</code>
+ * can be null
+ * </li>
+ * <li>
+ * <code>OBJECT_CHANGED</code> - <code>oldBinding</code>
+ * cannot be null
+ * </li>
+ * <li>
+ * <code>OBJECT_REMOVED</code> - <code>oldBinding</code>
+ * cannot be null
+ * </li>
+ * <li>
+ * <code>OBJECT_RENAMED</code> - <code>oldBinding</code>
+ * can be null
+ * </li>
+ * </ul>
+ * The names are relative to the <code>eventContext</code>
+ * @param changeInfo contain some information about the event and maybe
+ * null, the format of which is specified by the
+ * service provider.
+ */
+ public NamingEvent(
+ EventContext eventContext,
+ int type,
+ Binding newBinding,
+ Binding oldBinding,
+ Object changeInfo) {
+ super(eventContext);
+
+ this.type = type;
+ this.changeInfo = changeInfo;
+ this.newBinding = newBinding;
+ this.oldBinding = oldBinding;
+ this.eventContext = eventContext;
+
+ }
+
+ /*
+ * -----------------------------------------
+ * Methods
+ * -----------------------------------------
+ */
+
+ /**
+ * Calls a method to notify the listener of this event.
+ * <p>
+ * For <code>OBJECT_ADDED</code>, <code>OBJECT_REMOVED</code> or
+ * <code>OBJECT_RENAMED</code> type events this method calls the
+ * corresponding method in the <code>NamespaceChangedListener</code>
+ * interface. For <code>OBJECT_CHANGED</code> type events this method calls
+ * <code>objectChanged()</code> in the <code>ObjectChangeListener</code>
+ * interface.</p>
+ *
+ * @param naminglistener the listener of this event
+ */
+ public void dispatch(NamingListener naminglistener) {
+ switch (type) {
+ case OBJECT_ADDED :
+ ((NamespaceChangeListener) naminglistener).objectAdded(this);
+ break;
+ case OBJECT_REMOVED :
+ ((NamespaceChangeListener) naminglistener).objectRemoved(this);
+ break;
+ case OBJECT_RENAMED :
+ ((NamespaceChangeListener) naminglistener).objectRenamed(this);
+ break;
+ case OBJECT_CHANGED :
+ ((ObjectChangeListener) naminglistener).objectChanged(this);
+ break;
+ }
+ }
+
+ /**
+ * Gets the change information.
+ *
+ * @return the change information object provided by the
+ * service provider, which may be null.
+ */
+ public Object getChangeInfo() {
+ return changeInfo;
+ }
+
+ /**
+ * Gets the <code>EventContext</code> that generated this event.
+ *
+ * @return the <code>EventContext</code> that generated this event.
+ */
+ public EventContext getEventContext() {
+ return eventContext;
+ }
+
+ /**
+ * Gets the binding after this event.
+ * <p>
+ * If it exists and is inside the scope that was specified when the listener
+ * was registered using <code>EventContext.addNamimgListener</code>.
+ * Returns null otherwise. Therefore for an <code>OBJECT_RENAMED</code>
+ * event, the return value will be non-null if the new name places the
+ * binding within the scope for the listener.</p>
+ *
+ * @return the binding after this event
+ */
+ public Binding getNewBinding() {
+ return newBinding;
+ }
+
+ /**
+ * Gets the binding before this event.
+ * <p>
+ * If it existed and was inside the scope that was specified when the
+ * listener was registered using <code>EventContext.addNamimgListener</code>.
+ * Returns null otherwise. Therefore for an <code>OBJECT_RENAMED</code>
+ * event, the return value will be non-null if the old name placed the
+ * binding within the scope for the listener.</p>
+ *
+ * @return the binding before this event
+ */
+ public Binding getOldBinding() {
+ return oldBinding;
+ }
+
+ /**
+ * Gets the type of the event.
+ * <p>
+ * The return value is constrained to a choice from:
+ * <code>OBJECT_ADDED</code>, <code>OBJECT_REMOVED</code>,
+ * <code>OBJECT_RENAMED</code>, <code>OBJECT_CHANGED</code>.</p>
+ *
+ * @return the type of the event
+ */
+ public int getType() {
+ return type;
+ }
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamingExceptionEvent.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamingExceptionEvent.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamingExceptionEvent.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamingExceptionEvent.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.event;
+
+import java.util.EventObject;
+
+import javax.naming.NamingException;
+
+/**
+ * An event object contains a <code>NamingException</code>.
+ *
+ *
+ */
+public class NamingExceptionEvent extends EventObject {
+
+ /*
+ * -----------------------------------------
+ * Constants
+ * -----------------------------------------
+ */
+ private static final long serialVersionUID = 0xbc4f019fab3b5a30L;
+
+ /*
+ * -------------------------------------------------------------------
+ * Instance variables
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * associated exception of this event
+ *
+ * @serial
+ */
+ private NamingException exception;
+
+ /*
+ * -----------------------------------------
+ * Constructors
+ * -----------------------------------------
+ */
+
+ /**
+ * Constructs a <code>NamingExceptionEvent</code> instance with
+ * a <code>EventContext</code> and a <code>NamingException</code>.
+ *
+ * @param eventContext context that generated this event. It is the
+ * originator of this event and cannot be null.
+ * @param namingException
+ * the associated exception and cannnot be null.
+ */
+ public NamingExceptionEvent(
+ EventContext eventContext,
+ NamingException namingException) {
+ super(eventContext);
+ this.exception = namingException;
+ }
+
+ /*
+ * -----------------------------------------
+ * Methods
+ * -----------------------------------------
+ */
+
+ /**
+ * Calls a method to notify the listener that a naming exception has been
+ * thrown.
+ *
+ * @param naminglistener the listener to be notified
+ */
+ public void dispatch(NamingListener naminglistener) {
+ naminglistener.namingExceptionThrown(this);
+ }
+
+ /**
+ * Gets the source of the event.
+ *
+ * @return the source of the event
+ */
+ public EventContext getEventContext() {
+ return (EventContext) getSource();
+ }
+
+ /**
+ * Gets the associated <code>NamingException</code>.
+ *
+ * @return the associated <code>NamingException</code>
+ */
+ public NamingException getException() {
+ return exception;
+ }
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamingListener.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamingListener.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamingListener.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/NamingListener.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,50 @@
+/* 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.event;
+
+import java.util.EventListener;
+
+/**
+ * This is a root listener interface that provides a method needed by all its
+ * subinterfaces.
+ * <p>
+ * The method is <code>namingExceptionThrown</code>, which is required for
+ * notification of problems when registering a listener, or problems when
+ * getting information to send an event to a listener. When a listener is
+ * notified of a <code>NamingExceptionEvent</code> it is automatically
+ * deregistered.</p>
+ *
+ *
+ */
+public interface NamingListener extends EventListener{
+
+ /*
+ * -----------------------------------------
+ * methods
+ * -----------------------------------------
+ */
+
+ /**
+ * This method is called by a naming or directory service provider when a naming
+ * exception occurs whilst the service provider is trying to register or prepare
+ * an event notification for the listener.
+ *
+ * @param namingExceptionEvent the event notification
+ */
+ void namingExceptionThrown(NamingExceptionEvent namingExceptionEvent);
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/ObjectChangeListener.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/ObjectChangeListener.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/ObjectChangeListener.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/event/ObjectChangeListener.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,51 @@
+/* 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.event;
+
+/**
+ * The listener interface to get notification of object change events.
+ * <p>
+ * These object change events include naming events with type
+ * <code>OBJECT_CHANGED</code>. These events could mean that a bound object has
+ * had its attributes changed somehow, or has been replaced altogether. The
+ * listener can work out what has changed by querying the
+ * <code>NamingEvent</code> object that is passed to the
+ * <code>objectChanged</code> notification method.
+ *
+ *
+ */
+public interface ObjectChangeListener extends NamingListener{
+
+ /*
+ * -----------------------------------------
+ * methods
+ * -----------------------------------------
+ */
+
+ /**
+ * This method is called by a service provider to notify a listener that a
+ * bound object has changed in some way.
+ * <p>
+ * The changes can be deduced by querying <code>namingEvent</code>, especially
+ * <code>NamingEvent.getNewBinding()</code> and
+ * <code>NamingEvent.getOldBindng()</code>.</p>
+ *
+ * @param namingEvent the event notification
+ */
+ void objectChanged(NamingEvent namingEvent);
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/Control.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/Control.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/Control.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/Control.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,79 @@
+/* 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.io.Serializable;
+
+/**
+ * A <code>Control</code> corresponds to a control used in LDAPv3. Controls are
+ * specified in RFC2251. A control provides extra information related to an
+ * operation on the server. It may be a request control which is sent when a
+ * request is made to the LDAPv3 server or it may be a response control which
+ * is received from the LDAPv3 server.
+ *
+ *
+ */
+public interface Control extends Serializable {
+
+ /*
+ * -------------------------------------------------------------------
+ * Constants
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * The constant indicating that a <code>Control</code> is critical.
+ */
+ public static final boolean CRITICAL = true;
+
+ /**
+ * The constant indicating that a <code>Control</code> is not critical.
+ */
+ public static final boolean NONCRITICAL = false;
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Returns the object ID assigned to this <code>Control</code> instance.
+ * (see RFC2251).
+ *
+ * @return the object ID assigned to the control
+ */
+ String getID();
+
+ /**
+ * Indicates whether this <code>Control</code> instance is critical.
+ *
+ * @return true if critical, otherwise false
+ */
+ boolean isCritical();
+
+ /**
+ * Returns the value of this <code>Control</code> instance encoded using
+ * ASN.1 Basic Encoding Rules (BER).
+ *
+ * @return the encoded value of this <code>Control</code> instance
+ */
+ byte[] getEncodedValue();
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/ControlFactory.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/ControlFactory.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/ControlFactory.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/ControlFactory.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,174 @@
+/* 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 java.security.AccessController;
+import java.security.PrivilegedAction;
+
+import com.ibm.jndi.EnvironmentReader;
+
+/**
+ * This abstract class is used for factories which create controls as used in
+ * LDAPv3.
+ * These factories are used by service providers to obtain control instances
+ * when they receive a response control.
+ *
+ * @see Control
+ *
+ */
+public abstract class ControlFactory {
+
+ /*
+ * -------------------------------------------------------------------
+ * Constructors
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Constructs a <code>ControlFactory</code> instance with no parameters.
+ */
+ protected ControlFactory() {
+ super();
+ }
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Uses this control factory to create a particular type of <code>Control
+ * </code> based on the supplied control.
+ * It is likely that the supplied control contains data encoded in BER
+ * format as received from an LDAP server. Returns <code>null</code> if the
+ * factory cannot create a <code>Control</code> else it returns the type of
+ * <code>Control</code> created by the factory.
+
+ *
+ * @param c the supplied control
+ * @throws NamingException If an error is encountered.
+ * @return the control
+ */
+ public abstract Control getControlInstance(Control c)
+ throws NamingException;
+
+ /**
+ * Creates a particular type of control based on the supplied control c.
+ * It is likely that the supplied control contains data encoded in BER
+ * format as received from an LDAP server.
+ * <p>
+ * This method tries the factories in LdapContext.CONTROL_FACTORIES,
+ * first from the supplied <code>Hashtable</code> then from the resource
+ * provider files of the supplied <code>Context</code>.</p>
+ * <p>
+ * It returns the supplied control if no factories are loaded or a control
+ * cannot be created. Otherwise, a new <code>Control</code> instance is
+ * returned.
+ *
+ * @param c the supplied <code>Control</code> instance
+ * @param ctx the supplied <code>Context</code> instance
+ * @param h the supplier JNDI environment properties
+ * @return the supplied control if no factories are loaded
+ * or a control cannot be created, otherwise a new
+ * <code>Control</code> instance
+ * @throws NamingException If an error is encountered.
+ */
+ public static Control getControlInstance(
+ Control c,
+ Context ctx,
+ Hashtable h)
+ throws NamingException {
+
+ // obtain control factories from hashtable and provider resource file
+ String fnames[] =
+ EnvironmentReader
+ .getFactoryNamesFromEnvironmentAndProviderResource(
+ h,
+ ctx,
+ LdapContext.CONTROL_FACTORIES);
+
+ // for each control factory
+ for (int i = 0; i < fnames.length; i++) {
+ // new factory instance by its class name
+ ControlFactory factory = null;
+ try {
+ factory =
+ (ControlFactory) classForName(fnames[i]).newInstance();
+ } catch (Exception e) {
+ continue;
+ }
+ // try obtaining a Control using the factory
+ Control control = factory.getControlInstance(c);
+ // if a Control is obtained successfully, return it
+ if (null != control) {
+ return control;
+ }
+ }
+
+ // all factories failed, return the input argument c
+ return c;
+ }
+
+ /*
+ * Use the context class loader or the system class loader to load the
+ * specified class, in a privileged manner.
+ */
+ 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) {
+ // Ignored
+ }
+ // try system class loader second
+ try {
+ return Class.forName(
+ className,
+ true,
+ ClassLoader.getSystemClassLoader());
+ } catch (ClassNotFoundException e1) {
+ // Ignored
+ }
+ // 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;
+
+ }
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/ExtendedRequest.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/ExtendedRequest.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/ExtendedRequest.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/ExtendedRequest.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,74 @@
+/* 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.io.Serializable;
+import javax.naming.NamingException;
+
+/**
+ * See RFC2251 for the definition of an <code>ExtendedRequest</code>.
+ *
+ * @see ExtendedResponse
+ *
+ */
+public interface ExtendedRequest extends Serializable {
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Gets the object ID assigned to this request.
+ * (see RFC2251)
+ *
+ * @return the object ID assigned to this request
+ */
+ String getID();
+
+ /**
+ * Gets the request encoded using ASN.1 Basic Encoding Rules (BER).
+ *
+ * @return the request encoded using ASN.1 BER
+ */
+ byte[] getEncodedValue();
+
+ /**
+ * Returns a suitable <code>ExtendedResponse</code> object for this request.
+ * The method parameters provide the data obtained by the service provider
+ * from the LDAP server for this request.
+ *
+ * @param s the object identifier of the response control. May be
+ * null.
+ * @param value holds the value of the response control as raw ASN.1 BER
+ * encoded bytes, including the tag and length of the response
+ * but excluding its OID.
+ * @param i specifies the start index of useable data within array
+ * <code>value</code>.
+ * @param i2 specifies the number of data bytes to use within array
+ * <code>value</code>.
+ * @return a suitable <code>ExtendedResponse</code> object for this request.
+ *
+ * @throws NamingException If an error is encountered.
+ */
+ ExtendedResponse createExtendedResponse(String s, byte[] value, int i, int i2)
+ throws NamingException;
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/ExtendedResponse.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/ExtendedResponse.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/ExtendedResponse.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/ExtendedResponse.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,51 @@
+/* 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.io.Serializable;
+
+/**
+ * See RFC2251 for the definition of an <code>ExtendedResponse</code>.
+ *
+ *
+ */
+public interface ExtendedResponse extends Serializable {
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Gets the object ID assigned to this response.
+ * (see RFC2251)
+ *
+ * @return the object ID assigned to the response
+ */
+ String getID();
+
+ /**
+ * Gets the response encoded using ASN.1 Basic Encoding Rules (BER).
+ *
+ * @return the response encoded using ASN.1 BER
+ */
+ byte[] getEncodedValue();
+
+}
+
+
Added: incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/HasControls.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/HasControls.java?rev=386087&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/HasControls.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/jndi/src/main/java/javax/naming/ldap/HasControls.java Wed Mar 15 06:55:38 2006
@@ -0,0 +1,48 @@
+/* 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.io.Serializable;
+import javax.naming.NamingException;
+
+/**
+ * Objects implementing this interface can return an array of <code>Control</code>
+ * instances.
+ *
+ * @see Control
+ *
+ */
+public interface HasControls extends Serializable {
+
+ /*
+ * -------------------------------------------------------------------
+ * Methods
+ * -------------------------------------------------------------------
+ */
+
+ /**
+ * Returns an array of <code>Control</code> instances which may be null.
+ *
+ * @return an array of <code>Control</code> instances which
+ * may be null
+ * @throws NamingException If an error is encountered.
+ */
+ Control[] getControls() throws NamingException;
+
+}
+
+