package io.github.lucaseasedup.logit.storage; import io.github.lucaseasedup.logit.LogItCore; import io.github.lucaseasedup.logit.config.PredefinedConfiguration; import java.io.File; public final class StorageFactory { public StorageFactory(PredefinedConfiguration configuration, String path) { this.configuration = configuration; this.path = path; } public Storage produceStorage(StorageType type) { LogItCore core = LogItCore.getInstance(); switch (type) { case NONE: { return new NullStorage(); } case SQLITE: { return new SqliteStorage("jdbc:sqlite:" + core.getDataFolder() + "/" + configuration.getString(path + ".sqlite.filename")); } case MYSQL: { return new MySqlStorage( configuration.getString(path + ".mysql.host"), configuration.getString(path + ".mysql.user"), configuration.getString(path + ".mysql.password"), configuration.getString(path + ".mysql.database") ); } case H2: { File file = new File( core.getDataFolder(), configuration.getString(path + ".h2.filename") ); return new H2Storage("jdbc:h2:" + file.getAbsolutePath()); } case POSTGRESQL: { return new PostgreSqlStorage( configuration.getString(path + ".postgresql.host"), configuration.getString(path + ".postgresql.user"), configuration.getString(path + ".postgresql.password") ); } case CSV: { File dir = core.getDataFile( configuration.getString(path + ".csv.dir") ); if (!dir.exists()) { dir.getParentFile().mkdirs(); dir.mkdir(); } return new CsvStorage(dir); } default: throw new IllegalArgumentException( "Unsupported storage type: " + type ); } } private final PredefinedConfiguration configuration; private final String path; }