Packager.java

package esa.bscs.pds4.packager.cli;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;

@SuppressWarnings("java:S1192")
class Packager {
        
    private Packager() {
        // Non-instantiable class
    }
    
    protected static Options getOptions() {
        
        final Option input = Option.builder("i")
                .longOpt("input")
                .argName("directory path")
                .desc("Directory that contains the PDS4 products to package")
                .hasArg(true)
                .required(false)
                .build();
        
        final Option output = Option.builder("o")
                .longOpt("output")
                .argName("directory path")
                .desc("Directory where the delivery package will be generated")
                .hasArg(true)
                .required(false)
                .build();

        final Option definition = Option.builder("d")
                .longOpt("dictionary-stack-id")
                .argName("dictionary stack id")
                .desc("Validate products using this dictionary stack id")
                .hasArg(true)
                .required(false)
                .build();
        
        final Option local = Option.builder("l")
                .longOpt("local")
                .hasArg(false)
                .build();

        final Option recursive = Option.builder("r")
                .longOpt("recursive")
                .hasArg(false)
                .build();

        final Option skipValidation = Option.builder("s")
                .longOpt("skip-validation")
                .hasArg(false)
                .build();
        
        final Option verbose = Option.builder("V")
                .longOpt("verbose")
                .hasArg(false)
                .build();
        
        final Option help = Option.builder("h")
                .longOpt("help")
                .hasArg(false)
                .build();

        final Option version = Option.builder("v")
                .longOpt("version")
                .hasArg(false)
                .build();
                
        
        final Options options = new Options();
        
        options.addOption(input);
        options.addOption(output);
        options.addOption(definition);
        options.addOption(local);
        options.addOption(recursive);
        options.addOption(skipValidation);
        options.addOption(verbose);
        options.addOption(help);
        options.addOption(version);
        
        return options;
    }
    
    protected static String version() throws IOException {
        
        final Properties packagerProperties = new Properties();
        final Properties packagerClassifierProperties = new Properties();
        final Properties packagerValidateProperties = new Properties();
        final Properties validateProperties = new Properties();
        final Properties validateDataProperties = new Properties();
        
        final InputStream packagerPropertiesInputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("META-INF/maven/esa.bscs.pds4/pds4-packager/pom.properties");
        final InputStream packagerClassifierPropertiesInputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("META-INF/maven/esa.bscs.pds4/pds4-packager-classifiers/pom.properties");
        final InputStream packagerValidatePropertiesInputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("META-INF/maven/esa.bscs.pds4/pds4-validate/pom.properties");
        final InputStream validatePropertiesInputStream = ClassLoader.getSystemResourceAsStream("META-INF/maven/gov.nasa.pds/validate/pom.properties");
        final InputStream validateDataPropertiesInputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("META-INF/maven/esa.bscs.pds4-tools.packager/pds4-validate-data/pom.properties");
        
        if(packagerPropertiesInputStream != null) {
            packagerProperties.load(packagerPropertiesInputStream);
        }
        
        if(packagerClassifierPropertiesInputStream != null) {
            packagerClassifierProperties.load(packagerClassifierPropertiesInputStream);
        }
        
        if(packagerValidatePropertiesInputStream !=  null) {
            packagerValidateProperties.load(packagerValidatePropertiesInputStream);
        }
        
        if(validatePropertiesInputStream != null) {
            validateProperties.load(validatePropertiesInputStream);
        }
        
        if(validateDataPropertiesInputStream != null) {
            validateDataProperties.load(validateDataPropertiesInputStream);        
        }
        
        return System.getProperty("app.name") + " modules:"
                + " " + "PDS4 packager:" + " " + packagerProperties.getOrDefault("version", "N/A") + " -"
                + " " + "PDS4 classifiers:" + " " + packagerClassifierProperties.getOrDefault("version", "N/A") + " -"
                + " " + "PDS4 validate:" + " " + packagerValidateProperties.getOrDefault("version", "N/A") + " -"
                + " " + "PDS4 dictionary bundle:" + " " + validateDataProperties.getOrDefault("version", "N/A") + " -"
                + " " + "NASA validate:" + " " + validateProperties.getOrDefault("version", "N/A");
    }
}