package com.aol.micro.server.s3;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class DirectoryCleaner {
private final String temporaryDirectory;
@Autowired
public DirectoryCleaner(@Value("${s3.temp.dir:#{null}}") String temporaryDirectory) {
this.temporaryDirectory = temporaryDirectory;
}
@PostConstruct
public void clean() throws IOException {
if (temporaryDirectory != null && new File(
temporaryDirectory).exists()) {
Path directory = FileSystems.getDefault()
.getPath(temporaryDirectory);
Files.walkFileTree(directory, new CleanupFileVisitor(
directory));
}
}
static class CleanupFileVisitor extends SimpleFileVisitor<Path> {
private final Path tempDirectory;
public CleanupFileVisitor(Path directory) {
this.tempDirectory = directory;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
deleteNotTopDirectory(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException e) throws IOException {
if (e == null) {
deleteNotTopDirectory(dir);
return FileVisitResult.CONTINUE;
} else {
throw e;
}
}
private void deleteNotTopDirectory(Path dir) throws IOException {
if (!dir.equals(tempDirectory)) {
Files.delete(dir);
}
}
}
}