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);
   }
}