Skip to content

Commit b6d29e9

Browse files
committed
Revise Javadoc: Replace <h3> with <p><b> for section headers and update <table> tags for consistency with modern styling.
1 parent b8e55be commit b6d29e9

24 files changed

Lines changed: 298 additions & 298 deletions

File tree

RELEASE.md

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
# Aether Datafixers v0.4.0 — Spring Boot Integration & Multi-Format DynamicOps
1+
# 🚀 **Aether Datafixers v0.4.0 — Spring Boot Integration & Multi-Format DynamicOps**
22

33
Spring Boot auto-configuration with fluent MigrationService API, Actuator integration, and comprehensive multi-format support for YAML, TOML, and XML.
44

55
---
66

7-
## Highlights in v0.4.0
7+
## 🎯 Highlights in v0.4.0
88

9-
- **Spring Boot Starter** — New `aether-datafixers-spring-boot-starter` module with auto-configuration, fluent `MigrationService` API, multi-domain support, Actuator health/info/endpoints, and Micrometer metrics
10-
- **Multi-Format DynamicOps** — New DynamicOps implementations for YAML (SnakeYAML, Jackson), TOML (Jackson), and XML (Jackson)
11-
- **Package Restructuring** — Format-first package organization (`codec.json.gson`, `codec.yaml.jackson`, etc.)
12-
- **Comprehensive Documentation** — New Spring Boot integration docs and codec format guides
9+
- **Spring Boot Starter** — New `aether-datafixers-spring-boot-starter` module with auto-configuration, fluent `MigrationService` API, multi-domain support, Actuator health/info/endpoints, and Micrometer metrics
10+
- **Multi-Format DynamicOps** — New DynamicOps implementations for YAML (SnakeYAML, Jackson), TOML (Jackson), and XML (Jackson)
11+
- **Package Restructuring** — Format-first package organization (`codec.json.gson`, `codec.yaml.jackson`, etc.)
12+
- **Comprehensive Documentation** — New Spring Boot integration docs and codec format guides
1313

1414
---
1515

16-
## Installation
16+
## 📦 Installation
1717

