package tw.com.entity; import com.amazonaws.services.cloudformation.model.Stack; import com.amazonaws.services.cloudformation.model.StackStatus; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashSet; import java.util.Optional; import java.util.Set; public class StackEntry { private static final Logger logger = LoggerFactory.getLogger(StackEntry.class); private EnvironmentTag environmentTag; private Stack stack; private String project; private Optional<Integer> buildNumber = Optional.empty(); private Optional<Integer> index = Optional.empty(); private Set<Integer> updateIndex = new HashSet<>(); public StackEntry(String project, EnvironmentTag environmentTag, Stack stack) { this.environmentTag = environmentTag; this.stack = stack; this.project = project; } @Override public String toString() { return String.format("StackEntry [env=%s, project=%s, stackName=%s, buildNumber='%s', index='%s']", environmentTag.getEnv(), project, stack.getStackName(), (buildNumber.isPresent()?buildNumber.get():""), (index.isPresent()?index.get():"")); } public EnvironmentTag getEnvTag() { return environmentTag; } public Stack getStack() { return stack; } public Integer getBuildNumber() { return buildNumber.get(); } public StackEntry setBuildNumber(Integer buildNumber) { this.buildNumber = Optional.of(buildNumber); return this; } public StackEntry setIndex(int index) { this.index = Optional.of(index); return this; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((environmentTag == null) ? 0 : environmentTag.hashCode()); result = prime * result + ((stack == null) ? 0 : stack.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; StackEntry other = (StackEntry) obj; if (environmentTag == null) { if (other.environmentTag != null) return false; } else if (!environmentTag.equals(other.environmentTag)) return false; if (stack == null) { if (other.stack != null) return false; } else if (!stack.equals(other.stack)) return false; return true; } public boolean isLive() { return stack.getStackStatus().equals(StackStatus.CREATE_COMPLETE.toString()); } public String getStackName() { return stack.getStackName(); } public String getProject() { return project; } public String getBaseName() { String fullName = stack.getStackName(); String withoutProject = fullName.replace(project, ""); String withoutBuild = withoutProject; if (buildNumber.isPresent()) { withoutBuild = withoutProject.replace(buildNumber.get().toString(), ""); } String basename = withoutBuild.replace(environmentTag.getEnv(), ""); logger.debug("basename is " + basename); return basename; } public boolean hasBuildNumber() { return buildNumber.isPresent(); } public Integer getIndex() { return index.get(); } public boolean hasIndex() { return index.isPresent(); } public StackEntry setUpdateIndex(Set<Integer> updateIndex) { this.updateIndex = updateIndex; return this; } public boolean hasUpdateIndex() { return !updateIndex.isEmpty(); } public Set<Integer> getUpdateIndex() { return updateIndex; } }