Skip to content

StateDMI Application


Introduction

The StateDMI main application is the entry point into the software and is used for multiple run modes. Command parameters are parsed to determine how to launch the application and then appropriate classes are instantiated.

StateDMI configuration can be complex due to the number of data sources that are supported. As much as possible, the configuration is distributed with useful defaults, and configuration files are simple text files that can be modified as appropriate.

Launching

The StateDMI main application class is launched in typical Java way via the static StateDMI class. Command line parameters are parsed and StateDMI is run in a mode that is requested.

For example, if running in batch mode, a StateDMICommandFileRunner class is instantiated and the command file is run.

If running the GUI, then an instance of StateDMI_JFrame is created and the command file is run.

On Windows, the Launch4J software is used to create an executable program to launch StateDMI. This allows the statedmi.exe program to be run. Launch4j provides numerous features to optimize Java program start-up on Windows.

Configuration

This needs to be updated. StateDMI currently does not have a StateDMI.cfg file but this would be useful.

StateDMI is configured via a number of simple text files. Simple Property=Value syntax has been used and INI format with sections and #-comments is used for StateDMI.cfg. These simple formats will likely continue to be used, although JSON may be adopted where it has benefits, such as hierarchical time series product files.

The Installation StateDMI appendix in the User Documentation, as well as Datastore documentation describes configuration files.

User Interface (UI)

The StateDMI_JFrame class is quite large and could benefit from refactoring. However, much of the length results from the large number of menus and associated actions that occur in responding to those menus. Components could be refactored to act autonomous of the StateDMI Main UI, but this would require evaluation.

See the User Interface Software Design documentation.