1 package hu.user.mediacube.integration.safedelete;
3 import hu.user.mediacube.integration.safedelete.verifier.MediaCubeDatabaseService;
4 import hu.user.mediacube.integration.safedelete.verifier.TSMService;
5 import lombok.extern.log4j.Log4j2;
6 import org.springframework.beans.factory.annotation.Autowired;
7 import org.springframework.stereotype.Component;
9 import java.io.IOException;
10 import java.nio.file.DirectoryStream;
11 import java.nio.file.Files;
12 import java.nio.file.Path;
13 import java.nio.file.Paths;
17 public class SafeDeleteCommand {
18 private static final String ERROR_FILENAME_PREFIX = "ERROR-";
21 MediaCubeDatabaseService mediaCubeDatabaseService;
24 TSMService tsmService;
26 public void processDirectory(String directory, boolean forceDeleteArchived) throws IOException {
27 log.info("Check directory '{} ' and delete already archived is {}", directory, forceDeleteArchived);
28 Path inputPath = Paths.get(directory);
29 try (DirectoryStream<Path> stream = Files.newDirectoryStream(inputPath)) {
30 for (Path filePath : stream) {
31 if (Files.isDirectory(filePath) || filePath.getFileName().toString().startsWith(ERROR_FILENAME_PREFIX)) {
34 processInputFile(filePath, forceDeleteArchived);
39 private void processInputFile(Path source, boolean forceDeleteArchived) {
40 ArchiveFileStatus status = ArchiveFileStatus.builder().name(source.getFileName().toString()).build();
41 String fileName = source.getFileName().toString();
44 log.debug("Check MediaCube metadata for {}", source);
45 mediaCubeDatabaseService.verify(fileName, status);
47 log.debug("Check TSM file for {}", source);
48 tsmService.verify(source, status);
50 if (forceDeleteArchived && status.isFileSizeEquals() && status.isHashEquals()) {
51 FileOperations.silentDelete(source);
54 } catch (Exception e) {
56 FileOperations.silentRename(source, ERROR_FILENAME_PREFIX);