001// Generated by delombok at Sun Jun 02 12:23:43 CEST 2019 002package com.credibledoc.substitution.doc; 003 004import com.credibledoc.combiner.tactic.TacticService; 005import com.credibledoc.substitution.core.configuration.Configuration; 006import com.credibledoc.substitution.core.configuration.ConfigurationService; 007import com.credibledoc.substitution.core.resource.ResourceService; 008import com.credibledoc.substitution.core.template.TemplateService; 009import com.credibledoc.substitution.doc.module.substitution.SubstitutionTactic; 010import com.credibledoc.substitution.reporting.markdown.MarkdownService; 011import com.credibledoc.substitution.reporting.reportdocument.ReportDocumentType; 012import com.credibledoc.substitution.reporting.reportdocument.creator.ReportDocumentCreator; 013import com.credibledoc.substitution.reporting.reportdocument.creator.ReportDocumentCreatorService; 014import com.credibledoc.substitution.reporting.visualizer.VisualizerService; 015import lombok.NonNull; 016import org.springframework.context.annotation.AnnotationConfigApplicationContext; 017import org.springframework.context.annotation.ComponentScan; 018import javax.inject.Inject; 019import java.io.File; 020import java.util.Collections; 021import java.util.List; 022 023/** 024 * The main class for generation of documentation of the credibledoc-substitution tool. 025 * <p> 026 * This main method should be launched in the credible-doc\substitution (parent) working directory. 027 * 028 * @author Kyrylo Semenko 029 */ 030@ComponentScan(basePackages = "com.credibledoc.substitution.doc") 031public class SubstitutionDocMain { 032 @java.lang.SuppressWarnings("all") 033 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(SubstitutionDocMain.class); 034 public static final String APPLICATION_SUBSTITUTION_DOC_LAUNCHED = "Application substitution-doc launched."; 035 public static final String SUBSTITUTION_DOC = "substitution-doc"; 036 public static final String APPLICATION_SUBSTITUTION_DOC_FINISHED = "Application finished."; 037 @NonNull 038 private final List<ReportDocumentCreator> reportDocumentCreators; 039 @NonNull 040 private final SubstitutionTactic substitutionSpecificTactic; 041 042 /** 043 * The main method for generation of documentation of the credibledoc-substitution tool. 044 * <p> 045 * This method should be launched within its parent (../substitution) folder. 046 * 047 * @param args not used 048 */ 049 public static void main(String[] args) { 050 log.info(APPLICATION_SUBSTITUTION_DOC_LAUNCHED); 051 try (AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SubstitutionDocMain.class)) { 052 applicationContext.start(); 053 log.info("Spring ApplicationContext created and started"); 054 SubstitutionDocMain substitutionDocMain = applicationContext.getBean(SubstitutionDocMain.class); 055 substitutionDocMain.substitute(); 056 } 057 log.info(APPLICATION_SUBSTITUTION_DOC_FINISHED); 058 } 059 060 private void substitute() { 061 TacticService.getInstance().getTactics().add(substitutionSpecificTactic); 062 ReportDocumentCreatorService reportDocumentCreatorService = ReportDocumentCreatorService.getInstance(); 063 reportDocumentCreatorService.addReportDocumentCreators(reportDocumentCreators); 064 reportDocumentCreatorService.createReportDocuments(); 065 copyResourcesToTargetDirectory(); 066 VisualizerService.getInstance().createReports(Collections.singletonList(ReportDocumentType.DOCUMENT_PART_UML)); 067 MarkdownService.getInstance().generateContentFromTemplates(); 068 } 069 070 private void copyResourcesToTargetDirectory() { 071 Configuration configuration = ConfigurationService.getInstance().getConfiguration(); 072 ResourceService resourceService = ResourceService.getInstance(); 073 List<String> allResources = resourceService.getResources(null, configuration.getTemplatesResource()); 074 TemplateService templateService = TemplateService.getInstance(); 075 for (String resource : allResources) { 076 if (!resource.endsWith(MarkdownService.MARKDOWN_FILE_EXTENSION) && containsDotInName(resource)) { 077 String targetFilePath = resourceService.generatePlaceholderResourceRelativePath(resource); 078 String targetFileAbsolutePath = configuration.getTargetDirectory() + targetFilePath; 079 log.info("Resource will be copied to file. Resource: \'{}\'. TargetFileAbsolutePath: \'{}\'", resource, targetFileAbsolutePath); 080 File file = templateService.exportResource(resource, targetFileAbsolutePath); 081 log.info("Resource copied to file: \'{}\'", file.getAbsolutePath()); 082 } 083 } 084 } 085 086 /** 087 * @param resource for example '/template/markdown/' is a directory, and '/template/markdown/README.md' is a file. 088 * @return 'False' if this resource is directory 089 */ 090 private boolean containsDotInName(String resource) { 091 int index = resource.lastIndexOf('/'); 092 if (index == -1) { 093 index = 0; 094 } 095 String fileName = resource.substring(index); 096 return fileName.contains("."); 097 } 098 099 @Inject 100 @java.lang.SuppressWarnings("all") 101 public SubstitutionDocMain(@NonNull final List<ReportDocumentCreator> reportDocumentCreators, @NonNull final SubstitutionTactic substitutionSpecificTactic) { 102 if (reportDocumentCreators == null) { 103 throw new java.lang.NullPointerException("reportDocumentCreators"); 104 } 105 if (substitutionSpecificTactic == null) { 106 throw new java.lang.NullPointerException("substitutionSpecificTactic"); 107 } 108 this.reportDocumentCreators = reportDocumentCreators; 109 this.substitutionSpecificTactic = substitutionSpecificTactic; 110 } 111}