package org.jboss.windup.rules.apps.java.scan.provider; import org.jboss.windup.config.GraphRewrite; import org.jboss.windup.config.metadata.RuleMetadata; import org.jboss.windup.config.phase.ClassifyFileTypesPhase; import org.jboss.windup.config.query.Query; import org.jboss.windup.config.query.QueryPropertyComparisonType; import org.jboss.windup.config.ruleprovider.IteratingRuleProvider; import org.jboss.windup.graph.model.resource.FileModel; import org.jboss.windup.graph.model.resource.SourceFileModel; import org.jboss.windup.graph.service.GraphService; import org.jboss.windup.reporting.model.TechnologyTagLevel; import org.jboss.windup.reporting.service.TechnologyTagService; import org.jboss.windup.rules.apps.java.model.PropertiesModel; import org.jboss.windup.util.ExecutionStatistics; import org.ocpsoft.rewrite.config.ConditionBuilder; import org.ocpsoft.rewrite.context.EvaluationContext; /** * Discovers Java-style .properties files and places them into the graph. * * @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a> */ @RuleMetadata(phase = ClassifyFileTypesPhase.class, perform = "Discover Properties Files") public class DiscoverPropertiesFilesRuleProvider extends IteratingRuleProvider<FileModel> { private static final String TECH_TAG = "Properties"; private static final TechnologyTagLevel TECH_TAG_LEVEL = TechnologyTagLevel.INFORMATIONAL; @Override public ConditionBuilder when() { return Query.fromType(FileModel.class).withProperty(FileModel.IS_DIRECTORY, false) .withProperty(FileModel.FILE_PATH, QueryPropertyComparisonType.REGEX, ".*\\.properties$"); } public void perform(GraphRewrite event, EvaluationContext context, FileModel payload) { ExecutionStatistics.get().begin("DiscoverPropertiesFilesRuleProvider.perform"); GraphService<PropertiesModel> service = new GraphService<>(event.getGraphContext(), PropertiesModel.class); TechnologyTagService technologyTagService = new TechnologyTagService(event.getGraphContext()); PropertiesModel properties = service.addTypeToModel(payload); properties.setGenerateSourceReport(true); GraphService.addTypeToModel(event.getGraphContext(), payload, SourceFileModel.class); technologyTagService.addTagToFileModel(payload, TECH_TAG, TECH_TAG_LEVEL); ExecutionStatistics.get().end("DiscoverPropertiesFilesRuleProvider.perform"); } }