// 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;
                    "It is useful to use your own fork releases for an specific plugin if the " +
                    "version is not found in the official repository.\n" +
                    "If set, The PCT will try to use the fallback if a plugin tag is not found in the regular URL.")
    private String fallbackGitHubOrganization = null;

    @Parameter(names = "-m2SettingsFile",
            description = "Maven settings file used while executing maven")
    private File m2SettingsFile;

    @Parameter(names = "-mvn",
            description = "External Maven executable")
    @CheckForNull
    private File externalMaven;

    @Parameter(names = "-skipTestCache",
            description = "Allows to skip compatibility test cache (by default, to 100 days)\n" +
                    "If set to true, every plugin will be tested, no matter the cache is.")
    private String skipTestCache = null;

    @Parameter(names = "-testCacheTimeout",
            description = "Allows to override the test cache timeout.\n" +
                    "Test cache timeout allows to not perform compatibility test over\n" +
                    "some plugins if compatibility test was performed recently.\n" +
                    "Cache timeout is given in milliseconds")
    private Long testCacheTimeout = null;

    @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")
// 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;

                    "It is useful to use your own fork releases for an specific plugin if the " +
                    "version is not found in the official repository.\n" +
                    "If set, The PCT will try to use the fallback if a plugin tag is not found in the regular URL.")
    private String fallbackGitHubOrganization = null;

    @Parameter(names = "-m2SettingsFile",
            description = "Maven settings file used while executing maven")
    private File m2SettingsFile;

    @Parameter(names = "-mvn",
            description = "External Maven executable")
    @CheckForNull
    private File externalMaven;

    @Parameter(names = "-skipTestCache",
            description = "Allows to skip compatibility test cache (by default, to 100 days)\n" +
                    "If set to true, every plugin will be tested, no matter the cache is.")
    private String skipTestCache = null;

    @Parameter(names = "-testCacheTimeout",
            description = "Allows to override the test cache timeout.\n" +
                    "Test cache timeout allows to not perform compatibility test over\n" +
                    "some plugins if compatibility test was performed recently.\n" +
                    "Cache timeout is given in milliseconds")
    private Long testCacheTimeout = null;

    @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();