/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt * or http://forgerock.org/license/CDDLv1.0.html. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at legal-notices/CDDLv1_0.txt. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: * Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END * * * Copyright 2010 Sun Microsystems, Inc. * Portions copyright 2012-2015 ForgeRock AS. */ package org.opends.server.protocols.internal; import java.util.Collection; import java.util.LinkedHashSet; import java.util.Set; import org.forgerock.opendj.ldap.DereferenceAliasesPolicy; import org.forgerock.opendj.ldap.SearchScope; import org.forgerock.util.Reject; import org.opends.server.types.Control; import org.opends.server.types.DN; import org.opends.server.types.DirectoryException; import org.opends.server.types.SearchFilter; /** * Search request implementation. * * @see org.forgerock.opendj.ldap.requests.SearchRequest */ public final class SearchRequest extends AbstractRequestImpl { /** Use a LinkedHashSet to return the attributes in the same order as requested by the user. */ private final Set<String> attributes = new LinkedHashSet<>(); private DereferenceAliasesPolicy dereferenceAliasesPolicy = DereferenceAliasesPolicy.NEVER; private SearchFilter filter; private DN name; private SearchScope scope; private int sizeLimit; private int timeLimit; private boolean typesOnly; /** * To be removed. * * @param name * the dn * @param scope * the search scope * @param filter * the search filter */ SearchRequest(final DN name, final SearchScope scope, final SearchFilter filter) { this.name = name; this.scope = scope; this.filter = filter; } /** * To be removed. * * @param attributeDescriptions * the attribute descriptions * @return the current object * @see org.forgerock.opendj.ldap.requests.SearchRequest#addAttribute(String...) */ public SearchRequest addAttribute(final String... attributeDescriptions) { for (final String attributeDescription : attributeDescriptions) { attributes.add(Reject.checkNotNull(attributeDescription)); } return this; } /** * To be added to {@link org.forgerock.opendj.ldap.requests.SearchRequest}? * * @param attributeDescriptions * the attribute descriptions * @return the current object */ public SearchRequest addAttribute(final Collection<String> attributeDescriptions) { for (final String attributeDescription : attributeDescriptions) { attributes.add(Reject.checkNotNull(attributeDescription)); } return this; } /** * To be removed. * * @return the attributes * @see org.forgerock.opendj.ldap.requests.SearchRequest#getAttributes() */ public Set<String> getAttributes() { return attributes; } /** * To be removed. * * @return the dereference aliases policy * @see org.forgerock.opendj.ldap.requests.SearchRequest#getDereferenceAliasesPolicy() */ public DereferenceAliasesPolicy getDereferenceAliasesPolicy() { return dereferenceAliasesPolicy; } /** * To be removed. * * @return the search filter * @see org.forgerock.opendj.ldap.requests.SearchRequest#getFilter() */ public SearchFilter getFilter() { return filter; } /** * To be removed. * * @return the DN * @see org.forgerock.opendj.ldap.requests.SearchRequest#getName() */ public DN getName() { return name; } /** * To be removed. * * @return the search scope * @see org.forgerock.opendj.ldap.requests.SearchRequest#getScope() */ public SearchScope getScope() { return scope; } /** * To be removed. * * @return the size limit * @see org.forgerock.opendj.ldap.requests.SearchRequest#getSizeLimit() */ public int getSizeLimit() { return sizeLimit; } /** * To be removed. * * @return is single entry search * @see org.forgerock.opendj.ldap.requests.SearchRequest#isSingleEntrySearch() */ public boolean isSingleEntrySearch() { return sizeLimit == 1 || SearchScope.BASE_OBJECT.equals(scope); } /** * To be removed. * * @return the time limit * @see org.forgerock.opendj.ldap.requests.SearchRequest#getTimeLimit() */ public int getTimeLimit() { return timeLimit; } /** * To be removed. * * @return the types only * @see org.forgerock.opendj.ldap.requests.SearchRequest#isTypesOnly() */ public boolean isTypesOnly() { return typesOnly; } /** * To be removed. * * @param policy the dereference aliases policy * @return the current request * @see org.forgerock.opendj.ldap.requests.SearchRequest#setDereferenceAliasesPolicy(DereferenceAliasesPolicy) */ public SearchRequest setDereferenceAliasesPolicy(final DereferenceAliasesPolicy policy) { Reject.ifNull(policy); this.dereferenceAliasesPolicy = policy; return this; } /** * To be removed. * * @param filter the search filter * @return the current request * @see org.forgerock.opendj.ldap.requests.SearchRequest#setFilter(org.forgerock.opendj.ldap.Filter) */ public SearchRequest setFilter(final SearchFilter filter) { Reject.ifNull(filter); this.filter = filter; return this; } /** * To be removed. * * @param filter the search filter * @return the current request * @throws DirectoryException if problem occurs * @see org.forgerock.opendj.ldap.requests.SearchRequest#setFilter(String) */ public SearchRequest setFilter(final String filter) throws DirectoryException { this.filter = SearchFilter.createFilterFromString(filter); return this; } /** * To be removed. * * @param dn the dn * @return the current request * @see org.forgerock.opendj.ldap.requests.SearchRequest#setName(org.forgerock.opendj.ldap.DN) */ public SearchRequest setName(final DN dn) { Reject.ifNull(dn); this.name = dn; return this; } /** * To be removed. * * @param dn the dn * @return the current request * @throws DirectoryException if problem occurs * @see org.forgerock.opendj.ldap.requests.SearchRequest#setName(String) */ public SearchRequest setName(final String dn) throws DirectoryException { Reject.ifNull(dn); this.name = DN.valueOf(dn); return this; } /** * To be removed. * * @param scope the search scope * @return the current request * @see org.forgerock.opendj.ldap.requests.SearchRequest#setScope(SearchScope) */ public SearchRequest setScope(final SearchScope scope) { Reject.ifNull(scope); this.scope = scope; return this; } /** * To be removed. * * @param limit the size limit * @return the current request * @see org.forgerock.opendj.ldap.requests.SearchRequest#setSizeLimit(int) */ public SearchRequest setSizeLimit(final int limit) { Reject.ifFalse(limit >= 0, "negative size limit"); this.sizeLimit = limit; return this; } /** * To be removed. * * @param limit the time limit * @return the current request * @see org.forgerock.opendj.ldap.requests.SearchRequest#setTimeLimit(int) */ public SearchRequest setTimeLimit(final int limit) { Reject.ifFalse(limit >= 0, "negative time limit"); this.timeLimit = limit; return this; } /** * To be removed. * * @param typesOnly the types only * @return the current request * @see org.forgerock.opendj.ldap.requests.SearchRequest#setTypesOnly(boolean) */ public SearchRequest setTypesOnly(final boolean typesOnly) { this.typesOnly = typesOnly; return this; } @Override public SearchRequest addControl(Control control) { super.addControl(control); return this; } @Override public SearchRequest addControl(Collection<Control> controls) { super.addControl(controls); return this; } @Override public String toString() { final StringBuilder sb = new StringBuilder(); sb.append(getClass().getSimpleName()); sb.append("(name=").append(getName()); sb.append(", scope=").append(getScope()); sb.append(", filter=").append(getFilter()); sb.append(", dereferenceAliasesPolicy=").append(getDereferenceAliasesPolicy()); if (getSizeLimit()!=0) { sb.append(", sizeLimit=").append(getSizeLimit()); } if (getTimeLimit()!=0) { sb.append(", timeLimit=").append(getTimeLimit()); } sb.append(", typesOnly=").append(isTypesOnly()); if (!getAttributes().isEmpty()) { sb.append(", attributes=").append(getAttributes()); } if (!getControls().isEmpty()) { sb.append(", controls=").append(getControls()); } sb.append(")"); return sb.toString(); } }