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