// Path: breakerbox-azure/src/main/java/com/yammer/breakerbox/azure/AzureTableConfiguration.java
// public class AzureTableConfiguration {
// 
//     @NotNull @Valid
//     private final StorageCredentialsAccountAndKey storageCredentialsAccountAndKey;
//     @NotNull @Valid
//     private final Duration timeout;
//     @NotNull @Valid
//     private final Duration retryInterval;
//     @Valid
//     private final int retryAttempts;
// 
//     @JsonCreator
//     public AzureTableConfiguration(@JsonProperty("accountName") String accountName,
//                                    @JsonProperty("accountKey") String accountKey,
//                                    @JsonProperty("timeout")Duration timeout,
//                                    @JsonProperty("retryInterval") Duration retryInterval,
//                                    @JsonProperty("retryAttempts") int retryAttempts) {
//         this.retryInterval = checkNotNull(retryInterval, "retryInterval cannot be null");
//         this.retryAttempts = retryAttempts;
//         this.timeout = checkNotNull(timeout, "timeout cannot be null");
//         this.storageCredentialsAccountAndKey =
//                 new StorageCredentialsAccountAndKey(
//                         checkNotNull(accountName, "accountName cannot be null"),
//                         checkNotNull(accountKey, "accountKey cannot be null"));
//     }
// 
//     @JsonIgnore
//     public StorageCredentialsAccountAndKey getStorageCredentialsAccountAndKey() {
//         return storageCredentialsAccountAndKey;
//     }
// 
//     public Duration getRetryInterval() {
//         return retryInterval;
//     }
// 
//     public int getRetryAttempts() {
//         return retryAttempts;
//     }
// 
//     public Duration getTimeout() {
//         return timeout;
//     }
// }
// 
// Path: breakerbox-turbine/src/main/java/com/yammer/breakerbox/turbine/config/MarathonClientConfiguration.java
// public class MarathonClientConfiguration {
//     @NotEmpty
//     private String marathonApiUrl;
//     @NotEmpty
//     private String marathonAppNameSpace;
//     @NotEmpty
//     private Integer marathonAppPort;
//     // this is the custom clustername that you can have for the services cluster
//     @NotEmpty
//     private String cluster;
// 
//     public String getCluster() { return cluster; }
// 
//     public String getMarathonApiUrl() {
//         return marathonApiUrl;
//     }
// 
//     public String getMarathonAppNameSpace() {
//         return marathonAppNameSpace;
//     }
// 
//     public Integer getMarathonAppPort() {
//         return marathonAppPort;
//     }
// 
// 
//     public void setMarathonApiUrl(String marathonApiUrl) {
//         this.marathonApiUrl = marathonApiUrl;
//     }
// 
//     public void setMarathonAppNameSpace(String marathonAppNameSpace) {
//         this.marathonAppNameSpace = marathonAppNameSpace;
//     }
// 
//     public void setMarathonAppPort(Integer marathonAppPort) {
//         this.marathonAppPort = marathonAppPort;
//     }
// 
//     public void setCluster(String cluster) {
//         this.cluster = cluster;
//     }
// }
// 
// Path: breakerbox-turbine/src/main/java/com/yammer/breakerbox/turbine/config/RancherInstanceConfiguration.java
// public class RancherInstanceConfiguration {
//     @NotEmpty
//     private String serviceApiUrl;
//     @NotEmpty
//     private String accessKey;
//     @NotEmpty
//     private String secretKey;
//     @Nullable
//     private Map<String, String> parameters;
// 
//     public Map<String, String> getParameters() {
//         return parameters;
//     }
// 
//     public String getServiceApiUrl() {
//         return serviceApiUrl;
//     }
// 
//     public String getAccessKey() {
//         return accessKey;
//     }
// 
//     public String getSecretKey() {
//         return secretKey;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//       if (this == o) return true;
//       if (o == null || getClass() != o.getClass()) return false;
//       RancherInstanceConfiguration that = (RancherInstanceConfiguration) o;
//       return serviceApiUrl.equals(that.serviceApiUrl)
//               && accessKey.equals(that.accessKey)
//               && secretKey.equals(that.secretKey)
//               && null != parameters ? parameters.equals(that.parameters) : null == that.parameters;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = serviceApiUrl.hashCode();
//         result = 31 * result + accessKey.hashCode();
//         result = 31 * result + secretKey.hashCode();
//         if(null != parameters) {
//             result = 31 * result + parameters.hashCode();
//         }
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "RancherInstanceConfiguration{" +
//                 "serviceApiUrl='" + serviceApiUrl + '\'' +
//                 ", accessKey='" + accessKey + '\'' +
//                 ", secretKey='" + secretKey + '\'' +
//                 ", parameters='" + getQueryString() + '\'' +
//                 '}';
//     }
// 
//     public String getQueryString() {
//         return null!=parameters ? parameters.keySet().stream().map(s -> s +"="+ parameters.get(s)).reduce((s, s2) -> s+"&"+s2).orElse("") : "";
//     }
// }


