package com.airbnb.airpal;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.airlift.units.DataSize;
import io.dropwizard.Configuration;
import io.dropwizard.db.DataSourceFactory;
import io.dropwizard.flyway.FlywayFactory;
import io.dropwizard.util.Duration;
import lombok.Getter;
import lombok.Setter;
import org.secnod.dropwizard.shiro.ShiroConfiguration;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;

import java.net.URI;

public class AirpalConfiguration extends Configuration
{
    @Getter
    @Setter
    @JsonProperty
    private URI prestoCoordinator = null;

    @Getter
    @Setter
    @JsonProperty
    @NotNull
    private String prestoUser = "andykram";

    @Getter
    @Setter
    @JsonProperty
    @NotNull
    private String prestoSource = "airpal";

    @Getter
    @Setter
    @JsonProperty
    @NotNull
    private String prestoCatalog = "hive";

    @Getter
    @Setter
    @JsonProperty
    @NotNull
    private String prestoSchema = "default";

    @Getter
    @Setter
    @JsonProperty
    @NotNull
    private boolean prestoDebug = false;

    @Getter
    @Setter
    @JsonProperty
    @NotNull
    private Duration usageWindow = Duration.hours(6);

    @Getter
    @Setter
    @JsonProperty
    private String s3SecretKey;

    @Getter
    @Setter
    @JsonProperty
    private String s3AccessKey;

    @Getter
    @Setter
    @JsonProperty
    private String s3Bucket;

    @Getter
    @Setter
    @JsonProperty
    private String s3EncryptionMaterialsProvider;

    @Getter
    @Setter
    @JsonProperty
    private String createTableDestinationSchema = "airpal";

    @Getter
    @Setter
    private DataSize bufferSize = DataSize.valueOf("512kB");

    @Getter
    @Setter
    @JsonProperty
    @NotNull
    private DataSize maxOutputSize = DataSize.valueOf("1GB");

    @Getter
    @Setter
    @Valid
    @JsonProperty
    @NotNull
    private DataSourceFactory dataSourceFactory = new DataSourceFactory();

    @Getter
    @Setter
    @Valid
    @JsonProperty
    @NotNull
    private FlywayFactory flywayFactory = new FlywayFactory();

    @Getter
    @Setter
    @Valid
    @JsonProperty
    @NotNull
    private ShiroConfiguration shiro;

    @Getter
    @Setter
    @Valid
    @JsonProperty
    @NotNull
    private boolean useS3 = false;

    @Getter
    @Setter
    @Valid
    @JsonProperty
    @NotNull
    private boolean compressedOutput = false;
}

package com.airbnb.airpal;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.airlift.units.DataSize;
import io.dropwizard.Configuration;
import io.dropwizard.db.DataSourceFactory;
import io.dropwizard.flyway.FlywayFactory;
import io.dropwizard.util.Duration;
import lombok.Getter;
import lombok.Setter;
import org.secnod.dropwizard.shiro.ShiroConfiguration;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;

import java.net.URI;

public class AirpalConfiguration extends Configuration
{
    @Getter
    @Setter
    @JsonProperty
    private URI prestoCoordinator = null;

    @Getter
    @Setter
    @JsonProperty
    @NotNull
    private String prestoUser = "airpalChangeMe";

    @Getter
    @Setter
    @JsonProperty
    @NotNull
    private String prestoSource = "airpal";

    @Getter
    @Setter
    @JsonProperty
    @NotNull
    private String prestoCatalog = "hive";

    @Getter
    @Setter
    @JsonProperty
    @NotNull
    private String prestoSchema = "default";

    @Getter
    @Setter
    @JsonProperty
    @NotNull
    private boolean prestoDebug = false;

    @Getter
    @Setter
    @JsonProperty
    @NotNull
    private Duration usageWindow = Duration.hours(6);

    @Getter
    @Setter
    @JsonProperty
    private String s3SecretKey;

    @Getter
    @Setter
    @JsonProperty
    private String s3AccessKey;

    @Getter
    @Setter
    @JsonProperty
    private String s3Bucket;

    @Getter
    @Setter
    @JsonProperty
    private String s3EncryptionMaterialsProvider;

    @Getter
    @Setter
    @JsonProperty
    private String createTableDestinationSchema = "airpal";

    @Getter
    @Setter
    private DataSize bufferSize = DataSize.valueOf("512kB");

    @Getter
    @Setter
    @JsonProperty
    @NotNull
    private DataSize maxOutputSize = DataSize.valueOf("1GB");

    @Getter
    @Setter
    @Valid
    @JsonProperty
    @NotNull
    private DataSourceFactory dataSourceFactory = new DataSourceFactory();

    @Getter
    @Setter
    @Valid
    @JsonProperty
    @NotNull
    private FlywayFactory flywayFactory = new FlywayFactory();

    @Getter
    @Setter
    @Valid
    @JsonProperty
    @NotNull
    private ShiroConfiguration shiro;

    @Getter
    @Setter
    @Valid
    @JsonProperty
    @NotNull
    private boolean useS3 = false;

    @Getter
    @Setter
    @Valid
    @JsonProperty
    @NotNull
    private boolean compressedOutput = false;
}

Update AirpalConfiguration.java