{"action":"opened","issue":{"url":"https://api.github.com/repos/GELOG/adam-ibs/issues/23","labels_url":"https://api.github.com/repos/GELOG/adam-ibs/issues/23/labels{/name}","comments_url":"https://api.github.com/repos/GELOG/adam-ibs/issues/23/comments","events_url":"https://api.github.com/repos/GELOG/adam-ibs/issues/23/events","html_url":"https://github.com/GELOG/adam-ibs/issues/23","id":70235981,"number":23,"title":"Command-line (CLI) option parser for Scala","user":{"login":"davidonlaptop","id":10860,"avatar_url":"https://avatars.githubusercontent.com/u/10860?v=3","gravatar_id":"","url":"https://api.github.com/users/davidonlaptop","html_url":"https://github.com/davidonlaptop","followers_url":"https://api.github.com/users/davidonlaptop/followers","following_url":"https://api.github.com/users/davidonlaptop/following{/other_user}","gists_url":"https://api.github.com/users/davidonlaptop/gists{/gist_id}","starred_url":"https://api.github.com/users/davidonlaptop/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidonlaptop/subscriptions","organizations_url":"https://api.github.com/users/davidonlaptop/orgs","repos_url":"https://api.github.com/users/davidonlaptop/repos","events_url":"https://api.github.com/users/davidonlaptop/events{/privacy}","received_events_url":"https://api.github.com/users/davidonlaptop/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-04-22T21:12:43Z","updated_at":"2015-04-22T21:12:43Z","closed_at":null,"body":"## Description\r\nAll these plink features uses a different command line options, and some of these options can be combined or not (e.g. `--cluster` can be called alone are with multiple options). Each of these options can have 0, 1 or more parameters (e.g. `--mcc A B`).\r\n\r\nI think the best way to think about this is with a tree-like structure. For each invocation of the program there is one main use case (e.g. clustering). Then each use case require mandatory options and offer optional options. The optional options can have a default value. Some options are shared by many use cases.\r\n\r\nSo with plink, it is not very clear which options are applicable to a use case. To improve this, we need to find a flexible, easy-to-use, and light-weight option for scala.\r\n\r\nI'm a big fan of the `git` software approach:\r\n\r\n```\r\n$ git\r\nusage: git [--version] [--help] [-C <path>] [-c name=value]\r\n           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]\r\n           [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]\r\n           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\r\n           <command> [<args>]\r\n\r\nThe most commonly used git commands are:\r\n   add        Add file contents to the index\r\n   bisect     Find by binary search the change that introduced a bug\r\n   branch     List, create, or delete branches\r\n   checkout   Checkout a branch or paths to the working tree\r\n   clone      Clone a repository into a new directory\r\n   commit     Record changes to the repository\r\n   diff       Show changes between commits, commit and working tree, etc\r\n   fetch      Download objects and refs from another repository\r\n   grep       Print lines matching a pattern\r\n   init       Create an empty Git repository or reinitialize an existing one\r\n   log        Show commit logs\r\n   merge      Join two or more development histories together\r\n   mv         Move or rename a file, a directory, or a symlink\r\n   pull       Fetch from and integrate with another repository or a local branch\r\n   push       Update remote refs along with associated objects\r\n   rebase     Forward-port local commits to the updated upstream head\r\n   reset      Reset current HEAD to the specified state\r\n   rm         Remove files from the working tree and from the index\r\n   show       Show various types of objects\r\n   status     Show the working tree status\r\n   tag        Create, list, delete or verify a tag object signed with GPG\r\n\r\n'git help -a' and 'git help -g' lists available subcommands and some\r\nconcept guides. See 'git help <command>' or 'git help <concept>'\r\nto read about a specific subcommand or concept.\r\n\r\n$ git branch --help\r\n(shows help on the git branch command)\r\n```\r\n\r\n## Analysis\r\nAdd a comment to this issue with:\r\n- the list of available CLI parsers librairies available for Java and Scala, and the PROs and CONs of each\r\n\r\n## Design\r\nAdd a comment to this issue describing the \"tree\" of available commands for the scope of the features implemented in MGL804.\r\n\r\n## Implementation\r\nThis need to be implemented in all features produced during MGL804.\r\n"}}