/
TesNpe
/
SimpleConfig
Обзор
Документация
Войти
/
TesNpe
/
SimpleConfig
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main/java/ru/tesdev/SimpleConfig.java
118 строк
3 KB
TesNpe
First Version
17 ноя 2025, 13:08
17 ноя 2025, 13:08
650ac39
Код
Авторство
О чём код?
package ru.tesdev; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class SimpleConfig { private final List<ConfigObject> configs; private final Map<String, JsonNode> chached; private Path configsDir; public SimpleConfig() { this.configs = new ArrayList<>(); this.chached = new HashMap<>(); } public void addConfig( String id, String fileName, JsonFactory factory ) { if (findConfig(id) != null) { throw new IllegalStateException("Config %s exists".formatted(id)); } configs.add(new ConfigObject(id, fileName, factory)); } public void changeDir(Path dir) { this.configsDir = dir; } public void changeDir(String path) { this.configsDir = Path.of(path); } // Копирует дефолтный конфиг из ресурсов, если он отсутствует в конченой папке public void saveDefault(String id) { var config = findConfig(id); if (config == null) { throw new IllegalStateException("Config %s not exists".formatted(id)); } if (Files.notExists(splitPath(config.getFileName()))) { try (var in = SimpleConfig.class.getResourceAsStream("/" + config.getFileName())) { Files.copy(in, splitPath(config.getFileName())); } catch (Exception e) { throw new RuntimeException(e); } } } public void saveDefaults() { for (var config : configs) { saveDefault(config.getId()); } } public JsonNode readConfig(String id) { var config = findConfig(id); if (config == null) { throw new IllegalStateException("Config %s not exists".formatted(id)); } if (Files.notExists(splitPath(config.getFileName()))) { throw new RuntimeException("File %s not exists".formatted(id)); } try (var in = new FileInputStream(splitPath(config.getFileName()).toFile())) { var mapper = new ObjectMapper(config.getFactory()); return mapper.readTree(in); } catch (Exception e) { throw new RuntimeException(e); } } public void loadConfig(String id) { var config = readConfig(id); chached.put(id, config); } public void loadConfigs() { for (var config : configs) { loadConfig(config.getId()); } } public JsonNode getConfig(String id) { return chached.get(id); } private Path splitPath(String fileName) { return configsDir.resolve(fileName); } @Nullable private ConfigObject findConfig(String id) { for (var config : configs) { if (id.equals(config.getId())) { return config; } } return null; } }