package org.jboss.windup.rules.apps.java.scan.provider; import java.io.File; import org.jboss.windup.config.AbstractRuleProvider; import org.jboss.windup.config.GraphRewrite; import org.jboss.windup.config.KeepWorkDirsOption; import org.jboss.windup.config.loader.RuleLoaderContext; import org.jboss.windup.config.metadata.RuleMetadata; import org.jboss.windup.config.operation.GraphOperation; import org.jboss.windup.config.operation.Iteration; import org.jboss.windup.config.operation.IterationProgress; import org.jboss.windup.config.phase.PostFinalizePhase; import org.jboss.windup.config.phase.PostReportRenderingPhase; import org.jboss.windup.config.query.Query; import org.jboss.windup.config.query.WindupConfigurationQuery; import org.jboss.windup.graph.model.ArchiveModel; import org.jboss.windup.graph.model.WindupConfigurationModel; import org.jboss.windup.graph.service.WindupConfigurationService; import org.jboss.windup.rules.apps.java.scan.operation.DeleteWorkDirsOperation; import org.ocpsoft.rewrite.config.Configuration; import org.ocpsoft.rewrite.config.ConfigurationBuilder; import org.ocpsoft.rewrite.config.Not; import org.ocpsoft.rewrite.context.EvaluationContext; /** * Deletes the directories with the content unzipped from the archives. * The graph can't be deleted at this point so that's left up to the Bootstrap. * * @author Ondrej Zizka */ @RuleMetadata( after = {PostReportRenderingPhase.class}, // I don't want to create a dependency: before = {ExecutionTimeReportRuleProvider.class}, description = "Deletes the temporary data Windup analyzes: the unzipped archives, and the graph data." + " Use --" + KeepWorkDirsOption.NAME + " to keep them.", phase = PostFinalizePhase.class ) public class DeleteWorkDirsAtTheEndRuleProvider extends AbstractRuleProvider { @Override public Configuration getConfiguration(RuleLoaderContext ruleLoaderContext) { // @formatter:off return ConfigurationBuilder.begin() .addRule() .when( Not.any(WindupConfigurationQuery.hasOption(WindupConfigurationModel.KEEP_WORKING_DIRECTORIES, true).as("discard")), Query.fromType(ArchiveModel.class).withProperty(ArchiveModel.UNZIPPED_DIRECTORY).as("archives") ) .perform( Iteration.over("archives").perform( DeleteWorkDirsOperation.delete(), IterationProgress.monitoring("Deleted archive unzip directory", 1) ).endIteration() ) .addRule().perform( new GraphOperation() { public void perform(GraphRewrite event, EvaluationContext context) { File archivesDir = WindupConfigurationService.getArchivesPath(event.getGraphContext()).toFile(); if (archivesDir.exists() && archivesDir.isDirectory() && archivesDir.list().length == 0) archivesDir.delete(); } public String toString() { return "Delete archives directory if empty"; } } ) ; // @formatter:on } }