001 /*
002 * Copyright 2010-2016 UnboundID Corp.
003 * All Rights Reserved.
004 */
005 /*
006 * Copyright (C) 2010-2016 UnboundID Corp.
007 *
008 * This program is free software; you can redistribute it and/or modify
009 * it under the terms of the GNU General Public License (GPLv2 only)
010 * or the terms of the GNU Lesser General Public License (LGPLv2.1 only)
011 * as published by the Free Software Foundation.
012 *
013 * This program is distributed in the hope that it will be useful,
014 * but WITHOUT ANY WARRANTY; without even the implied warranty of
015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
016 * GNU General Public License for more details.
017 *
018 * You should have received a copy of the GNU General Public License
019 * along with this program; if not, see <http://www.gnu.org/licenses>.
020 */
021 package com.unboundid.util;
022
023
024
025 import java.io.OutputStream;
026 import java.io.PrintStream;
027
028 import com.unboundid.ldap.listener.InMemoryDirectoryServerTool;
029 import com.unboundid.ldap.sdk.ResultCode;
030 import com.unboundid.ldap.sdk.Version;
031 import com.unboundid.ldap.sdk.examples.AuthRate;
032 import com.unboundid.ldap.sdk.examples.IdentifyReferencesToMissingEntries;
033 import com.unboundid.ldap.sdk.examples.IdentifyUniqueAttributeConflicts;
034 import com.unboundid.ldap.sdk.examples.LDAPCompare;
035 import com.unboundid.ldap.sdk.examples.LDAPDebugger;
036 import com.unboundid.ldap.sdk.examples.LDAPModify;
037 import com.unboundid.ldap.sdk.examples.LDAPSearch;
038 import com.unboundid.ldap.sdk.examples.ModRate;
039 import com.unboundid.ldap.sdk.examples.SearchRate;
040 import com.unboundid.ldap.sdk.examples.SearchAndModRate;
041 import com.unboundid.ldap.sdk.examples.ValidateLDIF;
042 import com.unboundid.ldap.sdk.persist.GenerateSchemaFromSource;
043 import com.unboundid.ldap.sdk.persist.GenerateSourceFromSchema;
044
045
046
047 /**
048 * This class provides an entry point that may be used to launch other tools
049 * provided as part of the LDAP SDK. This is primarily a convenience for
050 * someone who just has the jar file and none of the scripts, since you can run
051 * "<CODE>java -jar unboundid-ldapsdk-se.jar {tool-name} {tool-args}</CODE>"
052 * in order to invoke any of the example tools. Running just
053 * "<CODE>java -jar unboundid-ldapsdk-se.jar</CODE>" will display version
054 * information about the LDAP SDK.
055 * <BR><BR>
056 * The tool names are case-insensitive. Supported tool names include:
057 * <UL>
058 * <LI>authrate -- Launch the {@link AuthRate} tool.</LI>
059 * <LI>in-memory-directory-server -- Launch the
060 * {@link InMemoryDirectoryServerTool} tool.</LI>
061 * <LI>generate-schema-from-source -- Launch the
062 * {@link GenerateSchemaFromSource} tool.</LI>
063 * <LI>generate-source-from-schema -- Launch the
064 * {@link GenerateSourceFromSchema} tool.</LI>
065 * <LI>identify-references-to-missing-entries -- Launch the
066 * {@link IdentifyReferencesToMissingEntries} tool.</LI>
067 * <LI>identify-unique-attribute-conflicts -- Launch the
068 * {@link IdentifyUniqueAttributeConflicts} tool.</LI>
069 * <LI>in-memory-directory-server -- Launch the
070 * {@link InMemoryDirectoryServerTool} tool.</LI>
071 * <LI>ldapcompare -- Launch the {@link LDAPCompare} tool.</LI>
072 * <LI>ldapmodify -- Launch the {@link LDAPModify} tool.</LI>
073 * <LI>ldapsearch -- Launch the {@link LDAPSearch} tool.</LI>
074 * <LI>ldap-debugger -- Launch the {@link LDAPDebugger} tool.</LI>
075 * <LI>modrate -- Launch the {@link ModRate} tool.</LI>
076 * <LI>searchrate -- Launch the {@link SearchRate} tool.</LI>
077 * <LI>search-and-mod-rate -- Launch the {@link SearchAndModRate} tool.</LI>
078 * <LI>validate-ldif -- Launch the {@link ValidateLDIF} tool.</LI>
079 * <LI>version -- Display version information for the LDAP SDK.</LI>
080 * </UL>
081 */
082 @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE)
083 public final class Launcher
084 {
085 /**
086 * Prevent this utility class from being externally instantiated.
087 */
088 Launcher()
089 {
090 // No implementation required.
091 }
092
093
094
095 /**
096 * Parses the command-line arguments and performs any appropriate processing
097 * for this program.
098 *
099 * @param args The command-line arguments provided to this program.
100 */
101 public static void main(final String... args)
102 {
103 main(System.out, System.err, args);
104 }
105
106
107
108 /**
109 * Parses the command-line arguments and performs any appropriate processing
110 * for this program.
111 *
112 * @param outStream The output stream to which standard out should be
113 * written. It may be {@code null} if output should be
114 * suppressed.
115 * @param errStream The output stream to which standard error should be
116 * written. It may be {@code null} if error messages
117 * should be suppressed.
118 * @param args The command-line arguments provided to this program.
119 *
120 * @return A result code with information about the status of processing.
121 */
122 public static ResultCode main(final OutputStream outStream,
123 final OutputStream errStream,
124 final String... args)
125 {
126 if ((args == null) || (args.length == 0) ||
127 args[0].equalsIgnoreCase("version"))
128 {
129 if (outStream != null)
130 {
131 final PrintStream out = new PrintStream(outStream);
132 for (final String line : Version.getVersionLines())
133 {
134 out.println(line);
135 }
136 }
137
138 return ResultCode.SUCCESS;
139 }
140
141 final String firstArg = StaticUtils.toLowerCase(args[0]);
142 final String[] remainingArgs = new String[args.length - 1];
143 System.arraycopy(args, 1, remainingArgs, 0, remainingArgs.length);
144
145 if (firstArg.equals("authrate"))
146 {
147 return AuthRate.main(remainingArgs, outStream, errStream);
148 }
149 else if (firstArg.equals("identify-references-to-missing-entries"))
150 {
151 return IdentifyReferencesToMissingEntries.main(remainingArgs, outStream,
152 errStream);
153 }
154 else if (firstArg.equals("identify-unique-attribute-conflicts"))
155 {
156 return IdentifyUniqueAttributeConflicts.main(remainingArgs, outStream,
157 errStream);
158 }
159 else if (firstArg.equals("in-memory-directory-server"))
160 {
161 return InMemoryDirectoryServerTool.main(remainingArgs, outStream,
162 errStream);
163 }
164 else if (firstArg.equals("generate-schema-from-source"))
165 {
166 return GenerateSchemaFromSource.main(remainingArgs, outStream, errStream);
167 }
168 else if (firstArg.equals("generate-source-from-schema"))
169 {
170 return GenerateSourceFromSchema.main(remainingArgs, outStream, errStream);
171 }
172 else if (firstArg.equals("ldapcompare"))
173 {
174 return LDAPCompare.main(remainingArgs, outStream, errStream);
175 }
176 else if (firstArg.equals("ldapmodify"))
177 {
178 return LDAPModify.main(remainingArgs, outStream, errStream);
179 }
180 else if (firstArg.equals("ldapsearch"))
181 {
182 return LDAPSearch.main(remainingArgs, outStream, errStream);
183 }
184 else if (firstArg.equals("ldap-debugger"))
185 {
186 return LDAPDebugger.main(remainingArgs, outStream, errStream);
187 }
188 else if (firstArg.equals("modrate"))
189 {
190 return ModRate.main(remainingArgs, outStream, errStream);
191 }
192 else if (firstArg.equals("searchrate"))
193 {
194 return SearchRate.main(remainingArgs, outStream, errStream);
195 }
196 else if (firstArg.equals("search-and-mod-rate"))
197 {
198 return SearchAndModRate.main(remainingArgs, outStream, errStream);
199 }
200 else if (firstArg.equals("validate-ldif"))
201 {
202 return ValidateLDIF.main(remainingArgs, outStream, errStream);
203 }
204 else
205 {
206 if (errStream != null)
207 {
208 final PrintStream err = new PrintStream(errStream);
209 err.println("Unrecognized tool name '" + args[0] + '\'');
210 err.println("Supported tool names include:");
211 err.println(" authrate");
212 err.println(" identify-references-to-missing-entries");
213 err.println(" identify-unique-attribute-conflicts");
214 err.println(" in-memory-directory-server");
215 err.println(" generate-schema-from-source");
216 err.println(" generate-source-from-schema");
217 err.println(" ldapcompare");
218 err.println(" ldapmodify");
219 err.println(" ldapsearch");
220 err.println(" ldap-debugger");
221 err.println(" modrate");
222 err.println(" searchrate");
223 err.println(" search-and-mod-rate");
224 err.println(" validate-ldif");
225 err.println(" version");
226 }
227
228 return ResultCode.PARAM_ERROR;
229 }
230 }
231 }