package org.jboss.windup.rules.apps.java.reporting.rules; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.jboss.windup.config.AbstractRuleProvider; import org.jboss.windup.config.GraphRewrite; import org.jboss.windup.config.loader.RuleLoaderContext; import org.jboss.windup.config.metadata.RuleMetadata; import org.jboss.windup.config.operation.iteration.AbstractIterationOperation; import org.jboss.windup.config.phase.ReportGenerationPhase; import org.jboss.windup.config.query.Query; import org.jboss.windup.graph.GraphContext; import org.jboss.windup.graph.model.ProjectModel; import org.jboss.windup.graph.model.WindupConfigurationModel; import org.jboss.windup.graph.model.report.IgnoredFileRegexModel; import org.jboss.windup.graph.model.resource.FileModel; import org.jboss.windup.graph.model.resource.IgnoredFileModel; import org.jboss.windup.graph.service.GraphService; import org.jboss.windup.graph.service.WindupConfigurationService; import org.jboss.windup.config.projecttraversal.ProjectTraversalCache; import org.jboss.windup.rules.apps.java.model.IgnoredFilesReportModel; import org.jboss.windup.reporting.model.TemplateType; import org.jboss.windup.reporting.service.ReportService; import org.jboss.windup.rules.apps.java.model.WindupJavaConfigurationModel; import org.jboss.windup.util.Util; import org.ocpsoft.rewrite.config.Configuration; import org.ocpsoft.rewrite.config.ConfigurationBuilder; import org.ocpsoft.rewrite.context.EvaluationContext; /** * Creates a report for all the ignored files along with all the regexes they were matched against. * * @author <a href="mailto:mbriskar@gmail.com">Matej Briskar</a> */ @RuleMetadata(phase = ReportGenerationPhase.class) public class CreateJavaIgnoredFilesReportRuleProvider extends AbstractRuleProvider { public static final String TITLE = "Ignored Files"; public static final String TEMPLATE_REPORT = "/reports/templates/ignored_files.ftl"; public static final String DESCRIPTION = "This report lists the files which were found in the application,\n" + " but based on certain rules and the " + Util.WINDUP_BRAND_NAME_LONG + " configuration, both built-in and local,\n" + " they were not processed.\n" + " See the <code>--userIgnorePath</code> option in the <a href=\"https://access.redhat.com/documentation/en/red-hat-jboss-migration-toolkit/\">User Guide</a>."; // @formatter:off @Override public Configuration getConfiguration(RuleLoaderContext ruleLoaderContext) { AbstractIterationOperation<WindupJavaConfigurationModel> addApplicationReport = new AbstractIterationOperation<WindupJavaConfigurationModel>() { @Override public void perform(GraphRewrite event, EvaluationContext context, WindupJavaConfigurationModel payload) { WindupConfigurationModel configurationModel = WindupConfigurationService.getConfigurationModel(event.getGraphContext()); for (FileModel inputPath : configurationModel.getInputPaths()) { ProjectModel application = inputPath.getProjectModel(); createIgnoredFilesReport(event.getGraphContext(), payload, application); } } @Override public String toString() { return "CreateJavaApplicationOverviewReport"; } }; return ConfigurationBuilder.begin() .addRule() .when( Query.fromType(WindupJavaConfigurationModel.class) ) .perform(addApplicationReport); } // @formatter:on private void createIgnoredFilesReport(GraphContext context, WindupJavaConfigurationModel javaCfg, ProjectModel application) { GraphService<IgnoredFileModel> ignoredFilesModelService = new GraphService<>(context, IgnoredFileModel.class); List<IgnoredFileModel> ignoredFileModelsInApplication = new ArrayList<>(); for (IgnoredFileModel file : ignoredFilesModelService.findAll()) { Set<ProjectModel> fileApplications = ProjectTraversalCache.getApplicationsForProject(context, file.getProjectModel()); if (fileApplications.contains(application)) { ignoredFileModelsInApplication.add(file); } } // Do not create the report if there are no ignored files if (ignoredFileModelsInApplication.isEmpty()) return; GraphService<IgnoredFilesReportModel> ignoredFilesService = new GraphService<>(context, IgnoredFilesReportModel.class); IgnoredFilesReportModel ignoredFilesReportModel = ignoredFilesService.create(); ignoredFilesReportModel.setReportPriority(9000); ignoredFilesReportModel.setReportName(TITLE); ignoredFilesReportModel.setDescription(DESCRIPTION); ignoredFilesReportModel.setMainApplicationReport(false); ignoredFilesReportModel.setDisplayInApplicationReportIndex(true); ignoredFilesReportModel.setReportIconClass("glyphicon glyphicon-eye-close"); ignoredFilesReportModel.setProjectModel(application); ignoredFilesReportModel.setTemplatePath(TEMPLATE_REPORT); ignoredFilesReportModel.setTemplateType(TemplateType.FREEMARKER); for (IgnoredFileModel ignoredFileModel : ignoredFileModelsInApplication) { ignoredFilesReportModel.addIgnoredFile(ignoredFileModel); } for (IgnoredFileRegexModel ignoreRegexModel : javaCfg.getIgnoredFileRegexes()) { ignoredFilesReportModel.addFileRegex(ignoreRegexModel); } // Set the filename for the report ReportService reportService = new ReportService(context); reportService.setUniqueFilename(ignoredFilesReportModel, "ignoredfiles_" + application.getName(), "html"); } }