aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.cli/src/org/jacoco/cli/internal/Command.java
diff options
context:
space:
mode:
Diffstat (limited to 'org.jacoco.cli/src/org/jacoco/cli/internal/Command.java')
-rw-r--r--org.jacoco.cli/src/org/jacoco/cli/internal/Command.java85
1 files changed, 85 insertions, 0 deletions
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/Command.java b/org.jacoco.cli/src/org/jacoco/cli/internal/Command.java
new file mode 100644
index 00000000..5e83b8b7
--- /dev/null
+++ b/org.jacoco.cli/src/org/jacoco/cli/internal/Command.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Marc R. Hoffmann - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.cli.internal;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import org.kohsuke.args4j.Option;
+
+/**
+ * Common interface for all commands.
+ */
+public abstract class Command {
+
+ /**
+ * Common command line prefix.
+ */
+ public static final String JAVACMD = "java -jar jacococli.jar ";
+
+ /**
+ * Flag whether help should be printed for this command.
+ */
+ @Option(name = "-help", usage = "show help", help = true)
+ public boolean help = false;
+
+ /**
+ * @return Short description of the command.
+ */
+ public abstract String description();
+
+ /**
+ * @return name of the command
+ */
+ public String name() {
+ return getClass().getSimpleName().toLowerCase();
+ }
+
+ /**
+ * @param parser
+ * parser for this command
+ * @return usage string displayed for help
+ */
+ public String usage(final CommandParser parser) {
+ final StringWriter writer = new StringWriter();
+ parser.printSingleLineUsage(writer, null);
+ return JAVACMD + name() + writer;
+ }
+
+ /**
+ * Executes the given command.
+ *
+ * @param out
+ * std out
+ * @param err
+ * std err
+ * @return exit code, should be 0 for normal operation
+ * @throws Exception
+ * any exception that my occur during execution
+ */
+ public abstract int execute(PrintWriter out, PrintWriter err)
+ throws Exception;
+
+ /**
+ * Prints textual help for this command.
+ *
+ * @param writer
+ * output destination
+ */
+ protected void printHelp(final PrintWriter writer) {
+ final CommandParser parser = new CommandParser(this);
+ writer.println("Usage: " + parser.getCommand().usage(parser));
+ writer.println(description());
+ parser.printUsage(writer, null);
+ }
+
+}