package com.hubspot.singularity; import java.util.Collections; import java.util.List; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Optional; public class SingularityDeployResult { private final DeployState deployState; private final Optional<SingularityLoadBalancerUpdate> lbUpdate; private final Optional<String> message; private final List<SingularityDeployFailure> deployFailures; private final long timestamp; public SingularityDeployResult(DeployState deployState) { this(deployState, Optional.<String> absent(), Optional.<SingularityLoadBalancerUpdate>absent(), Collections.<SingularityDeployFailure> emptyList(), System.currentTimeMillis()); } public SingularityDeployResult(DeployState deployState, String message) { this(deployState, Optional.of(message), Optional.<SingularityLoadBalancerUpdate>absent(), Collections.<SingularityDeployFailure> emptyList(), System.currentTimeMillis()); } public SingularityDeployResult(DeployState deployState, Optional<String> message, Optional<SingularityLoadBalancerUpdate> lbUpdate) { this(deployState, message, lbUpdate, Collections.<SingularityDeployFailure> emptyList(), System.currentTimeMillis()); } public SingularityDeployResult(DeployState deployState, SingularityLoadBalancerUpdate lbUpdate, List<SingularityDeployFailure> deployFailures) { this(deployState, Optional.of(String.format("Load balancer had state %s%s", lbUpdate.getLoadBalancerState(), lbUpdate.getMessage().isPresent() && lbUpdate.getMessage().get().length() > 0 ? String.format(" (%s)", lbUpdate.getMessage().get()) : "")), Optional.of(lbUpdate), deployFailures, System.currentTimeMillis()); } @JsonCreator public SingularityDeployResult(@JsonProperty("deployState") DeployState deployState, @JsonProperty("message") Optional<String> message, @JsonProperty("lbUpdate") Optional<SingularityLoadBalancerUpdate> lbUpdate, @JsonProperty("deployFailures") List<SingularityDeployFailure> deployFailures, @JsonProperty("timestamp") long timestamp) { this.deployState = deployState; this.lbUpdate = lbUpdate; this.message = message; this.deployFailures = deployFailures != null ? deployFailures : Collections.<SingularityDeployFailure> emptyList(); this.timestamp = timestamp; } public Optional<SingularityLoadBalancerUpdate> getLbUpdate() { return lbUpdate; } public Optional<String> getMessage() { return message; } public DeployState getDeployState() { return deployState; } public List<SingularityDeployFailure> getDeployFailures() { return deployFailures; } public long getTimestamp() { return timestamp; } @Override public String toString() { return "SingularityDeployResult{" + "deployState=" + deployState + ", lbUpdate=" + lbUpdate + ", message=" + message + ", deployFailures=" + deployFailures + ", timestamp=" + timestamp + '}'; } }