DiskDataStore class
Пакет: com.hypixel.hytale.server.core.universe.datastore
Файл: com/hypixel/hytale/server/core/universe/datastore/DiskDataStore.java
implements: DataStore<T>
Поля (10)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
String |
EXTENSION |
|
List |
var1 |
|
Map |
var1 |
|
String |
var1 |
|
Path |
var2 |
|
Path |
var3 |
|
ExtraInfo |
var3 |
|
Path |
var4 |
|
BsonDocument |
var4 |
|
Path |
var8 |
Методы (7)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Invalid ID: " + var1) |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Data store path must be within universe directory: " + var1) |
|
|
for for(Path var7 : var5) |
|
|
for for(Path var4 : var2) |
|
|
for for(Path var4 : var2) |
|
|
for for(Path var3 : var1) |
|
|
if if(var4 == null) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.core.universe.datastore;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.util.RawJsonReader;
class="kw">import com.hypixel.hytale.common.util.PathUtil;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import com.hypixel.hytale.server.core.universe.Universe;
class="kw">import com.hypixel.hytale.server.core.util.BsonUtil;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.io.IOException;
class="kw">import java.nio.file.DirectoryStream;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import java.util.logging.Level;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonDocument;
class="kw">public class DiskDataStore<T> class="kw">implements DataStore<T> {
class="kw">private class="kw">static class="kw">final String EXTENSION = ".json";
class="kw">private class="kw">static class="kw">final int EXTENSION_LEN = ".json".length();
class="kw">private class="kw">static class="kw">final String EXTENSION_BACKUP = ".json.bak";
class="kw">private class="kw">static class="kw">final String GLOB = "*.json";
class="kw">private class="kw">static class="kw">final String GLOB_WITH_BACKUP = "*.{json,json.bak}";
@Nonnull
class="kw">private class="kw">final HytaleLogger logger;
@Nonnull
class="kw">private class="kw">final Path path;
class="kw">private class="kw">final BuilderCodec<T> codec;
class="kw">public DiskDataStore(@Nonnull String var1, BuilderCodec<T> var2) {
this.logger = HytaleLogger.get("DataStore|" + var1);
Path var3 = Universe.get().getPath();
Path var4 = PathUtil.resolvePathWithinDir(var3, var1);
if (var4 == null) {
throw new IllegalStateException("Data store path must be within universe directory: " + var1);
}
this.path = var4;
this.codec = var2;
if (Files.isDirectory(this.path)) {
try (DirectoryStream var5 = Files.newDirectoryStream(this.path, "*.bson")) {
for (Path var7 : var5) {
Path var8 = getPathFromId(this.path, getIdFromPath(var7));
try {
Files.move(var7, var8);
} catch (IOException var11) {
}
}
} catch (IOException var13) {
((HytaleLogger.Api)this.logger.at(Level.SEVERE).withCause(var13)).log("Failed to migrate files form .bson to .json!");
}
}
}
@Nonnull
class="kw">public Path getPath() {
class="kw">return this.path;
}
@Override
class="kw">public BuilderCodec<T> getCodec() {
class="kw">return this.codec;
}
@Nullable
@Override
class="kw">public T load(String var1) class="kw">throws IOException {
Path var2 = getPathFromId(this.path, var1);
class="kw">return Files.exists(var2) ? this.load0(var2) : null;
}
@Override
class="kw">public void save(String var1, T var2) {
ExtraInfo var3 = ExtraInfo.THREAD_LOCAL.get();
BsonDocument var4 = this.codec.encode(var2, var3);
var3.getValidationResults().logOrThrowValidatorExceptions(this.logger);
BsonUtil.writeDocument(getPathFromId(this.path, var1), var4.asDocument()).join();
}
@Override
class="kw">public void remove(String var1) class="kw">throws IOException {
Files.deleteIfExists(getPathFromId(this.path, var1));
Files.deleteIfExists(getBackupPathFromId(this.path, var1));
}
@Nonnull
@Override
class="kw">public List<String> list() class="kw">throws IOException {
List var1 = new ObjectArrayList();
try (DirectoryStream var2 = Files.newDirectoryStream(this.path, "*.json")) {
for (Path var4 : var2) {
var1.add(getIdFromPath(var4));
}
}
class="kw">return var1;
}
@Nonnull
@Override
class="kw">public Map<String, T> loadAll() class="kw">throws IOException {
Map var1 = new Object2ObjectOpenHashMap();
try (DirectoryStream var2 = Files.newDirectoryStream(this.path, "*.json")) {
for (Path var4 : var2) {
var1.put(getIdFromPath(var4), this.load0(var4));
}
}
class="kw">return var1;
}
@Override
class="kw">public void removeAll() class="kw">throws IOException {
try (DirectoryStream var1 = Files.newDirectoryStream(this.path, "*.{json,json.bak}")) {
for (Path var3 : var1) {
Files.delete(var3);
}
}
}
@Nullable
class="kw">protected T load0(@Nonnull Path var1) class="kw">throws IOException {
class="kw">return RawJsonReader.readSyncWithBak(var1, this.codec, this.logger);
}
@Nonnull
class="kw">protected class="kw">static Path getPathFromId(@Nonnull Path var0, String var1) {
if (!PathUtil.isValidName(var1)) {
throw new IllegalArgumentException("Invalid ID: " + var1);
} else {
class="kw">return var0.resolve(var1 + ".json");
}
}
@Nonnull
class="kw">protected class="kw">static Path getBackupPathFromId(@Nonnull Path var0, String var1) {
if (!PathUtil.isValidName(var1)) {
throw new IllegalArgumentException("Invalid ID: " + var1);
} else {
class="kw">return var0.resolve(var1 + ".json.bak");
}
}
@Nonnull
class="kw">protected class="kw">static String getIdFromPath(@Nonnull Path var0) {
String var1 = var0.getFileName().toString();
class="kw">return var1.substring(0, var1.length() - EXTENSION_LEN);
}
}