fee217ffdb7681e65e1701846e19893859314181
[mediacube.git] /
1 package hu.user.mediacube.integration.safedelete;
2
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;
8
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;
14
15 @Component
16 @Log4j2
17 public class SafeDeleteCommand {
18     private static final String ERROR_FILENAME_PREFIX = "ERROR-";
19
20     @Autowired
21     MediaCubeDatabaseService mediaCubeDatabaseService;
22
23     @Autowired
24     TSMService tsmService;
25
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)) {
32                     continue;
33                 }
34                 processInputFile(filePath, forceDeleteArchived);
35             }
36         }
37     }
38
39     private void processInputFile(Path source, boolean forceDeleteArchived) {
40         ArchiveFileStatus status = ArchiveFileStatus.builder().name(source.getFileName().toString()).build();
41         String fileName = source.getFileName().toString();
42
43         try {
44             log.debug("Check MediaCube metadata for {}", source);
45             mediaCubeDatabaseService.verify(fileName, status);
46
47             log.debug("Check TSM file for {}", source);
48             tsmService.verify(source, status);
49
50             if (forceDeleteArchived && status.isFileSizeEquals() && status.isHashEquals()) {
51                 FileOperations.silentDelete(source);
52             }
53
54         } catch (Exception e) {
55             log.catching(e);
56             FileOperations.silentRename(source, ERROR_FILENAME_PREFIX);
57         }
58     }
59 }
60