summaryrefslogtreecommitdiff
path: root/src/main/java/com/keuin/kbackupfabric/backup
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/keuin/kbackupfabric/backup')
-rw-r--r--src/main/java/com/keuin/kbackupfabric/backup/incremental/ObjectCollectionIterator.java3
-rw-r--r--src/main/java/com/keuin/kbackupfabric/backup/incremental/identifier/SingleHashIdentifier.java10
-rw-r--r--src/main/java/com/keuin/kbackupfabric/backup/incremental/manager/IncrementalBackupStorageManager.java51
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;
}
/**