package com.smartcodeltd.jenkinsci.plugins.build_monitor.model;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import javax.validation.constraints.NotNull;
import java.util.Collection;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import static java.lang.String.format;
import static org.hibernate.validator.internal.util.CollectionHelper.newArrayList;
public enum ProjectStatus {
Successful("successful"),
Failing("failing"),
Unknown("unknown"),
Claimed("claimed");
private final String value;
ProjectStatus(String value) {
this.value = value;
}
// ---- todo: extract
// todo: can I use https://github.com/serenity-bdd/serenity-web-todomvc-journey/blob/e092e3a90a280aa16b0c1458f0ac7d36fe833f52/src/main/java/net/serenitybdd/demos/todos/questions/CurrentFilter.java ?
// asEnum thingy
public static List<ProjectStatus> fromMultiple(String cssClasses) {
// todo: Java 8?
List<ProjectStatus> statuses = newArrayList();
for(String statusClass : Sets.intersection(projectStatusClasses(), setOf(split(cssClasses)))) {
statuses.add(ProjectStatus.from(statusClass));
}
return statuses;
}
public static ProjectStatus from(@NotNull String cssClass) {
for (ProjectStatus status : ProjectStatus.values()) {
if (cssClass.equalsIgnoreCase(status.value)) {
return status;
}
}
throw new IllegalArgumentException(format("'%s' is not a recognised value of the ProjectStatus enum", cssClass));
}
// todo: Java 8?
private static Set<String> projectStatusClasses() {
return setOf(stringRepresentationsOf(EnumSet.allOf(ProjectStatus.class)));
}
private static List<String> split(String spaceSeparatedItems) {
return Splitter.on(" ").splitToList(spaceSeparatedItems);
}
private static <T> Set<T> setOf(List<T> items) {
return ImmutableSet.copyOf(items);
}
private static <T> List<String> stringRepresentationsOf(Collection<T> items) {
// todo: Java 8?
List<String> values = newArrayList();
for (T item : items) {
values.add(item.toString());
}
return values;
}
@Override
public String toString() {
return value;
}
}