diff --git a/docs/en-gb/projects/onixbyte-toolbox/api.md b/docs/en-gb/projects/onixbyte-toolbox/api.md new file mode 100644 index 0000000..c097076 --- /dev/null +++ b/docs/en-gb/projects/onixbyte-toolbox/api.md @@ -0,0 +1,209 @@ +--- +title: OnixByte Toolbox API +--- + +## Package Overview + +All modules are published under the `com.onixbyte` group ID. Each module has its own base package: + +| Module | Maven Artifact | Base Package | +|----------------------|------------------------|---------------------------------------| +| Common Toolbox | `common-toolbox` | `com.onixbyte.common` | +| Crypto Toolbox | `crypto-toolbox` | `com.onixbyte.crypto` | +| Math Toolbox | `math-toolbox` | `com.onixbyte.math` | +| Tuple | `tuple` | `com.onixbyte.tuple` | +| Identity Generator | `identity-generator` | `com.onixbyte.identitygenerator` | + +--- + +## Common Toolbox + +### Adapter + +`ObjectMapAdapter` — Converts between objects and maps. Useful for serialisation or data transformation scenarios where key-value representations are preferred. + +```java +import com.onixbyte.common.adapter.ObjectMapAdapter; +``` + +### Utility Classes + +| Class | Description | +|--------------------|----------------------------------------------------------| +| `AesUtil` | AES symmetric encryption/decryption with key generation | +| `Base64Util` | Base64 encoding and decoding with multiple charset support| +| `BoolUtil` | Boolean parsing and conversion utilities | +| `BranchUtil` | Conditional branching helpers with functional-style chains| +| `CollectionUtil` | Collection manipulation — grouping, partitioning, merging | +| `HashUtil` | Hashing utilities supporting MD5, SHA-1, SHA-256, SHA-512 | +| `MapUtil` | Map builder, merge, and transformation helpers | +| `RangeUtil` | Numeric range operations with boundary handling | + +**AesUtil Example:** + +```java +var key = AesUtil.generateKey(); +var encrypted = AesUtil.encrypt("hello world", key); +var decrypted = AesUtil.decrypt(encrypted, key); +``` + +**HashUtil Example:** + +```java +var md5 = HashUtil.md5("hello world"); +var sha256 = HashUtil.sha256("hello world"); +var fileSha = HashUtil.sha256(new File("data.bin")); +``` + +**CollectionUtil Example:** + +```java +var partitioned = CollectionUtil.partition(list, 100); +var grouped = CollectionUtil.groupBy(users, User::getDepartment); +``` + +--- + +## Crypto Toolbox + +Provides a clean abstraction for loading cryptographic keys in PEM format. Supports both RSA and ECDSA algorithms. + +### Key Loaders + +| Class | Description | +|---------------------------|--------------------------------------------| +| `RSAPrivateKeyLoader` | Load RSA private keys from PEM strings | +| `RSAPublicKeyLoader` | Load RSA public keys from PEM strings | +| `ECPrivateKeyLoader` | Load ECDSA private keys from PEM strings | +| `ECPublicKeyLoader` | Load ECDSA public keys from PEM strings | + +All key loaders implement either `PrivateKeyLoader` or `PublicKeyLoader` interfaces. + +**RSA Example:** + +```java +var privateKey = new RSAPrivateKeyLoader().load(pemString); +var publicKey = new RSAPublicKeyLoader().load(pemString); +``` + +**ECDSA Example:** + +```java +var ecPrivateKey = new ECPrivateKeyLoader().load(pemString); +var ecPublicKey = new ECPublicKeyLoader().load(pemString); +``` + +### Utility + +`CryptoUtil` — Provides convenient methods for digital signature creation and verification, as well as general-purpose cryptographic helpers. + +### Exceptions + +| Class | Description | +|------------------------|---------------------------------------------------| +| `KeyLoadingException` | Thrown when a PEM-formatted key fails to parse | + +--- + +## Math Toolbox + +Statistical computation utilities for working with numeric datasets. + +### Core Classes + +| Class | Description | +|-------------------------|----------------------------------------------------------| +| `Calculator` | Statistical calculator for mean, median, variance, standard deviation, sum, min, max | +| `PercentileCalculator` | Percentile computation with configurable interpolation strategies | + +**Calculator Example:** + +```java +var stats = new Calculator(Arrays.asList(1.0, 2.0, 3.0, 4.0, 5.0)); +double mean = stats.getMean(); +double median = stats.getMedian(); +double stdDev = stats.getStandardDeviation(); +``` + +**PercentileCalculator Example:** + +```java +var calculator = new PercentileCalculator(data); +double p95 = calculator.calculate(95); +double p99 = calculator.calculate(99); +``` + +### Model + +| Class | Description | +|-------------------|----------------------------------------------------------------| +| `QuartileBounds` | Holds Q1, median (Q2), Q3 values along with IQR and whisker bounds | + +--- + +## Tuple + +Lightweight generic tuple types for when you need to return multiple values without defining a dedicated class. + +### Classes + +| Class | Type Parameters | Mutability | +|--------------------|-----------------|------------| +| `Tuple` | Two elements | Mutable | +| `ImmutableTuple` | Two elements | Immutable | +| `Triple` | Three elements | Mutable | +| `ImmutableTriple` | Three elements | Immutable | + +**Example:** + +```java +var pair = Tuple.of("key", 42); +var triple = Triple.of("id", "name", 100); +var immutable = ImmutableTuple.of("constant", true); + +// Accessors +String first = pair.getFirst(); +Integer second = pair.getSecond(); + +// Triple accessors +String a = triple.getFirst(); +String b = triple.getSecond(); +Integer c = triple.getThird(); +``` + +--- + +## Identity Generator + +Generates unique identifiers suitable for use as database primary keys or distributed IDs. + +### Interface + +`IdentityGenerator` — Generates identities of type `T`. + +### Implementations + +| Class | Description | +|------------------------------|-----------------------------------------------------------------| +| `SequentialUuidGenerator` | Generates time-ordered, sequential UUIDs (optimised for DB indexes) | +| `SnowflakeIdentityGenerator` | Snowflake-style distributed unique ID generation | + +**Sequential UUID:** + +```java +var generator = new SequentialUuidGenerator(); +UUID id = generator.nextId(); // time-ordered UUID, B-tree friendly +``` + +**Snowflake:** + +```java +var generator = new SnowflakeIdentityGenerator(workerId, datacenterId); +long id = generator.nextId(); // 64-bit snowflake ID +``` + +### Exceptions + +| Class | Description | +|-------------------|----------------------------------------------------------------| +| `TimingException` | Thrown when the system clock moves backwards, compromising ID uniqueness | diff --git a/docs/en-gb/projects/onixbyte-toolbox/index.mdx b/docs/en-gb/projects/onixbyte-toolbox/index.mdx new file mode 100644 index 0000000..4063d3c --- /dev/null +++ b/docs/en-gb/projects/onixbyte-toolbox/index.mdx @@ -0,0 +1,54 @@ +--- +title: OnixByte Toolbox +--- + +## Introduction + +OnixByte Toolbox is a Development Kit for Java applications that provides a set of convenient, reusable tools for writing code efficiently. It is designed and maintained by OnixByte as a monorepo containing multiple purpose-built libraries, each addressing a specific development need — from common utilities and cryptography to mathematical computation and identity generation. + +The toolkit is available on Maven Central under the `com.onixbyte` group ID. Each module is independently versioned and can be included in any Java 17+ project. + +## Modules + +| Module | Artifact ID | Description | +|----------------------|-----------------------|-------------------------------------------------------| +| Common Toolbox | `common-toolbox` | Everyday utilities — AES, hashing, Base64, collections, branching, ranges | +| Crypto Toolbox | `crypto-toolbox` | Public/private key loading for RSA and ECDSA algorithms | +| Math Toolbox | `math-toolbox` | Statistical calculation, percentile analysis, quartile computation | +| Tuple | `tuple` | Generic 2-tuple and 3-tuple with immutable variants | +| Identity Generator | `identity-generator` | Snowflake-style and sequential UUID identity generation | +| Version Catalogue | `version-catalogue` | Centralised Gradle version catalogue for OnixByte projects | + +## Installation + +Add the desired module as a dependency in your build config: + +**Gradle (Kotlin DSL):** + +```kotlin +implementation("com.onixbyte:common-toolbox:$version") +implementation("com.onixbyte:crypto-toolbox:$version") +implementation("com.onixbyte:math-toolbox:$version") +implementation("com.onixbyte:tuple:$version") +implementation("com.onixbyte:identity-generator:$version") +``` + +**Maven:** + +```xml + + com.onixbyte + common-toolbox + ${version} + +``` + +Refer to the [changelog](https://codecrafters.org.cn/devkit/changelog) for available versions. + +## Requirements + +- Java 17 or later + +## License + +OnixByte Toolbox is open-source software released under the MIT License. diff --git a/docs/zh-hans/projects/onixbyte-toolbox/api.md b/docs/zh-hans/projects/onixbyte-toolbox/api.md new file mode 100644 index 0000000..ca82acf --- /dev/null +++ b/docs/zh-hans/projects/onixbyte-toolbox/api.md @@ -0,0 +1,209 @@ +--- +title: OnixByte Toolbox API +--- + +## 包结构概览 + +所有模块均在 `com.onixbyte` group ID 下发布。每个模块有自己独立的基础包: + +| 模块 | Maven Artifact | 基础包 | +|---|---|---| +| Common Toolbox | `common-toolbox` | `com.onixbyte.common` | +| Crypto Toolbox | `crypto-toolbox` | `com.onixbyte.crypto` | +| Math Toolbox | `math-toolbox` | `com.onixbyte.math` | +| Tuple | `tuple` | `com.onixbyte.tuple` | +| Identity Generator | `identity-generator` | `com.onixbyte.identitygenerator` | + +--- + +## Common Toolbox + +### 适配器 + +`ObjectMapAdapter` — 对象与 Map 之间的转换器。适用于需要键值表示的场景,如序列化或数据转换。 + +```java +import com.onixbyte.common.adapter.ObjectMapAdapter; +``` + +### 工具类 + +| 类 | 描述 | +|---|---| +| `AesUtil` | AES 对称加密/解密,支持密钥生成 | +| `Base64Util` | Base64 编解码,支持多种字符集 | +| `BoolUtil` | 布尔值解析与转换工具 | +| `BranchUtil` | 条件分支辅助,支持函数式链式调用 | +| `CollectionUtil` | 集合操作 — 分组、分区、合并 | +| `HashUtil` | 哈希工具,支持 MD5、SHA-1、SHA-256、SHA-512 | +| `MapUtil` | Map 构建、合并和转换辅助 | +| `RangeUtil` | 数值范围操作,支持边界处理 | + +**AesUtil 示例:** + +```java +var key = AesUtil.generateKey(); +var encrypted = AesUtil.encrypt("hello world", key); +var decrypted = AesUtil.decrypt(encrypted, key); +``` + +**HashUtil 示例:** + +```java +var md5 = HashUtil.md5("hello world"); +var sha256 = HashUtil.sha256("hello world"); +var fileSha = HashUtil.sha256(new File("data.bin")); +``` + +**CollectionUtil 示例:** + +```java +var partitioned = CollectionUtil.partition(list, 100); +var grouped = CollectionUtil.groupBy(users, User::getDepartment); +``` + +--- + +## Crypto Toolbox + +提供了加载 PEM 格式密钥的简洁抽象。支持 RSA 和 ECDSA 算法。 + +### 密钥加载器 + +| 类 | 描述 | +|---|---| +| `RSAPrivateKeyLoader` | 从 PEM 字符串加载 RSA 私钥 | +| `RSAPublicKeyLoader` | 从 PEM 字符串加载 RSA 公钥 | +| `ECPrivateKeyLoader` | 从 PEM 字符串加载 ECDSA 私钥 | +| `ECPublicKeyLoader` | 从 PEM 字符串加载 ECDSA 公钥 | + +所有密钥加载器实现 `PrivateKeyLoader` 或 `PublicKeyLoader` 接口。 + +**RSA 示例:** + +```java +var privateKey = new RSAPrivateKeyLoader().load(pemString); +var publicKey = new RSAPublicKeyLoader().load(pemString); +``` + +**ECDSA 示例:** + +```java +var ecPrivateKey = new ECPrivateKeyLoader().load(pemString); +var ecPublicKey = new ECPublicKeyLoader().load(pemString); +``` + +### 工具类 + +`CryptoUtil` — 提供便捷的数字签名生成和验证方法,以及通用密码学辅助功能。 + +### 异常 + +| 类 | 描述 | +|---|---| +| `KeyLoadingException` | PEM 格式密钥解析失败时抛出 | + +--- + +## Math Toolbox + +用于处理数值数据集的统计计算工具。 + +### 核心类 + +| 类 | 描述 | +|---|---| +| `Calculator` | 统计计算器 — 均值、中位数、方差、标准差、总和、最小值、最大值 | +| `PercentileCalculator` | 百分位数计算器,支持可配置的插值策略 | + +**Calculator 示例:** + +```java +var stats = new Calculator(Arrays.asList(1.0, 2.0, 3.0, 4.0, 5.0)); +double mean = stats.getMean(); +double median = stats.getMedian(); +double stdDev = stats.getStandardDeviation(); +``` + +**PercentileCalculator 示例:** + +```java +var calculator = new PercentileCalculator(data); +double p95 = calculator.calculate(95); +double p99 = calculator.calculate(99); +``` + +### 数据模型 + +| 类 | 描述 | +|---|---| +| `QuartileBounds` | 包含 Q1、中位数(Q2)、Q3 值及 IQR 和须线边界 | + +--- + +## Tuple + +轻量级泛型元组类型,适用于需要返回多个值但无需定义专用类的场景。 + +### 类 + +| 类 | 类型参数 | 可变性 | +|---|---|---| +| `Tuple` | 两个元素 | 可变 | +| `ImmutableTuple` | 两个元素 | 不可变 | +| `Triple` | 三个元素 | 可变 | +| `ImmutableTriple` | 三个元素 | 不可变 | + +**示例:** + +```java +var pair = Tuple.of("key", 42); +var triple = Triple.of("id", "name", 100); +var immutable = ImmutableTuple.of("constant", true); + +// 访问器 +String first = pair.getFirst(); +Integer second = pair.getSecond(); + +// 三元组访问器 +String a = triple.getFirst(); +String b = triple.getSecond(); +Integer c = triple.getThird(); +``` + +--- + +## Identity Generator + +生成适用于数据库主键或分布式 ID 的唯一标识符。 + +### 接口 + +`IdentityGenerator` — 生成类型为 `T` 的标识符。 + +### 实现 + +| 类 | 描述 | +|---|---| +| `SequentialUuidGenerator` | 生成时间排序的顺序 UUID(优化数据库索引性能) | +| `SnowflakeIdentityGenerator` | 雪花算法分布式唯一 ID 生成 | + +**顺序 UUID:** + +```java +var generator = new SequentialUuidGenerator(); +UUID id = generator.nextId(); // 时间排序 UUID,对 B-tree 友好 +``` + +**雪花:** + +```java +var generator = new SnowflakeIdentityGenerator(workerId, datacenterId); +long id = generator.nextId(); // 64 位雪花 ID +``` + +### 异常 + +| 类 | 描述 | +|---|---| +| `TimingException` | 系统时钟回拨时抛出,保证 ID 唯一性不受影响 | diff --git a/docs/zh-hans/projects/onixbyte-toolbox/index.mdx b/docs/zh-hans/projects/onixbyte-toolbox/index.mdx new file mode 100644 index 0000000..bc5ac2d --- /dev/null +++ b/docs/zh-hans/projects/onixbyte-toolbox/index.mdx @@ -0,0 +1,54 @@ +--- +title: OnixByte Toolbox +--- + +## 介绍 + +OnixByte Toolbox 是一个面向 Java 应用的开发工具包,提供了一系列便捷、可复用的工具,帮助开发者高效编写代码。它由 OnixByte 设计和维护,采用 monorepo 架构,包含多个专用库,每个库解决一个特定的开发需求 — 从通用工具类和密码学,到数学计算和标识符生成。 + +该工具包已发布到 Maven Central,使用 `com.onixbyte` 作为 group ID。每个模块独立版本管理,可在任何 Java 17+ 项目中使用。 + +## 模块 + +| 模块 | Artifact ID | 描述 | +|---|---|---| +| Common Toolbox | `common-toolbox` | 日常工具类 — AES 加密、哈希、Base64、集合、分支、范围 | +| Crypto Toolbox | `crypto-toolbox` | RSA 和 ECDSA 算法的公私钥加载 | +| Math Toolbox | `math-toolbox` | 统计计算、百分位数分析、四分位数计算 | +| Tuple | `tuple` | 泛型二元组和三元组,含不可变版本 | +| Identity Generator | `identity-generator` | 雪花算法和顺序 UUID 唯一标识符生成 | +| Version Catalogue | `version-catalogue` | OnixByte 项目的集中式 Gradle 版本目录 | + +## 安装 + +在构建配置中添加所需模块的依赖: + +**Gradle (Kotlin DSL):** + +```kotlin +implementation("com.onixbyte:common-toolbox:$version") +implementation("com.onixbyte:crypto-toolbox:$version") +implementation("com.onixbyte:math-toolbox:$version") +implementation("com.onixbyte:tuple:$version") +implementation("com.onixbyte:identity-generator:$version") +``` + +**Maven:** + +```xml + + com.onixbyte + common-toolbox + ${version} + +``` + +可查阅[更新日志](https://codecrafters.org.cn/devkit/changelog)了解可用版本。 + +## 要求 + +- Java 17 或更高版本 + +## 许可证 + +OnixByte Toolbox 是采用 MIT 许可证发布的开源软件。