Class AbstractCLI
- java.lang.Object
-
- ubic.gemma.core.util.AbstractCLI
-
- All Implemented Interfaces:
CLI
- Direct Known Subclasses:
AbstractAuthenticatedCLI
,GenerateDatabaseUpdateCli
,IndexGemmaCLI
,InitializeDatabaseCli
,MeshTermFetcherCli
public abstract class AbstractCLI extends Object implements CLI
Basic implementation of theCLI
interface.To use this, in your concrete subclass, implement
buildOptions(org.apache.commons.cli.Options)
andprocessOptions(org.apache.commons.cli.CommandLine)
to handle any application-specific options (they can be no-ops) anddoWork()
to perform the actual work of the CLI.Use
AbstractAuthenticatedCLI
if you need to authenticate the user.- Author:
- pavlidis
-
-
Field Summary
Fields Modifier and Type Field Description protected static int
ABORTED
Exit code used when adoWork()
is aborted.protected static int
FAILURE
Exit code used for a faileddoWork()
execution.protected static int
FAILURE_FROM_ERROR_OBJECTS
Exit code used for a successful doWork execution that resulted in failed error objects.protected static org.apache.commons.logging.Log
log
protected static int
SUCCESS
Exit code used for a successfuldoWork()
execution.
-
Constructor Summary
Constructors Constructor Description AbstractCLI()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected void
addAutoOption(org.apache.commons.cli.Options options)
Add the-auto
option.protected void
addAutoOption(org.apache.commons.cli.Options options, Class<? extends AuditEventType> autoSeekEventType)
Add the-auto
option for a specificAuditEventType
.protected void
addBatchOption(org.apache.commons.cli.Options options)
Add the -batchFormat and -batchOutputFile options.protected void
addDateOption(org.apache.commons.cli.Options options)
Add the-mdate
option.protected void
addErrorObject(Object errorObject, Exception exception)
Add an error object based on an exception.protected void
addErrorObject(Object errorObject, String message)
Add an error object without a cause stacktrace.protected void
addErrorObject(Object errorObject, String message, Throwable throwable)
Add an error object with a stacktrace to indicate failure in a batch processing.protected void
addSuccessObject(Object successObject)
protected void
addSuccessObject(Object successObject, String message)
Add a success object to indicate success in a batch processing.protected void
addThreadsOption(org.apache.commons.cli.Options options)
Add the-threads
option.boolean
allowPositionalArguments()
Indicate if this CLI allows positional arguments.protected abstract void
buildOptions(org.apache.commons.cli.Options options)
Build option implementation.protected void
buildStandardOptions(org.apache.commons.cli.Options options)
protected ExecutorService
createBatchTaskExecutorService()
Create anExecutorService
to be used for running batch tasks.protected abstract void
doWork()
Command line implementation.protected void
executeBatchTasks(Collection<? extends Runnable> tasks)
Execute the given batch tasks and await their completions.int
executeCommand(String... args)
Execute the given command given CLI arguments.protected Class<? extends AuditEventType>
getAutoSeekEventType()
protected ExecutorService
getBatchTaskExecutor()
Obtain an executor for running batch tasks.protected <T> T
getBean(Class<T> clz)
Deprecated.protected <T> T
getBean(String name, Class<T> clz)
Deprecated.UseAutowired
to specify your dependencies, this is just a wrapper around the currentBeanFactory
.protected Date
getLimitingDate()
protected int
getNumThreads()
org.apache.commons.cli.Options
getOptions()
Obtain the options for the CLI.protected boolean
isAutoSeek()
protected abstract void
processOptions(org.apache.commons.cli.CommandLine commandLine)
Process command line options.protected void
processStandardOptions(org.apache.commons.cli.CommandLine commandLine)
Somewhat annoying: This causes subclasses to be unable to safely use 'h', 'p', 'u' and 'P' etc.protected void
promptConfirmationOrAbort(String message)
Prompt the user for a confirmation or raise an exception to abort thedoWork()
method.protected void
setAllowPositionalArguments(boolean allowPositionalArguments)
Allow positional arguments to be specified.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface ubic.gemma.core.util.CLI
getCommandGroup, getCommandName, getShortDesc
-
-
-
-
Field Detail
-
log
protected static final org.apache.commons.logging.Log log
-
SUCCESS
protected static final int SUCCESS
Exit code used for a successfuldoWork()
execution.- See Also:
- Constant Field Values
-
FAILURE
protected static final int FAILURE
Exit code used for a faileddoWork()
execution.- See Also:
- Constant Field Values
-
FAILURE_FROM_ERROR_OBJECTS
protected static final int FAILURE_FROM_ERROR_OBJECTS
Exit code used for a successful doWork execution that resulted in failed error objects.- See Also:
- Constant Field Values
-
ABORTED
protected static final int ABORTED
Exit code used when adoWork()
is aborted.- See Also:
- Constant Field Values
-
-
Method Detail
-
getBean
@Deprecated protected <T> T getBean(String name, Class<T> clz)
Deprecated.UseAutowired
to specify your dependencies, this is just a wrapper around the currentBeanFactory
.Convenience method to obtain instance of any bean by name.- Type Parameters:
T
- the bean class type- Parameters:
clz
- classname
- name- Returns:
- bean
-
getBean
@Deprecated protected <T> T getBean(Class<T> clz)
Deprecated.
-
getOptions
public org.apache.commons.cli.Options getOptions()
Description copied from interface:CLI
Obtain the options for the CLI.- Specified by:
getOptions
in interfaceCLI
-
allowPositionalArguments
public boolean allowPositionalArguments()
Description copied from interface:CLI
Indicate if this CLI allows positional arguments.- Specified by:
allowPositionalArguments
in interfaceCLI
-
executeCommand
public int executeCommand(String... args)
Execute the given command given CLI arguments.Parse and process CLI arguments, invoke the command
doWork()
implementation, and print basic statistics about time usage.Any exception raised by doWork results in a value of
FAILURE
, and any error set in the internal error objects will result in a value ofFAILURE_FROM_ERROR_OBJECTS
.- Specified by:
executeCommand
in interfaceCLI
- Returns:
- an exit code
-
addAutoOption
protected void addAutoOption(org.apache.commons.cli.Options options)
Add the-auto
option.The auto option value can be retrieved with
isAutoSeek()
.
-
addAutoOption
protected void addAutoOption(org.apache.commons.cli.Options options, Class<? extends AuditEventType> autoSeekEventType)
Add the-auto
option for a specificAuditEventType
.The event type can be retrieved with
getAutoSeekEventType()
.
-
addDateOption
protected void addDateOption(org.apache.commons.cli.Options options)
Add the-mdate
option.The limiting date can be retrieved with
getLimitingDate()
.
-
addThreadsOption
protected void addThreadsOption(org.apache.commons.cli.Options options)
Add the-threads
option.This is used to configure the internal batch processing thread pool which can be used with
executeBatchTasks(Collection)
. You may also usegetNumThreads()
to retrieve the number of threads to use.
-
addBatchOption
protected void addBatchOption(org.apache.commons.cli.Options options)
Add the -batchFormat and -batchOutputFile options.These options allow the user to control how and where batch processing results are summarized.
-
setAllowPositionalArguments
protected void setAllowPositionalArguments(boolean allowPositionalArguments)
Allow positional arguments to be specified. The default is false and an error will be produced if positional arguments are supplied by the user.Those arguments can be retrieved in
processOptions(CommandLine)
by usingCommandLine.getArgList()
.
-
isAutoSeek
protected boolean isAutoSeek()
-
getAutoSeekEventType
protected Class<? extends AuditEventType> getAutoSeekEventType()
-
getNumThreads
protected int getNumThreads()
-
getLimitingDate
protected Date getLimitingDate()
-
buildStandardOptions
protected void buildStandardOptions(org.apache.commons.cli.Options options)
-
buildOptions
protected abstract void buildOptions(org.apache.commons.cli.Options options)
Build option implementation.Implement this method to add options to your command line, using the OptionBuilder.
This is called right after
buildStandardOptions(Options)
so the options will be added after standard options.
-
processStandardOptions
protected void processStandardOptions(org.apache.commons.cli.CommandLine commandLine) throws org.apache.commons.cli.ParseException
Somewhat annoying: This causes subclasses to be unable to safely use 'h', 'p', 'u' and 'P' etc. for their own purposes.- Throws:
org.apache.commons.cli.ParseException
-
processOptions
protected abstract void processOptions(org.apache.commons.cli.CommandLine commandLine) throws org.apache.commons.cli.ParseException
Process command line options.Implement this to provide processing of options. It is called after
buildOptions(Options)
and right beforedoWork()
.- Throws:
org.apache.commons.cli.ParseException
- in case of unrecoverable failure (i.e. missing option or invalid value), an exception can be raised and will result in an exit code ofFAILURE
.
-
doWork
protected abstract void doWork() throws Exception
Command line implementation.This is called after
buildOptions(Options)
andprocessOptions(CommandLine)
, so the implementation can assume that all its arguments have already been initialized.- Throws:
Exception
- in case of unrecoverable failure, an exception is thrown and will result in aFAILURE
exit code, otherwise useaddErrorObject(java.lang.Object, java.lang.String, java.lang.Throwable)
to indicate an error and resume processing
-
promptConfirmationOrAbort
protected void promptConfirmationOrAbort(String message) throws Exception
Prompt the user for a confirmation or raise an exception to abort thedoWork()
method.- Throws:
Exception
-
addSuccessObject
protected void addSuccessObject(Object successObject, String message)
Add a success object to indicate success in a batch processing.- Parameters:
successObject
- object that was processedmessage
- success message
-
addSuccessObject
protected void addSuccessObject(Object successObject)
- See Also:
addSuccessObject(Object, String)
-
addErrorObject
protected void addErrorObject(@Nullable Object errorObject, String message, Throwable throwable)
Add an error object with a stacktrace to indicate failure in a batch processing.This is intended to be used when an
Exception
is caught.- Parameters:
errorObject
- object that was processedmessage
- error messagethrowable
- throwable to produce a stacktrace
-
addErrorObject
protected void addErrorObject(@Nullable Object errorObject, String message)
Add an error object without a cause stacktrace.- See Also:
addErrorObject(Object, String)
-
addErrorObject
protected void addErrorObject(@Nullable Object errorObject, Exception exception)
Add an error object based on an exception.
-
createBatchTaskExecutorService
protected ExecutorService createBatchTaskExecutorService()
Create anExecutorService
to be used for running batch tasks.
-
getBatchTaskExecutor
protected final ExecutorService getBatchTaskExecutor()
Obtain an executor for running batch tasks.The CLI will await any pending batch tasks before exiting. You may only submit batch tasks inside
doWork()
.Errors will be reported with
addErrorObject(Object, Exception)
. However, reporting successes is the responsibility of the caller.
-
executeBatchTasks
protected void executeBatchTasks(Collection<? extends Runnable> tasks) throws InterruptedException
Execute the given batch tasks and await their completions.Errors will be reported with
addErrorObject(Object, Exception)
. However, reporting successes is the responsibility of the caller.- Throws:
InterruptedException
-
-