====== Command line arguments handling ====== Here is how argument handling works in Reflex as of today. Argument handlers register to the argument manager. Each handler specifies which arguments it can handle by implementing the ''supportedArgs()'' method, which returns an array of ''Argument'' objects. These objects are argument descriptors that indicate: * The tags that identify the argument. Tags must start with a dash ('-'). * The syntax and description of the argument. Both are human-readable strings that are presented to the user when argument usage information is requested. The syntax shows how the argument is used (eg. ''-configClasses class2:class2:...:classN''), while the description explains what the argument does. * The number (0..n) of parameters expected after the argument tag. Parameters are separated by space characters, If the argument can handle a variable number of arguments, it should specify one parameter, and when processing it, split it with the ''Argument.split()'' method. The argument manager parses all command line arguments before passing them to the handlers for processing. The order in which the arguments are processed does not depend on their order on the command line, but rather on the priority of the argument handlers, which is indicated by the ''getPriority()'' method. Handlers that have a higher priority receive their arguments before handlers with a lower priority (the order in which handlers with equal priority receive their arguments is unspecified). It is recommanded that argument handler implementors use the predefined constants for priority (they are defined in the ''ArgumentHandler'' class). Example argument handler: public class CmdLineConfigHandler implements ArgumentHandler { public static final Argument USE_ARG = new Argument( "--use", // This is the tag 1, // Number of parameters Argument.syntaxSplit("path"), // Syntax (result is path1:path2:...:pathN) "use given configuration handlers and plugins (jar files or directories)"); // Description public static final Argument USE_CLASS_ARG = new Argument( "--useClasses", 1, Argument.syntaxSplit("class"), "use a given classes as a configuration handler or plugins (must be in the classpath)"); public Argument[] supportedArgs() { return new Argument[]{USE_ARG, USE_CLASS_ARG}; } public int getPriority() { return PRIORITY_META; } public void handleArgs(Map> aArguments) { // The following method retrieves the unique parameter to the USE_ARG argument, // and splits it with the default delimiter String[] thePaths = USE_ARG.getSplitValues(aArguments); if (thePaths != null) { // (...) } } }