package pl.touk.sputnik.engine; import lombok.extern.slf4j.Slf4j; import pl.touk.sputnik.configuration.Configuration; import pl.touk.sputnik.connector.ConnectorFacade; import pl.touk.sputnik.connector.ReviewPublisher; import pl.touk.sputnik.engine.visitor.AfterReviewVisitor; import pl.touk.sputnik.engine.visitor.BeforeReviewVisitor; import pl.touk.sputnik.review.Review; import pl.touk.sputnik.review.ReviewFile; import pl.touk.sputnik.review.ReviewFormatterFactory; import pl.touk.sputnik.review.ReviewProcessor; import java.util.List; @Slf4j public class Engine { private final ConnectorFacade facade; private final ReviewPublisher reviewPublisher; private final Configuration config; public Engine(ConnectorFacade facade, ReviewPublisher reviewPublisher, Configuration configuration) { this.facade = facade; this.reviewPublisher = reviewPublisher; this.config = configuration; } public void run() { List<ReviewFile> reviewFiles = facade.listFiles(); Review review = new Review(reviewFiles, ReviewFormatterFactory.get(config)); for (BeforeReviewVisitor beforeReviewVisitor : new VisitorBuilder().buildBeforeReviewVisitors(config)) { beforeReviewVisitor.beforeReview(review); } List<ReviewProcessor> processors = ProcessorBuilder.buildProcessors(config); ReviewRunner reviewRunner = new ReviewRunner(review); for (ReviewProcessor processor : processors) { reviewRunner.review(processor); } for (AfterReviewVisitor afterReviewVisitor : new VisitorBuilder().buildAfterReviewVisitors(config)) { afterReviewVisitor.afterReview(review); } reviewPublisher.publish(review); } }