001 /* 002 * CDDL HEADER START 003 * 004 * The contents of this file are subject to the terms of the 005 * Common Development and Distribution License, Version 1.0 only 006 * (the "License"). You may not use this file except in compliance 007 * with the License. 008 * 009 * You can obtain a copy of the license at 010 * trunk/opends/resource/legal-notices/OpenDS.LICENSE 011 * or https://OpenDS.dev.java.net/OpenDS.LICENSE. 012 * See the License for the specific language governing permissions 013 * and limitations under the License. 014 * 015 * When distributing Covered Code, include this CDDL HEADER in each 016 * file and include the License file at 017 * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable, 018 * add the following below this CDDL HEADER, with the fields enclosed 019 * by brackets "[]" replaced with your own identifying information: 020 * Portions Copyright [yyyy] [name of copyright owner] 021 * 022 * CDDL HEADER END 023 * 024 * 025 * Copyright 2006-2008 Sun Microsystems, Inc. 026 */ 027 package org.opends.server.tools; 028 029 import java.io.PrintStream; 030 031 import org.opends.server.types.DereferencePolicy; 032 import org.opends.server.types.SearchScope; 033 034 import static org.opends.messages.ToolMessages.*; 035 import static org.opends.server.types.DereferencePolicy.*; 036 import static org.opends.server.types.SearchScope.*; 037 038 039 040 /** 041 * This class defines options for the search operations used 042 * by the ldapsearch tool. 043 */ 044 public class LDAPSearchOptions extends LDAPToolOptions 045 { 046 047 private DereferencePolicy dereferencePolicy = NEVER_DEREF_ALIASES; 048 private SearchScope searchScope = WHOLE_SUBTREE; 049 private int sizeLimit = 0; 050 private int timeLimit = 0; 051 private boolean typesOnly = false; 052 private boolean countMatchingEntries = false; 053 054 /** 055 * Creates the options instance. 056 * 057 */ 058 public LDAPSearchOptions() 059 { 060 } 061 062 /** 063 * Set the timeLimit for the operation. 064 * 065 * @param timeLimit The time limit for the search. 066 * 067 */ 068 069 public void setTimeLimit(int timeLimit) 070 { 071 this.timeLimit = timeLimit; 072 } 073 074 /** 075 * Return the timeLimit value. 076 * 077 * @return The timeLimit value. 078 */ 079 public int getTimeLimit() 080 { 081 return timeLimit; 082 } 083 084 /** 085 * Set the sizeLimit for the operation. 086 * 087 * @param sizeLimit The size limit for the search. 088 * 089 */ 090 091 public void setSizeLimit(int sizeLimit) 092 { 093 this.sizeLimit = sizeLimit; 094 } 095 096 /** 097 * Return the sizeLimit value. 098 * 099 * @return The sizeLimit value. 100 */ 101 public int getSizeLimit() 102 { 103 return sizeLimit; 104 } 105 106 /** 107 * Set the search scope . 108 * 109 * @param scope The search scope string. 110 * @param err A print stream to which error messages should be written if 111 * a problem occurs. 112 * 113 * @return <CODE>true</CODE> if the scope was set properly, or 114 * <CODE>false</CODE> if not. 115 */ 116 117 public boolean setSearchScope(String scope, PrintStream err) 118 { 119 if(scope == null) 120 { 121 searchScope = WHOLE_SUBTREE; 122 } 123 else if(scope.equals("base")) 124 { 125 searchScope = BASE_OBJECT; 126 } else if(scope.equals("one")) 127 { 128 searchScope = SINGLE_LEVEL; 129 } else if (scope.equals("sub")) 130 { 131 searchScope = WHOLE_SUBTREE; 132 } else if (scope.equals("subordinate")) 133 { 134 searchScope = SUBORDINATE_SUBTREE; 135 } else 136 { 137 138 err.println(ERR_SEARCH_INVALID_SEARCH_SCOPE.get(scope)); 139 return false; 140 } 141 return true; 142 } 143 144 /** 145 * Get the search scope value. 146 * 147 * @return The search scope value. 148 */ 149 public SearchScope getSearchScope() 150 { 151 return searchScope; 152 } 153 154 /** 155 * Set the dereference policy. 156 * 157 * @param policy The dereference policy. 158 * @param err A print stream to which error messages should be written if 159 * a problem occurs. 160 * 161 * @return <CODE>true</CODE> if the dereference policy was set properly, or 162 * <CODE>false</CODE> if not. 163 */ 164 165 public boolean setDereferencePolicy(String policy, PrintStream err) 166 { 167 if(policy == null) 168 { 169 dereferencePolicy = NEVER_DEREF_ALIASES; 170 } else if(policy.equals("never")) 171 { 172 dereferencePolicy = NEVER_DEREF_ALIASES; 173 } else if(policy.equals("always")) 174 { 175 dereferencePolicy = DEREF_ALWAYS; 176 } else if (policy.equals("search")) 177 { 178 dereferencePolicy = DEREF_IN_SEARCHING; 179 } else if (policy.equals("find")) 180 { 181 dereferencePolicy = DEREF_FINDING_BASE_OBJECT; 182 } else 183 { 184 err.println("Invalid deref alias specified:" + policy); 185 return false; 186 } 187 return true; 188 } 189 190 /** 191 * Return the dereference policy. 192 * 193 * @return The alias dereference policy. 194 */ 195 public DereferencePolicy getDereferencePolicy() 196 { 197 return dereferencePolicy; 198 } 199 200 /** 201 * Return only the attribute types in the search result. 202 * 203 * @return <CODE>true</CODE> if only attribute types should be returned in 204 * matching entries, or <CODE>false</CODE> if both types and values 205 * should be included. 206 */ 207 public boolean getTypesOnly() 208 { 209 return this.typesOnly; 210 } 211 212 213 /** 214 * Return only the attribute types in the search result. 215 * 216 * @param typesOnly Specifies whether only attribute types should be 217 * returned in matching entries, or both types and values. 218 */ 219 public void setTypesOnly(boolean typesOnly) 220 { 221 this.typesOnly = typesOnly; 222 } 223 224 225 /** 226 * Indicates whether to report the number of matching entries returned by the 227 * server. 228 * 229 * @return {@code true} if the number of matching entries should be reported, 230 * or {@code false} if not. 231 */ 232 public boolean countMatchingEntries() 233 { 234 return countMatchingEntries; 235 } 236 237 238 /** 239 * Specifies whether to report the number of matching entries returned by the 240 * server. 241 * 242 * @param countMatchingEntries Specifies whether to report the number of 243 * matching entries returned by the server. 244 */ 245 public void setCountMatchingEntries(boolean countMatchingEntries) 246 { 247 this.countMatchingEntries = countMatchingEntries; 248 } 249 } 250