All Downloads are FREE. Search and download functionalities are using the official Maven repository.

li.rudin.mavenjs.plugin.util.DirCopyVisitor Maven / Gradle / Ivy

package li.rudin.mavenjs.plugin.util;

import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.StandardCopyOption;
import java.nio.file.attribute.BasicFileAttributes;

import org.apache.maven.plugin.logging.Log;

/**
 * http://stackoverflow.com/questions/6214703/copy-entire-directory-contents-to-another-directory
 * @author user
 *
 */
public class DirCopyVisitor extends SimpleFileVisitor
{
	private final Path targetPath;
	private final Log logger;
	
	private Path sourcePath = null;

	public DirCopyVisitor(Path targetPath, Log logger) throws IOException
	{
		//create target root dir
		Files.createDirectories(targetPath);
		
		this.targetPath = targetPath;
		this.logger = logger;
	}

	@Override
	public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs) throws IOException
	{
		
		if (sourcePath == null)
			sourcePath = dir;
		else
		{
			Path relativeDir = sourcePath.relativize(dir);
			if (relativeDir.startsWith("META-INF"))
				return FileVisitResult.SKIP_SUBTREE;
			
			Files.createDirectories(targetPath.resolve(relativeDir));
		}
		
		return FileVisitResult.CONTINUE;
	}

	@Override
	public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException
	{
		Path relativePath = sourcePath.relativize(file);
		
		Path absoluteTargetPath = targetPath.resolve(relativePath);
		
		logger.info(relativePath + " -> " + targetPath);
				
		Files.copy(file, absoluteTargetPath, StandardCopyOption.REPLACE_EXISTING);
		
		return FileVisitResult.CONTINUE;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy