/* * The contents of this file are subject to the terms of the Common Development and * Distribution License (the License). You may not use this file except in compliance with the * License. * * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the * specific language governing permission and limitations under the License. * * When distributing Covered Software, include this CDDL Header Notice in each file and include * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL * Header, with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2006-2008 Sun Microsystems, Inc. * Portions Copyright 2014-2015 ForgeRock AS. */ package org.opends.server.tools; import static org.forgerock.opendj.ldap.DereferenceAliasesPolicy.*; import static org.forgerock.opendj.ldap.SearchScope.*; import static org.opends.messages.ToolMessages.*; import static com.forgerock.opendj.cli.Utils.*; import java.io.PrintStream; import org.forgerock.opendj.ldap.DereferenceAliasesPolicy; import org.forgerock.opendj.ldap.SearchScope; /** * This class defines options for the search operations used * by the ldapsearch tool. */ public class LDAPSearchOptions extends LDAPToolOptions { private DereferenceAliasesPolicy dereferencePolicy = NEVER; private SearchScope searchScope = WHOLE_SUBTREE; private int sizeLimit; private int timeLimit; private boolean typesOnly; private boolean countMatchingEntries; /** * Creates the options instance. */ public LDAPSearchOptions() { } /** * Set the timeLimit for the operation. * * @param timeLimit The time limit for the search. */ public void setTimeLimit(int timeLimit) { this.timeLimit = timeLimit; } /** * Return the timeLimit value. * * @return The timeLimit value. */ public int getTimeLimit() { return timeLimit; } /** * Set the sizeLimit for the operation. * * @param sizeLimit The size limit for the search. * */ public void setSizeLimit(int sizeLimit) { this.sizeLimit = sizeLimit; } /** * Return the sizeLimit value. * * @return The sizeLimit value. */ public int getSizeLimit() { return sizeLimit; } /** * Set the search scope . * * @param scope The search scope string. * @param err A print stream to which error messages should be written if * a problem occurs. * * @return true if the scope was set properly, or * false if not. */ public boolean setSearchScope(String scope, PrintStream err) { if(scope == null) { searchScope = WHOLE_SUBTREE; } else if(scope.equalsIgnoreCase("base")) { searchScope = BASE_OBJECT; } else if(scope.equalsIgnoreCase("one")) { searchScope = SINGLE_LEVEL; } else if (scope.equalsIgnoreCase("sub")) { searchScope = WHOLE_SUBTREE; } else if (scope.equalsIgnoreCase("subordinate")) { searchScope = SUBORDINATES; } else { printWrappedText(err, ERR_SEARCH_INVALID_SEARCH_SCOPE.get(scope)); return false; } return true; } /** * Get the search scope value. * * @return The search scope value. */ public SearchScope getSearchScope() { return searchScope; } /** * Set the dereference policy. * * @param policy The dereference policy. * @param err A print stream to which error messages should be written if * a problem occurs. * * @return true if the dereference policy was set properly, or * false if not. */ public boolean setDereferencePolicy(String policy, PrintStream err) { if(policy == null) { dereferencePolicy = NEVER; } else if(policy.equals("never")) { dereferencePolicy = NEVER; } else if(policy.equals("always")) { dereferencePolicy = ALWAYS; } else if (policy.equals("search")) { dereferencePolicy = IN_SEARCHING; } else if (policy.equals("find")) { dereferencePolicy = FINDING_BASE; } else { printWrappedText(err, ERR_SEARCH_INVALID_DEREFERENCE_POLICY.get(policy)); return false; } return true; } /** * Return the dereference policy. * * @return The alias dereference policy. */ public DereferenceAliasesPolicy getDereferencePolicy() { return dereferencePolicy; } /** * Return only the attribute types in the search result. * * @return true if only attribute types should be returned in * matching entries, or false if both types and values * should be included. */ public boolean getTypesOnly() { return this.typesOnly; } /** * Return only the attribute types in the search result. * * @param typesOnly Specifies whether only attribute types should be * returned in matching entries, or both types and values. */ public void setTypesOnly(boolean typesOnly) { this.typesOnly = typesOnly; } /** * Indicates whether to report the number of matching entries returned by the * server. * * @return {@code true} if the number of matching entries should be reported, * or {@code false} if not. */ public boolean countMatchingEntries() { return countMatchingEntries; } /** * Specifies whether to report the number of matching entries returned by the * server. * * @param countMatchingEntries Specifies whether to report the number of * matching entries returned by the server. */ public void setCountMatchingEntries(boolean countMatchingEntries) { this.countMatchingEntries = countMatchingEntries; } }