Build.java

package org.docascode.cli;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Target;
import org.docascode.ant.DocAsCodeAntLogger;
import org.docascode.api.DocAsCode;
import org.docascode.api.core.errors.DocAsCodeException;
import org.docascode.api.core.errors.NotADocAsCodeRepository;
import picocli.CommandLine;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@CommandLine.Command(name = "build",
    description = "Performs the build defined in delivery.xml.")
public class Build extends Command implements Runnable  {
    @CommandLine.Option(names = {"-t", "--target"}, arity = "0..*", description = "The Targets to run.")
    private List<String> targets = new ArrayList<>();

    @CommandLine.Option(names = {"-p", "--property"}, description = "Define properties to inject in your build.")
    private Map<String, String> properties  = new HashMap<>();

    @CommandLine.Option(names = {"-l", "--list"}, description = "List the targets defined in delivery.xml.")
    private Boolean list = false;

    @CommandLine.Option(names = {"--log-level"}, description = "Set the output log-level. Valid values: ${COMPLETION-CANDIDATES}")
    private LogLevel logLevel  = LogLevel.INFO;

    @Override
    public void run() {
        try (DocAsCode docascode = DocAsCode.open()) {
            if (list){
                Map<String, Target> listTargets = docascode.build()
                        .listTargets();
                for ( Map.Entry<String, Target> entry : listTargets.entrySet()){
                    success(
                            String.format("%s (defined in %s)%n",
                                    entry.getKey(),
                                    entry.getValue().getLocation().getFileName())
                    );
                    info(
                            String.format("    %s%n",
                                    entry.getValue().getDescription() == null ? "No Description" : entry.getValue().getDescription())
                    );
                }

            } else {
                DocAsCodeAntLogger docAsCodeAntLogger = new DocAsCodeAntLogger();
                docAsCodeAntLogger.setMessageOutputLevel(this.logLevel.getAntLogLevel());
                docascode.build()
                        .setTargets(targets)
                        .addLogger(docAsCodeAntLogger)
                        .setProperties(properties)
                        .call();
                System.exit(0);
            }
        } catch (NotADocAsCodeRepository e) {
            error(e);
        } catch (BuildException e){
            error(e);
            System.exit(1);
        }
    }

    public enum LogLevel{
        INFO(Project.MSG_INFO),
        WARN(Project.MSG_WARN),
        DEBUG(Project.MSG_DEBUG);

        private int antLogLevel;

        LogLevel(int antLogLevel) {
            this.antLogLevel = antLogLevel;
        }

        int getAntLogLevel(){
            return this.antLogLevel;
        }
    }
}