package art.servers.gost.access.controller; import art.servers.gost.access.Shared; import art.servers.gost.access.configuration.ConfigurationDetail_Cleaner; import java.io.File; import static java.lang.Thread.sleep; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.attribute.BasicFileAttributes; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Controller_Cleaner extends Controller { protected String name = null; private MyComparator comparator = new MyComparator(); private ConfigurationDetail_Cleaner configuration = null; private File path = null; private long free = 0; private long total = 0; public Controller_Cleaner(ConfigurationDetail_Cleaner configuration) { this.name = Shared.getMessage("Controller cleaner"); this.setName(this.name); this.configuration = configuration; } public void run() { Shared.traceInformation(name, Shared.getMessage("Starting")); while (isInterrupted() == false) { DecimalFormat formato1 = new DecimalFormat("###,###,###"); try { free = (long)(path.getFreeSpace() / 1073741824L); total = (long)(path.getTotalSpace() / 1073741824L); // Eliminar si se baja por debajo del limite String message = Shared.getMessage("Free") + " " + formato1.format(free) + " " + Shared.getMessage("GB") + ", "; message = message + Shared.getMessage("Minimum") + " " + formato1.format(configuration.minimumFreeSpace) + " " + Shared.getMessage("GB"); // Shared.println("Cleaner", message); List lfile = new ArrayList(); if (free < configuration.minimumFreeSpace) { for (String path : configuration.paths) { try { File folder = new File(path); lfile.addAll(Arrays.asList(folder.listFiles())); } catch (Exception e) { // e.printStackTrace(); } } delete(lfile); free = (long)(path.getFreeSpace() / 1073741824L); total = (long)(path.getTotalSpace() / 1073741824L); message = Shared.getMessage("Free") + " " + formato1.format(free) + " " + Shared.getMessage("GB") + ", "; message = message + Shared.getMessage("Minimum") + " " + formato1.format(configuration.minimumFreeSpace) + " " + Shared.getMessage("GB"); // Shared.println("Cleaner", message); } } catch (Exception e) { } try { sleep(configuration.polling * 1000); } catch (Exception e) { } } Shared.traceInformation(name, Shared.getMessage("Finishing")); } private void delete (List lfile) { Collections.sort(lfile, comparator); for (File file : lfile) { deleteAll(file); file.delete(); long free = (long)(path.getFreeSpace() / 1073741824L); if (free > configuration.minimumFreeSpace) { return; } } } private void deleteAll (File file) { try { for (File child : file.listFiles()) { if (child.isDirectory() == true) { deleteAll(child); file.delete(); } else { child.delete(); } } } catch (Exception e) { } file.delete(); } private class MyComparator implements Comparator { public int compare (Object o1, Object o2) { try { File file1 = (File)o1; File file2 = (File)o2; BasicFileAttributes attr1 = Files.readAttributes(Paths.get(file1.getAbsolutePath()), BasicFileAttributes.class); BasicFileAttributes attr2 = Files.readAttributes(Paths.get(file2.getAbsolutePath()), BasicFileAttributes.class); long timestamp1 = attr1.creationTime().toMillis(); long timestamp2 = attr2.creationTime().toMillis(); if (timestamp1 > timestamp2) return 1; if (timestamp1 < timestamp2) return -1; } catch (Exception e) { } return 0; } } }