@Override public void aggregate(final Configuration configuration, final List<LaunchResults> launchesResults, final Path outputDirectory) throws IOException { writePluginsStatic(configuration, outputDirectory); writeIndexHtml(configuration, outputDirectory); writeStatic(outputDirectory); }
private static List<RetryTrendItem> getPreviousTrendData(final LaunchResults results) { return results.getExtra(RETRY_TREND_BLOCK_NAME, ArrayList::new); }
@Override public void aggregate(final Configuration configuration, final List<LaunchResults> launchesResults, final Path outputDirectory) { configuration.getContext(MarkdownContext.class) .ifPresent(markdownContext -> processDescriptions(launchesResults, markdownContext)); }
@Override public void readResults(final Configuration configuration, final ResultsVisitor visitor, final Path directory) { final JacksonContext context = configuration.requireContext(JacksonContext.class); final Path categoriesFile = directory.resolve(JSON_FILE_NAME); if (Files.exists(categoriesFile)) { try (InputStream is = Files.newInputStream(categoriesFile)) { final List<Category> categories = context.getValue().readValue(is, CATEGORIES_TYPE); visitor.visitExtra(CATEGORIES, categories); } catch (IOException e) { visitor.error("Could not read categories file " + categoriesFile, e); } } }
protected void writePluginsStatic(final Configuration configuration, final Path outputDirectory) throws IOException { final Path pluginsFolder = outputDirectory.resolve(Constants.PLUGINS_DIR); for (Plugin plugin : configuration.getPlugins()) { final Path pluginDirectory = Files.createDirectories(pluginsFolder.resolve(plugin.getConfig().getId())); plugin.unpackReportStatic(pluginDirectory); } }
private void processDescriptions(final List<LaunchResults> launches, final MarkdownContext context) { launches.stream() .flatMap(launch -> launch.getResults().stream()) .filter(result -> isEmpty(result.getDescriptionHtml()) && !isEmpty(result.getDescription())) .forEach(result -> { final String html = context.getValue().apply(result.getDescription()); result.setDescriptionHtml(html); }); }
/** * The same as {@link #getContext(Class)} but throws an exception * if context doesn't present. * * @return resolved context. * @throws ContextNotFoundException if no such context present. */ default <T> T requireContext(Class<T> contextType) { return getContext(contextType).orElseThrow(() -> new ContextNotFoundException(contextType)); } }
@Override public void aggregate(final Configuration configuration, final List<LaunchResults> launchesResults, final Path outputDirectory) { launchesResults.stream() .flatMap(results -> results.getResults().stream()) .forEach(this::setOwner); }
public void aggregate(final List<LaunchResults> results, final Path outputDirectory) throws IOException { for (Aggregator aggregator : configuration.getAggregators()) { aggregator.aggregate(configuration, results, outputDirectory); } }
@Override public void readResults(final Configuration configuration, final ResultsVisitor visitor, final Path directory) { final JacksonContext context = configuration.requireContext(JacksonContext.class); final Path historyFile = directory.resolve(HISTORY_BLOCK_NAME).resolve(HISTORY_FILE_NAME); if (Files.exists(historyFile)) { try (InputStream is = Files.newInputStream(historyFile)) { final Map<String, HistoryData> history = context.getValue().readValue(is, HISTORY_TYPE); visitor.visitExtra(HISTORY_BLOCK_NAME, history); } catch (IOException e) { visitor.error("Could not read history file " + historyFile, e); } } }
private static List<HistoryTrendItem> getPreviousTrendData(final LaunchResults results) { return results.getExtra(HISTORY_TREND_BLOCK_NAME, ArrayList::new); }
@Override public void readResults(final Configuration configuration, final ResultsVisitor visitor, final Path directory) { final JacksonContext context = configuration.requireContext(JacksonContext.class); final Path executorFile = directory.resolve(JSON_FILE_NAME); if (Files.exists(executorFile)) { try (InputStream is = Files.newInputStream(executorFile)) { final LaunchInfo info = context.getValue().readValue(is, LaunchInfo.class); visitor.visitExtra(LAUNCH_BLOCK_NAME, info); } catch (IOException e) { visitor.error("Could not read launch file " + executorFile, e); } } }
private static List<CategoriesTrendItem> getPreviousTrendData(final LaunchResults results) { return results.getExtra(CATEGORIES_TREND_BLOCK_NAME, ArrayList::new); }
@Override public void readResults(final Configuration configuration, final ResultsVisitor visitor, final Path directory) { final JacksonContext context = configuration.requireContext(JacksonContext.class); final Path executorFile = directory.resolve(JSON_FILE_NAME); if (Files.exists(executorFile)) { try (InputStream is = Files.newInputStream(executorFile)) { final ExecutorInfo info = context.getValue().readValue(is, ExecutorInfo.class); visitor.visitExtra(EXECUTORS_BLOCK_NAME, info); } catch (IOException e) { visitor.error("Could not read executor file " + executorFile, e); } } }
private static List<DurationTrendItem> getPreviousTrendData(final LaunchResults results) { return results.getExtra(DURATION_TREND_BLOCK_NAME, ArrayList::new); }
/** * Shortcut for {@link #getExtra(String)}. Returns default value instead of empty optional * if block not present. * * @param name the name of extra block to return. * @param defaultValue the supplier of default value. * @param <T> the java type of extra block. * @return the found block or default value. */ default <T> T getExtra(String name, Supplier<T> defaultValue) { final Optional<T> extra = getExtra(name); return extra.orElseGet(defaultValue); }
@Override protected List<ExecutorInfo> getData(final List<LaunchResults> launches) { return launches.stream() .map(launchResults -> launchResults.getExtra(EXECUTORS_BLOCK_NAME)) .filter(Optional::isPresent) .map(Optional::get) .filter(ExecutorInfo.class::isInstance) .map(ExecutorInfo.class::cast) .collect(Collectors.toList()); } }
private static String getExecutorType(final List<LaunchResults> launchesResults) { return launchesResults.stream() .map(results -> results.<ExecutorInfo>getExtra(EXECUTORS_BLOCK_NAME)) .filter(Optional::isPresent) .map(Optional::get) .findFirst() .map(ExecutorInfo::getType) .orElse(LOCAL); }
private static Optional<ExecutorInfo> extractLatestExecutor(final List<LaunchResults> launches) { final Comparator<ExecutorInfo> comparator = comparing(ExecutorInfo::getBuildOrder, nullsFirst(naturalOrder())); return launches.stream() .map(launch -> launch.getExtra(EXECUTORS_BLOCK_NAME)) .filter(Optional::isPresent) .map(Optional::get) .filter(ExecutorInfo.class::isInstance) .map(ExecutorInfo.class::cast) .max(comparator); }
private static Optional<ExecutorInfo> extractLatestExecutor(final List<LaunchResults> launches) { final Comparator<ExecutorInfo> comparator = comparing(ExecutorInfo::getBuildOrder, nullsFirst(naturalOrder())); return launches.stream() .map(launch -> launch.getExtra(EXECUTORS_BLOCK_NAME)) .filter(Optional::isPresent) .map(Optional::get) .filter(ExecutorInfo.class::isInstance) .map(ExecutorInfo.class::cast) .max(comparator); }