package com.hubspot.baragon.models;
import java.util.Collections;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.MoreObjects;
import com.google.common.base.Optional;
@JsonIgnoreProperties( ignoreUnknown = true )
public class BaragonGroup {
private final String name;
@Deprecated
private Optional<String> domain;
private Set<TrafficSource> trafficSources;
@Deprecated
private Set<String> sources;
private Optional<String> defaultDomain;
private Set<String> domains;
@JsonCreator
public BaragonGroup(@JsonProperty("name") String name,
@JsonProperty("domain") Optional<String> domain,
@JsonProperty("trafficSources") Set<TrafficSource> trafficSources,
@JsonProperty("sources") Set<String> sources,
@JsonProperty("defaultDomain") Optional<String> defaultDomain,
@JsonProperty("domains") Set<String> domains) {
this.name = name;
this.domain = domain;
this.defaultDomain = defaultDomain;
this.domains = MoreObjects.firstNonNull(domains, Collections.<String>emptySet());
this.sources = Collections.emptySet();
if (trafficSources == null && sources != null) {
this.trafficSources = sources.stream()
.map(source -> new TrafficSource(source, TrafficSourceType.CLASSIC))
.collect(Collectors.<TrafficSource>toSet());
} else {
this.trafficSources = MoreObjects.<Set<TrafficSource>>firstNonNull(trafficSources, Collections.<TrafficSource>emptySet());
}
}
public String getName() {
return name;
}
@Deprecated
public Optional<String> getDomain() {
return getDefaultDomain();
}
@Deprecated
public void setDomain(Optional<String> domain) {
this.domain = domain;
}
@Deprecated
public Set<String> getSources() {
return Collections.emptySet();
}
@Deprecated
public void setSources(Set<String> sources) { }
public Set<TrafficSource> getTrafficSources() {
return trafficSources;
}
public void setTrafficSources(Set<TrafficSource> sources) {
this.trafficSources = sources;
}
public void removeTrafficSource(TrafficSource trafficSource) {
this.trafficSources.remove(trafficSource);
}
public void addTrafficSource(TrafficSource trafficSource) {
this.trafficSources.add(trafficSource);
}
public Optional<String> getDefaultDomain() {
return defaultDomain.or(domain);
}
public void setDefaultDomain(Optional<String> defaultDomain) {
this.defaultDomain = defaultDomain;
}
public Set<String> getDomains() {
return domains;
}
public void setDomains(Set<String> domains) {
this.domains = domains;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof BaragonGroup) {
final BaragonGroup that = (BaragonGroup) obj;
return Objects.equals(this.name, that.name) &&
Objects.equals(this.domain, that.domain) &&
Objects.equals(this.trafficSources, that.trafficSources) &&
Objects.equals(this.sources, that.sources) &&
Objects.equals(this.defaultDomain, that.defaultDomain) &&
Objects.equals(this.domains, that.domains);
}
return false;
}
@Override
public int hashCode() {
return Objects.hash(name, domain, trafficSources, sources, defaultDomain, domains);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("name", name)
.add("domain", domain)
.add("trafficSources", trafficSources)
.add("sources", sources)
.add("defaultDomain", defaultDomain)
.add("domains", domains)
.toString();
}
}