121 lines
5.0 KiB
Java
121 lines
5.0 KiB
Java
package eu.eudat.logic.utilities.schedule.file;
|
|
|
|
import eu.eudat.configurations.file.PermProperties;
|
|
import eu.eudat.configurations.file.TimeProperties;
|
|
import eu.eudat.configurations.file.TmpProperties;
|
|
import eu.eudat.data.entities.FileUpload;
|
|
import eu.eudat.logic.managers.FileManager;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.core.env.Environment;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.io.IOException;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.nio.file.Paths;
|
|
import java.util.LinkedList;
|
|
import java.util.List;
|
|
import java.util.Objects;
|
|
import java.util.stream.Collectors;
|
|
|
|
@Component
|
|
public class FileCleanUpJobs {
|
|
private static final Logger logger = LoggerFactory.getLogger(FileCleanUpJobs.class);
|
|
|
|
private final FileManager fileManager;
|
|
private final Environment environment;
|
|
|
|
@Autowired
|
|
public FileCleanUpJobs(FileManager fileManager, Environment environment, PermProperties permProperties, TmpProperties tmpProperties) {
|
|
this.fileManager = fileManager;
|
|
this.environment = environment;
|
|
if (permProperties != null) {
|
|
System.getProperties().put("perm.cron", createCron(permProperties.getTime()));
|
|
}
|
|
if (tmpProperties != null) {
|
|
System.getProperties().put("temp.cron", createCron(tmpProperties.getTime()));
|
|
}
|
|
|
|
}
|
|
|
|
@Scheduled(cron = "${perm.cron}")
|
|
public void deleteUnusedPermFiles() {
|
|
logger.info("Start deleting unused permanent files");
|
|
List<FileUpload> fileUploads = fileManager.getDeletedFileUploads();
|
|
try {
|
|
List<Path> tempFilePaths = Files.walk(Paths.get(Objects.requireNonNull(environment.getProperty("file.storage")))).filter(Files::isRegularFile).collect(Collectors.toList());
|
|
for (Path tempFilePath : tempFilePaths) {
|
|
if (fileUploads.stream().map(FileUpload::getId).anyMatch(uuid -> tempFilePath.endsWith(uuid.toString()))) {
|
|
Files.deleteIfExists(tempFilePath);
|
|
}
|
|
}
|
|
logger.info("Unused permanent files have been successfully deleted");
|
|
} catch (IOException e) {
|
|
logger.error(e.getLocalizedMessage(), e);
|
|
}
|
|
}
|
|
|
|
@Scheduled(cron = "${temp.cron}")
|
|
public void deleteTempFiles() {
|
|
logger.info("Start deleting temporary files");
|
|
try {
|
|
List<Path> tempFilePaths = Files.walk(Paths.get(Objects.requireNonNull(environment.getProperty("temp.temp")))).filter(Files::isRegularFile).collect(Collectors.toList());
|
|
for (Path tempFilePath : tempFilePaths) {
|
|
Files.deleteIfExists(tempFilePath);
|
|
}
|
|
logger.info("Temporary files have been successfully deleted");
|
|
} catch (IOException e) {
|
|
logger.error(e.getLocalizedMessage(), e);
|
|
}
|
|
}
|
|
|
|
private String createCron(TimeProperties timeProperties) {
|
|
List<String> cronList = new LinkedList<>();
|
|
cronList.add("0");
|
|
switch (timeProperties.getTimeUnit()) {
|
|
case MINUTES:
|
|
cronList.add("0/" + timeProperties.getInterval());
|
|
break;
|
|
case HOURS:
|
|
cronList.add(toSafeString(timeProperties.getStartTime().getMinute()));
|
|
cronList.add("0/" + timeProperties.getInterval());
|
|
break;
|
|
case DAYS:
|
|
cronList.add(toSafeString(timeProperties.getStartTime().getMinute()));
|
|
cronList.add(toSafeString(timeProperties.getStartTime().getHour()));
|
|
cronList.add("*/" + timeProperties.getInterval());
|
|
break;
|
|
case MONTHS:
|
|
cronList.add(toSafeString(timeProperties.getStartTime().getMinute()));
|
|
cronList.add(toSafeString(timeProperties.getStartTime().getHour()));
|
|
cronList.add(toSafeString(timeProperties.getStartTime().getDayOfMonth(), "1"));
|
|
cronList.add("*/" + timeProperties.getInterval());
|
|
break;
|
|
case WEEKS:
|
|
cronList.add(toSafeString(timeProperties.getStartTime().getMinute()));
|
|
cronList.add(toSafeString(timeProperties.getStartTime().getHour()));
|
|
cronList.add("*/" + (timeProperties.getInterval() * 7));
|
|
cronList.add("*");
|
|
cronList.add(toSafeString(timeProperties.getStartTime().getDayOfWeek(), "1"));
|
|
break;
|
|
}
|
|
if (cronList.size() < 6) {
|
|
for (int i = cronList.size(); i < 6; i++) {
|
|
cronList.add("*");
|
|
}
|
|
}
|
|
return String.join(" ", cronList);
|
|
}
|
|
|
|
private String toSafeString(Object object) {
|
|
return toSafeString(object, "0");
|
|
}
|
|
|
|
private String toSafeString(Object object, String defaultValue) {
|
|
return object != null ? object.toString() : defaultValue;
|
|
}
|
|
}
|