1818
> [!TIP]
1919
> All Aether artifacts are available on **Maven Central** — no extra repository required.
@@ -76,9 +76,9 @@ dependencies {
7676

7777
---
7878

79-
## What's New
79+
## 🆕 What's New
8080

81-
### Spring Boot Starter Module
81+
### 🍃 Spring Boot Starter Module
8282

8383
New module `aether-datafixers-spring-boot-starter` for seamless Spring Boot 3.x integration:
8484

@@ -92,14 +92,14 @@ New module `aether-datafixers-spring-boot-starter` for seamless Spring Boot 3.x
9292

9393
**Key Features:**
9494

95-
| Feature | Description |
96-
|---------|-------------|
97-
| Auto-Configuration | Automatic DataFixer bean creation from `DataFixerBootstrap` beans |
98-
| MigrationService | Fluent API: `.migrate(data).from(100).to(200).execute()` |
99-
| Multi-Domain | Multiple DataFixers with `@Qualifier` and `.usingDomain("game")` |
100-
| Actuator | Health indicator, info contributor, `/actuator/datafixers` endpoint |
101-
| Metrics | Micrometer counters, timers, and distribution summaries |
102-
| Async | `CompletableFuture` support via `.executeAsync()` |
95+
| Feature | Description |
96+
|-----------------------|---------------------------------------------------------------------|
97+
| 🔧 Auto-Configuration | Automatic DataFixer bean creation from `DataFixerBootstrap` beans |
98+
| 🔄 MigrationService | Fluent API: `.migrate(data).from(100).to(200).execute()` |
99+
| 🏷️ Multi-Domain | Multiple DataFixers with `@Qualifier` and `.usingDomain("game")` |
100+
| 💚 Actuator | Health indicator, info contributor, `/actuator/datafixers` endpoint |
101+
| 📊 Metrics | Micrometer counters, timers, and distribution summaries |
102+
| Async | `CompletableFuture` support via `.executeAsync()` |
103103

104104
**Quick Start:**
105105

@@ -146,7 +146,7 @@ aether:
146146
counting: true
147147
```
148148
149-
### Multi-Format DynamicOps
149+
### 🔌 Multi-Format DynamicOps
150150
151151
New DynamicOps implementations in the codec module:
152152
@@ -172,7 +172,7 @@ Dynamic<JsonNode> toml = new Dynamic<>(JacksonTomlOps.INSTANCE, tomlData);
172172
Dynamic<JsonElement> json = yaml.convert(GsonOps.INSTANCE);
173173
```
174174

175-
### Breaking Change: Package Restructuring
175+
### ⚠️ Breaking Change: Package Restructuring
176176

177177
The codec module now uses format-first package organization:
178178

@@ -194,7 +194,7 @@ import de.splatgames.aether.datafixers.codec.xml.jackson.JacksonXmlOps;
194194

195195
---
196196

197-
## Changelog
197+
## 📝 Changelog
198198

199199
**New in 0.4.0**
200200

@@ -213,7 +213,7 @@ import de.splatgames.aether.datafixers.codec.xml.jackson.JacksonXmlOps;
213213

214214
---
215215

216-
## Roadmap (next)
216+
## 🗺️ Roadmap (next)
217217

218218
- **v0.5.0** (API freeze candidate)
219219
- **API stabilization pass** — Naming/packaging cleanup + deprecations completed
@@ -223,6 +223,6 @@ import de.splatgames.aether.datafixers.codec.xml.jackson.JacksonXmlOps;
223223

224224
---
225225

226-
## License
226+
## 📜 License
227227

228228
**MIT** — see `LICENSE`.

aether-datafixers-codec/src/main/java/de/splatgames/aether/datafixers/codec/gson/GsonOps.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public class GsonOps implements DynamicOps<JsonElement> {
8585
* and provides full backwards compatibility. It is thread-safe and can be shared across
8686
* the entire application.</p>
8787
*
88-
* <h3>Migration</h3>
88+
* <p><b>Migration</b></p>
8989
* <p>Replace usages with:</p>
9090
* <pre>{@code
9191
* // Old usage (deprecated)

aether-datafixers-codec/src/main/java/de/splatgames/aether/datafixers/codec/jackson/JacksonOps.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public class JacksonOps implements DynamicOps<JsonNode> {
9696
* compatibility. It uses a default {@link ObjectMapper} with standard configuration.
9797
* The instance is thread-safe and can be shared across the entire application.</p>
9898
*
99-
* <h3>Migration</h3>
99+
* <p><b>Migration</b></p>
100100
* <p>Replace usages with:</p>
101101
* <pre>{@code
102102
* // Old usage (deprecated)
@@ -126,7 +126,7 @@ public class JacksonOps implements DynamicOps<JsonNode> {
126126
* <p>This constructor allows wrapping any {@link JacksonJsonOps} instance, enabling use
127127
* of custom configurations while maintaining backwards compatibility.</p>
128128
*
129-
* <h3>Usage</h3>
129+
* <p><b>Usage</b></p>
130130
* <pre>{@code
131131
* // Typically use the singleton instead
132132
* JacksonOps ops = JacksonOps.INSTANCE;
@@ -152,7 +152,7 @@ private JacksonOps(@NotNull final JacksonJsonOps baseOps) {
152152
* <p>This constructor provides backwards compatibility for code that creates custom
153153
* {@code JacksonOps} instances with a specific mapper configuration.</p>
154154
*
155-
* <h3>Usage</h3>
155+
* <p><b>Usage</b></p>
156156
* <pre>{@code
157157
* // Old usage (deprecated)
158158
* ObjectMapper customMapper = new ObjectMapper()
@@ -178,7 +178,7 @@ public JacksonOps(@NotNull final ObjectMapper mapper) {
178178
* <p>This method provides access to the underlying Jackson mapper, which can be
179179
* useful for advanced configuration or direct JSON serialization/deserialization.</p>
180180
*
181-
* <h3>Migration</h3>
181+
* <p><b>Migration</b></p>
182182
* <pre>{@code
183183
* // Old usage (deprecated)
184184
* ObjectMapper mapper = jacksonOps.mapper();

aether-datafixers-codec/src/main/java/de/splatgames/aether/datafixers/codec/json/gson/GsonOps.java

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
*
9090
* <h2>Type Mapping</h2>
9191
* <p>The following table shows how Java/abstract types map to Gson JSON types:</p>
92-
* <table border="1" cellpadding="5">
92+
* <table class="striped">
9393
* <caption>Type Mapping between Java and Gson</caption>
9494
* <tr><th>Java Type</th><th>Gson Type</th><th>Notes</th></tr>
9595
* <tr><td>{@code boolean}</td><td>{@link JsonPrimitive}</td><td>Created via {@code new JsonPrimitive(boolean)}</td></tr>
@@ -150,7 +150,7 @@ public final class GsonOps implements DynamicOps<JsonElement> {
150150
* It is immutable, stateless, and thread-safe, making it suitable for use in any context
151151
* including multi-threaded environments and dependency injection containers.</p>
152152
*
153-
* <h3>Usage</h3>
153+
* <p><b>Usage</b></p>
154154
* <pre>{@code
155155
* // Direct usage
156156
* JsonElement json = GsonOps.INSTANCE.createString("hello");
@@ -470,13 +470,13 @@ public JsonElement createNumeric(@NotNull final Number value) {
470470
* <p>Extracts the string value from a JSON element. This operation succeeds only if
471471
* the input is a {@link JsonPrimitive} that contains a string value.</p>
472472
*
473-
* <h3>Success Conditions</h3>
473+
* <p><b>Success Conditions</b></p>
474474
* <ul>
475475
* <li>Input is a {@link JsonPrimitive}</li>
476476
* <li>{@link JsonPrimitive#isString()} returns {@code true}</li>
477477
* </ul>
478478
*
479-
* <h3>Failure Conditions</h3>
479+
* <p><b>Failure Conditions</b></p>
480480
* <ul>
481481
* <li>Input is not a {@link JsonPrimitive} (e.g., array, object, null)</li>
482482
* <li>Input is a primitive but contains a number or boolean</li>
@@ -506,13 +506,13 @@ public DataResult<String> getStringValue(@NotNull final JsonElement input) {
506506
* <p>Extracts the numeric value from a JSON element. This operation succeeds only if
507507
* the input is a {@link JsonPrimitive} that contains a numeric value.</p>
508508
*
509-
* <h3>Success Conditions</h3>
509+
* <p><b>Success Conditions</b></p>
510510
* <ul>
511511
* <li>Input is a {@link JsonPrimitive}</li>
512512
* <li>{@link JsonPrimitive#isNumber()} returns {@code true}</li>
513513
* </ul>
514514
*
515-
* <h3>Failure Conditions</h3>
515+
* <p><b>Failure Conditions</b></p>
516516
* <ul>
517517
* <li>Input is not a {@link JsonPrimitive} (e.g., array, object, null)</li>
518518
* <li>Input is a primitive but contains a string or boolean</li>
@@ -546,13 +546,13 @@ public DataResult<Number> getNumberValue(@NotNull final JsonElement input) {
546546
* <p>Extracts the boolean value from a JSON element. This operation succeeds only if
547547
* the input is a {@link JsonPrimitive} that contains a boolean value.</p>
548548
*
549-
* <h3>Success Conditions</h3>
549+
* <p><b>Success Conditions</b></p>
550550
* <ul>
551551
* <li>Input is a {@link JsonPrimitive}</li>
552552
* <li>{@link JsonPrimitive#isBoolean()} returns {@code true}</li>
553553
* </ul>
554554
*
555-
* <h3>Failure Conditions</h3>
555+
* <p><b>Failure Conditions</b></p>
556556
* <ul>
557557
* <li>Input is not a {@link JsonPrimitive} (e.g., array, object, null)</li>
558558
* <li>Input is a primitive but contains a string or number</li>
@@ -623,12 +623,12 @@ public JsonElement createList(@NotNull final Stream<JsonElement> values) {
623623
* <p>Returns the elements of a JSON array as a stream. This operation succeeds only
624624
* if the input is a {@link JsonArray}.</p>
625625
*
626-
* <h3>Success Conditions</h3>
626+
* <p><b>Success Conditions</b></p>
627627
* <ul>
628628
* <li>Input is a {@link JsonArray} (including empty arrays)</li>
629629
* </ul>
630630
*
631-
* <h3>Failure Conditions</h3>
631+
* <p><b>Failure Conditions</b></p>
632632
* <ul>
633633
* <li>Input is not a {@link JsonArray} (e.g., object, primitive, null)</li>
634634
* </ul>
@@ -657,13 +657,13 @@ public DataResult<Stream<JsonElement>> getList(@NotNull final JsonElement input)
657657
* <p>Creates a new array by appending a value to an existing array. This operation
658658
* creates a deep copy of the input array to preserve immutability.</p>
659659
*
660-
* <h3>Success Conditions</h3>
660+
* <p><b>Success Conditions</b></p>
661661
* <ul>
662662
* <li>Input list is a {@link JsonArray}</li>
663663
* <li>Input list is {@link JsonNull} (treated as empty array)</li>
664664
* </ul>
665665
*
666-
* <h3>Failure Conditions</h3>
666+
* <p><b>Failure Conditions</b></p>
667667
* <ul>
668668
* <li>Input list is not an array or null (e.g., object, primitive)</li>
669669
* </ul>
@@ -713,14 +713,14 @@ public JsonElement emptyMap() {
713713
* <p>Creates a new JSON object from a stream of key-value pairs. Keys must be
714714
* JSON string primitives; entries with {@code null} keys are skipped.</p>
715715
*
716-
* <h3>Key Handling</h3>
716+
* <p><b>Key Handling</b></p>
717717
* <ul>
718718
* <li>Keys are converted to strings via {@link JsonElement#getAsString()}</li>
719719
* <li>Entries with {@code null} keys are silently skipped</li>
720720
* <li>Duplicate keys result in the last value being retained</li>
721721
* </ul>
722722
*
723-
* <h3>Value Handling</h3>
723+
* <p><b>Value Handling</b></p>
724724
* <ul>
725725
* <li>{@code null} values are converted to {@link JsonNull#INSTANCE}</li>
726726
* <li>All other values are added as-is</li>
@@ -752,12 +752,12 @@ public JsonElement createMap(@NotNull final Stream<Pair<JsonElement, JsonElement
752752
* <p>Returns the entries of a JSON object as a stream of key-value pairs. This
753753
* operation succeeds only if the input is a {@link JsonObject}.</p>
754754
*
755-
* <h3>Success Conditions</h3>
755+
* <p><b>Success Conditions</b></p>
756756
* <ul>
757757
* <li>Input is a {@link JsonObject} (including empty objects)</li>
758758
* </ul>
759759
*
760-
* <h3>Failure Conditions</h3>
760+
* <p><b>Failure Conditions</b></p>
761761
* <ul>
762762
* <li>Input is not a {@link JsonObject} (e.g., array, primitive, null)</li>
763763
* </ul>
@@ -796,14 +796,14 @@ public DataResult<Stream<Pair<JsonElement, JsonElement>>> getMapEntries(
796796
* <p>Creates a new object by adding or updating a key-value pair in an existing map.
797797
* This operation creates a deep copy of the input map to preserve immutability.</p>
798798
*
799-
* <h3>Success Conditions</h3>
799+
* <p><b>Success Conditions</b></p>
800800
* <ul>
801801
* <li>Input map is a {@link JsonObject}</li>
802802
* <li>Input map is {@link JsonNull} (treated as empty object)</li>
803803
* <li>Key is a {@link JsonPrimitive} containing a string</li>
804804
* </ul>
805805
*
806-
* <h3>Failure Conditions</h3>
806+
* <p><b>Failure Conditions</b></p>
807807
* <ul>
808808
* <li>Input map is not an object or null (e.g., array, primitive)</li>
809809
* <li>Key is not a string primitive</li>
@@ -846,19 +846,19 @@ public DataResult<JsonElement> mergeToMap(
846846
* of the first object. This operation creates a deep copy of the first map to
847847
* preserve immutability.</p>
848848
*
849-
* <h3>Success Conditions</h3>
849+
* <p><b>Success Conditions</b></p>
850850
* <ul>
851851
* <li>Both inputs are {@link JsonObject} instances</li>
852852
* <li>Either input may be {@link JsonNull} (treated as empty object)</li>
853853
* </ul>
854854
*
855-
* <h3>Failure Conditions</h3>
855+
* <p><b>Failure Conditions</b></p>
856856
* <ul>
857857
* <li>First input is not an object or null</li>
858858
* <li>Second input is not an object or null</li>
859859
* </ul>
860860
*
861-
* <h3>Merge Behavior</h3>
861+
* <p><b>Merge Behavior</b></p>
862862
* <ul>
863863
* <li>Entries from the second object override entries with the same key in the first</li>
864864
* <li>Entries unique to either object are included in the result</li>
@@ -901,7 +901,7 @@ public DataResult<JsonElement> mergeToMap(@NotNull final JsonElement map,
901901
* <p>Retrieves a field value from a JSON object by key. Returns {@code null} if
902902
* the input is not an object or the key does not exist.</p>
903903
*
904-
* <h3>Behavior</h3>
904+
* <p><b>Behavior</b></p>
905905
* <ul>
906906
* <li>Returns the field value if the input is a {@link JsonObject} containing the key</li>
907907
* <li>Returns {@code null} if the input is not a {@link JsonObject}</li>
@@ -937,7 +937,7 @@ public JsonElement get(@NotNull final JsonElement input, @NotNull final String k
937937
* <p>Creates a new object with a field set to the specified value. This operation
938938
* creates a deep copy of the input to preserve immutability.</p>
939939
*
940-
* <h3>Behavior</h3>
940+
* <p><b>Behavior</b></p>
941941
* <ul>
942942
* <li>If input is a {@link JsonObject}: creates a deep copy and sets the field</li>
943943
* <li>If input is not a {@link JsonObject}: creates a new object with just the field</li>
@@ -975,7 +975,7 @@ public JsonElement set(@NotNull final JsonElement input,
975975
* <p>Creates a new object with a field removed. This operation creates a deep copy
976976
* of the input to preserve immutability.</p>
977977
*
978-
* <h3>Behavior</h3>
978+
* <p><b>Behavior</b></p>
979979
* <ul>
980980
* <li>If input is a {@link JsonObject}: creates a deep copy and removes the field</li>
981981
* <li>If input is not a {@link JsonObject}: returns the input unchanged</li>
@@ -1008,7 +1008,7 @@ public JsonElement remove(@NotNull final JsonElement input, @NotNull final Strin
10081008
*
10091009
* <p>Checks whether a JSON object contains a field with the specified key.</p>
10101010
*
1011-
* <h3>Behavior</h3>
1011+
* <p><b>Behavior</b></p>
10121012
* <ul>
10131013
* <li>Returns {@code true} if input is a {@link JsonObject} and contains the key</li>
10141014
* <li>Returns {@code false} if input is not a {@link JsonObject}</li>
@@ -1041,7 +1041,7 @@ public boolean has(@NotNull final JsonElement input, @NotNull final String key)
10411041
* This method recursively converts all nested structures, handling primitives, lists,
10421042
* and maps appropriately.</p>
10431043
*
1044-
* <h3>Conversion Process</h3>
1044+
* <p><b>Conversion Process</b></p>
10451045
* <p>The conversion attempts to identify the input type in the following order:</p>
10461046
* <ol>
10471047
* <li><strong>Boolean:</strong> If {@link DynamicOps#getBooleanValue} succeeds,
@@ -1057,7 +1057,7 @@ public boolean has(@NotNull final JsonElement input, @NotNull final String key)
10571057
* <li><strong>Fallback:</strong> Returns {@link JsonNull#INSTANCE} if no type matches</li>
10581058
* </ol>
10591059
*
1060-
* <h3>Edge Cases</h3>
1060+
* <p><b>Edge Cases</b></p>
10611061
* <ul>
10621062
* <li>Map entries with {@code null} keys are skipped</li>
10631063
* <li>Map entries with {@code null} values are converted to {@link JsonNull}</li>

0 commit comments

Comments
 (0)