diff options
Diffstat (limited to 'src/main/java/com/keuin/kbackupfabric/backup')
3 files changed, 46 insertions, 18 deletions
diff --git a/src/main/java/com/keuin/kbackupfabric/backup/incremental/ObjectCollectionIterator.java b/src/main/java/com/keuin/kbackupfabric/backup/incremental/ObjectCollectionIterator.java index 248d36d..7e523bc 100644 --- a/src/main/java/com/keuin/kbackupfabric/backup/incremental/ObjectCollectionIterator.java +++ b/src/main/java/com/keuin/kbackupfabric/backup/incremental/ObjectCollectionIterator.java @@ -6,9 +6,6 @@ import java.util.List; import java.util.NoSuchElementException; public class ObjectCollectionIterator implements Iterator<ObjectElement> { - - // TODO: test this - private Iterator<ObjectElement> currentIterator; private final List<ObjectCollection2> cols = new LinkedList<>(); diff --git a/src/main/java/com/keuin/kbackupfabric/backup/incremental/identifier/SingleHashIdentifier.java b/src/main/java/com/keuin/kbackupfabric/backup/incremental/identifier/SingleHashIdentifier.java index 9fd61c8..b3afa7f 100644 --- a/src/main/java/com/keuin/kbackupfabric/backup/incremental/identifier/SingleHashIdentifier.java +++ b/src/main/java/com/keuin/kbackupfabric/backup/incremental/identifier/SingleHashIdentifier.java @@ -37,11 +37,11 @@ public abstract class SingleHashIdentifier implements ObjectIdentifier { } @Override - public boolean equals(Object obj) { - if (!(obj instanceof SingleHashIdentifier)) { - return false; - } - return Arrays.equals(hash, ((SingleHashIdentifier) obj).hash); + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + SingleHashIdentifier that = (SingleHashIdentifier) o; + return Arrays.equals(hash, that.hash) && type.equals(that.type); } @Override 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<ObjectCollection2> otherExistingCollections) { // TODO: test this Iterator<ObjectElement> iter = new ObjectCollectionIterator(collection); - Set<ObjectElement> 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<ObjectIdentifier> 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; } /** |