1d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann/******************************************************************************* 2d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors 3d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * All rights reserved. This program and the accompanying materials 4d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * are made available under the terms of the Eclipse Public License v1.0 5d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * which accompanies this distribution, and is available at 6d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * http://www.eclipse.org/legal/epl-v10.html 7d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * 8d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Contributors: 9d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Marc R. Hoffmann - initial API and implementation 10d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * 11d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann *******************************************************************************/ 12d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannpackage org.jacoco.cli.internal; 13d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 14d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport java.io.PrintWriter; 15d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport java.io.StringWriter; 16d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 17d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannimport org.kohsuke.args4j.Option; 18d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 19d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann/** 20d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Common interface for all commands. 21d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann */ 22d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmannpublic abstract class Command { 23d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 24d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann /** 25d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Common command line prefix. 26d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann */ 27d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann public static final String JAVACMD = "java -jar jacococli.jar "; 28d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 29d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann /** 30d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Flag whether help should be printed for this command. 31d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann */ 32d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann @Option(name = "-help", usage = "show help", help = true) 33d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann public boolean help = false; 34d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 35d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann /** 3659b2f363c5b69712662c6e129f78230d350eeb5aMarc R. Hoffmann * Flag whether output to stdout should be suppressed. 3759b2f363c5b69712662c6e129f78230d350eeb5aMarc R. Hoffmann */ 3859b2f363c5b69712662c6e129f78230d350eeb5aMarc R. Hoffmann @Option(name = "-quiet", usage = "suppress all output on stdout") 3959b2f363c5b69712662c6e129f78230d350eeb5aMarc R. Hoffmann public boolean quiet = false; 4059b2f363c5b69712662c6e129f78230d350eeb5aMarc R. Hoffmann 4159b2f363c5b69712662c6e129f78230d350eeb5aMarc R. Hoffmann /** 42d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * @return Short description of the command. 43d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann */ 44d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann public abstract String description(); 45d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 46d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann /** 47d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * @return name of the command 48d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann */ 49d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann public String name() { 50d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann return getClass().getSimpleName().toLowerCase(); 51d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 52d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 53d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann /** 54d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * @param parser 55d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * parser for this command 56d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * @return usage string displayed for help 57d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann */ 58d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann public String usage(final CommandParser parser) { 59d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann final StringWriter writer = new StringWriter(); 60d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann parser.printSingleLineUsage(writer, null); 61d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann return JAVACMD + name() + writer; 62d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 63d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 64d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann /** 65d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Executes the given command. 66d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * 67d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * @param out 68d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * std out 69d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * @param err 70d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * std err 71d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * @return exit code, should be 0 for normal operation 72d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * @throws Exception 73d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * any exception that my occur during execution 74d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann */ 75d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann public abstract int execute(PrintWriter out, PrintWriter err) 76d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann throws Exception; 77d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 78d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann /** 79d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * Prints textual help for this command. 80d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * 81d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * @param writer 82d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann * output destination 83d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann */ 84d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann protected void printHelp(final PrintWriter writer) { 85d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann final CommandParser parser = new CommandParser(this); 86d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann writer.println("Usage: " + parser.getCommand().usage(parser)); 87d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann writer.println(description()); 88d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann parser.printUsage(writer, null); 89d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann } 90d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann 91d850ed49b22d2a0c84a3b317acec8df7e7159016Marc R. Hoffmann} 92