Skip to content

Repository files navigation

FunctionalConfiguration

Compact configuration library for Java applications, built on top of Configurate.

Build Java Configurate Version JitPack License


Что это

FunctionalConfiguration — небольшая abstraction layer над Configurate для работы с конфигурационными файлами.

Основной API разделён на:

  • Config — конфигурация;
  • ConfigLoader — создание конфигураций;
  • ConfigManager — регистрация и управление несколькими конфигурациями;
  • MappedConfigLoader — загрузка конфигураций вместе с их именами;
  • YamlConfig — готовая YAML-реализация.

Подключение через JitPack

repositories {
    mavenCentral()
    maven("https://jitpack.io")
}

dependencies {
    implementation("com.github.g4vrk:FunctionalConfiguration:1.1.0")
}

Для Configurate:

dependencies {
    implementation("org.spongepowered:configurate-yaml:4.2.0")
}
Gradle Groovy
repositories {
    mavenCentral()
    maven { url = uri('https://jitpack.io') }
}

dependencies {
    implementation 'com.github.g4vrk:FunctionalConfiguration:1.1.0'
    implementation 'org.spongepowered:configurate-yaml:4.2.0'
}
Maven
<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>com.github.g4vrk.FunctionalConfiguration</groupId>
        <artifactId>common</artifactId>
        <version>1.1.0</version>
    </dependency>

    <dependency>
        <groupId>org.spongepowered</groupId>
        <artifactId>configurate-yaml</artifactId>
        <version>4.2.0</version>
    </dependency>
</dependencies>

YAML

Создайте YamlConfig из Configurate loader:

YamlConfigurationLoader loader = YamlConfigurationLoader.builder()
        .path(path)
        .build();

YamlConfig config = new YamlConfig(loader);

config.load();

Доступ к данным:

config.root();
config.node("database", "host");
config.node("database", "port");

Сохранение:

config.save();

ConfigLoader

Вместо создания Configurate loader вручную можно использовать YamlConfigLoader:

YamlConfigLoader loader = new YamlConfigLoader();

YamlConfig config = loader.from(path);

По умолчанию конфигурация загружается сразу.

Для отложенной загрузки:

YamlConfigLoader loader = new YamlConfigLoader(false);

YamlConfig config = loader.from(path);

config.load();

Несколько файлов:

Iterable<YamlConfig> configs = loader.from(paths);

ConfigManager

ConfigManager хранит конфигурации по ключу:

ConfigManager<YamlConfig> manager = new YamlConfigManager<>();

manager.register("config", config);
manager.register("messages", messages);

Массовая регистрация:

manager.registerAll(Map.of(
        "config", config,
        "messages", messages
));

Поиск:

manager.find("messages");

Без Optional:

YamlConfig messages = manager.findOrNull("messages");

Проверка:

if (manager.contains("messages")) {
    // ...
}

Удаление:

YamlConfig removed = manager.remove("messages");

Все конфигурации:

for (YamlConfig config : manager.values()) {
    // ...
}

Load & Save

Все зарегистрированные конфигурации можно обработать одним вызовом:

manager.loadAll();
manager.saveAll();
manager.reloadAll();

Mapped configs

MappedConfigLoader связывает конфигурацию с именем файла.

MappedConfigLoader<YamlConfig> loader =
        new SimpleMappedConfigLoader<>(
                new YamlConfigLoader(),
                PrimaryFileNamer.INSTANCE
        );

Загрузка:

NamedConfigEntry<YamlConfig> entry = loader.from(file);

Получение имени и конфигурации:

entry.name();
entry.config();

Собственный способ именования:

FileNamer namer = file -> file.getName()
        .replace(".yml", "");

MappedConfigLoader<YamlConfig> loader =
        new SimpleMappedConfigLoader<>(
                new YamlConfigLoader(),
                namer
        );

Custom Config

API не ограничивается YAML.

Основные abstraction'ы используют generics:

Config
ConfigLoader<C>
ConfigManager<C>
MappedConfigLoader<C>

Это позволяет создавать собственные реализации Config и использовать с ними существующие manager/loader abstractions.


Архитектура

Config
 │
 ├── YamlConfig
 │
 └── custom implementations

ConfigLoader
 │
 └── YamlConfigLoader

ConfigManager
 │
 └── YamlConfigManager

MappedConfigLoader
 │
 └── SimpleMappedConfigLoader

Сборка

Требуется Java 17+.

./gradlew build

Для Windows:

.\gradlew.bat build

Готовый JAR:

common/build/libs/

Лицензия

FunctionalConfiguration распространяется под MIT — см. LICENSE.

About

API for yaml-configurations management, powered by Configurate

Topics

Resources

Code of conduct

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages