package com.hubspot.blazar.base;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.MoreObjects;
import com.google.common.base.Optional;
public class BuildStep {
private final Optional<String> name;
private final Optional<String> description;
private final List<BuildCommand> commands;
private final boolean activeByDefault;
@JsonCreator
public BuildStep(@JsonProperty("name") Optional<String> name,
@JsonProperty("description") Optional<String> description,
@JsonProperty("commands") List<BuildCommand> commands,
@JsonProperty("activeByDefault") Optional<Boolean> activeByDefault) {
this.name = MoreObjects.firstNonNull(name, Optional.<String>absent());
this.description = MoreObjects.firstNonNull(description, Optional.<String>absent());
this.commands = MoreObjects.firstNonNull(commands, Collections.<BuildCommand>emptyList());
this.activeByDefault = MoreObjects.firstNonNull(activeByDefault, Optional.<Boolean>absent()).or(true);
}
public Optional<String> getName() {
return name;
}
public Optional<String> getDescription() {
return description;
}
public List<BuildCommand> getCommands() {
return commands;
}
public boolean isActiveByDefault() {
return activeByDefault;
}
@JsonCreator
public static BuildStep fromString(String command) {
return new BuildStep(
Optional.absent(),
Optional.absent(),
Collections.singletonList(BuildCommand.fromString(command)),
Optional.absent()
);
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
BuildStep step = (BuildStep) o;
return activeByDefault == step.activeByDefault &&
Objects.equals(name, step.name) &&
Objects.equals(description, step.description) &&
Objects.equals(commands, step.commands);
}
@Override
public int hashCode() {
return Objects.hash(name, description, commands, activeByDefault);
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("name", name)
.add("description", description)
.add("commands", commands)
.add("activeByDefault", activeByDefault)
.toString();
}
}