package openeye.logic; import com.google.common.base.Preconditions; import java.io.File; import openeye.protocol.reports.ReportCrash; import openeye.storage.GsonPredefinedStorage; import openeye.storage.GsonSessionStorage; import openeye.storage.GsonWorkingStorage; import openeye.storage.IAppendableStorage; import openeye.storage.IQueryableStorage; import openeye.storage.IWorkingStorage; public class Storages { public static final String STATE_FILE_ID = "state"; public final IQueryableStorage<ModState> state; public final IWorkingStorage<ReportCrash> pendingCrashes; public final IAppendableStorage<Object> sessionArchive; public final File reportsDir; private static Storages instance; private Storages(File mcDir) { reportsDir = new File(mcDir, "reports"); reportsDir.mkdir(); state = new GsonPredefinedStorage<ModState>(reportsDir, ModState.class, GsonUtils.PRETTY_GSON, STATE_FILE_ID); pendingCrashes = new GsonWorkingStorage<ReportCrash>(reportsDir, "pending-crash", ReportCrash.class, GsonUtils.PRETTY_GSON); sessionArchive = new GsonSessionStorage<Object>(reportsDir, "json", Object.class, GsonUtils.PRETTY_GSON); } public static Storages init(File mcDir) { if (instance == null) instance = new Storages(mcDir); return instance; } public static Storages instance() { Preconditions.checkNotNull(instance, "Storage not initialized"); return instance; } }