package keywhiz.api.automation.v2; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableSet; import javax.annotation.Nullable; import static com.google.common.base.Strings.nullToEmpty; /** * Model for request to create a new keywhiz client. * * Note: renamed from CreateClientRequest because swagger docs do not handle class name collisions. */ @AutoValue public abstract class CreateClientRequestV2 { CreateClientRequestV2() {} // prevent sub-classing public static Builder builder() { return new AutoValue_CreateClientRequestV2.Builder() .groups() .description(""); } @AutoValue.Builder public abstract static class Builder { // intended to be package-private abstract Builder groups(ImmutableSet<String> groups); public abstract Builder description(String description); public abstract Builder name(String name); abstract CreateClientRequestV2 autoBuild(); public Builder groups(String... groups) { return groups(ImmutableSet.copyOf(groups)); } public CreateClientRequestV2 build() { CreateClientRequestV2 request = autoBuild(); if (request.name().isEmpty()) { throw new IllegalStateException("name is empty"); } return request; } } /** * Static factory method used by Jackson for deserialization */ @SuppressWarnings("unused") @JsonCreator public static CreateClientRequestV2 fromParts( @JsonProperty("name") String name, @JsonProperty("groups") Iterable<String> groups, @JsonProperty("description") @Nullable String description) { return builder() .name(name) .groups(ImmutableSet.copyOf(groups)) .description(nullToEmpty(description)) .build(); } @JsonProperty("name") public abstract String name(); @JsonProperty("groups") public abstract ImmutableSet<String> groups(); @JsonProperty("description") public abstract String description(); }