package net.thucydides.core.reports;
import com.google.common.base.Optional;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import com.google.inject.Inject;
import net.thucydides.core.ThucydidesSystemProperty;
import net.thucydides.core.util.EnvironmentVariables;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
import java.util.List;
public class FormatConfiguration {
private final static Logger LOGGER = LoggerFactory.getLogger(FormatConfiguration.class);
public static String DEFAULT_FORMATS = "json,xml,html";
private final List<OutcomeFormat> formats;
@Inject
public FormatConfiguration(EnvironmentVariables environmentVariables) {
List<String> formatNames = Splitter.on(",").trimResults()
.splitToList(ThucydidesSystemProperty.OUTPUT_FORMATS
.from(environmentVariables, DEFAULT_FORMATS));
formats = Lists.newArrayList();
for(String format : formatNames) {
formats.addAll(outcomeFormatFrom(format).asSet());
}
}
public FormatConfiguration(OutcomeFormat... formatValues) {
formats = Arrays.asList(formatValues);
}
private static Optional<OutcomeFormat> outcomeFormatFrom(String value) {
try {
return Optional.of(OutcomeFormat.valueOf(value.toUpperCase()));
} catch (IllegalArgumentException e) {
LOGGER.warn("Illegal outcome format ignored: " + value);
return Optional.absent();
}
}
public List<OutcomeFormat> getFormats() {
if (formats.isEmpty()) {
throw new IllegalArgumentException("No valid output format has been defined.");
}
return formats;
}
public OutcomeFormat getPreferredFormat() {
return getFormats().get(0);
}
}