/* * 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 2011-2014 ForgeRock AS */ package org.opends.server.protocols.internal; import org.forgerock.i18n.LocalizedIllegalArgumentException; import org.forgerock.opendj.ldap.SearchScope; import org.forgerock.util.Reject; import org.opends.server.types.DN; import org.opends.server.types.DirectoryException; import org.opends.server.types.SearchFilter; /** * This class contains various methods for creating and manipulating requests. *
* All copy constructors of the form {@code copyOfXXXRequest} perform deep * copies of their request parameter. More specifically, any controls, * modifications, and attributes contained within the response will be * duplicated. *
* Similarly, all unmodifiable views of request returned by methods of the form * {@code unmodifiableXXXRequest} return deep unmodifiable views of their * request parameter. More specifically, any controls, modifications, and * attributes contained within the returned request will be unmodifiable. * * @see org.forgerock.opendj.ldap.requests.Requests */ public final class Requests { // TODO: search request from LDAP URL. // TODO: update request from persistent search result. // TODO: synchronized requests? /** * Creates a new search request using the provided distinguished name, * scope, and filter. * * @param name * The distinguished name of the base entry relative to which the * search is to be performed. * @param scope * The scope of the search. * @param filter * The filter that defines the conditions that must be fulfilled * in order for an entry to be returned. * @param attributeDescriptions * The names of the attributes to be included with each entry. * @return The new search request. * @throws NullPointerException * If the {@code name}, {@code scope}, or {@code filter} were * {@code null}. */ public static SearchRequest newSearchRequest(final DN name, final SearchScope scope, final SearchFilter filter, final String... attributeDescriptions) throws NullPointerException { Reject.ifNull(name, scope, filter); final SearchRequest request = new SearchRequest(name, scope, filter); for (final String attributeDescription : attributeDescriptions) { request.addAttribute(attributeDescription); } return request; } /** * Creates a new search request using the provided distinguished name, * scope, and filter, decoded using the default schema. * * @param name * The distinguished name of the base entry relative to which the * search is to be performed. * @param scope * The scope of the search. * @param filter * The filter that defines the conditions that must be fulfilled * in order for an entry to be returned. * @param attributeDescriptions * The names of the attributes to be included with each entry. * @return The new search request. * @throws DirectoryException * If a problem occurs while decoding the provided string as a * search filter. * @throws LocalizedIllegalArgumentException * If {@code name} could not be decoded using the default * schema, or if {@code filter} is not a valid LDAP string * representation of a filter. * @throws NullPointerException * If the {@code name}, {@code scope}, or {@code filter} were * {@code null}. */ public static SearchRequest newSearchRequest(final String name, final SearchScope scope, final String filter, final String... attributeDescriptions) throws NullPointerException, LocalizedIllegalArgumentException, DirectoryException { Reject.ifNull(name, scope, filter); SearchFilter f = SearchFilter.createFilterFromString(filter); final SearchRequest request = new SearchRequest(DN.valueOf(name), scope, f); for (final String attributeDescription : attributeDescriptions) { request.addAttribute(attributeDescription); } return request; } /** * Return a new search request object. * * @param name * the dn * @param scope * the search scope * @param filter * the search filter * @return a new search request object * @throws DirectoryException * if a problem occurs * @see #newSearchRequest(DN, SearchScope, SearchFilter, String...) */ public static SearchRequest newSearchRequest(final String name, final SearchScope scope, final String filter) throws DirectoryException { return newSearchRequest(DN.valueOf(name), scope, SearchFilter.createFilterFromString(filter)); } /** * Return a new search request object. * * @param name * the dn * @param scope * the search scope * @param filter * the search filter * @return a new search request object * @throws DirectoryException * if a problem occurs * @see #newSearchRequest(DN, SearchScope, SearchFilter, String...) */ public static SearchRequest newSearchRequest(final DN name, final SearchScope scope, final String filter) throws DirectoryException { return newSearchRequest(name, scope, SearchFilter.createFilterFromString(filter)); } private Requests() { // Prevent instantiation. } }