Class BaseCliApplication

  • All Implemented Interfaces:
    Application, com.globalmentor.model.Named<java.lang.String>, io.clogr.Clogged, java.lang.Runnable

    public abstract class BaseCliApplication
    extends AbstractApplication
    Base implementation for facilitating creation of a CLI application.

    A concrete application class should create a static MetadataProvider class (an inner class is recommended) extending the abstract metadata provider class, specifying the class of the concrete application itself. This class expects a configuration file with the same name as the concrete application class with a base extension of -config, such as ExampleApp-config.properties, loaded via Confound from the resources in the same path as the application class. For example:

     
     name=${project.name}
     version=${project.version}
     
     

    The provider class should be specified as the version provider, e.g.:

     
     &#64;Command(name = "foobar", description = "FooBar application.", versionProvider = MetadataProvider.class, mixinStandardHelpOptions = true)
     
     

    By default this class merely prints the command-line usage. This can be overridden for programs with specific functionality, but if the application requires a command then the command methods can be added and annotated separately, with the default run() method remaining for displaying an explanation.

    This class sets up the following options:

    --debug, -d
    Turns on debug level logging.
    Author:
    Garret Wilson
    • Field Detail

      • CONFIG_KEY_NAME

        public static final java.lang.String CONFIG_KEY_NAME
        The configuration key containing the version of the program.
        See Also:
        Constant Field Values
      • CONFIG_KEY_VERSION

        public static final java.lang.String CONFIG_KEY_VERSION
        The configuration key containing the version of the program.
        See Also:
        Constant Field Values
    • Constructor Detail

      • BaseCliApplication

        public BaseCliApplication​(@Nonnull
                                  java.lang.String[] args)
        Arguments constructor.
        Parameters:
        args - The command line arguments.
    • Method Detail

      • getName

        public java.lang.String getName()
        Implementation Specification:
        This implementation retrieves the name from resources for the concrete application class using the resource key "name".
        Throws:
        io.confound.config.ConfigurationException - if there was an error retrieving the configured name or the name could not be found.
        See Also:
        CONFIG_KEY_NAME
      • getVersion

        public java.lang.String getVersion()
        Implementation Specification:
        This implementation retrieves the name from resources for the concrete application class using the resource key "version".
        Returns:
        The application version string .
        Throws:
        io.confound.config.ConfigurationException - if there was an error retrieving the configured name or the name could not be found.
        See Also:
        CONFIG_KEY_VERSION
      • isDebug

        public boolean isDebug()
        Description copied from interface: Application
        Returns whether debug mode is enabled.
        Returns:
        The state of debug mode.
      • setDebug

        protected void setDebug​(boolean debug)
        Enables or disables debug mode, which is disabled by default.
        Parameters:
        debug - The new state of debug mode.
      • updateLogLevel

        protected void updateLogLevel()
        Updates the log level based upon the current debug setting. The current debug setting remains unchanged.
      • start

        public int start()
        Description copied from interface: Application
        Starts the application
        Returns:
        The application status.
      • run

        public void run()
        Implementation Specification:
        The default implementation prints the command-line usage.
        Implementation Note:
        This can be overridden for programs with specific functionality, but if the application requires a command then the command methods can be added and annotated separately, with the default run() method remaining for displaying an explanation.