// Path: vertx-deploy-maven-plugin/src/main/java/nl/jpoint/maven/vertx/utils/Ec2Instance.java
// public class Ec2Instance {
//     private final String instanceId;
//     private final String publicIp;
//     private final String privateIp;
//     private AwsState asState = AwsState.UNKNOWN;
//     private AwsState elbState = AwsState.UNKNOWN;
// 
//     private Ec2Instance(final String instanceId, final String publicIp, final String privateIp) {
//         this.instanceId = instanceId;
//         this.publicIp = publicIp;
//         this.privateIp = privateIp;
//     }
// 
//     public String getInstanceId() {
//         return instanceId;
//     }
// 
//     public String getPublicIp() {
//         return publicIp;
//     }
// 
//     public String getPrivateIp() {
//         return privateIp;
//     }
// 
//     public AwsState getElbState() {
//         return elbState;
//     }
// 
//     public AwsState getAsState() {
//         return this.asState;
//     }
// 
//     public void updateState(AwsState awsState) {
//         if (elbState.ordinal() < awsState.ordinal()) {
//             elbState = awsState;
//         }
//     }
// 
//     public void updateAsState(AwsState awsState) {
//         asState = awsState;
//     }
// 
//     public boolean isReachable(boolean usePrivate, int port, Log log) {
//         if (usePrivate ? privateIp == null : publicIp == null) {
//             log.error("Instance has no IP, probably still booting");
//             return false;
//         }
//         return InstanceUtils.isReachable(usePrivate ? privateIp : publicIp, port, instanceId, log);
//     }
// 
//     public static class Builder {
//         private String instanceId;
//         private String publicIp;
//         private String privateIp;
// 
//         public Builder withInstanceId(String instanceId) {
//             this.instanceId = instanceId;
//             return this;
//         }
// 
//         public Builder withPublicIp(String ip) {
//             this.publicIp = ip;
//             return this;
//         }
// 
//         public Builder withPrivateIp(String privateIp) {
//             this.privateIp = privateIp;
//             return this;
//         }
// 
//         public Ec2Instance build() {
//             return new Ec2Instance(instanceId, publicIp, privateIp);
//         }
//     }
// }


import com.amazonaws.services.autoscaling.model.AutoScalingGroup;
import nl.jpoint.maven.vertx.utils.Ec2Instance;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import java.util.List;
package nl.jpoint.maven.vertx.service.autoscaling;



public interface AutoScalingPrePostHandler {
    void preDeploy(List<Ec2Instance> instances, AutoScalingGroup asGroup) throws MojoFailureException, MojoExecutionException;

    void postDeploy(AutoScalingGroup asGroup, Integer originalDesiredCapacity);

// Path: vertx-deploy-maven-plugin/src/main/java/nl/jpoint/maven/vertx/utils/Ec2Instance.java
// public class Ec2Instance {
//     private final String instanceId;
//     private final String publicIp;
//     private final String privateIp;
//     private AwsState asState = AwsState.UNKNOWN;
//     private AwsState elbState = AwsState.UNKNOWN;
// 
//     private Ec2Instance(final String instanceId, final String publicIp, final String privateIp) {
//         this.instanceId = instanceId;
//         this.publicIp = publicIp;
//         this.privateIp = privateIp;
//     }
// 
//     public String getInstanceId() {
//         return instanceId;
//     }
// 
//     public String getPublicIp() {
//         return publicIp;
//     }
// 
//     public String getPrivateIp() {
//         return privateIp;
//     }
// 
//     public AwsState getElbState() {
//         return elbState;
//     }
// 
//     public AwsState getAsState() {
//         return this.asState;
//     }
// 
//     public void updateState(AwsState awsState) {
//         if (elbState.ordinal() < awsState.ordinal()) {
//             elbState = awsState;
//         }
//     }
// 
//     public void updateAsState(AwsState awsState) {
//         asState = awsState;
//     }
// 
//     public boolean isReachable(boolean usePrivate, int port, Log log) {
//         if (usePrivate ? privateIp == null : publicIp == null) {
//             log.error("Instance has no IP, probably still booting");
//             return false;
//         }
//         return InstanceUtils.isReachable(usePrivate ? privateIp : publicIp, port, instanceId, log);
//     }
// 
//     public static class Builder {
//         private String instanceId;
//         private String publicIp;
//         private String privateIp;
// 
//         public Builder withInstanceId(String instanceId) {
//             this.instanceId = instanceId;
//             return this;
//         }
// 
//         public Builder withPublicIp(String ip) {
//             this.publicIp = ip;
//             return this;
//         }
// 
//         public Builder withPrivateIp(String privateIp) {
//             this.privateIp = privateIp;
//             return this;
//         }
// 
//         public Ec2Instance build() {
//             return new Ec2Instance(instanceId, publicIp, privateIp);
//         }
//     }
// }


// Path: vertx-deploy-maven-plugin/src/main/java/nl/jpoint/maven/vertx/service/autoscaling/AutoScalingPrePostHandler.java
import com.amazonaws.services.autoscaling.model.AutoScalingGroup;
import nl.jpoint.maven.vertx.utils.Ec2Instance;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import java.util.List;

package nl.jpoint.maven.vertx.service.autoscaling;



public interface AutoScalingPrePostHandler {
    void preDeploy(List<Ec2Instance> instances, AutoScalingGroup asGroup) throws MojoFailureException, MojoExecutionException;

    void postDeploy(AutoScalingGroup asGroup, Integer originalDesiredCapacity);

    void handleError(AutoScalingGroup asGroup);