// Path: vertx-deploy-maven-plugin/src/main/java/nl/jpoint/maven/vertx/utils/DeployType.java
// public enum DeployType {
//     APPLICATION("application:"),
//     ARTIFACT("artifact:"),
//     DEFAULT("");
// 
//     private static final String LATEST_REQUEST_TAG = "latest:version";
//     private static final String SCOPE_TAG = "scope:tst";
//     private static final String EXCLUSION_TAG = "exclusions";
//     private static final String PROPERTIES_TAG = "classifier:properties";
// 
//     private final String type;
//     private final String prefix = "deploy";
// 
//     DeployType(String type) {
//         this.type = type;
//     }
// 
//     public String getLatestRequestTag() {
//         return prefix + ":" + type + LATEST_REQUEST_TAG;
//     }
// 
//     public String getScopeTag() {
//         return prefix + ":" + type + SCOPE_TAG;
//     }
// 
//     public String getExclusionTag() {
//         return prefix + ":" + type + EXCLUSION_TAG;
//     }
// 
//     public String getPropertiesTag() {
//         return prefix + ":" + type + PROPERTIES_TAG;
//     }
// }
// 
// Path: vertx-deploy-maven-plugin/src/main/java/nl/jpoint/maven/vertx/utils/deploy/strategy/DeployStrategyType.java
// public enum DeployStrategyType {
//     WHATEVER,
//     DEFAULT,
//     GUARANTEE_MINIMUM,
//     SPIN_AND_REMOVE,
//     KEEP_CAPACITY
// }


import nl.jpoint.maven.vertx.utils.DeployType;
import nl.jpoint.maven.vertx.utils.deploy.strategy.DeployStrategyType;
import org.apache.maven.model.Exclusion;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
package nl.jpoint.maven.vertx.mojo;



public class DeployConfiguration {

    /**
     * The maven project version as String (groupId:artifactId:version)
     */
    private String projectVersion;
    /**
     * The configuration target id
     **/
    private String target;
    /**
     * List of hosts to deploy to
     **/
    private final List<String> hosts = new ArrayList<>();
    /**
     * The port where the agent is listening on
     */
    private int port = 6789;

    /**
     * Enable / disable deploy of config objects
     **/
    private boolean deployConfig = true;
    /**
     * List of artifacts to exclude
     **/
    private List<Exclusion> exclusions = new ArrayList<>();
    /**
     * Deploy artifacts in test scope
     **/
    private boolean testScope = false;
    /**
     * restart all modules on host
     **/
    private boolean restart = false;

    /**
     * Allow deploy of snapshots
     **/
    private boolean deploySnapshots = false;

    /**
     * AWS Generic  Properties
     * Use public / private AWS ip's
     **/
    private boolean awsPrivateIp = false;
    private boolean useAutoScaling = false;
    private boolean elb = false;

    private boolean stickiness = false;

    private List<String> stickyPorts = new ArrayList<>(Collections.singletonList("443"));
    /**
     * AWS AutoScaling Properties
     **/
    private String autoScalingGroupId;
    private boolean ignoreInStandby = false;
    private boolean decrementDesiredCapacity = true;
    private DeployStrategyType deployStrategy = DeployStrategyType.KEEP_CAPACITY;
    private Integer maxCapacity = -1;
    private Integer minCapacity = 1;
    private final List<String> autoScalingProperties = new ArrayList<>();
    private boolean spindown = true;

    private boolean withMetrics = false;
    private MetricsConfiguration metricsConfiguration = null;

// Path: vertx-deploy-maven-plugin/src/main/java/nl/jpoint/maven/vertx/utils/DeployType.java
// public enum DeployType {
//     APPLICATION("application:"),
//     ARTIFACT("artifact:"),
//     DEFAULT("");
// 
//     private static final String LATEST_REQUEST_TAG = "latest:version";
//     private static final String SCOPE_TAG = "scope:tst";
//     private static final String EXCLUSION_TAG = "exclusions";
//     private static final String PROPERTIES_TAG = "classifier:properties";
// 
//     private final String type;
//     private final String prefix = "deploy";
// 
//     DeployType(String type) {
//         this.type = type;
//     }
// 
//     public String getLatestRequestTag() {
//         return prefix + ":" + type + LATEST_REQUEST_TAG;
//     }
// 
//     public String getScopeTag() {
//         return prefix + ":" + type + SCOPE_TAG;
//     }
// 
//     public String getExclusionTag() {
//         return prefix + ":" + type + EXCLUSION_TAG;
//     }
// 
//     public String getPropertiesTag() {
//         return prefix + ":" + type + PROPERTIES_TAG;
//     }
// }
// 
// Path: vertx-deploy-maven-plugin/src/main/java/nl/jpoint/maven/vertx/utils/deploy/strategy/DeployStrategyType.java
// public enum DeployStrategyType {
//     WHATEVER,
//     DEFAULT,
//     GUARANTEE_MINIMUM,
//     SPIN_AND_REMOVE,
//     KEEP_CAPACITY
// }


// Path: vertx-deploy-maven-plugin/src/main/java/nl/jpoint/maven/vertx/mojo/DeployConfiguration.java
import nl.jpoint.maven.vertx.utils.DeployType;
import nl.jpoint.maven.vertx.utils.deploy.strategy.DeployStrategyType;
import org.apache.maven.model.Exclusion;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

package nl.jpoint.maven.vertx.mojo;



public class DeployConfiguration {

    /**
     * The maven project version as String (groupId:artifactId:version)
     */
    private String projectVersion;
    /**
     * The configuration target id
     **/
    private String target;
    /**
     * List of hosts to deploy to
     **/
    private final List<String> hosts = new ArrayList<>();
    /**
     * The port where the agent is listening on
     */
    private int port = 6789;

    /**
     * Enable / disable deploy of config objects
     **/
    private boolean deployConfig = true;
    /**
     * List of artifacts to exclude
     **/
    private List<Exclusion> exclusions = new ArrayList<>();
    /**
     * Deploy artifacts in test scope
     **/
    private boolean testScope = false;
    /**
     * restart all modules on host
     **/
    private boolean restart = false;

    /**
     * Allow deploy of snapshots
     **/
    private boolean deploySnapshots = false;

    /**
     * AWS Generic  Properties
     * Use public / private AWS ip's
     **/
    private boolean awsPrivateIp = false;
    private boolean useAutoScaling = false;
    private boolean elb = false;

    private boolean stickiness = false;

    private List<String> stickyPorts = new ArrayList<>(Collections.singletonList("443"));
    /**
     * AWS AutoScaling Properties
     **/
    private String autoScalingGroupId;
    private boolean ignoreInStandby = false;
    private boolean decrementDesiredCapacity = true;
    private DeployStrategyType deployStrategy = DeployStrategyType.KEEP_CAPACITY;
    private Integer maxCapacity = -1;
    private Integer minCapacity = 1;
    private final List<String> autoScalingProperties = new ArrayList<>();
    private boolean spindown = true;

    private boolean withMetrics = false;
    private MetricsConfiguration metricsConfiguration = null;

    private DeployType deployType = DeployType.DEFAULT;