From 6d6f0b486ac42b6bd69ddb8862ee3af7b819f3a7 Mon Sep 17 00:00:00 2001 From: Keuin Date: Mon, 15 Feb 2021 17:52:53 +0800 Subject: Add tests. Implementing auto backup and configuration (not finished) --- .../manager/IncrementalBackupStorageManager.java | 51 +++++++++++++++++----- 1 file changed, 41 insertions(+), 10 deletions(-) (limited to 'src/main/java/com/keuin/kbackupfabric/backup/incremental/manager') diff --git a/src/main/java/com/keuin/kbackupfabric/backup/incremental/manager/IncrementalBackupStorageManager.java b/src/main/java/com/keuin/kbackupfabric/backup/incremental/manager/IncrementalBackupStorageManager.java index 0b15a84..18e0e58 100644 --- a/src/main/java/com/keuin/kbackupfabric/backup/incremental/manager/IncrementalBackupStorageManager.java +++ b/src/main/java/com/keuin/kbackupfabric/backup/incremental/manager/IncrementalBackupStorageManager.java @@ -3,8 +3,10 @@ package com.keuin.kbackupfabric.backup.incremental.manager; import com.keuin.kbackupfabric.backup.incremental.ObjectCollection2; import com.keuin.kbackupfabric.backup.incremental.ObjectCollectionIterator; import com.keuin.kbackupfabric.backup.incremental.ObjectElement; +import com.keuin.kbackupfabric.backup.incremental.identifier.ObjectIdentifier; import com.keuin.kbackupfabric.util.FilesystemUtil; import com.keuin.kbackupfabric.util.PrintUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; @@ -31,7 +33,34 @@ public class IncrementalBackupStorageManager { } /** - * Add a object collection to storage base. + * Check whether the storage contains a copy of file with given identifier. + * + * @param identifier the identifier. + * @return whether the file exists. + */ + public boolean contains(@NotNull ObjectIdentifier identifier) { + Objects.requireNonNull(identifier); + return new File(backupStorageBase.toFile(), identifier.getIdentification()).isFile(); + } + + /** + * Check whether the storage contains all files in the given collection. + * + * @param collection the collection. + * @return whether all files exists. + */ + public boolean contains(@NotNull ObjectCollection2 collection) { + Objects.requireNonNull(collection); + for (ObjectCollectionIterator it = new ObjectCollectionIterator(collection); it.hasNext(); ) { + ObjectElement ele = it.next(); + if (!contains(ele.getIdentifier())) + return false; + } + return true; + } + + /** + * Add a object collection to storage base and copy files to the storage. * * @param collection the collection. * @return objects copied to the base. @@ -93,20 +122,22 @@ public class IncrementalBackupStorageManager { Iterable otherExistingCollections) { // TODO: test this Iterator iter = new ObjectCollectionIterator(collection); - Set unusedElementSet = new HashSet<>(); - iter.forEachRemaining(unusedElementSet::add); - otherExistingCollections.forEach(col -> new ObjectCollectionIterator(col).forEachRemaining(unusedElementSet::remove)); - AtomicInteger deleteCount = new AtomicInteger(); - unusedElementSet.forEach(ele -> { - File file = new File(backupStorageBase.toFile(), ele.getIdentifier().getIdentification()); + Set identifierSet = new HashSet<>(); + iter.forEachRemaining(ele -> identifierSet.add(ele.getIdentifier())); + otherExistingCollections.forEach(col -> new ObjectCollectionIterator(col) + .forEachRemaining(ele -> identifierSet.remove(ele.getIdentifier()))); + int deleteCount = 0; + for (ObjectIdentifier id : identifierSet) { + Objects.requireNonNull(id); + File file = new File(backupStorageBase.toFile(), id.getIdentification()); if (file.exists()) { if (file.delete()) - deleteCount.incrementAndGet(); + ++deleteCount; else LOGGER.warning("Failed to delete unused file " + file.getName()); } - }); - return deleteCount.get(); + } + return deleteCount; } /** -- cgit v1.2.3