001package com.credibledoc.substitution.doc.module.substitution.activity.modules;
002
003import com.credibledoc.substitution.doc.module.substitution.activity.AnyLineSearchCommand;
004import com.credibledoc.substitution.reporting.reportdocument.ReportDocument;
005import com.credibledoc.substitution.reporting.reportdocument.ReportDocumentType;
006import com.credibledoc.substitution.reporting.reportdocument.creator.ReportDocumentCreator;
007import com.credibledoc.enricher.line.LineProcessor;
008import com.credibledoc.enricher.line.LineProcessorService;
009import lombok.NonNull;
010import lombok.RequiredArgsConstructor;
011import lombok.extern.slf4j.Slf4j;
012import org.springframework.context.ApplicationContext;
013import org.springframework.stereotype.Service;
014
015import javax.inject.Inject;
016import java.util.ArrayList;
017import java.util.List;
018
019/**
020 * Creates document with data for dependency UML diagram.
021 * @author Kyrylo Semenko
022 */
023@Service
024@RequiredArgsConstructor(onConstructor = @__(@Inject))
025@Slf4j
026public class ModulesActivityUmlReportService implements ReportDocumentCreator {
027
028    @NonNull
029    private final ApplicationContext applicationContext;
030
031    /**
032     * Create a stateful object of {@link ReportDocument} type.
033     *
034     * @return The stateful object, which {@link ReportDocument#getCacheLines()} method
035     * will be used for generation of PlantUML activity diagram.
036     */
037    public ReportDocument prepareReportDocument() {
038        ReportDocument reportDocument = new ReportDocument();
039        reportDocument.setReportDocumentType(ReportDocumentType.DOCUMENT_PART_UML);
040
041        List<LineProcessor> lineProcessors = new ArrayList<>();
042        lineProcessors.add(
043                new LineProcessor(
044                        applicationContext.getBean(AnyLineSearchCommand.class),
045                        applicationContext.getBean(ModulesActivityTransformer.class),
046                        reportDocument));
047
048        LineProcessorService.getInstance().getLineProcessors().addAll(lineProcessors);
049        log.info("Line processors prepared");
050        return reportDocument;
051    }
052
053    @Override
054    public ReportDocumentType getReportDocumentType() {
055        return ReportDocumentType.DOCUMENT_PART_UML;
056    }
057
058}