// Path: plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PCTPlugin.java
// public class PCTPlugin {
//     private String name;
//     private final String groupId;
//     private VersionNumber version;
// 
//     public PCTPlugin(String name, String groupId, VersionNumber version) {
//         this.name = name;
//         this.groupId = groupId;
//         this.version = version;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     @CheckForNull
//     public String getGroupId() {
//         return groupId;
//     }
// 
//     public VersionNumber getVersion() {
//         return version;
//     }
// }
// 
// Path: plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/TestStatus.java
// public enum TestStatus {
//     INTERNAL_ERROR(0.0), COMPILATION_ERROR(1.0), TEST_FAILURES(2.0), SUCCESS(3.0);
// 
//     private final double weight;
// 
//     TestStatus(double weight){
//         this.weight = weight;
//     }
// 
//     public boolean isLowerThan(TestStatus s){
//         return weight < s.weight;
//     }
// }


import org.jenkins.tools.test.model.PCTPlugin;
import org.jenkins.tools.test.model.TestStatus;
import com.beust.jcommander.IParameterValidator;
import com.beust.jcommander.IStringConverter;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.ParameterException;
import hudson.util.VersionNumber;
import java.util.Collections;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.CheckForNull;

    @Parameter(names = "-cacheThresholdStatus",
            description = "Allows to define a minimal cache threshold for test status.\n" +
                    "That is to say, every results lower than this threshold won't be considered\n" +
                    "as part of the cache")
    private String cacheThresholdStatus = TestStatus.COMPILATION_ERROR.toString();

    @Parameter(names="-mavenProperties", description = "Define extra properties to be passed to the build." +
          "Format: 'KEY1=VALUE1:KEY2=VALUE2'. These options will be used a la -D.\n" +
            "If your property values contain ':' you must use the 'mavenPropertiesFile' option instead.")
    private String mavenProperties;

    @Parameter(names="-mavenPropertiesFile", description = "Allow loading some maven properties from a file using the standard java.util.Properties file format. " +
            "These options will be used a la -D")
    private String mavenPropertiesFile;

    @Parameter(names="-hookPrefixes", description = "Prefixes of the extra hooks' classes")
    private String hookPrefixes;
    
    @Parameter(names="-externalHooksJars", description = "Comma-separated list of external hooks jar file locations", listConverter = FileListConverter.class, validateWith = FileValidator.class)
    private List<File> externalHooksJars;

    @Parameter(names="-localCheckoutDir", description = "Folder containing either a local (possibly modified) clone of a plugin repository or a set of local clone of different plugins")
    private String localCheckoutDir;

    @Parameter(names="-help", description = "Print this help message", help = true)
    private boolean printHelp;

    @Parameter(names = "-overridenPlugins", description = "List of plugins to use to test a plugin in place of the normal dependencies." +
          "Format: '[GROUP_ID:]PLUGIN_NAME=PLUGIN_VERSION", converter = PluginConverter.class, validateWith = PluginValidator.class)
// Path: plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/PCTPlugin.java
// public class PCTPlugin {
//     private String name;
//     private final String groupId;
//     private VersionNumber version;
// 
//     public PCTPlugin(String name, String groupId, VersionNumber version) {
//         this.name = name;
//         this.groupId = groupId;
//         this.version = version;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     @CheckForNull
//     public String getGroupId() {
//         return groupId;
//     }
// 
//     public VersionNumber getVersion() {
//         return version;
//     }
// }
// 
// Path: plugins-compat-tester-model/src/main/java/org/jenkins/tools/test/model/TestStatus.java
// public enum TestStatus {
//     INTERNAL_ERROR(0.0), COMPILATION_ERROR(1.0), TEST_FAILURES(2.0), SUCCESS(3.0);
// 
//     private final double weight;
// 
//     TestStatus(double weight){
//         this.weight = weight;
//     }
// 
//     public boolean isLowerThan(TestStatus s){
//         return weight < s.weight;
//     }
// }


// Path: plugins-compat-tester-cli/src/main/java/org/jenkins/tools/test/CliOptions.java
import org.jenkins.tools.test.model.PCTPlugin;
import org.jenkins.tools.test.model.TestStatus;
import com.beust.jcommander.IParameterValidator;
import com.beust.jcommander.IStringConverter;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.ParameterException;
import hudson.util.VersionNumber;
import java.util.Collections;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.CheckForNull;


    @Parameter(names = "-cacheThresholdStatus",
            description = "Allows to define a minimal cache threshold for test status.\n" +
                    "That is to say, every results lower than this threshold won't be considered\n" +
                    "as part of the cache")
    private String cacheThresholdStatus = TestStatus.COMPILATION_ERROR.toString();

    @Parameter(names="-mavenProperties", description = "Define extra properties to be passed to the build." +
          "Format: 'KEY1=VALUE1:KEY2=VALUE2'. These options will be used a la -D.\n" +
            "If your property values contain ':' you must use the 'mavenPropertiesFile' option instead.")
    private String mavenProperties;

    @Parameter(names="-mavenPropertiesFile", description = "Allow loading some maven properties from a file using the standard java.util.Properties file format. " +
            "These options will be used a la -D")
    private String mavenPropertiesFile;

    @Parameter(names="-hookPrefixes", description = "Prefixes of the extra hooks' classes")
    private String hookPrefixes;
    
    @Parameter(names="-externalHooksJars", description = "Comma-separated list of external hooks jar file locations", listConverter = FileListConverter.class, validateWith = FileValidator.class)
    private List<File> externalHooksJars;

    @Parameter(names="-localCheckoutDir", description = "Folder containing either a local (possibly modified) clone of a plugin repository or a set of local clone of different plugins")
    private String localCheckoutDir;

    @Parameter(names="-help", description = "Print this help message", help = true)
    private boolean printHelp;

    @Parameter(names = "-overridenPlugins", description = "List of plugins to use to test a plugin in place of the normal dependencies." +
          "Format: '[GROUP_ID:]PLUGIN_NAME=PLUGIN_VERSION", converter = PluginConverter.class, validateWith = PluginValidator.class)
    private List<PCTPlugin> overridenPlugins;