001// Generated by delombok at Thu May 02 07:34:48 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 * @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 @NonNull 042 private final SubstitutionApplicationIdentifier substitutionApplicationIdentifier; 043 044 /** 045 * The main method for generation of documentation of the credibledoc-substitution tool. 046 * @param args not used 047 */ 048 public static void main(String[] args) { 049 log.info(APPLICATION_SUBSTITUTION_DOC_LAUNCHED); 050 try (AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SubstitutionDocMain.class)) { 051 applicationContext.start(); 052 log.info("Spring ApplicationContext created and started"); 053 SubstitutionDocMain substitutionDocMain = applicationContext.getBean(SubstitutionDocMain.class); 054 substitutionDocMain.substitute(); 055 } 056 log.info(APPLICATION_SUBSTITUTION_DOC_FINISHED); 057 } 058 059 private void substitute() { 060 TacticService.getInstance().getTactics().add(substitutionSpecificTactic); 061 ApplicationIdentifierService.getInstance().getApplicationIdentifiers().add(substitutionApplicationIdentifier); 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, @NonNull final SubstitutionApplicationIdentifier substitutionApplicationIdentifier) { 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 if (substitutionApplicationIdentifier == null) { 109 throw new java.lang.NullPointerException("substitutionApplicationIdentifier"); 110 } 111 this.reportDocumentCreators = reportDocumentCreators; 112 this.substitutionSpecificTactic = substitutionSpecificTactic; 113 this.substitutionApplicationIdentifier = substitutionApplicationIdentifier; 114 } 115}