diff --git a/core/src/main/java/com/seibel/lod/core/datatype/AbstractDataSourceLoader.java b/core/src/main/java/com/seibel/lod/core/datatype/AbstractDataSourceLoader.java index 7ef4b2498..ee38dbdd2 100644 --- a/core/src/main/java/com/seibel/lod/core/datatype/AbstractDataSourceLoader.java +++ b/core/src/main/java/com/seibel/lod/core/datatype/AbstractDataSourceLoader.java @@ -2,7 +2,7 @@ package com.seibel.lod.core.datatype; import com.google.common.collect.HashMultimap; import com.seibel.lod.core.level.IDhLevel; -import com.seibel.lod.core.file.datafile.DataMetaFile; +import com.seibel.lod.core.file.fullDatafile.FullDataMetaFile; import java.io.IOException; import java.io.InputStream; @@ -62,7 +62,7 @@ public abstract class AbstractDataSourceLoader } /** Can return null as meaning the requirement is not met */ - public abstract ILodDataSource loadData(DataMetaFile dataFile, InputStream data, IDhLevel level) throws IOException; + public abstract ILodDataSource loadData(FullDataMetaFile dataFile, InputStream data, IDhLevel level) throws IOException; } diff --git a/core/src/main/java/com/seibel/lod/core/datatype/ILodDataSource.java b/core/src/main/java/com/seibel/lod/core/datatype/ILodDataSource.java index ac31e6bf1..f765d5f42 100644 --- a/core/src/main/java/com/seibel/lod/core/datatype/ILodDataSource.java +++ b/core/src/main/java/com/seibel/lod/core/datatype/ILodDataSource.java @@ -3,9 +3,9 @@ package com.seibel.lod.core.datatype; import com.seibel.lod.core.datatype.full.ChunkSizedData; import com.seibel.lod.core.datatype.full.FullDataPointIdMap; import com.seibel.lod.core.datatype.full.accessor.SingleFullArrayView; +import com.seibel.lod.core.file.fullDatafile.FullDataMetaFile; import com.seibel.lod.core.level.IDhLevel; import com.seibel.lod.core.pos.DhSectionPos; -import com.seibel.lod.core.file.datafile.DataMetaFile; import java.io.IOException; import java.io.OutputStream; @@ -22,7 +22,7 @@ public interface ILodDataSource boolean isEmpty(); - void saveData(IDhLevel level, DataMetaFile file, OutputStream dataStream) throws IOException; + void saveData(IDhLevel level, FullDataMetaFile file, OutputStream dataStream) throws IOException; /** * Attempts to get the data column for the given relative x and z position. diff --git a/core/src/main/java/com/seibel/lod/core/datatype/full/FullDataDownSampler.java b/core/src/main/java/com/seibel/lod/core/datatype/full/FullDataDownSampler.java index 3e7aea952..7da1f40be 100644 --- a/core/src/main/java/com/seibel/lod/core/datatype/full/FullDataDownSampler.java +++ b/core/src/main/java/com/seibel/lod/core/datatype/full/FullDataDownSampler.java @@ -2,9 +2,9 @@ package com.seibel.lod.core.datatype.full; import com.seibel.lod.core.datatype.ILodDataSource; import com.seibel.lod.core.datatype.full.accessor.SingleFullArrayView; +import com.seibel.lod.core.file.fullDatafile.IFullDataSourceProvider; import com.seibel.lod.core.pos.DhLodPos; import com.seibel.lod.core.pos.DhSectionPos; -import com.seibel.lod.core.file.datafile.IDataSourceProvider; import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.util.LodUtil; import org.apache.logging.log4j.Logger; @@ -14,12 +14,12 @@ import java.util.concurrent.CompletableFuture; public class FullDataDownSampler { private static final Logger LOGGER = DhLoggerBuilder.getLogger(); - public static CompletableFuture createDownSamplingFuture(DhSectionPos newTarget, IDataSourceProvider provider) { + public static CompletableFuture createDownSamplingFuture(DhSectionPos newTarget, IFullDataSourceProvider provider) { // TODO: Make this future somehow run with lowest priority (to ensure ram usage stays low) return createDownSamplingFuture(FullDataSource.createEmpty(newTarget), provider); } - public static CompletableFuture createDownSamplingFuture(FullDataSource target, IDataSourceProvider provider) { + public static CompletableFuture createDownSamplingFuture(FullDataSource target, IFullDataSourceProvider provider) { int sectionSizeNeeded = 1 << target.getDataDetail(); ArrayList> futures; diff --git a/core/src/main/java/com/seibel/lod/core/datatype/full/FullDataLoader.java b/core/src/main/java/com/seibel/lod/core/datatype/full/FullDataLoader.java index 9b7d96e80..6be2b82ca 100644 --- a/core/src/main/java/com/seibel/lod/core/datatype/full/FullDataLoader.java +++ b/core/src/main/java/com/seibel/lod/core/datatype/full/FullDataLoader.java @@ -2,8 +2,8 @@ package com.seibel.lod.core.datatype.full; import com.seibel.lod.core.datatype.AbstractDataSourceLoader; import com.seibel.lod.core.datatype.ILodDataSource; +import com.seibel.lod.core.file.fullDatafile.FullDataMetaFile; import com.seibel.lod.core.level.IDhLevel; -import com.seibel.lod.core.file.datafile.DataMetaFile; import java.io.IOException; import java.io.InputStream; @@ -16,7 +16,7 @@ public class FullDataLoader extends AbstractDataSourceLoader } @Override - public ILodDataSource loadData(DataMetaFile dataFile, InputStream data, IDhLevel level) throws IOException + public ILodDataSource loadData(FullDataMetaFile dataFile, InputStream data, IDhLevel level) throws IOException { //TODO: Add decompressor here return FullDataSource.loadData(dataFile, data, level); diff --git a/core/src/main/java/com/seibel/lod/core/datatype/full/FullDataSource.java b/core/src/main/java/com/seibel/lod/core/datatype/full/FullDataSource.java index ecbce432f..2747657fc 100644 --- a/core/src/main/java/com/seibel/lod/core/datatype/full/FullDataSource.java +++ b/core/src/main/java/com/seibel/lod/core/datatype/full/FullDataSource.java @@ -5,7 +5,7 @@ import com.seibel.lod.core.datatype.full.accessor.SingleFullArrayView; import com.seibel.lod.core.level.IDhLevel; import com.seibel.lod.core.pos.DhBlockPos2D; import com.seibel.lod.core.pos.DhLodPos; -import com.seibel.lod.core.file.datafile.DataMetaFile; +import com.seibel.lod.core.file.fullDatafile.FullDataMetaFile; import com.seibel.lod.core.datatype.ILodDataSource; import com.seibel.lod.core.pos.DhSectionPos; import com.seibel.lod.core.util.BitShiftUtil; @@ -127,7 +127,7 @@ public class FullDataSource extends FullArrayView implements ILodDataSource public void markNotEmpty() { this.isEmpty = false; } @Override - public void saveData(IDhLevel level, DataMetaFile file, OutputStream dataStream) throws IOException + public void saveData(IDhLevel level, FullDataMetaFile file, OutputStream dataStream) throws IOException { DataOutputStream dos = new DataOutputStream(dataStream); // DO NOT CLOSE { @@ -172,7 +172,7 @@ public class FullDataSource extends FullArrayView implements ILodDataSource } - public static FullDataSource loadData(DataMetaFile dataFile, InputStream dataStream, IDhLevel level) throws IOException + public static FullDataSource loadData(FullDataMetaFile dataFile, InputStream dataStream, IDhLevel level) throws IOException { DataInputStream dos = new DataInputStream(dataStream); // DO NOT CLOSE { diff --git a/core/src/main/java/com/seibel/lod/core/datatype/full/SparseDataLoader.java b/core/src/main/java/com/seibel/lod/core/datatype/full/SparseDataLoader.java index 263605656..763cbbe03 100644 --- a/core/src/main/java/com/seibel/lod/core/datatype/full/SparseDataLoader.java +++ b/core/src/main/java/com/seibel/lod/core/datatype/full/SparseDataLoader.java @@ -2,8 +2,8 @@ package com.seibel.lod.core.datatype.full; import com.seibel.lod.core.datatype.AbstractDataSourceLoader; import com.seibel.lod.core.datatype.ILodDataSource; +import com.seibel.lod.core.file.fullDatafile.FullDataMetaFile; import com.seibel.lod.core.level.IDhLevel; -import com.seibel.lod.core.file.datafile.DataMetaFile; import java.io.IOException; import java.io.InputStream; @@ -16,7 +16,7 @@ public class SparseDataLoader extends AbstractDataSourceLoader } @Override - public ILodDataSource loadData(DataMetaFile dataFile, InputStream data, IDhLevel level) throws IOException + public ILodDataSource loadData(FullDataMetaFile dataFile, InputStream data, IDhLevel level) throws IOException { return SparseDataSource.loadData(dataFile, data, level); } diff --git a/core/src/main/java/com/seibel/lod/core/datatype/full/SparseDataSource.java b/core/src/main/java/com/seibel/lod/core/datatype/full/SparseDataSource.java index cf9581327..5c40558dd 100644 --- a/core/src/main/java/com/seibel/lod/core/datatype/full/SparseDataSource.java +++ b/core/src/main/java/com/seibel/lod/core/datatype/full/SparseDataSource.java @@ -4,10 +4,10 @@ import com.seibel.lod.core.datatype.IIncompleteDataSource; import com.seibel.lod.core.datatype.ILodDataSource; import com.seibel.lod.core.datatype.full.accessor.FullArrayView; import com.seibel.lod.core.datatype.full.accessor.SingleFullArrayView; +import com.seibel.lod.core.file.fullDatafile.FullDataMetaFile; import com.seibel.lod.core.level.IDhLevel; import com.seibel.lod.core.pos.DhLodPos; import com.seibel.lod.core.pos.DhSectionPos; -import com.seibel.lod.core.file.datafile.DataMetaFile; import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.util.BitShiftUtil; import com.seibel.lod.core.util.LodUtil; @@ -210,7 +210,7 @@ public class SparseDataSource implements IIncompleteDataSource } @Override - public void saveData(IDhLevel level, DataMetaFile file, OutputStream dataStream) throws IOException + public void saveData(IDhLevel level, FullDataMetaFile file, OutputStream dataStream) throws IOException { try (DataOutputStream dos = new DataOutputStream(dataStream)) { @@ -279,7 +279,7 @@ public class SparseDataSource implements IIncompleteDataSource } } - public static SparseDataSource loadData(DataMetaFile dataFile, InputStream dataStream, IDhLevel level) throws IOException + public static SparseDataSource loadData(FullDataMetaFile dataFile, InputStream dataStream, IDhLevel level) throws IOException { LodUtil.assertTrue(dataFile.pos.sectionDetailLevel > SPARSE_UNIT_DETAIL); LodUtil.assertTrue(dataFile.pos.sectionDetailLevel <= MAX_SECTION_DETAIL); diff --git a/core/src/main/java/com/seibel/lod/core/datatype/full/SpottyDataLoader.java b/core/src/main/java/com/seibel/lod/core/datatype/full/SpottyDataLoader.java index 282309050..14d86660a 100644 --- a/core/src/main/java/com/seibel/lod/core/datatype/full/SpottyDataLoader.java +++ b/core/src/main/java/com/seibel/lod/core/datatype/full/SpottyDataLoader.java @@ -2,7 +2,7 @@ package com.seibel.lod.core.datatype.full; import com.seibel.lod.core.datatype.AbstractDataSourceLoader; import com.seibel.lod.core.datatype.ILodDataSource; -import com.seibel.lod.core.file.datafile.DataMetaFile; +import com.seibel.lod.core.file.fullDatafile.FullDataMetaFile; import com.seibel.lod.core.level.IDhLevel; import java.io.IOException; @@ -15,7 +15,7 @@ public class SpottyDataLoader extends AbstractDataSourceLoader } @Override - public ILodDataSource loadData(DataMetaFile dataFile, InputStream data, IDhLevel level) throws IOException { + public ILodDataSource loadData(FullDataMetaFile dataFile, InputStream data, IDhLevel level) throws IOException { return SpottyDataSource.loadData(dataFile, data, level); } } diff --git a/core/src/main/java/com/seibel/lod/core/datatype/full/SpottyDataSource.java b/core/src/main/java/com/seibel/lod/core/datatype/full/SpottyDataSource.java index 833c43849..51515261a 100644 --- a/core/src/main/java/com/seibel/lod/core/datatype/full/SpottyDataSource.java +++ b/core/src/main/java/com/seibel/lod/core/datatype/full/SpottyDataSource.java @@ -4,7 +4,7 @@ import com.seibel.lod.core.datatype.IIncompleteDataSource; import com.seibel.lod.core.datatype.ILodDataSource; import com.seibel.lod.core.datatype.full.accessor.FullArrayView; import com.seibel.lod.core.datatype.full.accessor.SingleFullArrayView; -import com.seibel.lod.core.file.datafile.DataMetaFile; +import com.seibel.lod.core.file.fullDatafile.FullDataMetaFile; import com.seibel.lod.core.level.IDhLevel; import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.pos.DhLodPos; @@ -79,7 +79,7 @@ public class SpottyDataSource extends FullArrayView implements IIncompleteDataSo public void markNotEmpty() { this.isEmpty = false; } @Override - public void saveData(IDhLevel level, DataMetaFile file, OutputStream dataStream) throws IOException + public void saveData(IDhLevel level, FullDataMetaFile file, OutputStream dataStream) throws IOException { DataOutputStream dos = new DataOutputStream(dataStream); // DO NOT CLOSE { @@ -118,7 +118,7 @@ public class SpottyDataSource extends FullArrayView implements IIncompleteDataSo } - public static SpottyDataSource loadData(DataMetaFile dataFile, InputStream dataStream, IDhLevel level) throws IOException + public static SpottyDataSource loadData(FullDataMetaFile dataFile, InputStream dataStream, IDhLevel level) throws IOException { DataInputStream dos = new DataInputStream(dataStream); // DO NOT CLOSE { diff --git a/core/src/main/java/com/seibel/lod/core/file/datafile/RemoteDataFileHandler.java b/core/src/main/java/com/seibel/lod/core/file/datafile/RemoteDataFileHandler.java deleted file mode 100644 index 68fa70d6d..000000000 --- a/core/src/main/java/com/seibel/lod/core/file/datafile/RemoteDataFileHandler.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.seibel.lod.core.file.datafile; - -import com.seibel.lod.core.level.IDhLevel; - -import java.io.File; - -public class RemoteDataFileHandler extends DataFileHandler { - public RemoteDataFileHandler(IDhLevel level, File saveRootDir) { - super(level, saveRootDir); - } -} diff --git a/core/src/main/java/com/seibel/lod/core/file/datafile/DataFileHandler.java b/core/src/main/java/com/seibel/lod/core/file/fullDatafile/FullDataFileHandler.java similarity index 85% rename from core/src/main/java/com/seibel/lod/core/file/datafile/DataFileHandler.java rename to core/src/main/java/com/seibel/lod/core/file/fullDatafile/FullDataFileHandler.java index 38884a806..4a73f69af 100644 --- a/core/src/main/java/com/seibel/lod/core/file/datafile/DataFileHandler.java +++ b/core/src/main/java/com/seibel/lod/core/file/fullDatafile/FullDataFileHandler.java @@ -1,4 +1,4 @@ -package com.seibel.lod.core.file.datafile; +package com.seibel.lod.core.file.fullDatafile; import com.google.common.collect.HashMultimap; import com.seibel.lod.core.datatype.IIncompleteDataSource; @@ -18,7 +18,6 @@ import org.apache.logging.log4j.Logger; import java.io.File; import java.io.IOException; -import java.lang.ref.SoftReference; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -28,18 +27,18 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; import java.util.function.Function; -public class DataFileHandler implements IDataSourceProvider +public class FullDataFileHandler implements IFullDataSourceProvider { // Note: Single main thread only for now. May make it multi-thread later, depending on the usage. private static final Logger LOGGER = DhLoggerBuilder.getLogger(); final ExecutorService fileReaderThread = LodUtil.makeThreadPool(4, "FileReaderThread"); - final ConcurrentHashMap files = new ConcurrentHashMap<>(); + final ConcurrentHashMap files = new ConcurrentHashMap<>(); final IDhLevel level; final File saveDir; AtomicInteger topDetailLevel = new AtomicInteger(-1); final int minDetailLevel = FullDataSource.SECTION_SIZE_OFFSET; - public DataFileHandler(IDhLevel level, File saveRootDir) + public FullDataFileHandler(IDhLevel level, File saveRootDir) { this.saveDir = saveRootDir; this.level = level; @@ -52,7 +51,7 @@ public class DataFileHandler implements IDataSourceProvider @Override public void addScannedFile(Collection detectedFiles) { - HashMultimap filesByPos = HashMultimap.create(); + HashMultimap filesByPos = HashMultimap.create(); LOGGER.info("Detected {} valid files in {}", detectedFiles.size(), this.saveDir); { // Sort files by pos. @@ -60,7 +59,7 @@ public class DataFileHandler implements IDataSourceProvider { try { - DataMetaFile metaFile = new DataMetaFile(this, this.level, file); + FullDataMetaFile metaFile = new FullDataMetaFile(this, this.level, file); filesByPos.put(metaFile.pos, metaFile); } catch (IOException e) @@ -95,8 +94,8 @@ public class DataFileHandler implements IDataSourceProvider // Warn for multiple files with the same pos, and then select the one with the latest timestamp. for (DhSectionPos pos : filesByPos.keySet()) { - Collection metaFiles = filesByPos.get(pos); - DataMetaFile fileToUse; + Collection metaFiles = filesByPos.get(pos); + FullDataMetaFile fileToUse; if (metaFiles.size() > 1) { fileToUse = Collections.max(metaFiles, Comparator.comparingLong(a -> a.metaData.dataVersion.get())); @@ -105,7 +104,7 @@ public class DataFileHandler implements IDataSourceProvider sb.append("Multiple files with the same pos: "); sb.append(pos); sb.append("\n"); - for (DataMetaFile metaFile : metaFiles) + for (FullDataMetaFile metaFile : metaFiles) { sb.append("\t"); sb.append(metaFile.path); @@ -118,7 +117,7 @@ public class DataFileHandler implements IDataSourceProvider LOGGER.warn(sb.toString()); // Rename all other files with the same pos to .old - for (DataMetaFile metaFile : metaFiles) + for (FullDataMetaFile metaFile : metaFiles) { if (metaFile == fileToUse) { @@ -149,15 +148,15 @@ public class DataFileHandler implements IDataSourceProvider } } - protected DataMetaFile getOrMakeFile(DhSectionPos pos) + protected FullDataMetaFile getOrMakeFile(DhSectionPos pos) { - DataMetaFile metaFile = this.files.get(pos); + FullDataMetaFile metaFile = this.files.get(pos); if (metaFile == null) { - DataMetaFile newMetaFile; + FullDataMetaFile newMetaFile; try { - newMetaFile = new DataMetaFile(this, this.level, pos); + newMetaFile = new FullDataMetaFile(this, this.level, pos); } catch (IOException e) { @@ -176,11 +175,11 @@ public class DataFileHandler implements IDataSourceProvider /** * Populates the preexistingFiles and missingFilePositions ArrayLists. * - * @param preexistingFiles the list of {@link DataMetaFile}'s that have been created for the given position. - * @param missingFilePositions the list of {@link DhSectionPos}'s that don't have {@link DataMetaFile} created for them yet. + * @param preexistingFiles the list of {@link FullDataMetaFile}'s that have been created for the given position. + * @param missingFilePositions the list of {@link DhSectionPos}'s that don't have {@link FullDataMetaFile} created for them yet. */ protected void getDataFilesForPosition(DhSectionPos basePos, DhSectionPos pos, - ArrayList preexistingFiles, ArrayList missingFilePositions) + ArrayList preexistingFiles, ArrayList missingFilePositions) { byte sectionDetail = pos.sectionDetailLevel; boolean allEmpty = true; @@ -229,12 +228,12 @@ public class DataFileHandler implements IDataSourceProvider this.recursiveGetDataFilesForPosition(3, basePos, pos, preexistingFiles, missingFilePositions); } } - private void recursiveGetDataFilesForPosition(int childIndex, DhSectionPos basePos, DhSectionPos pos, ArrayList preexistingFiles, ArrayList missingFilePositions) + private void recursiveGetDataFilesForPosition(int childIndex, DhSectionPos basePos, DhSectionPos pos, ArrayList preexistingFiles, ArrayList missingFilePositions) { DhSectionPos childPos = pos.getChildByIndex(childIndex); if (FullDataSource.firstDataPosCanAffectSecond(basePos, childPos)) { - DataMetaFile metaFile = this.files.get(childPos); + FullDataMetaFile metaFile = this.files.get(childPos); if (metaFile != null) { // we have reached a populated leaf node in the quad tree @@ -265,7 +264,7 @@ public class DataFileHandler implements IDataSourceProvider public CompletableFuture read(DhSectionPos pos) { this.topDetailLevel.updateAndGet(intVal -> Math.max(intVal, pos.sectionDetailLevel)); - DataMetaFile metaFile = this.getOrMakeFile(pos); + FullDataMetaFile metaFile = this.getOrMakeFile(pos); if (metaFile == null) { return CompletableFuture.completedFuture(null); @@ -276,7 +275,7 @@ public class DataFileHandler implements IDataSourceProvider CompletableFuture futureWrapper = new CompletableFuture<>(); metaFile.loadOrGetCachedAsync().exceptionally((e) -> { - DataMetaFile newMetaFile = this.removeCorruptedFile(pos, metaFile, e); + FullDataMetaFile newMetaFile = this.removeCorruptedFile(pos, metaFile, e); futureWrapper.completeExceptionally(e); return null; // return value doesn't matter @@ -300,7 +299,7 @@ public class DataFileHandler implements IDataSourceProvider } private void recursiveWrite(DhSectionPos sectionPos, ChunkSizedData chunkData) { - DataMetaFile metaFile = this.files.get(sectionPos); + FullDataMetaFile metaFile = this.files.get(sectionPos); if (metaFile != null) { // Fast path: if there is a file for this section, just write to it. @@ -318,7 +317,7 @@ public class DataFileHandler implements IDataSourceProvider public CompletableFuture flushAndSave() { ArrayList> futures = new ArrayList<>(); - for (DataMetaFile metaFile : this.files.values()) + for (FullDataMetaFile metaFile : this.files.values()) { futures.add(metaFile.flushAndSave()); } @@ -328,7 +327,7 @@ public class DataFileHandler implements IDataSourceProvider @Override public long getCacheVersion(DhSectionPos sectionPos) { - DataMetaFile file = this.files.get(sectionPos); + FullDataMetaFile file = this.files.get(sectionPos); if (file == null) { return 0; @@ -339,7 +338,7 @@ public class DataFileHandler implements IDataSourceProvider @Override public boolean isCacheVersionValid(DhSectionPos sectionPos, long cacheVersion) { - DataMetaFile file = this.files.get(sectionPos); + FullDataMetaFile file = this.files.get(sectionPos); if (file == null) { return cacheVersion >= 0; @@ -348,10 +347,10 @@ public class DataFileHandler implements IDataSourceProvider } @Override - public CompletableFuture onCreateDataFile(DataMetaFile file) + public CompletableFuture onCreateDataFile(FullDataMetaFile file) { DhSectionPos pos = file.pos; - ArrayList existFiles = new ArrayList<>(); + ArrayList existFiles = new ArrayList<>(); ArrayList missing = new ArrayList<>(); this.getDataFilesForPosition(pos, pos, existFiles, missing); LodUtil.assertTrue(!missing.isEmpty() || !existFiles.isEmpty()); @@ -366,7 +365,7 @@ public class DataFileHandler implements IDataSourceProvider { for (DhSectionPos missingPos : missing) { - DataMetaFile newFile = this.getOrMakeFile(missingPos); + FullDataMetaFile newFile = this.getOrMakeFile(missingPos); if (newFile != null) { existFiles.add(newFile); @@ -377,7 +376,7 @@ public class DataFileHandler implements IDataSourceProvider SparseDataSource.createEmpty(pos) : SpottyDataSource.createEmpty(pos); - for (DataMetaFile metaFile : existFiles) + for (FullDataMetaFile metaFile : existFiles) { futures.add(metaFile.loadOrGetCachedAsync() .thenAccept((data) -> @@ -390,7 +389,7 @@ public class DataFileHandler implements IDataSourceProvider }) .exceptionally((e) -> { - DataMetaFile newMetaFile = this.removeCorruptedFile(pos, metaFile, e); + FullDataMetaFile newMetaFile = this.removeCorruptedFile(pos, metaFile, e); return null; }) ); @@ -400,14 +399,14 @@ public class DataFileHandler implements IDataSourceProvider } } - private DataMetaFile removeCorruptedFile(DhSectionPos pos, DataMetaFile metaFile, Throwable exception) + private FullDataMetaFile removeCorruptedFile(DhSectionPos pos, FullDataMetaFile metaFile, Throwable exception) { LOGGER.error("Error reading Data file ["+pos+"]", exception); FileUtil.renameCorruptedFile(metaFile.path); - // remove the DataMetaFile since the old one was corrupted + // remove the FullDataMetaFile since the old one was corrupted this.files.remove(pos); - // create a new DataMetaFile to write new data to + // create a new FullDataMetaFile to write new data to return this.getOrMakeFile(pos); } @@ -465,7 +464,7 @@ public class DataFileHandler implements IDataSourceProvider @Override public void close() { - DataMetaFile.debugCheck(); + FullDataMetaFile.debugCheck(); //TODO } diff --git a/core/src/main/java/com/seibel/lod/core/file/datafile/DataMetaFile.java b/core/src/main/java/com/seibel/lod/core/file/fullDatafile/FullDataMetaFile.java similarity index 96% rename from core/src/main/java/com/seibel/lod/core/file/datafile/DataMetaFile.java rename to core/src/main/java/com/seibel/lod/core/file/fullDatafile/FullDataMetaFile.java index 19c1ffdf5..782d42e28 100644 --- a/core/src/main/java/com/seibel/lod/core/file/datafile/DataMetaFile.java +++ b/core/src/main/java/com/seibel/lod/core/file/fullDatafile/FullDataMetaFile.java @@ -1,4 +1,4 @@ -package com.seibel.lod.core.file.datafile; +package com.seibel.lod.core.file.fullDatafile; import java.io.*; import java.lang.ref.*; @@ -21,12 +21,15 @@ import com.seibel.lod.core.util.AtomicsUtil; import com.seibel.lod.core.util.LodUtil; import org.apache.logging.log4j.Logger; -public class DataMetaFile extends AbstractMetaDataFile +/** + * Related to the stored Blockstate/Biome ID data. + */ +public class FullDataMetaFile extends AbstractMetaDataFile { - private static final Logger LOGGER = DhLoggerBuilder.getLogger(DataMetaFile.class.getSimpleName()); + private static final Logger LOGGER = DhLoggerBuilder.getLogger(FullDataMetaFile.class.getSimpleName()); private final IDhLevel level; - private final IDataSourceProvider handler; + private final IFullDataSourceProvider handler; private boolean doesFileExist; public AbstractDataSourceLoader loader; @@ -75,7 +78,7 @@ public class DataMetaFile extends AbstractMetaDataFile // Create a new metaFile - public DataMetaFile(IDataSourceProvider handler, IDhLevel level, DhSectionPos pos) throws IOException { + public FullDataMetaFile(IFullDataSourceProvider handler, IDhLevel level, DhSectionPos pos) throws IOException { super(handler.computeDataFilePath(pos), pos); debugCheck(); this.handler = handler; @@ -84,7 +87,7 @@ public class DataMetaFile extends AbstractMetaDataFile doesFileExist = false; } - public DataMetaFile(IDataSourceProvider handler, IDhLevel level, File path) throws IOException { + public FullDataMetaFile(IFullDataSourceProvider handler, IDhLevel level, File path) throws IOException { super(path); debugCheck(); this.handler = handler; diff --git a/core/src/main/java/com/seibel/lod/core/file/datafile/GeneratedDataFileHandler.java b/core/src/main/java/com/seibel/lod/core/file/fullDatafile/GeneratedFullDataFileHandler.java similarity index 89% rename from core/src/main/java/com/seibel/lod/core/file/datafile/GeneratedDataFileHandler.java rename to core/src/main/java/com/seibel/lod/core/file/fullDatafile/GeneratedFullDataFileHandler.java index 777dd99c8..2d0f8ef7c 100644 --- a/core/src/main/java/com/seibel/lod/core/file/datafile/GeneratedDataFileHandler.java +++ b/core/src/main/java/com/seibel/lod/core/file/fullDatafile/GeneratedFullDataFileHandler.java @@ -1,4 +1,4 @@ -package com.seibel.lod.core.file.datafile; +package com.seibel.lod.core.file.fullDatafile; import com.seibel.lod.core.datatype.IIncompleteDataSource; import com.seibel.lod.core.datatype.ILodDataSource; @@ -20,7 +20,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; -public class GeneratedDataFileHandler extends DataFileHandler +public class GeneratedFullDataFileHandler extends FullDataFileHandler { private static final Logger LOGGER = DhLoggerBuilder.getLogger(); @@ -28,7 +28,7 @@ public class GeneratedDataFileHandler extends DataFileHandler - public GeneratedDataFileHandler(IDhServerLevel level, File saveRootDir) { super(level, saveRootDir); } + public GeneratedFullDataFileHandler(IDhServerLevel level, File saveRootDir) { super(level, saveRootDir); } @@ -44,11 +44,11 @@ public class GeneratedDataFileHandler extends DataFileHandler @Override - public CompletableFuture onCreateDataFile(DataMetaFile file) + public CompletableFuture onCreateDataFile(FullDataMetaFile file) { DhSectionPos pos = file.pos; - ArrayList existingFiles = new ArrayList<>(); + ArrayList existingFiles = new ArrayList<>(); ArrayList missingPositions = new ArrayList<>(); this.getDataFilesForPosition(pos, pos, existingFiles, missingPositions); @@ -85,7 +85,7 @@ public class GeneratedDataFileHandler extends DataFileHandler // create the missing metaData files for (DhSectionPos missingPos : missingPositions) { - DataMetaFile newFile = this.getOrMakeFile(missingPos); + FullDataMetaFile newFile = this.getOrMakeFile(missingPos); if (newFile != null) { existingFiles.add(newFile); @@ -96,7 +96,7 @@ public class GeneratedDataFileHandler extends DataFileHandler // read in the existing data final ArrayList> futures = new ArrayList<>(existingFiles.size()); - for (DataMetaFile existingFile : existingFiles) + for (FullDataMetaFile existingFile : existingFiles) { futures.add(existingFile.loadOrGetCachedAsync() .exceptionally((ex) -> /*Ignore file read errors*/null) @@ -173,7 +173,7 @@ public class GeneratedDataFileHandler extends DataFileHandler { if (chunk.getBBoxLodPos().overlaps(this.loadedTargetData.getSectionPos().getSectionBBoxPos())) { - GeneratedDataFileHandler.this.write(this.loadedTargetData.getSectionPos(), chunk); + GeneratedFullDataFileHandler.this.write(this.loadedTargetData.getSectionPos(), chunk); } }; } diff --git a/core/src/main/java/com/seibel/lod/core/file/datafile/IDataSourceProvider.java b/core/src/main/java/com/seibel/lod/core/file/fullDatafile/IFullDataSourceProvider.java similarity index 86% rename from core/src/main/java/com/seibel/lod/core/file/datafile/IDataSourceProvider.java rename to core/src/main/java/com/seibel/lod/core/file/fullDatafile/IFullDataSourceProvider.java index ddcb2f3fa..a309bc5ff 100644 --- a/core/src/main/java/com/seibel/lod/core/file/datafile/IDataSourceProvider.java +++ b/core/src/main/java/com/seibel/lod/core/file/fullDatafile/IFullDataSourceProvider.java @@ -1,4 +1,4 @@ -package com.seibel.lod.core.file.datafile; +package com.seibel.lod.core.file.fullDatafile; import com.seibel.lod.core.datatype.ILodDataSource; import com.seibel.lod.core.datatype.full.ChunkSizedData; @@ -12,7 +12,7 @@ import java.util.concurrent.Executor; import java.util.function.Consumer; import java.util.function.Function; -public interface IDataSourceProvider extends AutoCloseable { +public interface IFullDataSourceProvider extends AutoCloseable { void addScannedFile(Collection detectedFiles); CompletableFuture read(DhSectionPos pos); @@ -22,7 +22,7 @@ public interface IDataSourceProvider extends AutoCloseable { long getCacheVersion(DhSectionPos sectionPos); boolean isCacheVersionValid(DhSectionPos sectionPos, long cacheVersion); - CompletableFuture onCreateDataFile(DataMetaFile file); + CompletableFuture onCreateDataFile(FullDataMetaFile file); ILodDataSource onDataFileLoaded(ILodDataSource source, MetaData metaData, Consumer onUpdated, Function updater); CompletableFuture onDataFileRefresh(ILodDataSource source, MetaData metaData, Function updater, Consumer onUpdated); File computeDataFilePath(DhSectionPos pos); diff --git a/core/src/main/java/com/seibel/lod/core/file/fullDatafile/RemoteFullDataFileHandler.java b/core/src/main/java/com/seibel/lod/core/file/fullDatafile/RemoteFullDataFileHandler.java new file mode 100644 index 000000000..90098b813 --- /dev/null +++ b/core/src/main/java/com/seibel/lod/core/file/fullDatafile/RemoteFullDataFileHandler.java @@ -0,0 +1,12 @@ +package com.seibel.lod.core.file.fullDatafile; + +import com.seibel.lod.core.level.IDhLevel; + +import java.io.File; + +public class RemoteFullDataFileHandler extends FullDataFileHandler +{ + public RemoteFullDataFileHandler(IDhLevel level, File saveRootDir) { + super(level, saveRootDir); + } +} diff --git a/core/src/main/java/com/seibel/lod/core/file/renderfile/RenderFileHandler.java b/core/src/main/java/com/seibel/lod/core/file/renderfile/RenderFileHandler.java index 81e7870ed..f9a5accf6 100644 --- a/core/src/main/java/com/seibel/lod/core/file/renderfile/RenderFileHandler.java +++ b/core/src/main/java/com/seibel/lod/core/file/renderfile/RenderFileHandler.java @@ -8,7 +8,7 @@ import com.seibel.lod.core.datatype.AbstractRenderSourceLoader; import com.seibel.lod.core.datatype.column.ColumnRenderSource; import com.seibel.lod.core.datatype.full.ChunkSizedData; import com.seibel.lod.core.datatype.transform.DataRenderTransformer; -import com.seibel.lod.core.file.datafile.IDataSourceProvider; +import com.seibel.lod.core.file.fullDatafile.IFullDataSourceProvider; import com.seibel.lod.core.level.IDhClientLevel; import com.seibel.lod.core.pos.DhLodPos; import com.seibel.lod.core.pos.DhSectionPos; @@ -35,14 +35,14 @@ public class RenderFileHandler implements ILodRenderSourceProvider private final IDhClientLevel level; private final File saveDir; - private final IDataSourceProvider dataSourceProvider; + private final IFullDataSourceProvider dataSourceProvider; private final ConcurrentHashMap cacheUpdateLockBySectionPos = new ConcurrentHashMap<>(); - public RenderFileHandler(IDataSourceProvider sourceProvider, IDhClientLevel level, File saveRootDir) + public RenderFileHandler(IFullDataSourceProvider sourceProvider, IDhClientLevel level, File saveRootDir) { this.dataSourceProvider = sourceProvider; this.level = level; diff --git a/core/src/main/java/com/seibel/lod/core/file/subDimMatching/SubDimensionLevelMatcher.java b/core/src/main/java/com/seibel/lod/core/file/subDimMatching/SubDimensionLevelMatcher.java index 243272bea..14557cde2 100644 --- a/core/src/main/java/com/seibel/lod/core/file/subDimMatching/SubDimensionLevelMatcher.java +++ b/core/src/main/java/com/seibel/lod/core/file/subDimMatching/SubDimensionLevelMatcher.java @@ -7,8 +7,8 @@ import com.seibel.lod.core.datatype.full.FullDataPoint; import com.seibel.lod.core.datatype.full.accessor.SingleFullArrayView; import com.seibel.lod.core.datatype.transform.LodDataBuilder; import com.seibel.lod.core.dependencyInjection.SingletonInjector; -import com.seibel.lod.core.file.datafile.DataFileHandler; -import com.seibel.lod.core.file.datafile.IDataSourceProvider; +import com.seibel.lod.core.file.fullDatafile.FullDataFileHandler; +import com.seibel.lod.core.file.fullDatafile.IFullDataSourceProvider; import com.seibel.lod.core.file.structure.ClientOnlySaveStructure; import com.seibel.lod.core.level.DhClientLevel; import com.seibel.lod.core.level.IDhLevel; @@ -220,7 +220,7 @@ public class SubDimensionLevelMatcher implements AutoCloseable break; } IDhLevel tempLevel = new DhClientLevel(new ClientOnlySaveStructure(), clientLevelWrapper); - IDataSourceProvider fileHandler = new DataFileHandler(tempLevel, testLevelFolder); + IFullDataSourceProvider fileHandler = new FullDataFileHandler(tempLevel, testLevelFolder); CompletableFuture testDataSource = fileHandler.read(new DhSectionPos(playerChunkPos)); ILodDataSource lodDataSource = testDataSource.get(); diff --git a/core/src/main/java/com/seibel/lod/core/level/DhClientLevel.java b/core/src/main/java/com/seibel/lod/core/level/DhClientLevel.java index 1abea326f..28fa79948 100644 --- a/core/src/main/java/com/seibel/lod/core/level/DhClientLevel.java +++ b/core/src/main/java/com/seibel/lod/core/level/DhClientLevel.java @@ -1,9 +1,9 @@ package com.seibel.lod.core.level; -import com.seibel.lod.core.file.datafile.IDataSourceProvider; +import com.seibel.lod.core.file.fullDatafile.IFullDataSourceProvider; import com.seibel.lod.core.render.LodQuadTree; import com.seibel.lod.core.util.FileScanUtil; -import com.seibel.lod.core.file.datafile.RemoteDataFileHandler; +import com.seibel.lod.core.file.fullDatafile.RemoteFullDataFileHandler; import com.seibel.lod.core.file.renderfile.RenderFileHandler; import com.seibel.lod.core.pos.DhBlockPos2D; import com.seibel.lod.core.render.RenderBufferHandler; @@ -30,7 +30,7 @@ public class DhClientLevel implements IDhClientLevel private static final Logger LOGGER = DhLoggerBuilder.getLogger(); private static final IMinecraftClientWrapper MC_CLIENT = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); public final ClientOnlySaveStructure save; - public final RemoteDataFileHandler dataFileHandler; + public final RemoteFullDataFileHandler dataFileHandler; public final RenderFileHandler renderFileHandler; public final RenderBufferHandler renderBufferHandler; //TODO: Should this be owned by renderer? public final IClientLevelWrapper level; @@ -44,7 +44,7 @@ public class DhClientLevel implements IDhClientLevel this.save = save; save.getDataFolder(level).mkdirs(); save.getRenderCacheFolder(level).mkdirs(); - this.dataFileHandler = new RemoteDataFileHandler(this, save.getDataFolder(level)); + this.dataFileHandler = new RemoteFullDataFileHandler(this, save.getDataFolder(level)); this.renderFileHandler = new RenderFileHandler(this.dataFileHandler, this, save.getRenderCacheFolder(level)); this.tree = new LodQuadTree(this, Config.Client.Graphics.Quality.lodChunkRenderDistance.get() * 16, MC_CLIENT.getPlayerBlockPos().x, MC_CLIENT.getPlayerBlockPos().z, this.renderFileHandler); @@ -89,7 +89,7 @@ public class DhClientLevel implements IDhClientLevel public ILevelWrapper getLevelWrapper() { return this.level; } @Override - public IDataSourceProvider getFileHandler() { return this.dataFileHandler; } + public IFullDataSourceProvider getFileHandler() { return this.dataFileHandler; } @Override public void clearRenderDataCache() diff --git a/core/src/main/java/com/seibel/lod/core/level/DhClientServerLevel.java b/core/src/main/java/com/seibel/lod/core/level/DhClientServerLevel.java index 113c9820c..69ffad2e2 100644 --- a/core/src/main/java/com/seibel/lod/core/level/DhClientServerLevel.java +++ b/core/src/main/java/com/seibel/lod/core/level/DhClientServerLevel.java @@ -6,13 +6,13 @@ import com.seibel.lod.core.config.AppliedConfigState; import com.seibel.lod.core.datatype.full.ChunkSizedData; import com.seibel.lod.core.datatype.full.FullDataSource; import com.seibel.lod.core.datatype.transform.ChunkToLodBuilder; -import com.seibel.lod.core.file.datafile.IDataSourceProvider; +import com.seibel.lod.core.file.fullDatafile.IFullDataSourceProvider; import com.seibel.lod.core.generation.BatchGenerator; import com.seibel.lod.core.generation.WorldGenerationQueue; import com.seibel.lod.core.pos.DhLodPos; import com.seibel.lod.core.pos.DhSectionPos; import com.seibel.lod.core.render.LodQuadTree; -import com.seibel.lod.core.file.datafile.GeneratedDataFileHandler; +import com.seibel.lod.core.file.fullDatafile.GeneratedFullDataFileHandler; import com.seibel.lod.core.util.FileScanUtil; import com.seibel.lod.core.file.renderfile.RenderFileHandler; import com.seibel.lod.core.pos.DhBlockPos2D; @@ -46,7 +46,7 @@ public class DhClientServerLevel implements IDhClientLevel, IDhServerLevel private static final IMinecraftClientWrapper MC_CLIENT = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class); public final LocalSaveStructure save; - public final GeneratedDataFileHandler dataFileHandler; + public final GeneratedFullDataFileHandler dataFileHandler; public final ChunkToLodBuilder chunkToLodBuilder; public final IServerLevelWrapper serverLevel; private final AppliedConfigState generatorEnabled; @@ -63,7 +63,7 @@ public class DhClientServerLevel implements IDhClientLevel, IDhServerLevel this.save = save; save.getDataFolder(level).mkdirs(); save.getRenderCacheFolder(level).mkdirs(); - this.dataFileHandler = new GeneratedDataFileHandler(this, save.getDataFolder(level)); + this.dataFileHandler = new GeneratedFullDataFileHandler(this, save.getDataFolder(level)); FileScanUtil.scanFile(save, this.serverLevel, this.dataFileHandler, null); LOGGER.info("Started DHLevel for {} with saves at {}", level, save); this.f3Msg = new F3Screen.NestedMessage(this::f3Log); @@ -337,7 +337,7 @@ public class DhClientServerLevel implements IDhClientLevel, IDhServerLevel public IServerLevelWrapper getServerLevelWrapper() { return this.serverLevel; } @Override - public IDataSourceProvider getFileHandler() { return this.dataFileHandler; } + public IFullDataSourceProvider getFileHandler() { return this.dataFileHandler; } @Override public void clearRenderDataCache() diff --git a/core/src/main/java/com/seibel/lod/core/level/DhServerLevel.java b/core/src/main/java/com/seibel/lod/core/level/DhServerLevel.java index a73a59978..57dcfc098 100644 --- a/core/src/main/java/com/seibel/lod/core/level/DhServerLevel.java +++ b/core/src/main/java/com/seibel/lod/core/level/DhServerLevel.java @@ -1,8 +1,8 @@ package com.seibel.lod.core.level; -import com.seibel.lod.core.file.datafile.IDataSourceProvider; +import com.seibel.lod.core.file.fullDatafile.IFullDataSourceProvider; import com.seibel.lod.core.util.FileScanUtil; -import com.seibel.lod.core.file.datafile.DataFileHandler; +import com.seibel.lod.core.file.fullDatafile.FullDataFileHandler; import com.seibel.lod.core.file.structure.LocalSaveStructure; import com.seibel.lod.core.logging.DhLoggerBuilder; import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper; @@ -17,7 +17,7 @@ public class DhServerLevel implements IDhServerLevel private static final Logger LOGGER = DhLoggerBuilder.getLogger(); public final LocalSaveStructure save; - public final DataFileHandler dataFileHandler; + public final FullDataFileHandler dataFileHandler; public final IServerLevelWrapper level; public DhServerLevel(LocalSaveStructure save, IServerLevelWrapper level) @@ -25,7 +25,7 @@ public class DhServerLevel implements IDhServerLevel this.save = save; this.level = level; save.getDataFolder(level).mkdirs(); - this.dataFileHandler = new DataFileHandler(this, save.getDataFolder(level)); //FIXME: GenerationQueue + this.dataFileHandler = new FullDataFileHandler(this, save.getDataFolder(level)); //FIXME: GenerationQueue FileScanUtil.scanFile(save, level, this.dataFileHandler, null); LOGGER.info("Started DHLevel for {} with saves at {}", level, save); } @@ -67,7 +67,7 @@ public class DhServerLevel implements IDhServerLevel public ILevelWrapper getLevelWrapper() { return this.level; } @Override - public IDataSourceProvider getFileHandler() { return this.dataFileHandler; } + public IFullDataSourceProvider getFileHandler() { return this.dataFileHandler; } @Override public void clearRenderDataCache() diff --git a/core/src/main/java/com/seibel/lod/core/level/IDhLevel.java b/core/src/main/java/com/seibel/lod/core/level/IDhLevel.java index 6e68acf5f..29c1851ec 100644 --- a/core/src/main/java/com/seibel/lod/core/level/IDhLevel.java +++ b/core/src/main/java/com/seibel/lod/core/level/IDhLevel.java @@ -1,6 +1,6 @@ package com.seibel.lod.core.level; -import com.seibel.lod.core.file.datafile.IDataSourceProvider; +import com.seibel.lod.core.file.fullDatafile.IFullDataSourceProvider; import com.seibel.lod.core.wrapperInterfaces.chunk.IChunkWrapper; import com.seibel.lod.core.wrapperInterfaces.world.ILevelWrapper; @@ -18,7 +18,7 @@ public interface IDhLevel extends AutoCloseable void updateChunk(IChunkWrapper chunk); - IDataSourceProvider getFileHandler(); + IFullDataSourceProvider getFileHandler(); /** * Re-creates the color, render data. diff --git a/core/src/main/java/com/seibel/lod/core/util/FileScanUtil.java b/core/src/main/java/com/seibel/lod/core/util/FileScanUtil.java index 0145c7980..f8a4b2583 100644 --- a/core/src/main/java/com/seibel/lod/core/util/FileScanUtil.java +++ b/core/src/main/java/com/seibel/lod/core/util/FileScanUtil.java @@ -1,6 +1,6 @@ package com.seibel.lod.core.util; -import com.seibel.lod.core.file.datafile.IDataSourceProvider; +import com.seibel.lod.core.file.fullDatafile.IFullDataSourceProvider; import com.seibel.lod.core.file.renderfile.ILodRenderSourceProvider; import com.seibel.lod.core.file.structure.AbstractSaveStructure; import com.seibel.lod.core.logging.DhLoggerBuilder; @@ -19,7 +19,7 @@ public class FileScanUtil { public static final int MAX_SCAN_DEPTH = 5; public static final String LOD_FILE_POSTFIX = ".lod"; public static void scanFile(AbstractSaveStructure save, ILevelWrapper level, - @Nullable IDataSourceProvider dataSource, + @Nullable IFullDataSourceProvider dataSource, @Nullable ILodRenderSourceProvider renderSource) { if (dataSource != null) { try (Stream pathStream = Files.walk(save.getDataFolder(level).toPath(), MAX_SCAN_DEPTH)) {