package com.crawljax.di; import javax.inject.Singleton; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import com.crawljax.browser.EmbeddedBrowser; import com.crawljax.condition.ConditionTypeChecker; import com.crawljax.condition.crawlcondition.CrawlCondition; import com.crawljax.core.CandidateElementExtractor; import com.crawljax.core.CandidateElementManager; import com.crawljax.core.CrawlSession; import com.crawljax.core.ExitNotifier; import com.crawljax.core.ExtractorManager; import com.crawljax.core.configuration.CrawljaxConfiguration; import com.crawljax.core.state.DefaultStateVertexFactory; import com.crawljax.core.state.InMemoryStateFlowGraph; import com.crawljax.core.state.StateFlowGraph; import com.crawljax.core.state.StateVertexFactory; import com.crawljax.forms.FormHandler; import com.crawljax.metrics.MetricsModule; import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.google.inject.assistedinject.FactoryModuleBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.bridge.SLF4JBridgeHandler; public class CoreModule extends AbstractModule { private static final Logger LOG = LoggerFactory.getLogger(CoreModule.class); private CrawljaxConfiguration configuration; public CoreModule(CrawljaxConfiguration config) { this.configuration = config; } @Override protected void configure() { LOG.debug("Configuring the core module"); disableJulLogging(); install(new MetricsModule()); install(new ConfigurationModule(configuration)); bind(ExitNotifier.class).toInstance(new ExitNotifier(configuration.getMaximumStates())); bind(ExecutorService.class).toInstance(Executors.newCachedThreadPool()); bind(CrawlSession.class).toProvider(CrawlSessionProvider.class); bind(ExtractorManager.class).to(CandidateElementManager.class); bind(StateFlowGraph.class).to(InMemoryStateFlowGraph.class); bind(InMemoryStateFlowGraph.class).in(Singleton.class); install(new FactoryModuleBuilder().build(FormHandlerFactory.class)); install(new FactoryModuleBuilder().build(CandidateElementExtractorFactory.class)); if (configuration.getStateVertexFactory() == null) { bind(StateVertexFactory.class).to(DefaultStateVertexFactory.class); } else { bind(StateVertexFactory.class).toInstance(configuration.getStateVertexFactory()); } } private void disableJulLogging() { SLF4JBridgeHandler.removeHandlersForRootLogger(); SLF4JBridgeHandler.install(); } @Provides ConditionTypeChecker<CrawlCondition> crawlConditionChecker() { return new ConditionTypeChecker<>(configuration.getCrawlRules().getPreCrawlConfig() .getCrawlConditions()); } public interface FormHandlerFactory { FormHandler newFormHandler(EmbeddedBrowser browser); } public interface CandidateElementExtractorFactory { CandidateElementExtractor newExtractor(EmbeddedBrowser browser); } }