8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Copyright (c) 2005 Sun Microsystems Inc. All Rights Reserved
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The contents of this file are subject to the terms
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * of the Common Development and Distribution License
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * (the License). You may not use this file except in
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * compliance with the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * You can obtain a copy of the License at
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * opensso/legal/CDDLv1.0.txt
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * See the License for the specific language governing
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * permission and limitations under the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * When distributing Covered Code, include this CDDL
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Header Notice in each file and include the License file
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * at opensso/legal/CDDLv1.0.txt.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * If applicable, add the following below the CDDL Header,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * with the fields enclosed by brackets [] replaced by
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * your own identifying information:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * $Id: IdSearchControl.java,v 1.7 2008/07/06 05:48:30 arviranga Exp $
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/*
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Portions Copyrighted [2011] [ForgeRock AS]
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpackage com.sun.identity.idm;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.HashSet;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.HashMap;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Iterator;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Map;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Set;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * This is a helper class which is used in the <code> AMIdentityRepository
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * </code>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * search method. It is used to to modify search controls for a given search
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * operation. The specific controls that can be modified are: maximum time limit
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * and size limit for the search, attributes that should be returned from the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * search, simple modifications to be made to the search filter used by each
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * plugin by adding attribute-values which can be either OR'ed or AND'ed to the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * basic search.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @supported.all.api
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpublic final class IdSearchControl {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private Set returnAttributes = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Disabled by default
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private boolean getAllAttributesEnabled;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private int timeOut = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private int maxResults = 0;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Map avPairs = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster IdSearchOpModifier modifier = IdSearchOpModifier.OR;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster boolean recursive = false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Creates the <code>IdSearchControl</code> object
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public IdSearchControl() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Set the return attribute names, if attributes of the entries need to be
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * obtained as part of the search.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * NOTE: If the return attribute values are specified as part of
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * <code>AMSearchControl</code>, there could be a significant performance
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * overhead compared to when none are specified. When the return attributes
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * are set, the return attributes can be obtained as a map with identity
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * name as map-key and set of attribute values as map-value from
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * <code>AMSearchResults</code> object.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param attributeNames
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Set of attribute names whose values need to be obtained as
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * part of the search.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void setReturnAttributes(Set attributeNames) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (attributeNames != null && !attributeNames.isEmpty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster returnAttributes = new HashSet(attributeNames);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Returns the list of attributes requested to be read when the search is
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * performed.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return Set of attributes requested to be read.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public Set getReturnAttributes() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return returnAttributes;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Sets the specified boolean value to the variable. Boolean value is set to
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * true, if all attributes of the entries need to be obtained as part of the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * search.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * When the option for getting all attributes is set to true, the search
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * results will return a Map, where the Key is the DN of the search results,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * and value is another Map of attribute names for keys and Sets for values
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * of those attributes.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param getAllAttributes
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Boolean value set to true as part of the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * <code>IdSearchControl</code> to obtain all attributes as
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * part of the search.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void setAllReturnAttributes(boolean getAllAttributes) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster this.getAllAttributesEnabled = getAllAttributes;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Returns true if the option for getting all attributes has been enabled.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return true if the option for getting all attributes has been enabled.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean isGetAllReturnAttributesEnabled() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return getAllAttributesEnabled;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Sets the maximum number of milliseconds to wait for any operation for the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * search.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param timeOut
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Max number of milliseconds
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void setTimeOut(int timeOut) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster this.timeOut = timeOut;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Returns current time out setting.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return current time out setting.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public int getTimeOut() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return timeOut;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Sets the maximum number of search results to return; 0 means there is no
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * limit.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param maxNumber
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Max number of results
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void setMaxResults(int maxNumber) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster maxResults = maxNumber;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Returns the maximum number of search results. return 0 means there is no
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * limit.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return the maximum number of search results.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public int getMaxResults() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return maxResults;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Set the options for modifying the basic search filter in each plugin. By
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * default, there are no modifications.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param mod
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * One of the supported IdSearchOpModifiers
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param avMap
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Map of attribute-value pairs to be used to modify the search
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * operation.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void setSearchModifiers(IdSearchOpModifier mod, Map avMap) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster modifier = mod;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (avMap != null && !avMap.isEmpty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster this.avPairs = new HashMap();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Iterator it = avMap.keySet().iterator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster while (it.hasNext()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String attr = (String) it.next();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Set values = new HashSet((Set) avMap.get(attr));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster this.avPairs.put(attr, values);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Returns the IdSearchOpModifier defined for this SearchControl
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return One of the supported IdSearchOpModifier
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public IdSearchOpModifier getSearchModifier() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return modifier;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Returns the map set to be used to modify the search filter in each
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * plugin.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return Map of attribute values pairs, if it is set. Null otherwise.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public Map getSearchModifierMap() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return avPairs;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Sets the recursive flag to be true or false. It is false by default so
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * plugin searches are not recursive.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @deprecated This method is deprecated. The setting for recursive
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * search should be configured via the data store.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @param rec
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * <code>true</code> if search is recursive;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * else <code>false</code>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void setRecursive(boolean rec) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster recursive = rec;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Returns true if recursive is enabled, false otherwise
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @deprecated This method is deprecated. The setting for recursive
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * search should be configured via the data store.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return true if recursive search is on; else false.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean isRecursive() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return recursive;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Return String representation of the <code>IdeSearchControl</code>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * object. It returns the search controls
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * @return String representation of the <code>IdSearchControl</code>
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * object.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public String toString() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster StringBuilder sb = new StringBuilder(100);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append("IdSearchControl:");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append("\n\tReturnAllAttributes: ").append(getAllAttributesEnabled);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append("\n\tReturn Attributes: ").append(returnAttributes);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append("\n\tTimeout=").append(timeOut);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append("\n\tMaxResults=").append(maxResults);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append("\n\tOperator: ").append(modifier);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append("\n\tSearchAttrs: ").append(avPairs);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (sb.toString());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}