package org.easyb; import org.easyb.listener.ConsoleReporterListener; import org.easyb.report.ReportWriter; import java.util.Collections; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import static java.util.concurrent.TimeUnit.SECONDS; public class Configuration { private final String[] filePaths; private final List<ReportWriter> configuredReports; private boolean stackTraceOn = false; private boolean filteredStackTraceOn = false; private String extendedStoryClass; private boolean parallel = false; private String failureFile; private boolean isFailureFile = false; private String[] tags; private String junitRootPackage; public Configuration() { this(new String[]{}, Collections.<ReportWriter>emptyList()); } public Configuration(final String[] filePaths, final List<ReportWriter> configuredReports) { this.filePaths = filePaths; this.configuredReports = configuredReports; } public Configuration(final String[] filePaths, final List<ReportWriter> configuredReports, final boolean stackTraceOn) { this(filePaths, configuredReports); this.stackTraceOn = stackTraceOn; } //yeesh this is odd, think of a better way... public Configuration(final String[] filePaths, final List<ReportWriter> configuredReports, final boolean stackTraceOn, final boolean filteredStackTraceOn) { this(filePaths, configuredReports); this.stackTraceOn = stackTraceOn; this.filteredStackTraceOn = filteredStackTraceOn; } public Configuration(final String[] filePaths, final List<ReportWriter> configuredReports, final boolean stackTraceOn, final boolean filteredStackTraceOn, final String extendedStoryClassName, final boolean parallel) { this(filePaths, configuredReports, stackTraceOn, filteredStackTraceOn); this.extendedStoryClass = extendedStoryClassName; this.parallel = parallel; } public Configuration(final String[] filePaths, final List<ReportWriter> configuredReports, final boolean stackTraceOn, final boolean filteredStackTraceOn, final String extendedStoryClassName, final boolean parallel, final boolean isFailureFile, final String failureFile) { this(filePaths, configuredReports, stackTraceOn, filteredStackTraceOn, extendedStoryClassName, parallel); this.failureFile = failureFile; this.isFailureFile = isFailureFile; } public Configuration(final String[] filePaths, final List<ReportWriter> configuredReports, final boolean stackTraceOn, final boolean filteredStackTraceOn, final String extendedStoryClassName, final boolean parallel, final boolean isFailureFile, final String failureFile, final String[] tags, String rootPackage) { this(filePaths, configuredReports, stackTraceOn, filteredStackTraceOn, extendedStoryClassName, parallel, isFailureFile, failureFile); this.tags = tags; this.junitRootPackage = rootPackage; } public String[] getTags(){ return this.tags; } public String getExtendedStoryClass() { return extendedStoryClass; } public String[] getFilePaths() { return this.filePaths; } public List<ReportWriter> getConfiguredReports() { return this.configuredReports; } public boolean isParallel() { return this.parallel; } public String getJunitRootPackage() { return junitRootPackage; } public ConsoleReporterListener getConsoleReporter() { if (this.stackTraceOn) { if (this.filteredStackTraceOn) { return new FilteredStackTraceConsoleReporter(); } else { return new StackTraceConsoleReporter(); } } else if (this.filteredStackTraceOn) { return new FilteredStackTraceConsoleReporter(); } else if (this.isFailureFile) { return new FailureFileConsoleReporter(this.failureFile); } else { return new ConsoleReporterListener(); } } public ExecutorService getExecutor() { LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>(); if (parallel) { return new ThreadPoolExecutor(10, 10, 60L, SECONDS, queue, new ThreadPoolExecutor.CallerRunsPolicy()); } else { return new ThreadPoolExecutor(1, 1, 60L, SECONDS, queue, new ThreadPoolExecutor.CallerRunsPolicy()); } } }