All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.allurefw.report.ParentModule Maven / Gradle / Ivy

package org.allurefw.report;

import com.google.inject.AbstractModule;
import com.google.inject.Module;
import com.google.inject.Scopes;
import com.google.inject.multibindings.MapBinder;
import com.google.inject.multibindings.Multibinder;
import com.google.inject.multibindings.OptionalBinder;
import com.google.inject.name.Names;
import org.allurefw.report.allure1.Allure1ResultsReader;
import org.allurefw.report.core.DefaultAttachmentsStorage;
import org.allurefw.report.core.DefaultTestRunReader;
import org.allurefw.report.defects.DefectsPlugin;
import org.allurefw.report.executor.ExecutorPlugin;
import org.allurefw.report.graph.GraphPlugin;
import org.allurefw.report.history.HistoryPlugin;
import org.allurefw.report.jackson.JacksonMapperModule;
import org.allurefw.report.severity.SeverityPlugin;
import org.allurefw.report.summary.SummaryPlugin;
import org.allurefw.report.testrun.TestRunPlugin;
import org.allurefw.report.timeline.TimelinePlugin;
import org.allurefw.report.writer.WriterModule;
import org.allurefw.report.xunit.XunitPlugin;

import java.util.List;

/**
 * @author charlie (Dmitry Baev).
 */
public class ParentModule extends AbstractModule {

    private final List plugins;

    private final List children;

    public ParentModule(List plugins, List children) {
        this.plugins = plugins;
        this.children = children;
    }

    @Override
    protected void configure() {
//        Core
        install(new JacksonMapperModule());
        install(new WriterModule());

//        Aggregators
        MapBinder.newMapBinder(binder(), String.class, TestRunAggregator.class);
        MapBinder.newMapBinder(binder(), String.class, TestCaseAggregator.class);
        MapBinder.newMapBinder(binder(), String.class, ResultAggregator.class);


        MapBinder.newMapBinder(binder(), String.class, Processor.class);
        MapBinder.newMapBinder(binder(), String.class, String.class, Names.named("report-widgets"))
                .permitDuplicates();
        MapBinder.newMapBinder(binder(), String.class, String.class, Names.named("report-data-folder"))
                .permitDuplicates();
        MapBinder.newMapBinder(binder(), String.class, Finalizer.class);

//        Readers
        Multibinder.newSetBinder(binder(), ResultsReader.class)
                .addBinding().to(Allure1ResultsReader.class);

        OptionalBinder.newOptionalBinder(binder(), TestRunReader.class)
                .setDefault().to(DefaultTestRunReader.class);
        Multibinder.newSetBinder(binder(), TestRunDetailsReader.class);

//        Attachments
        OptionalBinder.newOptionalBinder(binder(), AttachmentsStorage.class)
                .setDefault().to(DefaultAttachmentsStorage.class).in(Scopes.SINGLETON);

//        Defaults
        install(new SummaryPlugin());
        install(new GraphPlugin());
        install(new TimelinePlugin());
        install(new DefectsPlugin());
        install(new XunitPlugin());
        install(new HistoryPlugin());
        install(new ExecutorPlugin());
        install(new TestRunPlugin());
        install(new SeverityPlugin());

//        Plugins
        Multibinder.newSetBinder(binder(), Plugin.class);
        plugins.forEach(this::bindPlugin);

//        Children
        children.forEach(this::install);
    }

    private void bindPlugin(Plugin plugin) {
        Multibinder.newSetBinder(binder(), Plugin.class).addBinding().toInstance(plugin);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy