package betsy.bpel.cli; import java.util.Collections; import java.util.List; import betsy.bpel.engines.AbstractBPELEngine; import betsy.bpel.repositories.BPELEngineRepository; import betsy.common.config.Configuration; import configuration.bpel.BPELProcessRepository; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.DefaultParser; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import pebl.benchmark.test.Test; public class BPELCliParser { public static final BPELCliParameter HELP_ONLY = new BPELCliParameter() { @Override public List<AbstractBPELEngine> getEngines() { return Collections.emptyList(); } @Override public List<Test> getProcesses() { return Collections.emptyList(); } @Override public String getTestFolderName() { return "test"; } @Override public boolean openResultsInBrowser() { return false; } @Override public boolean checkDeployment() { return false; } @Override public boolean hasCustomPartnerAddress() { return false; } @Override public String getCustomPartnerAddress() { return null; } @Override public boolean useExternalPartnerService() { return false; } @Override public boolean saveTimeouts() { return false; } @Override public boolean buildArtifactsOnly() { return false; } @Override public boolean showHelp() { return true; } @Override public boolean useInstalledEngine() { return false; } @Override public boolean useRunningEngine() { return false; } @Override public boolean keepEngineRunning() { return false; } }; public static final String HELP = "help"; public static final String OPEN_RESULTS_IN_BROWSER = "open-results-in-browser"; public static final String CHECK_DEPLOYMENT = "check-deployment"; public static final String USE_EXTERNAL_PARTNER_SERVICE = "use-external-partner-service"; public static final String BUILD_ONLY = "build-only"; public static final String PARTNER_ADDRESS = "partner-address"; private static final String USE_INSTALLED_ENGINE = "use-installed-engine"; private static final String USE_RUNNING_ENGINE = "use-running-engine"; private static final String USE_CUSTOM_TEST_FOLDER= "use-custom-test-folder"; private static final String KEEP_ENGINE_RUNNING = "keep-engine-running"; private static final String SAVE_TIMEOUTS = "save-timeouts"; private final String[] args; public BPELCliParser(String... args) { this.args = args; } public BPELCliParameter parse() { CommandLineParser parser = new DefaultParser(); try { CommandLine cmd = parser.parse(getOptions(), args); for(Option option : cmd.getOptions()) { System.out.println(option.toString()); } if (cmd.hasOption(HELP)) { return HELP_ONLY; } return new BPELCliParameter() { @Override public List<AbstractBPELEngine> getEngines() { return new EngineParser(cmd.getArgs()).parse(); } @Override public List<Test> getProcesses() { return new ProcessParser(cmd.getArgs()).parse(); } @Override public String getTestFolderName() { String optionValue = cmd.getOptionValue(USE_CUSTOM_TEST_FOLDER); if(optionValue != null){ return optionValue; } else { return "test"; } } @Override public boolean openResultsInBrowser() { return cmd.hasOption(OPEN_RESULTS_IN_BROWSER); } @Override public boolean checkDeployment() { return cmd.hasOption(CHECK_DEPLOYMENT); } @Override public boolean hasCustomPartnerAddress() { return cmd.hasOption(PARTNER_ADDRESS); } @Override public String getCustomPartnerAddress() { return cmd.getOptionValue(PARTNER_ADDRESS); } @Override public boolean useExternalPartnerService() { return cmd.hasOption(USE_EXTERNAL_PARTNER_SERVICE); } @Override public boolean saveTimeouts() {return cmd.hasOption(SAVE_TIMEOUTS); } @Override public boolean buildArtifactsOnly() { return cmd.hasOption(BUILD_ONLY); } @Override public boolean showHelp() { return cmd.hasOption(HELP); } @Override public boolean useInstalledEngine() { return cmd.hasOption(USE_INSTALLED_ENGINE); } @Override public boolean useRunningEngine() { return cmd.hasOption(USE_RUNNING_ENGINE); } @Override public boolean keepEngineRunning() { return cmd.hasOption(KEEP_ENGINE_RUNNING); } }; } catch (ParseException e) { return HELP_ONLY; } } private Options getOptions() { Options options = new Options(); options.addOption("o", OPEN_RESULTS_IN_BROWSER, false, "Opens results in default browser"); options.addOption("h", HELP, false, "Print usage information."); options.addOption("c", CHECK_DEPLOYMENT, false, "Verifies deployment instead of test success"); options.addOption("e", USE_EXTERNAL_PARTNER_SERVICE, false, "Use external partner service instead of internal one"); options.addOption("b", BUILD_ONLY, false, "Builds only the artifacts. Does nothing else."); options.addOption("i", USE_INSTALLED_ENGINE, false, "Use already installed engine."); options.addOption("p", PARTNER_ADDRESS, true, "Partner IP and Port (defaults to " + Configuration.get("partner.ipAndPort") + ")"); options.addOption("f", USE_CUSTOM_TEST_FOLDER, true, "Use custom test folder"); options.addOption("k", KEEP_ENGINE_RUNNING, false, "Keep the engine running. No engine shutdown!"); options.addOption("r", USE_RUNNING_ENGINE, false, "Use already running engine."); options.addOption("s", SAVE_TIMEOUTS, false, "Save the during the execution measured timeouts"); return options; } public void printUsage() { String firstLine = "betsy bpel [OPTIONS] <ENGINES> <PROCESSES>"; String header = "\nOptions:\n"; String footer = "\nGROUPS for <ENGINES> and <PROCESSES> are in CAPITAL LETTERS.\n" + "<ENGINES>: " + new BPELEngineRepository().getNames() + "\n\n\n" + "<PROCESSES>: " + BPELProcessRepository.INSTANCE.getNames() + "\n\n\n" + "Please report issues at https://github.com/uniba-dsg/betsy/issues"; new HelpFormatter().printHelp(firstLine, header, getOptions(), footer); } }