class AzureProbeMonitorConfiguration implements ConfigurationValidation {

    public static AzureProbeMonitorConfiguration create(MonitorConfiguration monitorConfiguration)
        throws ConfigurationException {
        Preconditions.checkNotNull(monitorConfiguration,
            "monitorConfiguration cannot be null");
        try {
            ObjectMapper mapper = new ObjectMapper()
                .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
            AzureProbeMonitorConfiguration configuration = mapper.convertValue(
                monitorConfiguration.getSettings(),
                AzureProbeMonitorConfiguration.class);
            return configuration;
        } catch (NullPointerException | IllegalArgumentException e) {
            throw new ConfigurationException("Error parsing settings", e);
        }
    }

    @JsonCreator public  AzureProbeMonitorConfiguration(@JsonProperty("azure")AzureConfiguration azureConfiguration,
                                          @JsonProperty("nvas")List<NvaConfiguration> nvaConfigurations,
                                          @JsonProperty("routeTables")List<String> routeTables,
                                          @JsonProperty("publicIpAddresses")List<NamedResourceId> publicIpAddresses,
                                          @JsonProperty("numberOfFailuresThreshold")Integer numberOfFailuresThreshold,
                                          @JsonProperty("probeConnectTimeout")Integer probeConnectTimeout,
                                          @JsonProperty("probePollingInterval")Integer probePollingInterval);

}