package com.feisystems.tools.github.issue; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.GnuParser; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.OptionBuilder; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.commons.lang.StringUtils; public class CLI { public static final String TOOL_NAME = "GitHub Issue Exporter"; public static final String ARG_HELP = "h"; public static final String ARG_HELP_LONG = "help"; public static final String ARG_HELP_DESC = "show help."; public static final String ARG_ACCESS_TOKEN_ARGNAME = "accessToken"; public static final String ARG_ACCESS_TOKEN = "t"; public static final String ARG_ACCESS_TOKEN_LONG = "token"; public static final String ARG_ACCESS_TOKEN_DESC = "enter the OAuth access token generated by GitHub for authentication"; public static final String ARG_USER_ARGNAME = "userName"; public static final String ARG_USER = "u"; public static final String ARG_USER_LONG = "user"; public static final String ARG_USER_DESC = "enter the username that owns the repository"; public static final String ARG_REPO_ARGNAME = "repositoryName"; public static final String ARG_REPO = "r"; public static final String ARG_REPO_LONG = "repo"; public static final String ARG_REPO_DESC = "enter the repository name"; public static final String ARG_WRITE_FILE_PATH_ARGNAME = "absolueWriteFolderPath"; public static final String ARG_WRITE_FILE_PATH = "p"; public static final String ARG_WRITE_FILE_PATH_LONG = "path"; public static final String ARG_WRITE_FILE_PATH_DESC = "enter the absolute folder path for the output file \"GitHubIssueExport-YYYY-MM-DD-HH-MM.xlsx\" will be created (e.g. C:\\git-issues\\)"; @SuppressWarnings("static-access") public static Config getConfig(String[] args) { Config config = new Config(); CommandLineParser parser = new GnuParser(); Options options = new Options(); options.addOption(ARG_HELP, ARG_HELP_LONG, false, ARG_HELP_DESC); Option accessTokenOption = OptionBuilder .withArgName(ARG_ACCESS_TOKEN_ARGNAME).hasArg() .withDescription(ARG_ACCESS_TOKEN_DESC) .withLongOpt(ARG_ACCESS_TOKEN_LONG).create(ARG_ACCESS_TOKEN); options.addOption(accessTokenOption); Option userOption = OptionBuilder.withArgName(ARG_USER_ARGNAME) .hasArg().withDescription(ARG_USER_DESC) .withLongOpt(ARG_USER_LONG).create(ARG_USER); options.addOption(userOption); Option repoOption = OptionBuilder.withArgName(ARG_REPO_ARGNAME) .hasArg().withDescription(ARG_REPO_DESC) .withLongOpt(ARG_REPO_LONG).create(ARG_REPO); options.addOption(repoOption); Option writeFilePathOption = OptionBuilder .withArgName(ARG_WRITE_FILE_PATH_ARGNAME).hasArg() .withDescription(ARG_WRITE_FILE_PATH_DESC) .withLongOpt(ARG_WRITE_FILE_PATH_LONG) .create(ARG_WRITE_FILE_PATH); options.addOption(writeFilePathOption); CommandLine cmd = null; try { cmd = parser.parse(options, args); } catch (ParseException e) { help(options); throw new RuntimeException(e); } String accessToken = cmd.getOptionValue(ARG_ACCESS_TOKEN_LONG); String user = cmd.getOptionValue(ARG_USER_LONG); String repo = cmd.getOptionValue(ARG_REPO_LONG); String writeFilePath = cmd.getOptionValue(ARG_WRITE_FILE_PATH_LONG); if (StringUtils.isBlank(accessToken) || StringUtils.isBlank(user) || StringUtils.isBlank(repo) || StringUtils.isBlank(writeFilePath)) { help(options); throw new RuntimeException("Missing arguments!"); } if (cmd.hasOption(ARG_HELP_LONG)) { help(options); } config.setAccessToken(accessToken); config.setUser(user); config.setRepo(repo); config.setWriteFilePath(writeFilePath); return config; } private static void help(Options options) { HelpFormatter formater = new HelpFormatter(); formater.printHelp(TOOL_NAME, options); } }