summaryrefslogtreecommitdiff
path: root/src/main/java/com/keuin/kbackupfabric/util
diff options
context:
space:
mode:
authorKeuin <[email protected]>2020-08-02 18:31:50 +0800
committerkeuin <[email protected]>2020-08-02 18:31:50 +0800
commitd9c2af035ac2edb68bc8b6a1f94b7c772c3509c8 (patch)
tree4a27dd9a313090ae75d35e4d27d5bdd40b1eb218 /src/main/java/com/keuin/kbackupfabric/util
parentf09d420df609194a17e9d9ec63d710df8135aa8e (diff)
Refactor & object tree impl. stage 1
Diffstat (limited to 'src/main/java/com/keuin/kbackupfabric/util')
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/PrintUtil.java16
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/ZipUtil.java6
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/backup/BackupFilesystemUtil.java (renamed from src/main/java/com/keuin/kbackupfabric/util/BackupFilesystemUtil.java)14
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/backup/BackupNameSuggestionProvider.java (renamed from src/main/java/com/keuin/kbackupfabric/util/BackupNameSuggestionProvider.java)2
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/backup/BackupNameTimeFormatter.java (renamed from src/main/java/com/keuin/kbackupfabric/util/BackupNameTimeFormatter.java)12
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/backup/BackupType.java21
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/backup/builder/BackupFileNameBuilder.java25
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/backup/builder/ObjectTreeBackupFileNameBuilder.java20
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/backup/builder/PrimitiveZipBackupFileNameBuilder.java22
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/backup/formatter/BackupFileNameFormatter.java32
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/backup/formatter/ObjectTreeBackupFileNameFormatter.java47
-rw-r--r--src/main/java/com/keuin/kbackupfabric/util/backup/formatter/PrimitiveZipBackupFileNameFormatter.java46
12 files changed, 253 insertions, 10 deletions
diff --git a/src/main/java/com/keuin/kbackupfabric/util/PrintUtil.java b/src/main/java/com/keuin/kbackupfabric/util/PrintUtil.java
index 8839993..81c6a33 100644
--- a/src/main/java/com/keuin/kbackupfabric/util/PrintUtil.java
+++ b/src/main/java/com/keuin/kbackupfabric/util/PrintUtil.java
@@ -80,18 +80,34 @@ public final class PrintUtil {
return context;
}
+ /**
+ * Print debug message on the server console.
+ * @param string the message.
+ */
public static void debug(String string) {
LOGGER.debug("[KBackup] " + string);
}
+ /**
+ * Print informative message on the server console.
+ * @param string the message.
+ */
public static void info(String string) {
LOGGER.info("[KBackup] " + string);
}
+ /**
+ * Print warning message on the server console.
+ * @param string the message.
+ */
public static void warn(String string) {
LOGGER.warn("[KBackup] " + string);
}
+ /**
+ * Print error message on the server console.
+ * @param string the message.
+ */
public static void error(String string) {
LOGGER.error("[KBackup] " + string);
}
diff --git a/src/main/java/com/keuin/kbackupfabric/util/ZipUtil.java b/src/main/java/com/keuin/kbackupfabric/util/ZipUtil.java
index 11b912e..0ca8da3 100644
--- a/src/main/java/com/keuin/kbackupfabric/util/ZipUtil.java
+++ b/src/main/java/com/keuin/kbackupfabric/util/ZipUtil.java
@@ -68,11 +68,11 @@ public final class ZipUtil {
* @param zipPath 压缩文件保存的路径。注意:zipPath不能是srcPath路径下的子文件夹
* @param zipFileName 压缩文件名
* @throws IOException IO Error
- * @throws ZipUtilException General exception, such as loop recursion or invalid input.
+ * @throws ZipUtilException General exception, such as loop recursion.
*/
public static void makeBackupZip(String srcPath, String zipPath, String zipFileName, BackupMetadata backupMetadata) throws IOException, ZipUtilException {
- if (srcPath.isEmpty() || zipPath.isEmpty() || zipFileName.isEmpty()) {
- throw new ZipUtilException("Parameter for zip() contains null.");
+ if (srcPath == null || zipPath == null || zipFileName == null || backupMetadata == null || srcPath.isEmpty() || zipPath.isEmpty() || zipFileName.isEmpty()) {
+ throw new IllegalArgumentException("Parameter for zip() contains null.");
}
CheckedOutputStream checkedOutputStream;
ZipOutputStream zipOutputStream = null;
diff --git a/src/main/java/com/keuin/kbackupfabric/util/BackupFilesystemUtil.java b/src/main/java/com/keuin/kbackupfabric/util/backup/BackupFilesystemUtil.java
index ce39615..54c2f58 100644
--- a/src/main/java/com/keuin/kbackupfabric/util/BackupFilesystemUtil.java
+++ b/src/main/java/com/keuin/kbackupfabric/util/backup/BackupFilesystemUtil.java
@@ -1,5 +1,6 @@
-package com.keuin.kbackupfabric.util;
+package com.keuin.kbackupfabric.util.backup;
+import com.keuin.kbackupfabric.util.ReflectionUtils;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.world.ThreadedAnvilChunkStorage;
import net.minecraft.world.World;
@@ -16,10 +17,16 @@ public final class BackupFilesystemUtil {
private static final String backupSaveDirectoryName = "backups";
private static final String backupFileNamePrefix = "kbackup-";
+ public static String getBackupFileNamePrefix() {
+ return backupFileNamePrefix;
+ }
+
+ @Deprecated
public static String getBackupFileName(String backupName) {
return backupFileNamePrefix + backupName + ".zip";
}
+ @Deprecated
public static String getBackupName(String backupFileName) {
try {
if (backupFileName.matches(backupFileNamePrefix + ".+\\.zip"))
@@ -49,10 +56,7 @@ public final class BackupFilesystemUtil {
return saveDir.getName();
}
- public static String getBackupFileNamePrefix() {
- return backupFileNamePrefix;
- }
-
+ @Deprecated
public static long getBackupTimeFromBackupFileName(String backupFileName) {
Matcher matcher = Pattern.compile("[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}").matcher(backupFileName);
if (matcher.find()) {
diff --git a/src/main/java/com/keuin/kbackupfabric/util/BackupNameSuggestionProvider.java b/src/main/java/com/keuin/kbackupfabric/util/backup/BackupNameSuggestionProvider.java
index ff122b9..4639e99 100644
--- a/src/main/java/com/keuin/kbackupfabric/util/BackupNameSuggestionProvider.java
+++ b/src/main/java/com/keuin/kbackupfabric/util/backup/BackupNameSuggestionProvider.java
@@ -1,4 +1,4 @@
-package com.keuin.kbackupfabric.util;
+package com.keuin.kbackupfabric.util.backup;
import com.mojang.brigadier.suggestion.SuggestionProvider;
import com.mojang.brigadier.suggestion.Suggestions;
diff --git a/src/main/java/com/keuin/kbackupfabric/util/BackupNameTimeFormatter.java b/src/main/java/com/keuin/kbackupfabric/util/backup/BackupNameTimeFormatter.java
index 5d00270..3811ae8 100644
--- a/src/main/java/com/keuin/kbackupfabric/util/BackupNameTimeFormatter.java
+++ b/src/main/java/com/keuin/kbackupfabric/util/backup/BackupNameTimeFormatter.java
@@ -1,4 +1,4 @@
-package com.keuin.kbackupfabric.util;
+package com.keuin.kbackupfabric.util.backup;
import java.time.LocalDateTime;
import java.time.ZoneId;
@@ -8,10 +8,16 @@ import java.time.format.DateTimeFormatter;
public class BackupNameTimeFormatter {
private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss");
+ @Deprecated
public static String getTimeString() {
return LocalDateTime.now().format(formatter);
}
+ public static String localDateTimeToString(LocalDateTime localDateTime) {
+ return localDateTime.format(formatter);
+ }
+
+ @Deprecated
public static long timeStringToEpochSeconds(String timeString) {
ZoneId systemZone = ZoneId.systemDefault(); // my timezone
LocalDateTime localDateTime = LocalDateTime.parse(timeString, formatter);
@@ -19,4 +25,8 @@ public class BackupNameTimeFormatter {
return localDateTime.toEpochSecond(currentOffsetForMyZone);
}
+ public static LocalDateTime timeStringToLocalDateTime(String timeString) {
+ return LocalDateTime.parse(timeString,formatter);
+ }
+
}
diff --git a/src/main/java/com/keuin/kbackupfabric/util/backup/BackupType.java b/src/main/java/com/keuin/kbackupfabric/util/backup/BackupType.java
new file mode 100644
index 0000000..95a32ae
--- /dev/null
+++ b/src/main/java/com/keuin/kbackupfabric/util/backup/BackupType.java
@@ -0,0 +1,21 @@
+package com.keuin.kbackupfabric.util.backup;
+
+/**
+ * Representing the backup type.
+ * Should only be used in BackupFileNameBuilder and BackupFileNameFormatter
+ */
+public enum BackupType {
+
+ PRIMITIVE_ZIP_BACKUP("Primitive Zip Backup"),
+ OBJECT_TREE_BACKUP("Object Tree Backup");
+
+ private final String name;
+ BackupType(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+}
diff --git a/src/main/java/com/keuin/kbackupfabric/util/backup/builder/BackupFileNameBuilder.java b/src/main/java/com/keuin/kbackupfabric/util/backup/builder/BackupFileNameBuilder.java
new file mode 100644
index 0000000..16c598b
--- /dev/null
+++ b/src/main/java/com/keuin/kbackupfabric/util/backup/builder/BackupFileNameBuilder.java
@@ -0,0 +1,25 @@
+package com.keuin.kbackupfabric.util.backup.builder;
+
+import com.sun.istack.internal.NotNull;
+
+import java.time.LocalDateTime;
+
+public interface BackupFileNameBuilder {
+
+ static BackupFileNameBuilder primitiveZipBackup() {
+ return PrimitiveZipBackupFileNameBuilder.getInstance();
+ }
+
+ static BackupFileNameBuilder objectTreeBackup() {
+ return ObjectTreeBackupFileNameBuilder.getInstance();
+ }
+
+ /**
+ * Build a backup file name based on given information.
+ * @param time when the backup was created.
+ * @param backupName the custom name of this backup. Note that this should be a valid file name in current file system.
+ * @return the backup file name string.
+ */
+ String build(@NotNull LocalDateTime time, @NotNull String backupName);
+
+}
diff --git a/src/main/java/com/keuin/kbackupfabric/util/backup/builder/ObjectTreeBackupFileNameBuilder.java b/src/main/java/com/keuin/kbackupfabric/util/backup/builder/ObjectTreeBackupFileNameBuilder.java
new file mode 100644
index 0000000..3c15741
--- /dev/null
+++ b/src/main/java/com/keuin/kbackupfabric/util/backup/builder/ObjectTreeBackupFileNameBuilder.java
@@ -0,0 +1,20 @@
+package com.keuin.kbackupfabric.util.backup.builder;
+
+import com.keuin.kbackupfabric.util.backup.BackupFilesystemUtil;
+import com.keuin.kbackupfabric.util.backup.BackupNameTimeFormatter;
+
+import java.time.LocalDateTime;
+
+public class ObjectTreeBackupFileNameBuilder implements BackupFileNameBuilder {
+ private static final ObjectTreeBackupFileNameBuilder instance = new ObjectTreeBackupFileNameBuilder();
+
+ public static ObjectTreeBackupFileNameBuilder getInstance() {
+ return instance;
+ }
+
+ @Override
+ public String build(LocalDateTime time, String backupName) {
+ String timeString = BackupNameTimeFormatter.localDateTimeToString(time);
+ return String.format("%s%s_%s%s", BackupFilesystemUtil.getBackupFileNamePrefix(),timeString,backupName,".json");
+ }
+}
diff --git a/src/main/java/com/keuin/kbackupfabric/util/backup/builder/PrimitiveZipBackupFileNameBuilder.java b/src/main/java/com/keuin/kbackupfabric/util/backup/builder/PrimitiveZipBackupFileNameBuilder.java
new file mode 100644
index 0000000..f910c37
--- /dev/null
+++ b/src/main/java/com/keuin/kbackupfabric/util/backup/builder/PrimitiveZipBackupFileNameBuilder.java
@@ -0,0 +1,22 @@
+package com.keuin.kbackupfabric.util.backup.builder;
+
+import com.keuin.kbackupfabric.util.backup.BackupFilesystemUtil;
+import com.keuin.kbackupfabric.util.backup.BackupNameTimeFormatter;
+
+import java.time.LocalDateTime;
+
+public class PrimitiveZipBackupFileNameBuilder implements BackupFileNameBuilder {
+
+ private static final PrimitiveZipBackupFileNameBuilder instance = new PrimitiveZipBackupFileNameBuilder();
+
+ public static PrimitiveZipBackupFileNameBuilder getInstance() {
+ return instance;
+ }
+
+ @Override
+ public String build(LocalDateTime time, String backupName) {
+ String timeString = BackupNameTimeFormatter.localDateTimeToString(time);
+ return String.format("%s%s_%s%s", BackupFilesystemUtil.getBackupFileNamePrefix(),timeString,backupName,".zip");
+ }
+
+}
diff --git a/src/main/java/com/keuin/kbackupfabric/util/backup/formatter/BackupFileNameFormatter.java b/src/main/java/com/keuin/kbackupfabric/util/backup/formatter/BackupFileNameFormatter.java
new file mode 100644
index 0000000..eae3639
--- /dev/null
+++ b/src/main/java/com/keuin/kbackupfabric/util/backup/formatter/BackupFileNameFormatter.java
@@ -0,0 +1,32 @@
+package com.keuin.kbackupfabric.util.backup.formatter;
+
+import com.keuin.kbackupfabric.util.backup.BackupNameTimeFormatter;
+import com.sun.istack.internal.NotNull;
+
+import java.time.LocalDateTime;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public interface BackupFileNameFormatter {
+
+ BackupFileName format(@NotNull String fileName);
+
+ class BackupFileName {
+ public final LocalDateTime time;
+ public final String name;
+
+ public BackupFileName(LocalDateTime time, String name) {
+ this.time = time;
+ this.name = name;
+ }
+ }
+
+ static BackupFileNameFormatter objectTreeBackup() {
+ return ObjectTreeBackupFileNameFormatter.getInstance();
+ }
+
+ static BackupFileNameFormatter primitiveZipBackup() {
+ return PrimitiveZipBackupFileNameFormatter.getInstance();
+ }
+
+}
diff --git a/src/main/java/com/keuin/kbackupfabric/util/backup/formatter/ObjectTreeBackupFileNameFormatter.java b/src/main/java/com/keuin/kbackupfabric/util/backup/formatter/ObjectTreeBackupFileNameFormatter.java
new file mode 100644
index 0000000..e5503a9
--- /dev/null
+++ b/src/main/java/com/keuin/kbackupfabric/util/backup/formatter/ObjectTreeBackupFileNameFormatter.java
@@ -0,0 +1,47 @@
+package com.keuin.kbackupfabric.util.backup.formatter;
+
+import com.keuin.kbackupfabric.util.backup.BackupFilesystemUtil;
+import com.keuin.kbackupfabric.util.backup.BackupNameTimeFormatter;
+import com.sun.istack.internal.NotNull;
+import com.sun.istack.internal.Nullable;
+import org.spongepowered.asm.mixin.Overwrite;
+
+import java.time.LocalDateTime;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class ObjectTreeBackupFileNameFormatter implements BackupFileNameFormatter {
+
+ private static final ObjectTreeBackupFileNameFormatter instance = new ObjectTreeBackupFileNameFormatter();
+
+ public static ObjectTreeBackupFileNameFormatter getInstance() {
+ return instance;
+ }
+
+ @Override
+ public BackupFileNameFormatter.BackupFileName format(@NotNull String fileName) {
+ LocalDateTime time = getTime(fileName);
+ String name = getBackupName(fileName);
+ return new BackupFileNameFormatter.BackupFileName(time,name);
+ }
+
+ @Nullable
+ private LocalDateTime getTime(String fileName) {
+ Matcher matcher = Pattern.compile("[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}").matcher(fileName);
+ if (matcher.find()) {
+ String timeString = matcher.group(0);
+ return BackupNameTimeFormatter.timeStringToLocalDateTime(timeString);
+ }
+ return null;
+ }
+
+ private String getBackupName(String backupFileName) {
+ try {
+ if (backupFileName.matches(BackupFilesystemUtil.getBackupFileNamePrefix() + ".+\\.json"))
+ return backupFileName.substring(BackupFilesystemUtil.getBackupFileNamePrefix().length(), backupFileName.length() - 4);
+ } catch (IndexOutOfBoundsException ignored) {
+ }
+ return backupFileName;
+ }
+
+}
diff --git a/src/main/java/com/keuin/kbackupfabric/util/backup/formatter/PrimitiveZipBackupFileNameFormatter.java b/src/main/java/com/keuin/kbackupfabric/util/backup/formatter/PrimitiveZipBackupFileNameFormatter.java
new file mode 100644
index 0000000..40450eb
--- /dev/null
+++ b/src/main/java/com/keuin/kbackupfabric/util/backup/formatter/PrimitiveZipBackupFileNameFormatter.java
@@ -0,0 +1,46 @@
+package com.keuin.kbackupfabric.util.backup.formatter;
+
+import com.keuin.kbackupfabric.util.backup.BackupFilesystemUtil;
+import com.keuin.kbackupfabric.util.backup.BackupNameTimeFormatter;
+import com.sun.istack.internal.NotNull;
+import com.sun.istack.internal.Nullable;
+
+import java.time.LocalDateTime;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class PrimitiveZipBackupFileNameFormatter implements BackupFileNameFormatter {
+
+ private static final PrimitiveZipBackupFileNameFormatter instance = new PrimitiveZipBackupFileNameFormatter();
+
+ public static PrimitiveZipBackupFileNameFormatter getInstance() {
+ return instance;
+ }
+
+ @Override
+ public BackupFileNameFormatter.BackupFileName format(@NotNull String fileName) {
+ LocalDateTime time = getTime(fileName);
+ String name = getBackupName(fileName);
+ return new BackupFileNameFormatter.BackupFileName(time,name);
+ }
+
+ @Nullable
+ private LocalDateTime getTime(String fileName) {
+ Matcher matcher = Pattern.compile("[0-9]{4}-[0-9]{2}-[0-9]{2}_[0-9]{2}-[0-9]{2}-[0-9]{2}").matcher(fileName);
+ if (matcher.find()) {
+ String timeString = matcher.group(0);
+ return BackupNameTimeFormatter.timeStringToLocalDateTime(timeString);
+ }
+ return null;
+ }
+
+ private String getBackupName(String backupFileName) {
+ try {
+ if (backupFileName.matches(BackupFilesystemUtil.getBackupFileNamePrefix() + ".+\\.zip"))
+ return backupFileName.substring(BackupFilesystemUtil.getBackupFileNamePrefix().length(), backupFileName.length() - 4);
+ } catch (IndexOutOfBoundsException ignored) {
+ }
+ return backupFileName;
+ }
+
+}