package com.hubspot.blazar.base.branch;
import java.util.List;
import java.util.Set;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.hubspot.blazar.base.GitInfo;
import com.hubspot.blazar.base.MalformedFile;
import com.hubspot.blazar.base.ModuleState;
import com.hubspot.blazar.base.RepositoryBuild;
public class BranchStatus {
private final List<RepositoryBuild> queuedBuilds;
private final Optional<RepositoryBuild> activeBuild;
private final Set<ModuleState> moduleStates;
private final Set<GitInfo> otherBranches;
private final Set<MalformedFile> malformedFiles;
private final GitInfo branch;
@JsonCreator
public BranchStatus(@JsonProperty("queuedBuilds") List<RepositoryBuild> queuedBuilds,
@JsonProperty("activeBuild") Optional<RepositoryBuild> activeBuild,
@JsonProperty("moduleStates") Set<ModuleState> moduleStates,
@JsonProperty("otherBranches") Set<GitInfo> otherBranches,
@JsonProperty("malformedFiles") Set<MalformedFile> malformedFiles,
@JsonProperty("branch") GitInfo branch) {
this.queuedBuilds = queuedBuilds;
this.activeBuild = activeBuild;
this.moduleStates = moduleStates;
this.otherBranches = otherBranches;
this.malformedFiles = malformedFiles;
this.branch = branch;
}
public List<RepositoryBuild> getQueuedBuilds() {
return queuedBuilds;
}
public Optional<RepositoryBuild> getActiveBuild() {
return activeBuild;
}
public Set<ModuleState> getModuleStates() {
return moduleStates;
}
public Set<GitInfo> getOtherBranches() {
return otherBranches;
}
public Set<MalformedFile> getMalformedFiles() {
return malformedFiles;
}
public GitInfo getBranch() {
return branch;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
BranchStatus that = (BranchStatus) o;
return Objects.equal(queuedBuilds, that.queuedBuilds) &&
Objects.equal(activeBuild, that.activeBuild) &&
Objects.equal(moduleStates, that.moduleStates) &&
Objects.equal(otherBranches, that.otherBranches) &&
Objects.equal(malformedFiles, that.malformedFiles) &&
Objects.equal(branch, that.branch);
}
@Override
public int hashCode() {
return Objects.hashCode(queuedBuilds, activeBuild, moduleStates, otherBranches, malformedFiles, branch);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("queuedBuilds", queuedBuilds)
.add("activeBuild", activeBuild)
.add("moduleStates", moduleStates)
.add("otherBranches", otherBranches)
.add("malformedFiles", malformedFiles)
.add("branch", branch)
.toString();
}
public class Builder {
private List<RepositoryBuild> queuedBuilds = ImmutableList.of();
private Optional<RepositoryBuild> activeBuild = Optional.absent();
private Set<ModuleState> moduleStates = ImmutableSet.of();
private Set<GitInfo> otherBranches = ImmutableSet.of();
private Set<MalformedFile> malformedFiles = ImmutableSet.of();
private GitInfo branch;
public Builder(GitInfo branch) {
this.branch = branch;
}
public Builder setQueuedBuilds(List<RepositoryBuild> queuedBuilds) {
this.queuedBuilds = queuedBuilds;
return this;
}
public Builder setActiveBuild(Optional<RepositoryBuild> activeBuild) {
this.activeBuild = activeBuild;
return this;
}
public Builder setModuleStates(Set<ModuleState> moduleStates) {
this.moduleStates = moduleStates;
return this;
}
public Builder setOtherBranches(Set<GitInfo> otherBranches) {
this.otherBranches = otherBranches;
return this;
}
public Builder setMalformedFiles(Set<MalformedFile> malformedFiles) {
this.malformedFiles = malformedFiles;
return this;
}
public Builder setBranch(GitInfo branch) {
this.branch = branch;
return this;
}
public BranchStatus build() {
return new BranchStatus(queuedBuilds, activeBuild, moduleStates, otherBranches, malformedFiles, branch);
}
}
}