package org.icij.extract.cli.tasks; import javax.imageio.ImageIO; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.io.FileUtils; import org.icij.extract.cli.Main; import org.icij.task.Options; import org.icij.task.DefaultTask; import org.icij.task.StringOptionParser; import org.icij.task.transformers.CommonsTransformer; import java.util.Arrays; import java.util.Set; public class HelpTask extends DefaultTask<Void> { private final String footer = String.format("%nExtract will use up to %s of memory on this machine.%n%n" + "Please report issues at: https://github.com/ICIJ/extract/issues.", FileUtils.byteCountToDisplaySize (Runtime.getRuntime().maxMemory())); @Override public Void run(final String[] args) throws Exception { final String command = args[0]; final DefaultTask<Object> task = Main.taskFactory.getTask(command); final Options<String> options = task.options(); final HelpFormatter formatter = new HelpFormatter(); options.add("options", StringOptionParser::new) .describe("Load options from a Java properties file.") .parameter("path"); formatter.printHelp(String.format("extract %s", command), "\n" + task.description() + "\n\n", new CommonsTransformer().apply(options), footer); return null; } @Override public Void run() throws Exception { ImageIO.scanForPlugins(); final HelpFormatter formatter = new HelpFormatter(); final Set<String> tasks = Main.taskFactory.listNames(); final String[] imageFormats = Arrays.stream(ImageIO.getReaderFormatNames()) .map(String::toLowerCase) .distinct() .toArray(String[]::new); String header = String.format("%nA cross-platform tool for distributed content-extraction " + "by the data team at the International Consortium of Investigative Journalists.%n%n" + "\033[1mCommands\033[0m%n%n %s%n%n\033[1mAdditional Image Formats\033[0m%n%n %s", String.join("\n ", tasks), String.join("\n ", (CharSequence[]) imageFormats)); formatter.printHelp(String.format("\033[1mextract\033[0m [command] [options]%n" + "%s\033[1mextract\033[0m help%n" + "%s\033[1mextract\033[0m version", formatter.getSyntaxPrefix(), formatter .getSyntaxPrefix()), header, new org.apache.commons.cli.Options(), footer, false); return null; } }