import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.net.HostAndPort;
import com.yammer.breakerbox.azure.AzureTableConfiguration;
import com.yammer.breakerbox.jdbi.JdbiConfiguration;
import com.yammer.breakerbox.turbine.config.MarathonClientConfiguration;
import com.yammer.breakerbox.turbine.config.RancherInstanceConfiguration;
import com.yammer.dropwizard.authenticator.LdapConfiguration;
import com.yammer.tenacity.core.config.BreakerboxConfiguration;
import com.yammer.tenacity.core.config.TenacityConfiguration;
import io.dropwizard.Configuration;
import io.dropwizard.client.JerseyClientConfiguration;
import org.hibernate.validator.valuehandling.UnwrapValidatedValue;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
package com.yammer.breakerbox.service.config;



public class BreakerboxServiceConfiguration extends Configuration {
    @NotNull @UnwrapValidatedValue(false) @Valid
// Path: breakerbox-azure/src/main/java/com/yammer/breakerbox/azure/AzureTableConfiguration.java
// public class AzureTableConfiguration {
// 
//     @NotNull @Valid
//     private final StorageCredentialsAccountAndKey storageCredentialsAccountAndKey;
//     @NotNull @Valid
//     private final Duration timeout;
//     @NotNull @Valid
//     private final Duration retryInterval;
//     @Valid
//     private final int retryAttempts;
// 
//     @JsonCreator
//     public AzureTableConfiguration(@JsonProperty("accountName") String accountName,
//                                    @JsonProperty("accountKey") String accountKey,
//                                    @JsonProperty("timeout")Duration timeout,
//                                    @JsonProperty("retryInterval") Duration retryInterval,
//                                    @JsonProperty("retryAttempts") int retryAttempts) {
//         this.retryInterval = checkNotNull(retryInterval, "retryInterval cannot be null");
//         this.retryAttempts = retryAttempts;
//         this.timeout = checkNotNull(timeout, "timeout cannot be null");
//         this.storageCredentialsAccountAndKey =
//                 new StorageCredentialsAccountAndKey(
//                         checkNotNull(accountName, "accountName cannot be null"),
//                         checkNotNull(accountKey, "accountKey cannot be null"));
//     }
// 
//     @JsonIgnore
//     public StorageCredentialsAccountAndKey getStorageCredentialsAccountAndKey() {
//         return storageCredentialsAccountAndKey;
//     }
// 
//     public Duration getRetryInterval() {
//         return retryInterval;
//     }
// 
//     public int getRetryAttempts() {
//         return retryAttempts;
//     }
// 
//     public Duration getTimeout() {
//         return timeout;
//     }
// }
// 
// Path: breakerbox-turbine/src/main/java/com/yammer/breakerbox/turbine/config/MarathonClientConfiguration.java
// public class MarathonClientConfiguration {
//     @NotEmpty
//     private String marathonApiUrl;
//     @NotEmpty
//     private String marathonAppNameSpace;
//     @NotEmpty
//     private Integer marathonAppPort;
//     // this is the custom clustername that you can have for the services cluster
//     @NotEmpty
//     private String cluster;
// 
//     public String getCluster() { return cluster; }
// 
//     public String getMarathonApiUrl() {
//         return marathonApiUrl;
//     }
// 
//     public String getMarathonAppNameSpace() {
//         return marathonAppNameSpace;
//     }
// 
//     public Integer getMarathonAppPort() {
//         return marathonAppPort;
//     }
// 
// 
//     public void setMarathonApiUrl(String marathonApiUrl) {
//         this.marathonApiUrl = marathonApiUrl;
//     }
// 
//     public void setMarathonAppNameSpace(String marathonAppNameSpace) {
//         this.marathonAppNameSpace = marathonAppNameSpace;
//     }
// 
//     public void setMarathonAppPort(Integer marathonAppPort) {
//         this.marathonAppPort = marathonAppPort;
//     }
// 
//     public void setCluster(String cluster) {
//         this.cluster = cluster;
//     }
// }
// 
// Path: breakerbox-turbine/src/main/java/com/yammer/breakerbox/turbine/config/RancherInstanceConfiguration.java
// public class RancherInstanceConfiguration {
//     @NotEmpty
//     private String serviceApiUrl;
//     @NotEmpty
//     private String accessKey;
//     @NotEmpty
//     private String secretKey;
//     @Nullable
//     private Map<String, String> parameters;
// 
//     public Map<String, String> getParameters() {
//         return parameters;
//     }
// 
//     public String getServiceApiUrl() {
//         return serviceApiUrl;
//     }
// 
//     public String getAccessKey() {
//         return accessKey;
//     }
// 
//     public String getSecretKey() {
//         return secretKey;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//       if (this == o) return true;
//       if (o == null || getClass() != o.getClass()) return false;
//       RancherInstanceConfiguration that = (RancherInstanceConfiguration) o;
//       return serviceApiUrl.equals(that.serviceApiUrl)
//               && accessKey.equals(that.accessKey)
//               && secretKey.equals(that.secretKey)
//               && null != parameters ? parameters.equals(that.parameters) : null == that.parameters;
//     }
// 
//     @Override
//     public int hashCode() {
//         int result = serviceApiUrl.hashCode();
//         result = 31 * result + accessKey.hashCode();
//         result = 31 * result + secretKey.hashCode();
//         if(null != parameters) {
//             result = 31 * result + parameters.hashCode();
//         }
//         return result;
//     }
// 
//     @Override
//     public String toString() {
//         return "RancherInstanceConfiguration{" +
//                 "serviceApiUrl='" + serviceApiUrl + '\'' +
//                 ", accessKey='" + accessKey + '\'' +
//                 ", secretKey='" + secretKey + '\'' +
//                 ", parameters='" + getQueryString() + '\'' +
//                 '}';
//     }
// 
//     public String getQueryString() {
//         return null!=parameters ? parameters.keySet().stream().map(s -> s +"="+ parameters.get(s)).reduce((s, s2) -> s+"&"+s2).orElse("") : "";
//     }
// }


// Path: breakerbox-service/src/main/java/com/yammer/breakerbox/service/config/BreakerboxServiceConfiguration.java
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.net.HostAndPort;
import com.yammer.breakerbox.azure.AzureTableConfiguration;
import com.yammer.breakerbox.jdbi.JdbiConfiguration;
import com.yammer.breakerbox.turbine.config.MarathonClientConfiguration;
import com.yammer.breakerbox.turbine.config.RancherInstanceConfiguration;
import com.yammer.dropwizard.authenticator.LdapConfiguration;
import com.yammer.tenacity.core.config.BreakerboxConfiguration;
import com.yammer.tenacity.core.config.TenacityConfiguration;
import io.dropwizard.Configuration;
import io.dropwizard.client.JerseyClientConfiguration;
import org.hibernate.validator.valuehandling.UnwrapValidatedValue;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

package com.yammer.breakerbox.service.config;



public class BreakerboxServiceConfiguration extends Configuration {
    @NotNull @UnwrapValidatedValue(false) @Valid
    private final Optional<AzureTableConfiguration> azure;