package net.thucydides.core.reports.html;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import net.thucydides.core.ThucydidesSystemProperty;
import net.thucydides.core.util.EnvironmentVariables;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
public class TagFilter {
private final EnvironmentVariables environmentVariables;
public TagFilter(EnvironmentVariables environmentVariables) {
this.environmentVariables = environmentVariables;
}
public List<String> filteredTagTypes(List<String> tagTypes) {
List<String> filteredTags = Lists.newArrayList(tagTypes);
List<String> displayedTags = includedTagTypes();
if (!displayedTags.isEmpty()) {
filteredTags = onlyKeepAllowedTypes(filteredTags, displayedTags);
}
List<String> excludedTags = excludedTagTypes();
if (!excludedTags.isEmpty()) {
filteredTags = removeUnwantedTags(filteredTags, excludedTags);
}
return filteredTags;
}
private List<String> onlyKeepAllowedTypes(List<String> tags, List<String> displayedTags) {
List<String> allowedTags = Lists.newArrayList();
for (String tag : tags) {
if (displayedTags.contains(tag.toLowerCase())) {
allowedTags.add(tag);
}
}
return allowedTags;
}
private List<String> removeUnwantedTags(List<String> tags, List<String> unwantedTags) {
for (String tag : unwantedTags) {
if (tags.contains(tag.toLowerCase())) {
tags.remove(tag.toLowerCase());
}
if (tags.contains(tag.toUpperCase())) {
tags.remove(tag.toUpperCase());
}
}
return tags;
}
private List<String> includedTagTypes() {
return asLowercaseList(ThucydidesSystemProperty.DASHBOARD_TAG_LIST.from(environmentVariables));
}
private List<String> excludedTagTypes() {
return asLowercaseList(ThucydidesSystemProperty.DASHBOARD_EXCLUDED_TAG_LIST.from(environmentVariables));
}
private List<String> asLowercaseList(String displayTags) {
if (StringUtils.isNotEmpty(displayTags)) {
return ImmutableList.copyOf(Splitter.on(",").omitEmptyStrings().trimResults().split(displayTags.toLowerCase()));
} else {
return Lists.newArrayList();
}
}
}