package org.jboss.windup.rules.apps.java.scan.operation; import java.io.File; import org.jboss.windup.config.GraphRewrite; import org.jboss.windup.config.operation.iteration.AbstractIterationOperation; import org.jboss.windup.graph.model.resource.FileModel; import org.jboss.windup.graph.service.FileService; import org.ocpsoft.rewrite.context.EvaluationContext; /** * Recurses the given folder and creates the FileModels vertices for the child files to the graph. */ public class RecurseDirectoryAndAddFiles extends AbstractIterationOperation<FileModel> { private RecurseDirectoryAndAddFiles(String variableName) { super(variableName); } /** * Let the variable name to be set by the current Iteration. */ public RecurseDirectoryAndAddFiles() { super(); } public static RecurseDirectoryAndAddFiles startingAt(String variableName) { return new RecurseDirectoryAndAddFiles(variableName); } @Override public String toString() { return "RecurseDirectoryAndAddFiles"; } @Override public void perform(GraphRewrite event, EvaluationContext context, FileModel resourceModel) { FileService fileModelService = new FileService(event.getGraphContext()); recurseAndAddFiles(event, context, fileModelService, resourceModel); } /** * Recurses the given folder and creates the FileModels vertices for the child files to the graph. */ private void recurseAndAddFiles(GraphRewrite event, EvaluationContext context, FileService fileService, FileModel file) { String filePath = file.getFilePath(); File fileReference = new File(filePath); if (fileReference.isDirectory()) { File[] subFiles = fileReference.listFiles(); if (subFiles != null) { for (File reference : subFiles) { FileModel subFile = fileService.createByFilePath(file, reference.getAbsolutePath()); recurseAndAddFiles(event, context, fileService, subFile); } } } } }