mirror of
https://github.com/CarmJos/EasyConfiguration.git
synced 2026-06-04 18:48:20 +08:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 854e3df49f | |||
| f6167c3b5e | |||
| ffe3e88b3b | |||
| caa3077f48 | |||
| 05dbf0b504 | |||
| 810e95198e | |||
| 10004f16b4 | |||
| 8e19748c7c | |||
| 17762a2e70 | |||
| 7dbd607a3f | |||
| 035e8a227e | |||
| 04eaf6606d | |||
| e558e93410 | |||
| e55fe3a8d5 | |||
| 8f075b99b5 | |||
| 09a0b3c373 | |||
| 4df4977733 |
@@ -1,9 +1,3 @@
|
|||||||
# EasyConfiguration Javadoc
|
# configured Javadoc
|
||||||
|
|
||||||
基于 [Github Pages](https://pages.github.com/) 搭建,请访问 [JavaDoc](https://carmjos.github.io/EasyConfiguration) 。
|
Based on [Github Pages](https://pages.github.com/), please see [JavaDoc](https://carmjos.github.io/configured) 。
|
||||||
|
|
||||||
## 如何实现?
|
|
||||||
|
|
||||||
若您也想通过 [Github Actions](https://docs.github.com/en/actions/learn-github-actions)
|
|
||||||
自动部署项目的Javadoc到 [Github Pages](https://pages.github.com/) ,
|
|
||||||
可以参考我的文章 [《自动部署Javadoc到Github Pages》](https://pages.carm.cc/doc/javadoc-in-github.html) 。
|
|
||||||
+1
-16
@@ -1,16 +1 @@
|
|||||||
# 欢迎使用 EasyConfiguration !
|
# Documentation
|
||||||
|
|
||||||
这个项目刚刚创建,详细的Javadoc与开发指南还在补充,请给我一点时间~
|
|
||||||
|
|
||||||
|
|
||||||
## 基本定义
|
|
||||||
|
|
||||||
Value: 实际配置的单例值。
|
|
||||||
|
|
||||||
Manifest: 用于描述值基本配置的对象。
|
|
||||||
|
|
||||||
Provider: 用于提供配置文件的接口。
|
|
||||||
|
|
||||||
Wrapper: 用于包装配置文件的接口。
|
|
||||||
|
|
||||||
Initializer: 用于初始化的接口
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 109 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 99 KiB |
@@ -47,7 +47,7 @@ jobs:
|
|||||||
id: sitemap
|
id: sitemap
|
||||||
uses: cicirello/generate-sitemap@v1
|
uses: cicirello/generate-sitemap@v1
|
||||||
with:
|
with:
|
||||||
base-url-path: https://CarmJos.github.io/EasyConfiguration
|
base-url-path: https://CarmJos.github.io/configured
|
||||||
path-to-root: docs
|
path-to-root: docs
|
||||||
|
|
||||||
- name: "Output stats"
|
- name: "Output stats"
|
||||||
@@ -72,7 +72,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cd docs
|
cd docs
|
||||||
git init
|
git init
|
||||||
git remote add origin git@github.com:CarmJos/EasyConfiguration.git
|
git remote add origin git@github.com:CarmJos/configured.git
|
||||||
git checkout -b gh-pages
|
git checkout -b gh-pages
|
||||||
git add -A
|
git add -A
|
||||||
git commit -m "API Document generated."
|
git commit -m "API Document generated."
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
Version 3, 29 June 2007
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|||||||
@@ -1,26 +1,24 @@
|
|||||||
```text
|
<div align=center>
|
||||||
____ _____ ____ __ _
|
<img src=".doc/images/banner.png" alt="Banner"/>
|
||||||
/ __/__ ____ __ __ / ___/__ ___ / _(_)__ ___ _________ _/ /_(_)__ ___
|
|
||||||
/ _// _ `(_-</ // / / /__/ _ \/ _ \/ _/ / _ `/ // / __/ _ `/ __/ / _ \/ _ \
|
[](https://github.com/CarmJos/configured/releases)
|
||||||
/___/\_,_/___/\_, / \___/\___/_//_/_//_/\_, /\_,_/_/ \_,_/\__/_/\___/_//_/
|
[](https://www.gnu.org/licenses/lgpl-3.0.html)
|
||||||
/___/ /___/
|
[](https://github.com/CarmJos/configured/actions/workflows/maven.yml)
|
||||||
```
|
[](https://www.codefactor.io/repository/github/carmjos/configured)
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
README LANGUAGES [ [**English**](README.md) | [中文](README_CN.md) ]
|
README LANGUAGES [ [**English**](README.md) | [中文](README_CN.md) ]
|
||||||
|
</div>
|
||||||
|
|
||||||
# EasyConfiguration
|
# configured (config-framework)
|
||||||
|
|
||||||
[](https://github.com/CarmJos/EasyConfiguration/releases)
|
_**"Once set, Simple get."**_
|
||||||
[](https://www.gnu.org/licenses/lgpl-3.0.html)
|
|
||||||
[](https://github.com/CarmJos/EasyConfiguration/actions/workflows/maven.yml)
|
|
||||||
[](https://www.codefactor.io/repository/github/carmjos/easyconfiguration)
|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
**Easy _(to make)_ Configurations!**
|
A simple, easy-to-use and universal solution for managing, loading, reading,
|
||||||
|
and updating configuration files.
|
||||||
|
|
||||||
A simple, easy-to-use and universal solution for managing configuration files.
|
Supported **JSON**, **YAML**, **Hocon**, **TOML**, **SQL**, **MongoDB**... and much more!
|
||||||
Enjoy the ease of use with customizable formats for loading, reading, and updating your configuration files.
|
|
||||||
|
|
||||||
## Features & Advantages
|
## Features & Advantages
|
||||||
|
|
||||||
@@ -35,13 +33,14 @@ format.
|
|||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
For the latest JavaDoc release, [CLICK HERE](https://CarmJos.github.io/EasyConfiguration).
|
For the latest JavaDoc release, [CLICK HERE](https://CarmJos.github.io/configured).
|
||||||
|
|
||||||
For a detailed development guide, [CLICK HERE](.doc/README.md).
|
For a detailed development guide, [CLICK HERE](.doc/README.md).
|
||||||
|
|
||||||
### Code Samples
|
### Code Samples
|
||||||
|
|
||||||
To quickly demonstrate the applicability of the project, here are a few practical demonstrations:
|
To quickly demonstrate the applicability of the project, here are a few practical demonstrations:
|
||||||
|
|
||||||
- [Database configuration.](demo/src/main/java/cc/carm/lib/configuration/demo/DatabaseConfiguration.java)
|
- [Database configuration.](demo/src/main/java/cc/carm/lib/configuration/demo/DatabaseConfiguration.java)
|
||||||
- [Demonstration of all types of configuration instance classes.](demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/DemoConfiguration.java)
|
- [Demonstration of all types of configuration instance classes.](demo/src/main/java/cc/carm/lib/configuration/demo/tests/conf/DemoConfiguration.java)
|
||||||
|
|
||||||
@@ -49,6 +48,7 @@ Check out all code demonstrations [HERE](demo/src/main/java/cc/carm/lib/configur
|
|||||||
For more examples, see the [Development Guide](.doc/README.md).
|
For more examples, see the [Development Guide](.doc/README.md).
|
||||||
|
|
||||||
```java
|
```java
|
||||||
|
|
||||||
@ConfigPath(root = true)
|
@ConfigPath(root = true)
|
||||||
@HeaderComments("Configurations for sample")
|
@HeaderComments("Configurations for sample")
|
||||||
public interface SampleConfig extends Configuration {
|
public interface SampleConfig extends Configuration {
|
||||||
@@ -95,9 +95,9 @@ public class Sample {
|
|||||||
// 2. Initialize the configuration classes or instances.
|
// 2. Initialize the configuration classes or instances.
|
||||||
holder.initialize(SampleConfig.class);
|
holder.initialize(SampleConfig.class);
|
||||||
// 3. Enjoy using the configuration!
|
// 3. Enjoy using the configuration!
|
||||||
System.out.println("Enabled? -> " + SampleConfig.ENABLED.resolve());
|
System.out.println("Enabled? -> " + SampleConfig.ENABLED.resolve()); // true
|
||||||
SampleConfig.ENABLED.set(false);
|
SampleConfig.ENABLED.set(false);
|
||||||
System.out.println("And now? -> " + SampleConfig.ENABLED.resolve());
|
System.out.println("And now? -> " + SampleConfig.ENABLED.resolve()); // false
|
||||||
// p.s. Changes not save so enable value will still be true in the next run.
|
// p.s. Changes not save so enable value will still be true in the next run.
|
||||||
|
|
||||||
System.out.println("Your name is " + SampleConfig.INFO.NAME.resolve() + " (age=" + SampleConfig.INFO.AGE.resolve() + ")!");
|
System.out.println("Your name is " + SampleConfig.INFO.NAME.resolve() + " (age=" + SampleConfig.INFO.AGE.resolve() + ")!");
|
||||||
@@ -148,9 +148,9 @@ info:
|
|||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<!-- Using GitHub dependencies for real-time updates, configuration required (recommended). -->
|
<!-- Using GitHub dependencies for real-time updates, configuration required (recommended). -->
|
||||||
<id>EasyConfiguration</id>
|
<id>configured</id>
|
||||||
<name>GitHub Packages</name>
|
<name>GitHub Packages</name>
|
||||||
<url>https://maven.pkg.github.com/CarmJos/EasyConfiguration</url>
|
<url>https://maven.pkg.github.com/CarmJos/configured</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
</repositories>
|
</repositories>
|
||||||
@@ -169,7 +169,7 @@ info:
|
|||||||
<!-- Basic implementation part, requiring custom implementation of “Provider” and “Wrapper”. -->
|
<!-- Basic implementation part, requiring custom implementation of “Provider” and “Wrapper”. -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-core</artifactId>
|
<artifactId>configured-core</artifactId>
|
||||||
<version>[LATEST RELEASE]</version>
|
<version>[LATEST RELEASE]</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -177,7 +177,7 @@ info:
|
|||||||
<!-- YAML file-based implementation, compatible with all Java environments. -->
|
<!-- YAML file-based implementation, compatible with all Java environments. -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-yaml</artifactId>
|
<artifactId>configured-yaml</artifactId>
|
||||||
<version>[LATEST RELEASE]</version>
|
<version>[LATEST RELEASE]</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -185,7 +185,7 @@ info:
|
|||||||
<!-- JSON file-based implementation, compatible with all Java environments. -->
|
<!-- JSON file-based implementation, compatible with all Java environments. -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-gson</artifactId>
|
<artifactId>configured-gson</artifactId>
|
||||||
<version>[LATEST RELEASE]</version>
|
<version>[LATEST RELEASE]</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -208,7 +208,7 @@ repositories {
|
|||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
|
||||||
// Using GitHub dependencies for real-time updates, configuration required (recommended).
|
// Using GitHub dependencies for real-time updates, configuration required (recommended).
|
||||||
maven { url 'https://maven.pkg.github.com/CarmJos/EasyConfiguration' }
|
maven { url 'https://maven.pkg.github.com/CarmJos/configured' }
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -223,13 +223,13 @@ repositories {
|
|||||||
dependencies {
|
dependencies {
|
||||||
|
|
||||||
// Basic implementation part, requiring custom implementation of “Provider” and “Wrapper”.
|
// Basic implementation part, requiring custom implementation of “Provider” and “Wrapper”.
|
||||||
api "cc.carm.lib:easyconfiguration-core:[LATEST RELEASE]"
|
api "cc.carm.lib:configured-core:[LATEST RELEASE]"
|
||||||
|
|
||||||
// YAML file-based implementation, compatible with all Java environments.
|
// YAML file-based implementation, compatible with all Java environments.
|
||||||
api "cc.carm.lib:easyconfiguration-yaml:[LATEST RELEASE]"
|
api "cc.carm.lib:configured-yaml:[LATEST RELEASE]"
|
||||||
|
|
||||||
// JSON file-based implementation, compatible with all Java environments.
|
// JSON file-based implementation, compatible with all Java environments.
|
||||||
api "cc.carm.lib:easyconfiguration-gson:[LATEST RELEASE]"
|
api "cc.carm.lib:configured-gson:[LATEST RELEASE]"
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -240,7 +240,7 @@ dependencies {
|
|||||||
|
|
||||||
### [**MineConfiguration**](https://github.com/CarmJos/MineConfiguration) (by @CarmJos)
|
### [**MineConfiguration**](https://github.com/CarmJos/MineConfiguration) (by @CarmJos)
|
||||||
|
|
||||||
EasyConfiguration for MineCraft!
|
configured for MineCraft!
|
||||||
Easily manage configurations on MineCraft-related server platforms.
|
Easily manage configurations on MineCraft-related server platforms.
|
||||||
|
|
||||||
Currently, it supports BungeeCord, Velocity, Bukkit (Spigot) servers,
|
Currently, it supports BungeeCord, Velocity, Bukkit (Spigot) servers,
|
||||||
@@ -254,7 +254,7 @@ Thank you for supporting open-source projects!
|
|||||||
|
|
||||||
Many thanks to Jetbrains for kindly providing a license for us to work on this and other open-source projects.
|
Many thanks to Jetbrains for kindly providing a license for us to work on this and other open-source projects.
|
||||||
|
|
||||||
[](https://www.jetbrains.com/?from=https://github.com/CarmJos/EasyConfiguration)
|
[](https://www.jetbrains.com/?from=https://github.com/CarmJos/configured)
|
||||||
|
|
||||||
Many thanks to [ArtformGames](https://github.com/ArtformGames) for their
|
Many thanks to [ArtformGames](https://github.com/ArtformGames) for their
|
||||||
strong support and active contribution to this project!
|
strong support and active contribution to this project!
|
||||||
|
|||||||
+29
-32
@@ -1,29 +1,26 @@
|
|||||||
```text
|
<div align=center>
|
||||||
____ _____ ____ __ _
|
<img src=".doc/images/banner.png" alt="Banner"/>
|
||||||
/ __/__ ____ __ __ / ___/__ ___ / _(_)__ ___ _________ _/ /_(_)__ ___
|
|
||||||
/ _// _ `(_-</ // / / /__/ _ \/ _ \/ _/ / _ `/ // / __/ _ `/ __/ / _ \/ _ \
|
[](https://github.com/CarmJos/configured/releases)
|
||||||
/___/\_,_/___/\_, / \___/\___/_//_/_//_/\_, /\_,_/_/ \_,_/\__/_/\___/_//_/
|
[](https://www.gnu.org/licenses/lgpl-3.0.html)
|
||||||
/___/ /___/
|
[](https://github.com/CarmJos/configured/actions/workflows/maven.yml)
|
||||||
```
|
[](https://www.codefactor.io/repository/github/carmjos/configured)
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
README LANGUAGES [ [English](README.md) | [**中文**](README_CN.md) ]
|
README LANGUAGES [ [English](README.md) | [**中文**](README_CN.md) ]
|
||||||
|
|
||||||
# EasyConfiguration
|
</div>
|
||||||
|
|
||||||
[](https://github.com/CarmJos/EasyConfiguration/releases)
|
# configured (config-framework)
|
||||||
[](https://www.gnu.org/licenses/lgpl-3.0.html)
|
|
||||||
[](https://github.com/CarmJos/EasyConfiguration/actions/workflows/maven.yml)
|
|
||||||
[](https://www.codefactor.io/repository/github/carmjos/easyconfiguration)
|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
**轻松(做)配置!**
|
**一次配置,轻松读取!**
|
||||||
|
|
||||||
一款简单便捷的通用配置文件加载、读取与更新工具,可自定义配置的格式。
|
一款简单便捷的通用配置文件加载、读取与更新工具,可自定义配置的格式。
|
||||||
|
|
||||||
## 特性 & 优势
|
## 特性 & 优势
|
||||||
|
|
||||||
支持 [YAML](impl/yaml), [JSON](impl/json), [HOCON](impl/hocon) 和 [SQL](impl/sql) 等多种配置文件格式。
|
支持 [YAML](providers/yaml), [JSON](providers/gson), [HOCON](providers/hocon) 和 [SQL](providers/sql) 等多种配置文件格式。
|
||||||
|
|
||||||
- 基于类的配置文件初始化、加载、获取与更新机制,方便快捷。
|
- 基于类的配置文件初始化、加载、获取与更新机制,方便快捷。
|
||||||
- 支持复杂配置的手动序列化、反序列化。
|
- 支持复杂配置的手动序列化、反序列化。
|
||||||
@@ -33,7 +30,7 @@ README LANGUAGES [ [English](README.md) | [**中文**](README_CN.md) ]
|
|||||||
## 开发
|
## 开发
|
||||||
|
|
||||||
详细开发介绍请 [点击这里](.doc/README.md) , JavaDoc(最新Release)
|
详细开发介绍请 [点击这里](.doc/README.md) , JavaDoc(最新Release)
|
||||||
请 [点击这里](https://CarmJos.github.io/EasyConfiguration) 。
|
请 [点击这里](https://CarmJos.github.io/configured) 。
|
||||||
|
|
||||||
### 示例代码
|
### 示例代码
|
||||||
|
|
||||||
@@ -142,9 +139,9 @@ info:
|
|||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<!--采用github依赖库,实时更新,但需要配置 (推荐) -->
|
<!--采用github依赖库,实时更新,但需要配置 (推荐) -->
|
||||||
<id>EasyConfiguration</id>
|
<id>configured</id>
|
||||||
<name>GitHub Packages</name>
|
<name>GitHub Packages</name>
|
||||||
<url>https://maven.pkg.github.com/CarmJos/EasyConfiguration</url>
|
<url>https://maven.pkg.github.com/CarmJos/configured</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
@@ -170,7 +167,7 @@ info:
|
|||||||
<!--基础实现部分,需要自行实现“Provider”与“Wrapper”。-->
|
<!--基础实现部分,需要自行实现“Provider”与“Wrapper”。-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-core</artifactId>
|
<artifactId>configured-core</artifactId>
|
||||||
<version>[LATEST RELEASE]</version>
|
<version>[LATEST RELEASE]</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -178,7 +175,7 @@ info:
|
|||||||
<!--基于YAML文件的实现版本,可用于全部Java环境。-->
|
<!--基于YAML文件的实现版本,可用于全部Java环境。-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-yaml</artifactId>
|
<artifactId>configured-yaml</artifactId>
|
||||||
<version>[LATEST RELEASE]</version>
|
<version>[LATEST RELEASE]</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -187,21 +184,21 @@ info:
|
|||||||
<!--需要注意的是,JSON不支持文件注释。-->
|
<!--需要注意的是,JSON不支持文件注释。-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-gson</artifactId>
|
<artifactId>configured-gson</artifactId>
|
||||||
<version>[LATEST RELEASE]</version>
|
<version>[LATEST RELEASE]</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-hocon</artifactId>
|
<artifactId>configured-hocon</artifactId>
|
||||||
<version>[LATEST RELEASE]</version>
|
<version>[LATEST RELEASE]</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-sql</artifactId>
|
<artifactId>configured-sql</artifactId>
|
||||||
<version>[LATEST RELEASE]</version>
|
<version>[LATEST RELEASE]</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -224,7 +221,7 @@ repositories {
|
|||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
|
||||||
// 采用github依赖库,实时更新,但需要配置 (推荐)
|
// 采用github依赖库,实时更新,但需要配置 (推荐)
|
||||||
maven { url 'https://maven.pkg.github.com/CarmJos/EasyConfiguration' }
|
maven { url 'https://maven.pkg.github.com/CarmJos/configured' }
|
||||||
|
|
||||||
// 采用我的私人依赖库,简单方便,但可能因为变故而无法使用
|
// 采用我的私人依赖库,简单方便,但可能因为变故而无法使用
|
||||||
maven { url 'https://repo.carm.cc/repository/maven-public/' }
|
maven { url 'https://repo.carm.cc/repository/maven-public/' }
|
||||||
@@ -241,18 +238,18 @@ repositories {
|
|||||||
dependencies {
|
dependencies {
|
||||||
|
|
||||||
//基础实现部分,需要自行实现“Provider”与“Wrapper”。
|
//基础实现部分,需要自行实现“Provider”与“Wrapper”。
|
||||||
api "cc.carm.lib:easyconfiguration-core:[LATEST RELEASE]"
|
api "cc.carm.lib:configured-core:[LATEST RELEASE]"
|
||||||
|
|
||||||
//基于YAML文件的实现版本,可用于全部Java环境。
|
//基于YAML文件的实现版本,可用于全部Java环境。
|
||||||
api "cc.carm.lib:easyconfiguration-yaml:[LATEST RELEASE]"
|
api "cc.carm.lib:configured-yaml:[LATEST RELEASE]"
|
||||||
|
|
||||||
//基于JSON文件的实现版本,可用于全部Java环境。
|
//基于JSON文件的实现版本,可用于全部Java环境。
|
||||||
//需要注意的是,JSON不支持文件注释。
|
//需要注意的是,JSON不支持文件注释。
|
||||||
api "cc.carm.lib:easyconfiguration-gson:[LATEST RELEASE]"
|
api "cc.carm.lib:configured-gson:[LATEST RELEASE]"
|
||||||
|
|
||||||
api "cc.carm.lib:easyconfiguration-hocon:[LATEST RELEASE]"
|
api "cc.carm.lib:configured-hocon:[LATEST RELEASE]"
|
||||||
|
|
||||||
api "cc.carm.lib:easyconfiguration-sql:[LATEST RELEASE]"
|
api "cc.carm.lib:configured-sql:[LATEST RELEASE]"
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -263,7 +260,7 @@ dependencies {
|
|||||||
|
|
||||||
### [**MineConfiguration**](https://github.com/CarmJos/MineConfiguration) (by @CarmJos )
|
### [**MineConfiguration**](https://github.com/CarmJos/MineConfiguration) (by @CarmJos )
|
||||||
|
|
||||||
EasyConfiguration for MineCraft!
|
configured for MineCraft!
|
||||||
开始在 MineCraft 相关服务器平台上轻松(做)配置吧!
|
开始在 MineCraft 相关服务器平台上轻松(做)配置吧!
|
||||||
|
|
||||||
目前支持 BungeeCord, Bukkit(Spigot) 服务端,后续将支持更多平台。
|
目前支持 BungeeCord, Bukkit(Spigot) 服务端,后续将支持更多平台。
|
||||||
@@ -276,7 +273,7 @@ EasyConfiguration for MineCraft!
|
|||||||
|
|
||||||
万分感谢 Jetbrains 为我们提供了从事此项目和其他开源项目的许可!
|
万分感谢 Jetbrains 为我们提供了从事此项目和其他开源项目的许可!
|
||||||
|
|
||||||
[](https://www.jetbrains.com/?from=https://github.com/CarmJos/EasyConfiguration)
|
[](https://www.jetbrains.com/?from=https://github.com/CarmJos/configured)
|
||||||
|
|
||||||
万分感谢来自 [ArtformGames](https://github.com/ArtformGames) 对本项目的大力支持与积极贡献!
|
万分感谢来自 [ArtformGames](https://github.com/ArtformGames) 对本项目的大力支持与积极贡献!
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -3,9 +3,9 @@
|
|||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>easyconfiguration-parent</artifactId>
|
<artifactId>configured-parent</artifactId>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<version>4.0.10</version>
|
<version>4.1.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<properties>
|
<properties>
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<artifactId>easyconfiguration-core</artifactId>
|
<artifactId>configured-core</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|||||||
+1
-3
@@ -49,9 +49,7 @@ public abstract class AbstractSectionBuilder<
|
|||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull SELF serialize(@NotNull DataFunction<PARAM, ? extends Map<String, Object>> serializer) {
|
public @NotNull SELF serialize(@NotNull DataFunction<PARAM, ? extends Map<String, Object>> serializer) {
|
||||||
return serialize((p, value) -> {
|
return serialize((p, value) -> serializer.handle(value));
|
||||||
return serializer.handle(value);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public @NotNull SELF serialize(@NotNull ValueConsumer<Map<String, Object>, PARAM> serializer) {
|
public @NotNull SELF serialize(@NotNull ValueConsumer<Map<String, Object>, PARAM> serializer) {
|
||||||
|
|||||||
@@ -3,10 +3,7 @@ package cc.carm.lib.configuration.builder.map;
|
|||||||
import cc.carm.lib.configuration.adapter.ValueType;
|
import cc.carm.lib.configuration.adapter.ValueType;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.TreeMap;
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class ConfigMapCreator<K, V> {
|
public class ConfigMapCreator<K, V> {
|
||||||
@@ -45,4 +42,8 @@ public class ConfigMapCreator<K, V> {
|
|||||||
return constructor(TreeMap::new);
|
return constructor(TreeMap::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public @NotNull ConfigMapBuilder<TreeMap<K, V>, K, V> asTreeMap(@NotNull Comparator<? super K> comparator) {
|
||||||
|
return constructor(() -> new TreeMap<>(comparator));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -75,6 +75,10 @@ public class SectionMapBuilder<MAP extends Map<K, V>, K, V>
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public @NotNull SectionMapBuilder<MAP, K, V> defaults(@NotNull K key, @NotNull V value) {
|
||||||
|
return defaults(map -> map.put(key, value));
|
||||||
|
}
|
||||||
|
|
||||||
public @NotNull ValueAdapter<K> buildKeyAdapter() {
|
public @NotNull ValueAdapter<K> buildKeyAdapter() {
|
||||||
return new ValueAdapter<>(this.keyType)
|
return new ValueAdapter<>(this.keyType)
|
||||||
.parser((holder, type, data) -> {
|
.parser((holder, type, data) -> {
|
||||||
|
|||||||
@@ -53,6 +53,10 @@ public class SourceMapBuilder<MAP extends Map<K, V>, SOURCE, K, V>
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public @NotNull SourceMapBuilder<MAP, SOURCE, K, V> defaults(@NotNull K key, @NotNull V value) {
|
||||||
|
return defaults(map -> map.put(key, value));
|
||||||
|
}
|
||||||
|
|
||||||
public @NotNull SourceMapBuilder<MAP, SOURCE, K, V> parseKey(@NotNull DataFunction<String, K> keyParser) {
|
public @NotNull SourceMapBuilder<MAP, SOURCE, K, V> parseKey(@NotNull DataFunction<String, K> keyParser) {
|
||||||
return parseKey((holder, data) -> keyParser.handle(data));
|
return parseKey((holder, data) -> keyParser.handle(data));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ public class ValueManifest<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ApiStatus.Internal
|
@ApiStatus.Internal
|
||||||
protected Object getData() {
|
protected @Nullable Object getData() {
|
||||||
return config().get(path());
|
return config().get(path());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
-12
@@ -3,9 +3,9 @@
|
|||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>easyconfiguration-parent</artifactId>
|
<artifactId>configured-parent</artifactId>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<version>4.0.10</version>
|
<version>4.1.0</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<properties>
|
<properties>
|
||||||
@@ -14,37 +14,31 @@
|
|||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
||||||
</properties>
|
</properties>
|
||||||
<artifactId>easyconfiguration-demo</artifactId>
|
<artifactId>configured-demo</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-core</artifactId>
|
<artifactId>configured-core</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-feature-commentable</artifactId>
|
<artifactId>configured-feature-commentable</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-feature-versioned</artifactId>
|
<artifactId>configured-feature-versioned</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>cc.carm.lib</groupId>
|
|
||||||
<artifactId>easyconfiguration-feature-versioned</artifactId>
|
|
||||||
<version>4.0.8</version>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import java.util.UUID;
|
|||||||
"------------------------------------------------",
|
"------------------------------------------------",
|
||||||
"此处内容将显示在配置文件的最下方",
|
"此处内容将显示在配置文件的最下方",
|
||||||
"可用于显示版权信息等",
|
"可用于显示版权信息等",
|
||||||
"感谢您使用 https://github.com/CarmJos/EasyConfiguration !"
|
"感谢您使用 https://github.com/CarmJos/configured !"
|
||||||
})
|
})
|
||||||
public interface DemoConfiguration extends Configuration {
|
public interface DemoConfiguration extends Configuration {
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-parent</artifactId>
|
<artifactId>configured-parent</artifactId>
|
||||||
<version>4.0.10</version>
|
<version>4.1.0</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<properties>
|
<properties>
|
||||||
@@ -16,13 +16,13 @@
|
|||||||
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<artifactId>easyconfiguration-feature-commentable</artifactId>
|
<artifactId>configured-feature-commentable</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-core</artifactId>
|
<artifactId>configured-core</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-parent</artifactId>
|
<artifactId>configured-parent</artifactId>
|
||||||
<version>4.0.10</version>
|
<version>4.1.0</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<properties>
|
<properties>
|
||||||
@@ -16,13 +16,13 @@
|
|||||||
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<artifactId>easyconfiguration-feature-file</artifactId>
|
<artifactId>configured-feature-file</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-core</artifactId>
|
<artifactId>configured-core</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-parent</artifactId>
|
<artifactId>configured-parent</artifactId>
|
||||||
<version>4.0.10</version>
|
<version>4.1.0</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<properties>
|
<properties>
|
||||||
@@ -16,13 +16,13 @@
|
|||||||
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<artifactId>easyconfiguration-feature-section</artifactId>
|
<artifactId>configured-feature-section</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-core</artifactId>
|
<artifactId>configured-core</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-parent</artifactId>
|
<artifactId>configured-parent</artifactId>
|
||||||
<version>4.0.10</version>
|
<version>4.1.0</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<properties>
|
<properties>
|
||||||
@@ -16,20 +16,20 @@
|
|||||||
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<artifactId>easyconfiguration-feature-text</artifactId>
|
<artifactId>configured-feature-text</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-core</artifactId>
|
<artifactId>configured-core</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-yaml</artifactId>
|
<artifactId>configured-gson</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|||||||
+47
-7
@@ -16,11 +16,12 @@ import java.util.stream.IntStream;
|
|||||||
public abstract class ContentHandler<RECEIVER, SELF extends ContentHandler<RECEIVER, SELF>> {
|
public abstract class ContentHandler<RECEIVER, SELF extends ContentHandler<RECEIVER, SELF>> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to match the message insertion
|
* Used to match the message insertion.
|
||||||
* <p>
|
* <p>
|
||||||
* format:
|
* format:
|
||||||
* <br>- to insert parsed line {prefix}#content-id#{offset-above,offset-down}
|
* <br>- to insert parsed line {prefix}#content-id#{offset-above,offset-down}
|
||||||
* <br>- to insert original line {prefix}@content-id@{offset-above,offset-down}
|
* <br>- to insert original line {prefix}@content-id@{offset-above,offset-down}
|
||||||
|
* <br> original lines will not be parsed
|
||||||
* <br> example:
|
* <br> example:
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>{- }#content-id#{1,1}</li>
|
* <li>{- }#content-id#{1,1}</li>
|
||||||
@@ -30,6 +31,21 @@ public abstract class ContentHandler<RECEIVER, SELF extends ContentHandler<RECEI
|
|||||||
public static final @NotNull Pattern INSERT_PATTERN = Pattern.compile(
|
public static final @NotNull Pattern INSERT_PATTERN = Pattern.compile(
|
||||||
"^(?:\\{(?<prefix>.*)})?(?<type>[#@])(?<id>.*)[#@](?:\\{(?<above>-?\\d+)(?:,(?<down>-?\\d+))?})?$"
|
"^(?:\\{(?<prefix>.*)})?(?<type>[#@])(?<id>.*)[#@](?:\\{(?<above>-?\\d+)(?:,(?<down>-?\\d+))?})?$"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to match the message which can be inserted
|
||||||
|
* <p>
|
||||||
|
* format:
|
||||||
|
* <br>- ?[id]Message content
|
||||||
|
* <br> example:
|
||||||
|
* <ul>
|
||||||
|
* <li>?[click]Click to use this item!</li>
|
||||||
|
* </ul>
|
||||||
|
*/
|
||||||
|
public static final @NotNull Pattern ENABLE_PATTERN = Pattern.compile(
|
||||||
|
"^\\?\\[(?<id>.+)](?<content>.*)$"
|
||||||
|
);
|
||||||
|
|
||||||
public static final @NotNull UnaryOperator<String> DEFAULT_PARAM_BUILDER = s -> "%(" + s + ")";
|
public static final @NotNull UnaryOperator<String> DEFAULT_PARAM_BUILDER = s -> "%(" + s + ")";
|
||||||
|
|
||||||
protected BiFunction<RECEIVER, String, String> parser = (receiver, value) -> value;
|
protected BiFunction<RECEIVER, String, String> parser = (receiver, value) -> value;
|
||||||
@@ -45,7 +61,7 @@ public abstract class ContentHandler<RECEIVER, SELF extends ContentHandler<RECEI
|
|||||||
/**
|
/**
|
||||||
* Used to store the insertion of the message
|
* Used to store the insertion of the message
|
||||||
*/
|
*/
|
||||||
protected @NotNull Map<String, Function<RECEIVER, List<String>>> insertion = new HashMap<>();
|
protected @NotNull Map<String, @Nullable Function<RECEIVER, List<String>>> insertion = new HashMap<>();
|
||||||
protected boolean disableInsertion = false;
|
protected boolean disableInsertion = false;
|
||||||
|
|
||||||
public abstract SELF self();
|
public abstract SELF self();
|
||||||
@@ -139,6 +155,17 @@ public abstract class ContentHandler<RECEIVER, SELF extends ContentHandler<RECEI
|
|||||||
return self();
|
return self();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Insert the specific contents by the id.
|
||||||
|
*
|
||||||
|
* @param id the id of the insertion text
|
||||||
|
* @return the current {@link ContentHandler} instance
|
||||||
|
*/
|
||||||
|
public SELF insert(@NotNull String id) {
|
||||||
|
this.insertion.put(id, null);
|
||||||
|
return self();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Insert the specific contents by the id.
|
* Insert the specific contents by the id.
|
||||||
*
|
*
|
||||||
@@ -205,17 +232,31 @@ public abstract class ContentHandler<RECEIVER, SELF extends ContentHandler<RECEI
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (String line : contents.lines()) {
|
for (String line : contents.lines()) {
|
||||||
Matcher matcher = INSERT_PATTERN.matcher(line);
|
Matcher insertMatcher = INSERT_PATTERN.matcher(line);
|
||||||
if (!matcher.matches()) {
|
if (insertMatcher.matches()) {
|
||||||
lineConsumer.accept(parse(receiver, line));
|
doInsert(insertMatcher, receiver, lineConsumer);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Matcher enableMatcher = ENABLE_PATTERN.matcher(line);
|
||||||
|
if (enableMatcher.matches()) {
|
||||||
|
if (this.insertion.containsKey(enableMatcher.group("id"))) {
|
||||||
|
lineConsumer.accept(parse(receiver, enableMatcher.group("content")));
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
lineConsumer.accept(parse(receiver, line));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void doInsert(Matcher matcher, @Nullable RECEIVER receiver,
|
||||||
|
@NotNull Consumer<String> lineConsumer) {
|
||||||
String id = matcher.group("id");
|
String id = matcher.group("id");
|
||||||
List<String> values = Optional.ofNullable(this.insertion.get(id))
|
List<String> values = Optional.ofNullable(this.insertion.get(id))
|
||||||
.map(f -> f.apply(receiver))
|
.map(f -> f.apply(receiver))
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
if (values == null || values.isEmpty()) continue;
|
if (values == null || values.isEmpty()) return; // No values to insert
|
||||||
|
|
||||||
String prefix = matcher.group("prefix");
|
String prefix = matcher.group("prefix");
|
||||||
String type = matcher.group("type");
|
String type = matcher.group("type");
|
||||||
@@ -234,7 +275,6 @@ public abstract class ContentHandler<RECEIVER, SELF extends ContentHandler<RECEI
|
|||||||
}
|
}
|
||||||
IntStream.range(0, Math.max(0, offsetDown)).mapToObj(i -> "").forEach(lineConsumer);
|
IntStream.range(0, Math.max(0, offsetDown)).mapToObj(i -> "").forEach(lineConsumer);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public static String setPlaceholders(@NotNull String messages,
|
public static String setPlaceholders(@NotNull String messages,
|
||||||
@NotNull Map<String, Object> placeholders) {
|
@NotNull Map<String, Object> placeholders) {
|
||||||
|
|||||||
+4
-2
@@ -2,10 +2,12 @@ package cc.carm.lib.configuration.value.text.tests;
|
|||||||
|
|
||||||
|
|
||||||
import cc.carm.lib.configuration.source.ConfigurationHolder;
|
import cc.carm.lib.configuration.source.ConfigurationHolder;
|
||||||
import cc.carm.lib.configuration.source.yaml.YAMLConfigFactory;
|
import cc.carm.lib.configuration.source.json.JSONConfigFactory;
|
||||||
import cc.carm.lib.configuration.value.text.tests.conf.AppMessages;
|
import cc.carm.lib.configuration.value.text.tests.conf.AppMessages;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
public class ConfigTest {
|
public class ConfigTest {
|
||||||
|
|
||||||
|
|
||||||
@@ -19,7 +21,7 @@ public class ConfigTest {
|
|||||||
@Test
|
@Test
|
||||||
public void test() {
|
public void test() {
|
||||||
|
|
||||||
ConfigurationHolder<?> holder = YAMLConfigFactory.from("target/messages.yml").build();
|
ConfigurationHolder<?> holder = JSONConfigFactory.from(new File("target/messages.json")).build();
|
||||||
|
|
||||||
holder.initialize(AppMessages.class);
|
holder.initialize(AppMessages.class);
|
||||||
|
|
||||||
|
|||||||
+4
-1
@@ -20,7 +20,9 @@ public class ParseTest {
|
|||||||
lines.add("#guidance#");
|
lines.add("#guidance#");
|
||||||
lines.add("{- }#websites#{0,1}");
|
lines.add("{- }#websites#{0,1}");
|
||||||
lines.add("Thanks for your reading!");
|
lines.add("Thanks for your reading!");
|
||||||
|
lines.add("?[click]");
|
||||||
|
lines.add("?[click]Click to see more!");
|
||||||
|
lines.add("?[hidden]This entry should be hidden!");
|
||||||
|
|
||||||
Map<String, List<String>> optional = new HashMap<>();
|
Map<String, List<String>> optional = new HashMap<>();
|
||||||
optional.put("guidance", Arrays.asList("To get more information for %(name), see:"));
|
optional.put("guidance", Arrays.asList("To get more information for %(name), see:"));
|
||||||
@@ -35,6 +37,7 @@ public class ParseTest {
|
|||||||
|
|
||||||
msg.placeholder("name", "Carm")
|
msg.placeholder("name", "Carm")
|
||||||
.insert("guidance")
|
.insert("guidance")
|
||||||
|
.insert("click")
|
||||||
.insert("websites", "Baidu", "Bilibili", "Google");
|
.insert("websites", "Baidu", "Bilibili", "Google");
|
||||||
|
|
||||||
System.out.println("----------------------------");
|
System.out.println("----------------------------");
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-parent</artifactId>
|
<artifactId>configured-parent</artifactId>
|
||||||
<version>4.0.10</version>
|
<version>4.1.0</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<properties>
|
<properties>
|
||||||
@@ -16,13 +16,13 @@
|
|||||||
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<artifactId>easyconfiguration-feature-versioned</artifactId>
|
<artifactId>configured-feature-versioned</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-core</artifactId>
|
<artifactId>configured-core</artifactId>
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|||||||
@@ -13,9 +13,9 @@
|
|||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-parent</artifactId>
|
<artifactId>configured-parent</artifactId>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>4.0.10</version>
|
<version>4.1.0</version>
|
||||||
<modules>
|
<modules>
|
||||||
<module>core</module>
|
<module>core</module>
|
||||||
<module>features/section</module>
|
<module>features/section</module>
|
||||||
@@ -26,16 +26,16 @@
|
|||||||
|
|
||||||
<module>providers/yaml</module>
|
<module>providers/yaml</module>
|
||||||
<module>providers/gson</module>
|
<module>providers/gson</module>
|
||||||
<!-- <module>providers/hocon</module>-->
|
<module>providers/hocon</module>
|
||||||
<module>providers/sql</module>
|
<module>providers/sql</module>
|
||||||
<module>providers/mongodb</module>
|
<module>providers/mongodb</module>
|
||||||
|
|
||||||
<module>demo</module>
|
<module>demo</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<name>EasyConfiguration</name>
|
<name>configured</name>
|
||||||
<description>A simple, easy-to-use and universal solution for managing configuration files.</description>
|
<description>A simple, easy-to-use and universal solution for managing configuration files.</description>
|
||||||
<url>https://github.com/CarmJos/EasyConfiguration</url>
|
<url>https://github.com/CarmJos/configured</url>
|
||||||
|
|
||||||
<developers>
|
<developers>
|
||||||
<developer>
|
<developer>
|
||||||
@@ -48,9 +48,9 @@
|
|||||||
</developers>
|
</developers>
|
||||||
|
|
||||||
<scm>
|
<scm>
|
||||||
<connection>scm:git:git@github.com:CarmJos/Easy.EasyConfiguration</connection>
|
<connection>scm:git:git@github.com:CarmJos/Easy.configured</connection>
|
||||||
<developerConnection>scm:git:git@github.com:CarmJos/EasyConfiguration.git</developerConnection>
|
<developerConnection>scm:git:git@github.com:CarmJos/configured.git</developerConnection>
|
||||||
<url>https://github.com/CarmJos/EasyConfiguration</url>
|
<url>https://github.com/CarmJos/configured</url>
|
||||||
<tag>HEAD</tag>
|
<tag>HEAD</tag>
|
||||||
</scm>
|
</scm>
|
||||||
|
|
||||||
@@ -63,12 +63,12 @@
|
|||||||
|
|
||||||
<issueManagement>
|
<issueManagement>
|
||||||
<system>GitHub Issues</system>
|
<system>GitHub Issues</system>
|
||||||
<url>https://github.com/CarmJos/EasyConfiguration/issues</url>
|
<url>https://github.com/CarmJos/configured/issues</url>
|
||||||
</issueManagement>
|
</issueManagement>
|
||||||
|
|
||||||
<ciManagement>
|
<ciManagement>
|
||||||
<system>GitHub Actions</system>
|
<system>GitHub Actions</system>
|
||||||
<url>https://github.com/CarmJos/EasyConfiguration/actions/workflows/maven.yml</url>
|
<url>https://github.com/CarmJos/configured/actions/workflows/maven.yml</url>
|
||||||
</ciManagement>
|
</ciManagement>
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
@@ -92,11 +92,11 @@
|
|||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
<distributionManagement>
|
<distributionManagement>
|
||||||
<downloadUrl>https://github.com/CarmJos/EasyConfiguration/releases</downloadUrl>
|
<downloadUrl>https://github.com/CarmJos/configured/releases</downloadUrl>
|
||||||
<site>
|
<site>
|
||||||
<id>javadoc</id>
|
<id>javadoc</id>
|
||||||
<name>EasyConfiguration JavaDoc (on GitHub Pages)</name>
|
<name>configured JavaDoc (on GitHub Pages)</name>
|
||||||
<url>https://CarmJos.github.io/EasyConfiguration</url>
|
<url>https://CarmJos.github.io/configured</url>
|
||||||
</site>
|
</site>
|
||||||
</distributionManagement>
|
</distributionManagement>
|
||||||
|
|
||||||
@@ -292,7 +292,7 @@
|
|||||||
<repository>
|
<repository>
|
||||||
<id>github</id>
|
<id>github</id>
|
||||||
<name>GitHub Packages</name>
|
<name>GitHub Packages</name>
|
||||||
<url>https://maven.pkg.github.com/CarmJos/EasyConfiguration</url>
|
<url>https://maven.pkg.github.com/CarmJos/configured</url>
|
||||||
</repository>
|
</repository>
|
||||||
</distributionManagement>
|
</distributionManagement>
|
||||||
</profile>
|
</profile>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# EasyConfiguration-JSON
|
# configured-JSON
|
||||||
|
|
||||||
JSON file-based implementation, compatible with all Java environments.
|
JSON file-based implementation, compatible with all Java environments.
|
||||||
|
|
||||||
@@ -22,9 +22,9 @@ JSON file-based implementation, compatible with all Java environments.
|
|||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<!-- Using GitHub dependencies for real-time updates, configuration required (recommended). -->
|
<!-- Using GitHub dependencies for real-time updates, configuration required (recommended). -->
|
||||||
<id>EasyConfiguration</id>
|
<id>configured</id>
|
||||||
<name>GitHub Packages</name>
|
<name>GitHub Packages</name>
|
||||||
<url>https://maven.pkg.github.com/CarmJos/EasyConfiguration</url>
|
<url>https://maven.pkg.github.com/CarmJos/configured</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
</repositories>
|
</repositories>
|
||||||
@@ -37,7 +37,7 @@ JSON file-based implementation, compatible with all Java environments.
|
|||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-json</artifactId>
|
<artifactId>configured-json</artifactId>
|
||||||
<version>[LATEST RELEASE]</version>
|
<version>[LATEST RELEASE]</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -54,14 +54,14 @@ repositories {
|
|||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
|
||||||
// Using GitHub dependencies for real-time updates, configuration required (recommended).
|
// Using GitHub dependencies for real-time updates, configuration required (recommended).
|
||||||
maven { url 'https://maven.pkg.github.com/CarmJos/EasyConfiguration' }
|
maven { url 'https://maven.pkg.github.com/CarmJos/configured' }
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```groovy
|
```groovy
|
||||||
dependencies {
|
dependencies {
|
||||||
api "cc.carm.lib:easyconfiguration-json:[LATEST RELEASE]"
|
api "cc.carm.lib:configured-json:[LATEST RELEASE]"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>easyconfiguration-parent</artifactId>
|
<artifactId>configured-parent</artifactId>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<version>4.0.10</version>
|
<version>4.1.0</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -15,35 +15,35 @@
|
|||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
||||||
</properties>
|
</properties>
|
||||||
<artifactId>easyconfiguration-gson</artifactId>
|
<artifactId>configured-gson</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-core</artifactId>
|
<artifactId>configured-core</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-feature-file</artifactId>
|
<artifactId>configured-feature-file</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-feature-section</artifactId>
|
<artifactId>configured-feature-section</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-demo</artifactId>
|
<artifactId>configured-demo</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# EasyConfiguration-HOCON
|
# configured-HOCON
|
||||||
|
|
||||||
HOCON file-based implementation, compatible with all Java environments.
|
HOCON file-based implementation, compatible with all Java environments.
|
||||||
|
|
||||||
@@ -20,9 +20,9 @@ HOCON file-based implementation, compatible with all Java environments.
|
|||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<!-- Using GitHub dependencies for real-time updates, configuration required (recommended). -->
|
<!-- Using GitHub dependencies for real-time updates, configuration required (recommended). -->
|
||||||
<id>EasyConfiguration</id>
|
<id>configured</id>
|
||||||
<name>GitHub Packages</name>
|
<name>GitHub Packages</name>
|
||||||
<url>https://maven.pkg.github.com/CarmJos/EasyConfiguration</url>
|
<url>https://maven.pkg.github.com/CarmJos/configured</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
</repositories>
|
</repositories>
|
||||||
@@ -35,7 +35,7 @@ HOCON file-based implementation, compatible with all Java environments.
|
|||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-hocon</artifactId>
|
<artifactId>configured-hocon</artifactId>
|
||||||
<version>[LATEST RELEASE]</version>
|
<version>[LATEST RELEASE]</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -52,14 +52,14 @@ repositories {
|
|||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
|
||||||
// Using GitHub dependencies for real-time updates, configuration required (recommended).
|
// Using GitHub dependencies for real-time updates, configuration required (recommended).
|
||||||
maven { url 'https://maven.pkg.github.com/CarmJos/EasyConfiguration' }
|
maven { url 'https://maven.pkg.github.com/CarmJos/configured' }
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```groovy
|
```groovy
|
||||||
dependencies {
|
dependencies {
|
||||||
api "cc.carm.lib:easyconfiguration-hocon:[LATEST RELEASE]"
|
api "cc.carm.lib:configured-hocon:[LATEST RELEASE]"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-parent</artifactId>
|
<artifactId>configured-parent</artifactId>
|
||||||
<version>4.0.0</version>
|
<version>4.1.0</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<properties>
|
<properties>
|
||||||
@@ -15,38 +15,38 @@
|
|||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
||||||
</properties>
|
</properties>
|
||||||
<artifactId>easyconfiguration-hocon</artifactId>
|
<artifactId>configured-hocon</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-core</artifactId>
|
<artifactId>configured-core</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-feature-commentable</artifactId>
|
<artifactId>configured-feature-commentable</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-feature-file</artifactId>
|
<artifactId>configured-feature-file</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-feature-section</artifactId>
|
<artifactId>configured-feature-section</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-demo</artifactId>
|
<artifactId>configured-demo</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
package cc.carm.lib.configuration;
|
|
||||||
|
|
||||||
import cc.carm.lib.configuration.hocon.HOCONFileConfigProvider;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class EasyConfiguration {
|
|
||||||
|
|
||||||
private EasyConfiguration() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HOCONFileConfigProvider from(File file, String source) {
|
|
||||||
HOCONFileConfigProvider provider = new HOCONFileConfigProvider(file);
|
|
||||||
try {
|
|
||||||
provider.initializeFile(source);
|
|
||||||
provider.initializeConfig();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return provider;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HOCONFileConfigProvider from(File file) {
|
|
||||||
return from(file, file.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HOCONFileConfigProvider from(String fileName) {
|
|
||||||
return from(fileName, fileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HOCONFileConfigProvider from(String fileName, String source) {
|
|
||||||
return from(new File(fileName), source);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,116 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.hocon;
|
|
||||||
|
|
||||||
import cc.carm.lib.configuration.hocon.util.HOCONUtils;
|
|
||||||
import com.typesafe.config.*;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
public class HOCONConfigWrapper implements ConfigurationWrapper<Map<String, Object>> {
|
|
||||||
private static final char SEPARATOR = '.';
|
|
||||||
protected final Map<String, Object> data;
|
|
||||||
|
|
||||||
public HOCONConfigWrapper(ConfigObject config) {
|
|
||||||
this.data = new LinkedHashMap<>();
|
|
||||||
|
|
||||||
config.forEach((key, value) -> {
|
|
||||||
Config cfg = config.toConfig();
|
|
||||||
ConfigValue cv = cfg.getValue(key);
|
|
||||||
if (cv.valueType() == ConfigValueType.OBJECT) {
|
|
||||||
HOCONConfigWrapper.this.data.put(key, new HOCONConfigWrapper((ConfigObject) cv));
|
|
||||||
} else {
|
|
||||||
HOCONConfigWrapper.this.data.put(key, value.unwrapped());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull Map<String, Object> getSource() {
|
|
||||||
return this.data;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull Set<String> getKeys(boolean deep) {
|
|
||||||
return this.getValues(deep).keySet();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull Map<String, Object> getValues(boolean deep) {
|
|
||||||
return HOCONUtils.getKeysFromObject(this, deep, "").stream().collect(
|
|
||||||
LinkedHashMap::new,
|
|
||||||
(map, key) -> map.put(key, get(key)),
|
|
||||||
LinkedHashMap::putAll
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void set(@NotNull String path, @Nullable Object value) {
|
|
||||||
if (value instanceof Map) {
|
|
||||||
//noinspection unchecked
|
|
||||||
value = new HOCONConfigWrapper(ConfigFactory.parseMap((Map<String, ?>) value).root());
|
|
||||||
}
|
|
||||||
|
|
||||||
HOCONConfigWrapper section = HOCONUtils.getObjectOn(this, path, SEPARATOR);
|
|
||||||
String simplePath = HOCONUtils.getSimplePath(path, SEPARATOR);
|
|
||||||
|
|
||||||
if (value == null) {
|
|
||||||
section.data.remove(simplePath);
|
|
||||||
} else {
|
|
||||||
section.setDirect(simplePath, value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 只能设置当前路径下的内容
|
|
||||||
* 避免环回
|
|
||||||
*
|
|
||||||
* @param path 路径
|
|
||||||
*/
|
|
||||||
public void setDirect(@NotNull String path, @Nullable Object value) {
|
|
||||||
this.data.put(path, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean contains(@NotNull String path) {
|
|
||||||
return this.get(path) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @Nullable Object get(@NotNull String path) {
|
|
||||||
HOCONConfigWrapper section = HOCONUtils.getObjectOn(this, path, SEPARATOR);
|
|
||||||
return section.getDirect(HOCONUtils.getSimplePath(path, SEPARATOR));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 只能获取当前路径下的内容
|
|
||||||
* 避免环回
|
|
||||||
*
|
|
||||||
* @param path 路径
|
|
||||||
*/
|
|
||||||
public Object getDirect(@NotNull String path) {
|
|
||||||
return this.data.get(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isList(@NotNull String path) {
|
|
||||||
return this.get(path) instanceof List<?>;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @Nullable List<?> getList(@NotNull String path) {
|
|
||||||
Object val = this.get(path);
|
|
||||||
return (val instanceof List<?>) ? (List<?>) val : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isConfigurationSection(@NotNull String path) {
|
|
||||||
return this.get(path) instanceof HOCONConfigWrapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @Nullable ConfigurationWrapper<Map<String, Object>> getConfigurationSection(@NotNull String path) {
|
|
||||||
Object val = get(path);
|
|
||||||
return (val instanceof HOCONConfigWrapper) ? (HOCONConfigWrapper) val : null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.hocon;
|
|
||||||
|
|
||||||
import cc.carm.lib.configuration.source.comment.ConfigurationComments;
|
|
||||||
import cc.carm.lib.configuration.core.source.impl.FileConfigProvider;
|
|
||||||
import cc.carm.lib.configuration.hocon.exception.HOCONGetValueException;
|
|
||||||
import cc.carm.lib.configuration.hocon.util.HOCONUtils;
|
|
||||||
import com.typesafe.config.*;
|
|
||||||
import org.jetbrains.annotations.Contract;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class HOCONFileConfigProvider extends FileConfigProvider<HOCONConfigWrapper> {
|
|
||||||
protected final @NotNull ConfigurationComments comments = new ConfigurationComments();
|
|
||||||
protected HOCONConfigWrapper configuration;
|
|
||||||
protected ConfigInitializer<HOCONFileConfigProvider> initializer;
|
|
||||||
|
|
||||||
public HOCONFileConfigProvider(@NotNull File file) {
|
|
||||||
super(file);
|
|
||||||
this.initializer = new ConfigInitializer<>(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initializeConfig() {
|
|
||||||
try {
|
|
||||||
this.configuration = new HOCONConfigWrapper(ConfigFactory.parseFile(this.file, ConfigParseOptions.defaults()
|
|
||||||
.setSyntax(ConfigSyntax.CONF)
|
|
||||||
.setAllowMissing(false)).root());
|
|
||||||
} catch (ConfigException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull HOCONConfigWrapper getConfiguration() {
|
|
||||||
return this.configuration;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void save() throws IOException {
|
|
||||||
Files.write(this.file.toPath(), HOCONUtils.renderWithComment(configuration, comments::getHeaderComment).getBytes(StandardCharsets.UTF_8));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onReload() throws ConfigException {
|
|
||||||
ConfigObject conf = ConfigFactory.parseFile(this.file, ConfigParseOptions.defaults()
|
|
||||||
.setSyntax(ConfigSyntax.CONF)
|
|
||||||
.setAllowMissing(false)).root();
|
|
||||||
this.configuration = new HOCONConfigWrapper(conf);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull ConfigurationComments getComments() {
|
|
||||||
return this.comments;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull ConfigInitializer<HOCONFileConfigProvider> getInitializer() {
|
|
||||||
return this.initializer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String serializeValue(@NotNull String key, @NotNull Object value) {
|
|
||||||
// 带有 key=value 的新空对象
|
|
||||||
return ConfigFactory.empty()
|
|
||||||
.withValue(key, ConfigValueFactory.fromAnyRef(value))
|
|
||||||
.root().render();
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull Set<String> getKeys() {
|
|
||||||
return getKeys(null, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Contract("null,_->!null")
|
|
||||||
public @Nullable Set<String> getKeys(@Nullable String sectionKey, boolean deep) {
|
|
||||||
if (sectionKey == null) { // 当前路径
|
|
||||||
return HOCONUtils.getKeysFromObject(this.configuration, deep, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
HOCONConfigWrapper section;
|
|
||||||
try {
|
|
||||||
// 获取目标字段所在路径
|
|
||||||
section = (HOCONConfigWrapper) this.configuration.get(sectionKey);
|
|
||||||
} catch (ClassCastException e) {
|
|
||||||
// 值和类型不匹配
|
|
||||||
throw new HOCONGetValueException(e);
|
|
||||||
}
|
|
||||||
if (section == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return HOCONUtils.getKeysFromObject(section, deep, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
public @Nullable Object getValue(@NotNull String key) {
|
|
||||||
return this.configuration.get(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public @Nullable List<String> getHeaderComments(@Nullable String key) {
|
|
||||||
return this.comments.getHeaderComment(key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.hocon.exception;
|
|
||||||
|
|
||||||
public class HOCONGetValueException extends RuntimeException {
|
|
||||||
public HOCONGetValueException() {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
|
|
||||||
public HOCONGetValueException(String message) {
|
|
||||||
super(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public HOCONGetValueException(String message, Throwable cause) {
|
|
||||||
super(message, cause);
|
|
||||||
}
|
|
||||||
|
|
||||||
public HOCONGetValueException(Throwable cause) {
|
|
||||||
super(cause);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,110 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.hocon.util;
|
|
||||||
|
|
||||||
import cc.carm.lib.configuration.hocon.HOCONConfigWrapper;
|
|
||||||
import cc.carm.lib.configuration.hocon.exception.HOCONGetValueException;
|
|
||||||
import com.typesafe.config.*;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
public class HOCONUtils {
|
|
||||||
|
|
||||||
private HOCONUtils() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getSimplePath(String path, char separator) {
|
|
||||||
int index = path.lastIndexOf(separator);
|
|
||||||
return (index == -1) ? path : path.substring(index + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HOCONConfigWrapper getObjectOn(@NotNull HOCONConfigWrapper parent, @NotNull String path, char separator) {
|
|
||||||
String currentPath = path;
|
|
||||||
HOCONConfigWrapper currentObject = parent;
|
|
||||||
int index;
|
|
||||||
while ((index = currentPath.indexOf(separator)) != -1) {
|
|
||||||
HOCONConfigWrapper previousObject = currentObject;
|
|
||||||
String pathName = currentPath.substring(0, index);
|
|
||||||
try {
|
|
||||||
currentObject = (HOCONConfigWrapper) previousObject.getDirect(pathName);
|
|
||||||
} catch (ClassCastException e) {
|
|
||||||
throw new HOCONGetValueException(e);
|
|
||||||
}
|
|
||||||
if (currentObject == null) {
|
|
||||||
currentObject = new HOCONConfigWrapper(ConfigFactory.empty().root());
|
|
||||||
previousObject.setDirect(pathName, currentObject);
|
|
||||||
}
|
|
||||||
currentPath = currentPath.substring(index + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return currentObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 在 Object 中获取所有键
|
|
||||||
* 思路:在第一次执行时 prefix 应该是 ""
|
|
||||||
* 后续找到了更深层的键,将会变为 "deep."
|
|
||||||
* 下一次键名就是 "deep.key"
|
|
||||||
*
|
|
||||||
* @param parent Object
|
|
||||||
* @param deep 是否更深层获取
|
|
||||||
* @param prefix 当前 Object 键名前缀
|
|
||||||
* @return Object 中的所有键
|
|
||||||
*/
|
|
||||||
public static Set<String> getKeysFromObject(HOCONConfigWrapper parent, boolean deep, String prefix) {
|
|
||||||
return parent.getSource().entrySet().stream().collect(
|
|
||||||
LinkedHashSet::new,
|
|
||||||
(set, entry) -> {
|
|
||||||
Object value = entry.getValue();
|
|
||||||
if (value instanceof HOCONConfigWrapper && deep) {
|
|
||||||
set.addAll(HOCONUtils.getKeysFromObject((HOCONConfigWrapper) value, true, prefix + entry.getKey() + "."));
|
|
||||||
} else {
|
|
||||||
set.add(prefix + entry.getKey());
|
|
||||||
}
|
|
||||||
},
|
|
||||||
LinkedHashSet::addAll
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将 Object 保存为字符串
|
|
||||||
* 并使用注释器打上注释
|
|
||||||
*
|
|
||||||
* @param object Object
|
|
||||||
* @param commenter 注释器
|
|
||||||
* @return 保存的字符串
|
|
||||||
*/
|
|
||||||
public static @NotNull String renderWithComment(@NotNull HOCONConfigWrapper object, @NotNull Function<String, List<String>> commenter) {
|
|
||||||
return HOCONUtils.makeConfigWithComment(object, "", commenter).root().render(
|
|
||||||
ConfigRenderOptions.defaults()
|
|
||||||
.setJson(false)
|
|
||||||
.setOriginComments(false)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static @NotNull Config makeConfigWithComment(@NotNull HOCONConfigWrapper object, @NotNull String prefix, @NotNull Function<String, List<String>> commenter) {
|
|
||||||
Config config = ConfigFactory.empty();
|
|
||||||
for (Map.Entry<String, Object> entry : object.getSource().entrySet()) {
|
|
||||||
String key = entry.getKey();
|
|
||||||
String fullKey = prefix + key;
|
|
||||||
Object value = entry.getValue();
|
|
||||||
ConfigValue result;
|
|
||||||
if (value instanceof Iterable) {
|
|
||||||
result = ConfigValueFactory.fromIterable((Iterable<?>) value);
|
|
||||||
} else if (value instanceof HOCONConfigWrapper) {
|
|
||||||
result = makeConfigWithComment((HOCONConfigWrapper) value, fullKey + ".", commenter).root();
|
|
||||||
} else {
|
|
||||||
result = ConfigValueFactory.fromAnyRef(value);
|
|
||||||
}
|
|
||||||
result = result.withOrigin(
|
|
||||||
ConfigOriginFactory.newSimple()
|
|
||||||
.withComments(commenter.apply(fullKey))
|
|
||||||
);
|
|
||||||
config = config.withValue(key, result);
|
|
||||||
}
|
|
||||||
return config;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
package cc.carm.lib.configuration.source.hocon;
|
||||||
|
|
||||||
|
import cc.carm.lib.configuration.commentable.Commentable;
|
||||||
|
import cc.carm.lib.configuration.source.ConfigurationHolder;
|
||||||
|
import cc.carm.lib.configuration.source.file.FileConfigFactory;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class HOCONConfigFactory extends FileConfigFactory<HOCONSource, ConfigurationHolder<HOCONSource>, HOCONConfigFactory> {
|
||||||
|
public static HOCONConfigFactory from(@NotNull String path) {
|
||||||
|
return new HOCONConfigFactory(new File(path));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HOCONConfigFactory from(@NotNull File file) {
|
||||||
|
return new HOCONConfigFactory(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HOCONConfigFactory from(@NotNull File parent, @NotNull String configName) {
|
||||||
|
return new HOCONConfigFactory(new File(parent, configName));
|
||||||
|
}
|
||||||
|
|
||||||
|
public HOCONConfigFactory(@NotNull File file) {
|
||||||
|
super(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected HOCONConfigFactory self() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull ConfigurationHolder<HOCONSource> build() {
|
||||||
|
File configFile = this.file;
|
||||||
|
String sourcePath = this.resourcePath;
|
||||||
|
|
||||||
|
Commentable.registerMeta(this.initializer); // Register commentable meta types
|
||||||
|
|
||||||
|
return new ConfigurationHolder<HOCONSource>(this.adapters, this.options, this.metadata, this.initializer) {
|
||||||
|
final @NotNull HOCONSource source = new HOCONSource(this, configFile, sourcePath);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull HOCONSource config() {
|
||||||
|
return this.source;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
-69
@@ -1,69 +0,0 @@
|
|||||||
package cc.carm.lib.configuration.source.hocon;
|
|
||||||
|
|
||||||
import cc.carm.lib.configuration.source.section.ConfigureSection;
|
|
||||||
import com.typesafe.config.Config;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.jetbrains.annotations.UnmodifiableView;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class HOCONSection implements ConfigureSection {
|
|
||||||
|
|
||||||
protected final @NotNull HOCONSource source;
|
|
||||||
protected final @Nullable HOCONSection parent;
|
|
||||||
protected final @NotNull Config data;
|
|
||||||
|
|
||||||
public HOCONSection(@NotNull HOCONSource source, @Nullable HOCONSection parent,
|
|
||||||
@NotNull Config data) {
|
|
||||||
this.source = source;
|
|
||||||
this.parent = parent;
|
|
||||||
this.data = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NotNull Config data() {
|
|
||||||
return this.data;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull HOCONSource source() {
|
|
||||||
return this.source;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @Nullable HOCONSection parent() {
|
|
||||||
return this.parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull @UnmodifiableView Map<String, Object> getValues(boolean deep) {
|
|
||||||
return data().root().unwrapped();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void set(@NotNull String path, @Nullable Object value) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean contains(@NotNull String path) {
|
|
||||||
return data().hasPath(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @Nullable List<?> getList(@NotNull String path) {
|
|
||||||
return data().getAnyRefList(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @Nullable HOCONSection getSection(@NotNull String path) {
|
|
||||||
return data().getConfig(path) == null ? null : new HOCONSection(source, this, data().getConfig(path));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @Nullable Object get(@NotNull String path) {
|
|
||||||
return data().getAnyRef(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
+74
-14
@@ -1,44 +1,104 @@
|
|||||||
package cc.carm.lib.configuration.source.hocon;
|
package cc.carm.lib.configuration.source.hocon;
|
||||||
|
|
||||||
|
import cc.carm.lib.configuration.commentable.Commentable;
|
||||||
import cc.carm.lib.configuration.source.ConfigurationHolder;
|
import cc.carm.lib.configuration.source.ConfigurationHolder;
|
||||||
import cc.carm.lib.configuration.source.section.ConfigureSource;
|
import cc.carm.lib.configuration.source.file.FileConfigSource;
|
||||||
import com.typesafe.config.Config;
|
import cc.carm.lib.configuration.source.section.SourcedSection;
|
||||||
|
import com.typesafe.config.*;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.io.File;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
public class HOCONSource extends ConfigureSource<HOCONSection, Config, HOCONSource> {
|
public class HOCONSource
|
||||||
|
extends FileConfigSource<SourcedSection, Map<String, Object>, HOCONSource> {
|
||||||
|
protected @Nullable SourcedSection rootSection;
|
||||||
|
|
||||||
|
protected HOCONSource(
|
||||||
|
@NotNull ConfigurationHolder<? extends HOCONSource> holder,
|
||||||
|
@NotNull File file, @Nullable String resourcePath
|
||||||
|
) {
|
||||||
|
super(holder, 0, file, resourcePath);
|
||||||
|
|
||||||
private HOCONSection rootSection;
|
this.initialize();
|
||||||
|
}
|
||||||
|
|
||||||
protected HOCONSource(@NotNull ConfigurationHolder<? extends HOCONSource> holder, long lastUpdateMillis) {
|
public void initialize() {
|
||||||
super(holder, lastUpdateMillis);
|
try {
|
||||||
|
this.initializeFile();
|
||||||
|
this.onReload();
|
||||||
|
} catch (Exception e) {
|
||||||
|
//noinspection CallToPrintStackTrace
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected HOCONSource self() {
|
protected @NotNull HOCONSource self() {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull Config original() {
|
public @NotNull Map<String, Object> original() {
|
||||||
return section().data();
|
return this.section().data();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull HOCONSection section() {
|
public @NotNull SourcedSection section() {
|
||||||
return Objects.requireNonNull(rootSection, "RootSection is not initialized");
|
return Objects.requireNonNull(this.rootSection, "Root section is not initialized.");
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NotNull String saveToString() {
|
||||||
|
// identity: 创建新的空 typesafe config
|
||||||
|
// accumulator: 将 Section 中的信息为 typesafe config 添加并返回
|
||||||
|
// combiner: 合并两个配置文件
|
||||||
|
Config config = this.getValues(true).entrySet().stream().reduce(
|
||||||
|
ConfigFactory.empty(),
|
||||||
|
(cfg, entry) -> {
|
||||||
|
String key = entry.getKey(); // 源数据 key
|
||||||
|
Object value = entry.getValue(); // 源数据 value
|
||||||
|
|
||||||
|
ConfigValue result; // 最终转换为 typesafe 的 ConfigValue 类型
|
||||||
|
if (value == null || value instanceof Boolean || value instanceof String || value instanceof Number) {
|
||||||
|
result = ConfigValueFactory.fromAnyRef(value); // 原始数据类型
|
||||||
|
} else if (value instanceof Iterator) {
|
||||||
|
result = ConfigValueFactory.fromIterable((Iterable<?>) value);
|
||||||
|
} else if (value instanceof Map) {
|
||||||
|
//noinspection unchecked
|
||||||
|
result = ConfigValueFactory.fromMap((Map<String, ?>) value);
|
||||||
|
} else {
|
||||||
|
result = ConfigValueFactory.fromAnyRef(String.valueOf(value));
|
||||||
|
}
|
||||||
|
List<String> headerComments = HOCONSource.this.getHeaderComments(key); // 获取其注释
|
||||||
|
result = result.withOrigin(result.origin().withComments(headerComments)); // 赋予其注释
|
||||||
|
return cfg.withValue(key, result); // 将其添加到根 config 中
|
||||||
|
},
|
||||||
|
Config::withFallback
|
||||||
|
);
|
||||||
|
return config.root().render(
|
||||||
|
ConfigRenderOptions.defaults()
|
||||||
|
.setJson(false)
|
||||||
|
.setOriginComments(false)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save() throws Exception {
|
public void save() throws Exception {
|
||||||
|
this.fileWriter(w -> w.write(HOCONSource.this.saveToString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onReload() throws Exception {
|
protected void onReload() throws Exception {
|
||||||
|
this.rootSection = this.fileReadString(this::loadFromString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected @NotNull SourcedSection loadFromString(@NotNull String data) {
|
||||||
|
ConfigObject config = ConfigFactory.parseString(data).root();
|
||||||
|
return SourcedSection.root(this, config.unwrapped());
|
||||||
|
}
|
||||||
|
|
||||||
|
public @Nullable List<String> getHeaderComments(@Nullable String key) {
|
||||||
|
return Commentable.getHeaderComments(holder(), key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-18
@@ -1,18 +0,0 @@
|
|||||||
package online.flowerinsnow.test.easyconfiguration;
|
|
||||||
|
|
||||||
public class HOCONTest {
|
|
||||||
// @Test
|
|
||||||
// public void onTest() {
|
|
||||||
// HOCONFileConfigProvider provider = EasyConfiguration.from(new File("target/hocon.conf"));
|
|
||||||
//
|
|
||||||
// ConfigurationTest.testDemo(provider);
|
|
||||||
// ConfigurationTest.testInner(provider);
|
|
||||||
//
|
|
||||||
// try {
|
|
||||||
// provider.save();
|
|
||||||
// provider.reload();
|
|
||||||
// } catch (Exception e) {
|
|
||||||
// e.printStackTrace();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package sample;
|
||||||
|
|
||||||
|
import cc.carm.lib.configuration.Configuration;
|
||||||
|
import cc.carm.lib.configuration.annotation.ConfigPath;
|
||||||
|
import cc.carm.lib.configuration.annotation.HeaderComments;
|
||||||
|
import cc.carm.lib.configuration.value.standard.ConfiguredList;
|
||||||
|
import cc.carm.lib.configuration.value.standard.ConfiguredValue;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@ConfigPath(root = true)
|
||||||
|
@HeaderComments("Configurations for sample")
|
||||||
|
public interface SampleConfig extends Configuration {
|
||||||
|
ConfiguredValue<Boolean> ENABLED = ConfiguredValue.of(true);
|
||||||
|
|
||||||
|
@HeaderComments("Server configurations") // Header comment
|
||||||
|
ConfiguredValue<Integer> PORT = ConfiguredValue.of(Integer.class);
|
||||||
|
|
||||||
|
@HeaderComments({"[ UUID >-----------------------------------", "A lot of UUIDs"})
|
||||||
|
ConfiguredList<UUID> UUIDS = ConfiguredList.builderOf(UUID.class).fromString()
|
||||||
|
.parse(UUID::fromString).serialize(UUID::toString)
|
||||||
|
.defaults(
|
||||||
|
UUID.fromString("00000000-0000-0000-0000-000000000000"),
|
||||||
|
UUID.fromString("00000000-0000-0000-0000-000000000001")
|
||||||
|
).build();
|
||||||
|
|
||||||
|
@ConfigPath("info") // Custom path
|
||||||
|
interface INFO extends Configuration {
|
||||||
|
|
||||||
|
@HeaderComments("Configure your name!") // Header comment
|
||||||
|
ConfiguredValue<String> NAME = ConfiguredValue.of("Joker");
|
||||||
|
|
||||||
|
@ConfigPath("how-old-are-you") // Custom path
|
||||||
|
ConfiguredValue<Integer> AGE = ConfiguredValue.of(24);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package sample;
|
||||||
|
|
||||||
|
import cc.carm.lib.configuration.source.ConfigurationHolder;
|
||||||
|
import cc.carm.lib.configuration.source.hocon.HOCONConfigFactory;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class SampleTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
// 1. Make a configuration provider from a file.
|
||||||
|
ConfigurationHolder<?> holder = HOCONConfigFactory.from("target/config.conf")
|
||||||
|
.resourcePath("configs/sample.conf")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
// 2. Initialize the configuration classes or instances.
|
||||||
|
holder.initialize(SampleConfig.class);
|
||||||
|
// 3. Enjoy using the configuration!
|
||||||
|
System.out.println("Enabled? -> " + SampleConfig.ENABLED.resolve());
|
||||||
|
SampleConfig.ENABLED.set(false);
|
||||||
|
System.out.println("And now? -> " + SampleConfig.ENABLED.resolve());
|
||||||
|
// p.s. Changes not save so enable value will still be true in the next run.
|
||||||
|
|
||||||
|
System.out.println("Your name is " + SampleConfig.INFO.NAME.resolve() + " (age=" + SampleConfig.INFO.AGE.resolve() + ")!");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
version = 1.0
|
||||||
|
test-save = false
|
||||||
@@ -3,9 +3,9 @@
|
|||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>easyconfiguration-parent</artifactId>
|
<artifactId>configured-parent</artifactId>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<version>4.0.10</version>
|
<version>4.1.0</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
@@ -18,20 +18,20 @@
|
|||||||
<deps.mongodb.version>5.3.1</deps.mongodb.version>
|
<deps.mongodb.version>5.3.1</deps.mongodb.version>
|
||||||
<log4j.version>2.24.3</log4j.version>
|
<log4j.version>2.24.3</log4j.version>
|
||||||
</properties>
|
</properties>
|
||||||
<artifactId>easyconfiguration-mongodb</artifactId>
|
<artifactId>configured-mongodb</artifactId>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-core</artifactId>
|
<artifactId>configured-core</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-feature-section</artifactId>
|
<artifactId>configured-feature-section</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -65,14 +65,14 @@
|
|||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-demo</artifactId>
|
<artifactId>configured-demo</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-gson</artifactId>
|
<artifactId>configured-gson</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# EasyConfiguration-SQL
|
# configured-SQL
|
||||||
|
|
||||||
SQL database implementation, support for MySQL or MariaDB.
|
SQL database implementation, support for MySQL or MariaDB.
|
||||||
|
|
||||||
@@ -39,9 +39,9 @@ CREATE TABLE IF NOT EXISTS conf
|
|||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<!-- Using GitHub dependencies for real-time updates, configuration required (recommended). -->
|
<!-- Using GitHub dependencies for real-time updates, configuration required (recommended). -->
|
||||||
<id>EasyConfiguration</id>
|
<id>configured</id>
|
||||||
<name>GitHub Packages</name>
|
<name>GitHub Packages</name>
|
||||||
<url>https://maven.pkg.github.com/CarmJos/EasyConfiguration</url>
|
<url>https://maven.pkg.github.com/CarmJos/configured</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
</repositories>
|
</repositories>
|
||||||
@@ -54,7 +54,7 @@ CREATE TABLE IF NOT EXISTS conf
|
|||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-sql</artifactId>
|
<artifactId>configured-sql</artifactId>
|
||||||
<version>[LATEST RELEASE]</version>
|
<version>[LATEST RELEASE]</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -71,13 +71,13 @@ repositories {
|
|||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
|
||||||
// Using GitHub dependencies for real-time updates, configuration required (recommended).
|
// Using GitHub dependencies for real-time updates, configuration required (recommended).
|
||||||
maven { url 'https://maven.pkg.github.com/CarmJos/EasyConfiguration' }
|
maven { url 'https://maven.pkg.github.com/CarmJos/configured' }
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```groovy
|
```groovy
|
||||||
dependencies {
|
dependencies {
|
||||||
api "cc.carm.lib:easyconfiguration-sql:[LATEST RELEASE]"
|
api "cc.carm.lib:configured-sql:[LATEST RELEASE]"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -4,9 +4,9 @@
|
|||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>easyconfiguration-parent</artifactId>
|
<artifactId>configured-parent</artifactId>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<version>4.0.10</version>
|
<version>4.1.0</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<properties>
|
<properties>
|
||||||
@@ -18,33 +18,33 @@
|
|||||||
<deps.mysql-driver.version>8.0.33</deps.mysql-driver.version>
|
<deps.mysql-driver.version>8.0.33</deps.mysql-driver.version>
|
||||||
<deps.log4j.version>2.24.3</deps.log4j.version>
|
<deps.log4j.version>2.24.3</deps.log4j.version>
|
||||||
</properties>
|
</properties>
|
||||||
<artifactId>easyconfiguration-sql</artifactId>
|
<artifactId>configured-sql</artifactId>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-core</artifactId>
|
<artifactId>configured-core</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-feature-commentable</artifactId>
|
<artifactId>configured-feature-commentable</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-feature-section</artifactId>
|
<artifactId>configured-feature-section</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-feature-versioned</artifactId>
|
<artifactId>configured-feature-versioned</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-demo</artifactId>
|
<artifactId>configured-demo</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-gson</artifactId>
|
<artifactId>configured-gson</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|||||||
+49
-4
@@ -7,12 +7,17 @@ import cc.carm.lib.configuration.source.ConfigurationFactory;
|
|||||||
import cc.carm.lib.configuration.source.ConfigurationHolder;
|
import cc.carm.lib.configuration.source.ConfigurationHolder;
|
||||||
import cc.carm.lib.configuration.versioned.VersionedMetaTypes;
|
import cc.carm.lib.configuration.versioned.VersionedMetaTypes;
|
||||||
import cc.carm.lib.easysql.api.SQLManager;
|
import cc.carm.lib.easysql.api.SQLManager;
|
||||||
|
import cc.carm.lib.easysql.api.SQLTable;
|
||||||
|
import cc.carm.lib.easysql.api.builder.TableCreateBuilder;
|
||||||
|
import cc.carm.lib.easysql.api.enums.IndexType;
|
||||||
|
import cc.carm.lib.easysql.api.function.SQLHandler;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Range;
|
import org.jetbrains.annotations.Range;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
@@ -26,11 +31,43 @@ public class SQLConfigFactory extends ConfigurationFactory<SQLSource, Configurat
|
|||||||
return from(() -> manager);
|
return from(() -> manager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected static final @NotNull Gson DEFAULT_GSON = new GsonBuilder()
|
||||||
|
.serializeNulls().disableHtmlEscaping().create();
|
||||||
|
|
||||||
|
protected static final @NotNull BiConsumer<String, TableCreateBuilder> DEFAULT_TABLE_SCHEMA = (tableName, builder) -> {
|
||||||
|
builder.addColumn("namespace", "VARCHAR(32) NOT NULL");
|
||||||
|
builder.addColumn("path", "VARCHAR(96) NOT NULL");
|
||||||
|
|
||||||
|
builder.addColumn("value", "TEXT");
|
||||||
|
|
||||||
|
builder.addColumn("inline_comment", "TEXT");
|
||||||
|
builder.addColumn("header_comments", "MEDIUMTEXT");
|
||||||
|
builder.addColumn("footer_comments", "MEDIUMTEXT");
|
||||||
|
|
||||||
|
builder.addColumn("type", "TINYINT NOT NULL DEFAULT 0");
|
||||||
|
builder.addColumn("version", "MEDIUMINT UNSIGNED NOT NULL DEFAULT 0");
|
||||||
|
|
||||||
|
builder.addColumn(
|
||||||
|
"create_time",
|
||||||
|
"TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP"
|
||||||
|
);
|
||||||
|
builder.addColumn(
|
||||||
|
"update_time",
|
||||||
|
"TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
|
||||||
|
);
|
||||||
|
|
||||||
|
builder.setIndex(
|
||||||
|
IndexType.PRIMARY_KEY, "pk_" + tableName.toLowerCase(),
|
||||||
|
"namespace", "path"
|
||||||
|
);
|
||||||
|
builder.setTableSettings("ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
||||||
|
};
|
||||||
|
|
||||||
protected @NotNull Supplier<SQLManager> managerSupplier;
|
protected @NotNull Supplier<SQLManager> managerSupplier;
|
||||||
protected Supplier<Gson> gsonSupplier = () -> SQLSource.DEFAULT_GSON;
|
protected Supplier<Gson> gsonSupplier = () -> DEFAULT_GSON;
|
||||||
|
|
||||||
protected HashMap<Integer, SQLValueResolver<?>> resolvers = new HashMap<>(SQLValueResolver.STANDARD_RESOLVERS);
|
protected HashMap<Integer, SQLValueResolver<?>> resolvers = new HashMap<>(SQLValueResolver.STANDARD_RESOLVERS);
|
||||||
protected String tableName = "configs";
|
protected SQLTable tableName = SQLTable.of("config", (table) -> DEFAULT_TABLE_SCHEMA.accept("config", table));
|
||||||
protected String namespace = "default";
|
protected String namespace = "default";
|
||||||
|
|
||||||
public SQLConfigFactory(@NotNull Supplier<SQLManager> managerSupplier) {
|
public SQLConfigFactory(@NotNull Supplier<SQLManager> managerSupplier) {
|
||||||
@@ -95,11 +132,19 @@ public class SQLConfigFactory extends ConfigurationFactory<SQLSource, Configurat
|
|||||||
return resolver(id, SQLValueResolver.of(type, parser, serializer));
|
return resolver(id, SQLValueResolver.of(type, parser, serializer));
|
||||||
}
|
}
|
||||||
|
|
||||||
public SQLConfigFactory tableName(@NotNull String tableName) {
|
public SQLConfigFactory table(@NotNull SQLTable table) {
|
||||||
this.tableName = tableName;
|
this.tableName = table;
|
||||||
return self();
|
return self();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SQLConfigFactory table(@NotNull String tableName, @NotNull SQLHandler<TableCreateBuilder> builder) {
|
||||||
|
return table(SQLTable.of(tableName, builder));
|
||||||
|
}
|
||||||
|
|
||||||
|
public SQLConfigFactory tableName(@NotNull String tableName) {
|
||||||
|
return table(tableName, table -> DEFAULT_TABLE_SCHEMA.accept(tableName, table));
|
||||||
|
}
|
||||||
|
|
||||||
public SQLConfigFactory namespace(@NotNull String namespace) {
|
public SQLConfigFactory namespace(@NotNull String namespace) {
|
||||||
this.namespace = namespace;
|
this.namespace = namespace;
|
||||||
return self();
|
return self();
|
||||||
|
|||||||
@@ -9,9 +9,7 @@ import cc.carm.lib.configuration.versioned.VersionedMetaTypes;
|
|||||||
import cc.carm.lib.easysql.api.SQLManager;
|
import cc.carm.lib.easysql.api.SQLManager;
|
||||||
import cc.carm.lib.easysql.api.SQLQuery;
|
import cc.carm.lib.easysql.api.SQLQuery;
|
||||||
import cc.carm.lib.easysql.api.SQLTable;
|
import cc.carm.lib.easysql.api.SQLTable;
|
||||||
import cc.carm.lib.easysql.api.enums.IndexType;
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@@ -21,9 +19,6 @@ import java.util.*;
|
|||||||
|
|
||||||
public class SQLSource extends ConfigureSource<SourcedSection, Map<String, Object>, SQLSource> {
|
public class SQLSource extends ConfigureSource<SourcedSection, Map<String, Object>, SQLSource> {
|
||||||
|
|
||||||
protected static final @NotNull Gson DEFAULT_GSON = new GsonBuilder()
|
|
||||||
.serializeNulls().disableHtmlEscaping().create();
|
|
||||||
|
|
||||||
protected final @NotNull Gson gson;
|
protected final @NotNull Gson gson;
|
||||||
protected final @NotNull SQLManager sqlManager;
|
protected final @NotNull SQLManager sqlManager;
|
||||||
protected final @NotNull String namespace;
|
protected final @NotNull String namespace;
|
||||||
@@ -35,41 +30,13 @@ public class SQLSource extends ConfigureSource<SourcedSection, Map<String, Objec
|
|||||||
public SQLSource(@NotNull ConfigurationHolder<? extends SQLSource> holder, long lastUpdateMillis,
|
public SQLSource(@NotNull ConfigurationHolder<? extends SQLSource> holder, long lastUpdateMillis,
|
||||||
@NotNull Gson gson, @NotNull SQLManager sqlManager,
|
@NotNull Gson gson, @NotNull SQLManager sqlManager,
|
||||||
@NotNull Map<Integer, SQLValueResolver<?>> resolvers,
|
@NotNull Map<Integer, SQLValueResolver<?>> resolvers,
|
||||||
@NotNull String tableName, @NotNull String namespace) {
|
@NotNull SQLTable table, @NotNull String namespace) {
|
||||||
super(holder, lastUpdateMillis);
|
super(holder, lastUpdateMillis);
|
||||||
this.gson = gson;
|
this.gson = gson;
|
||||||
this.sqlManager = sqlManager;
|
this.sqlManager = sqlManager;
|
||||||
this.resolvers = resolvers;
|
this.resolvers = resolvers;
|
||||||
this.namespace = namespace;
|
this.namespace = namespace;
|
||||||
this.table = SQLTable.of(tableName, builder -> {
|
this.table = table;
|
||||||
|
|
||||||
builder.addColumn("namespace", "VARCHAR(32) NOT NULL");
|
|
||||||
builder.addColumn("path", "VARCHAR(96) NOT NULL");
|
|
||||||
|
|
||||||
builder.addColumn("value", "TEXT");
|
|
||||||
|
|
||||||
builder.addColumn("inline_comment", "TEXT");
|
|
||||||
builder.addColumn("header_comments", "MEDIUMTEXT");
|
|
||||||
builder.addColumn("footer_comments", "MEDIUMTEXT");
|
|
||||||
|
|
||||||
builder.addColumn("type", "TINYINT NOT NULL DEFAULT 0");
|
|
||||||
builder.addColumn("version", "MEDIUMINT UNSIGNED NOT NULL DEFAULT 0");
|
|
||||||
|
|
||||||
builder.addColumn(
|
|
||||||
"create_time",
|
|
||||||
"TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP"
|
|
||||||
);
|
|
||||||
builder.addColumn(
|
|
||||||
"update_time",
|
|
||||||
"TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
|
|
||||||
);
|
|
||||||
|
|
||||||
builder.setIndex(
|
|
||||||
IndexType.PRIMARY_KEY, "pk_" + tableName.toLowerCase(),
|
|
||||||
"namespace", "path"
|
|
||||||
);
|
|
||||||
builder.setTableSettings("ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
|
||||||
});
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.table.create(this.sqlManager);
|
this.table.create(this.sqlManager);
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# EasyConfiguration-YAML
|
# configured-YAML
|
||||||
|
|
||||||
YAML file-based implementation, compatible with all Java environments.
|
YAML file-based implementation, compatible with all Java environments.
|
||||||
|
|
||||||
@@ -20,9 +20,9 @@ YAML file-based implementation, compatible with all Java environments.
|
|||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<!-- Using GitHub dependencies for real-time updates, configuration required (recommended). -->
|
<!-- Using GitHub dependencies for real-time updates, configuration required (recommended). -->
|
||||||
<id>EasyConfiguration</id>
|
<id>configured</id>
|
||||||
<name>GitHub Packages</name>
|
<name>GitHub Packages</name>
|
||||||
<url>https://maven.pkg.github.com/CarmJos/EasyConfiguration</url>
|
<url>https://maven.pkg.github.com/CarmJos/configured</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
</repositories>
|
</repositories>
|
||||||
@@ -35,7 +35,7 @@ YAML file-based implementation, compatible with all Java environments.
|
|||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easyconfiguration-yaml</artifactId>
|
<artifactId>configured-yaml</artifactId>
|
||||||
<version>[LATEST RELEASE]</version>
|
<version>[LATEST RELEASE]</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -52,13 +52,13 @@ repositories {
|
|||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
|
||||||
// Using GitHub dependencies for real-time updates, configuration required (recommended).
|
// Using GitHub dependencies for real-time updates, configuration required (recommended).
|
||||||
maven { url 'https://maven.pkg.github.com/CarmJos/EasyConfiguration' }
|
maven { url 'https://maven.pkg.github.com/CarmJos/configured' }
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
```groovy
|
```groovy
|
||||||
dependencies {
|
dependencies {
|
||||||
api "cc.carm.lib:easyconfiguration-yaml:[LATEST RELEASE]"
|
api "cc.carm.lib:configured-yaml:[LATEST RELEASE]"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@@ -4,9 +4,9 @@
|
|||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<parent>
|
<parent>
|
||||||
<artifactId>easyconfiguration-parent</artifactId>
|
<artifactId>configured-parent</artifactId>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<version>4.0.10</version>
|
<version>4.1.0</version>
|
||||||
<relativePath>../../pom.xml</relativePath>
|
<relativePath>../../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<properties>
|
<properties>
|
||||||
@@ -17,35 +17,35 @@
|
|||||||
<deps.yamlcommentwriter.version>1.2.1</deps.yamlcommentwriter.version>
|
<deps.yamlcommentwriter.version>1.2.1</deps.yamlcommentwriter.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<artifactId>easyconfiguration-yaml</artifactId>
|
<artifactId>configured-yaml</artifactId>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-core</artifactId>
|
<artifactId>configured-core</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-feature-file</artifactId>
|
<artifactId>configured-feature-file</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-feature-section</artifactId>
|
<artifactId>configured-feature-section</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-feature-commentable</artifactId>
|
<artifactId>configured-feature-commentable</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.parent.groupId}</groupId>
|
<groupId>${project.parent.groupId}</groupId>
|
||||||
<artifactId>easyconfiguration-demo</artifactId>
|
<artifactId>configured-demo</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|||||||
Reference in New Issue
Block a user