summaryrefslogtreecommitdiff
path: root/src/main/java/com/keuin/kbackupfabric/util/backup/inc
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/keuin/kbackupfabric/util/backup/inc')
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/backup/inc/ObjectCollectionManager.java11
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/backup/inc/identifier/ObjectIdentifier.java9
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/backup/inc/identifier/SingleHashIdentifier.java32
3 files changed, 52 insertions, 0 deletions
diff --git a/src/main/java/com/keuin/kbackupfabric/util/backup/inc/ObjectCollectionManager.java b/src/main/java/com/keuin/kbackupfabric/util/backup/inc/ObjectCollectionManager.java
new file mode 100644
index 0000000..9560261
--- /dev/null
+++ b/src/main/java/com/keuin/kbackupfabric/util/backup/inc/ObjectCollectionManager.java
@@ -0,0 +1,11 @@
+package com.keuin.kbackupfabric.util.backup.inc;
+
+/**
+ * Incremental backup is implemented as git-like file collection.
+ * Files are called `objects`, the collection contains all files distinguished by their
+ * identifiers. Usually, identifier is the combination of hash and other short information (such as size and another hash).
+ * The identifier should use hashes that are strong enough, to prevent possible collisions.
+ */
+public class ObjectCollectionManager {
+
+}
diff --git a/src/main/java/com/keuin/kbackupfabric/util/backup/inc/identifier/ObjectIdentifier.java b/src/main/java/com/keuin/kbackupfabric/util/backup/inc/identifier/ObjectIdentifier.java
new file mode 100644
index 0000000..079f49d
--- /dev/null
+++ b/src/main/java/com/keuin/kbackupfabric/util/backup/inc/identifier/ObjectIdentifier.java
@@ -0,0 +1,9 @@
+package com.keuin.kbackupfabric.util.backup.inc.identifier;
+
+/**
+ * The identifier distinguishing files in the object collection.
+ * It should be based on cryptographic hash function in order to prevent possible attacks to the backup system.
+ * All identifiers should be immutable and implement their own equals method.
+ */
+public interface ObjectIdentifier {
+}
diff --git a/src/main/java/com/keuin/kbackupfabric/util/backup/inc/identifier/SingleHashIdentifier.java b/src/main/java/com/keuin/kbackupfabric/util/backup/inc/identifier/SingleHashIdentifier.java
new file mode 100644
index 0000000..50b23bb
--- /dev/null
+++ b/src/main/java/com/keuin/kbackupfabric/util/backup/inc/identifier/SingleHashIdentifier.java
@@ -0,0 +1,32 @@
+package com.keuin.kbackupfabric.util.backup.inc.identifier;
+
+import java.io.File;
+import java.util.Arrays;
+
+/**
+ * A simple identifier based on a single hash function.
+ */
+public abstract class SingleHashIdentifier implements ObjectIdentifier {
+
+ private final byte[] hash;
+
+ protected SingleHashIdentifier(byte[] hash) {
+ this.hash = Arrays.copyOf(hash, hash.length);
+ }
+
+ /**
+ * The hash function.
+ *
+ * @param file the file to be hashed.
+ * @return the hash bytes.
+ */
+ protected abstract byte[] hash(File file);
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof SingleHashIdentifier)) {
+ return false;
+ }
+ return Arrays.equals(hash, ((SingleHashIdentifier) obj).hash);
+ }
+}