diff --git a/cli/pom.xml b/cli/pom.xml index 1c0714f..80ebdd7 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -25,8 +25,8 @@ - io.avaje - avaje-jsonb + com.fasterxml.jackson.core + jackson-databind diff --git a/cli/src/main/java/com/pwinckles/cassette/cli/Main.java b/cli/src/main/java/com/pwinckles/cassette/cli/Main.java index 84f1be7..b5ac003 100644 --- a/cli/src/main/java/com/pwinckles/cassette/cli/Main.java +++ b/cli/src/main/java/com/pwinckles/cassette/cli/Main.java @@ -1,5 +1,6 @@ package com.pwinckles.cassette.cli; +import com.fasterxml.jackson.databind.ObjectMapper; import com.pwinckles.cassette.common.model.Data; import com.pwinckles.cassette.common.model.Move; import com.pwinckles.cassette.common.model.MoveAccuracy; @@ -8,7 +9,6 @@ import com.pwinckles.cassette.common.model.Species; import com.pwinckles.cassette.index.Index; import com.pwinckles.cassette.index.SearchResult; -import io.avaje.jsonb.Jsonb; import java.io.BufferedInputStream; import java.io.IOException; import java.util.Map; @@ -187,10 +187,9 @@ private static void print(Move move) { } private static Data readData() throws IOException { - var jsonb = Jsonb.builder().build(); - var dataJsonType = jsonb.type(Data.class); + var objectMapper = new ObjectMapper(); try (var is = new BufferedInputStream(Main.class.getResourceAsStream("/data.json"))) { - return dataJsonType.fromJson(is); + return objectMapper.readValue(is, Data.class); } } diff --git a/common/pom.xml b/common/pom.xml index f88dbc3..4aee7ac 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -19,13 +19,8 @@ - io.avaje - avaje-jsonb - - - io.avaje - avaje-jsonb-generator - provided + com.fasterxml.jackson.core + jackson-annotations diff --git a/common/src/main/java/com/pwinckles/cassette/common/model/BootlegMoves.java b/common/src/main/java/com/pwinckles/cassette/common/model/BootlegMoves.java index 5c30f8d..d68ff31 100644 --- a/common/src/main/java/com/pwinckles/cassette/common/model/BootlegMoves.java +++ b/common/src/main/java/com/pwinckles/cassette/common/model/BootlegMoves.java @@ -1,10 +1,15 @@ package com.pwinckles.cassette.common.model; -import io.avaje.jsonb.Json; import io.soabase.recordbuilder.core.RecordBuilderFull; import java.util.List; import java.util.Map; +import java.util.Objects; -@Json @RecordBuilderFull -public record BootlegMoves(List common, Map> typeSpecific) {} +public record BootlegMoves(List common, Map> typeSpecific) { + + public BootlegMoves(List common, Map> typeSpecific) { + this.common = Objects.requireNonNull(common); + this.typeSpecific = Objects.requireNonNull(typeSpecific); + } +} diff --git a/common/src/main/java/com/pwinckles/cassette/common/model/CompatibleSpecies.java b/common/src/main/java/com/pwinckles/cassette/common/model/CompatibleSpecies.java index 58669bd..3b28ea1 100644 --- a/common/src/main/java/com/pwinckles/cassette/common/model/CompatibleSpecies.java +++ b/common/src/main/java/com/pwinckles/cassette/common/model/CompatibleSpecies.java @@ -1,10 +1,8 @@ package com.pwinckles.cassette.common.model; -import io.avaje.jsonb.Json; import io.soabase.recordbuilder.core.RecordBuilderFull; import java.util.Objects; -@Json @RecordBuilderFull public record CompatibleSpecies(String name, MoveSource source) { diff --git a/common/src/main/java/com/pwinckles/cassette/common/model/Data.java b/common/src/main/java/com/pwinckles/cassette/common/model/Data.java index 6cdb27b..297f16a 100644 --- a/common/src/main/java/com/pwinckles/cassette/common/model/Data.java +++ b/common/src/main/java/com/pwinckles/cassette/common/model/Data.java @@ -1,11 +1,9 @@ package com.pwinckles.cassette.common.model; -import io.avaje.jsonb.Json; import io.soabase.recordbuilder.core.RecordBuilderFull; import java.util.List; import java.util.Objects; -@Json @RecordBuilderFull public record Data(List species, List moves) { public Data(List species, List moves) { diff --git a/common/src/main/java/com/pwinckles/cassette/common/model/Move.java b/common/src/main/java/com/pwinckles/cassette/common/model/Move.java index 83ff14b..c83a592 100644 --- a/common/src/main/java/com/pwinckles/cassette/common/model/Move.java +++ b/common/src/main/java/com/pwinckles/cassette/common/model/Move.java @@ -1,12 +1,10 @@ package com.pwinckles.cassette.common.model; -import io.avaje.jsonb.Json; import io.soabase.recordbuilder.core.RecordBuilderFull; import java.util.List; import java.util.Objects; import java.util.Set; -@Json @RecordBuilderFull public record Move( String name, diff --git a/common/src/main/java/com/pwinckles/cassette/common/model/MoveAccuracy.java b/common/src/main/java/com/pwinckles/cassette/common/model/MoveAccuracy.java index a8bd3eb..3c01ec9 100644 --- a/common/src/main/java/com/pwinckles/cassette/common/model/MoveAccuracy.java +++ b/common/src/main/java/com/pwinckles/cassette/common/model/MoveAccuracy.java @@ -1,10 +1,13 @@ package com.pwinckles.cassette.common.model; -import io.avaje.jsonb.Json; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; -@Json -@Json.SubType(type = MoveAccuracy.Unavoidable.class, name = "UNAVOIDABLE") -@Json.SubType(type = MoveAccuracy.Avoidable.class, name = "AVOIDABLE") +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") +@JsonSubTypes({ + @JsonSubTypes.Type(value = MoveAccuracy.Unavoidable.class, name = "UNAVOIDABLE"), + @JsonSubTypes.Type(value = MoveAccuracy.Avoidable.class, name = "AVOIDABLE") +}) public interface MoveAccuracy { record Unavoidable() implements MoveAccuracy {} diff --git a/common/src/main/java/com/pwinckles/cassette/common/model/MoveHits.java b/common/src/main/java/com/pwinckles/cassette/common/model/MoveHits.java index 635ebff..429c3b8 100644 --- a/common/src/main/java/com/pwinckles/cassette/common/model/MoveHits.java +++ b/common/src/main/java/com/pwinckles/cassette/common/model/MoveHits.java @@ -1,9 +1,7 @@ package com.pwinckles.cassette.common.model; -import io.avaje.jsonb.Json; import io.soabase.recordbuilder.core.RecordBuilderFull; -@Json @RecordBuilderFull public record MoveHits(int min, int max) { diff --git a/common/src/main/java/com/pwinckles/cassette/common/model/Species.java b/common/src/main/java/com/pwinckles/cassette/common/model/Species.java index 9c4094a..314163d 100644 --- a/common/src/main/java/com/pwinckles/cassette/common/model/Species.java +++ b/common/src/main/java/com/pwinckles/cassette/common/model/Species.java @@ -1,11 +1,9 @@ package com.pwinckles.cassette.common.model; -import io.avaje.jsonb.Json; import io.soabase.recordbuilder.core.RecordBuilderFull; import java.util.List; import java.util.Objects; -@Json @RecordBuilderFull public record Species( String name, diff --git a/common/src/main/java/com/pwinckles/cassette/common/model/SpeciesMoves.java b/common/src/main/java/com/pwinckles/cassette/common/model/SpeciesMoves.java index eb2d94d..f97d5a4 100644 --- a/common/src/main/java/com/pwinckles/cassette/common/model/SpeciesMoves.java +++ b/common/src/main/java/com/pwinckles/cassette/common/model/SpeciesMoves.java @@ -1,9 +1,7 @@ package com.pwinckles.cassette.common.model; -import io.avaje.jsonb.Json; import io.soabase.recordbuilder.core.RecordBuilderFull; import java.util.List; -@Json @RecordBuilderFull public record SpeciesMoves(List initial, List learned, List compatible, BootlegMoves bootleg) {} diff --git a/common/src/main/java/com/pwinckles/cassette/common/model/SpeciesStats.java b/common/src/main/java/com/pwinckles/cassette/common/model/SpeciesStats.java index 5f2afe8..983d9c1 100644 --- a/common/src/main/java/com/pwinckles/cassette/common/model/SpeciesStats.java +++ b/common/src/main/java/com/pwinckles/cassette/common/model/SpeciesStats.java @@ -1,9 +1,7 @@ package com.pwinckles.cassette.common.model; -import io.avaje.jsonb.Json; import io.soabase.recordbuilder.core.RecordBuilderFull; -@Json @RecordBuilderFull public record SpeciesStats( int hp, diff --git a/common/src/main/java/com/pwinckles/cassette/common/model/StatusEffect.java b/common/src/main/java/com/pwinckles/cassette/common/model/StatusEffect.java index 4202ec1..2479222 100644 --- a/common/src/main/java/com/pwinckles/cassette/common/model/StatusEffect.java +++ b/common/src/main/java/com/pwinckles/cassette/common/model/StatusEffect.java @@ -1,10 +1,8 @@ package com.pwinckles.cassette.common.model; -import io.avaje.jsonb.Json; import io.soabase.recordbuilder.core.RecordBuilderFull; import java.util.Objects; -@Json @RecordBuilderFull public record StatusEffect(String name, Kind kind) { diff --git a/pom.xml b/pom.xml index 57f4ed6..80bd8e9 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ 2.0.7 36 9.7.0 - 1.6-RC5 + 2.15.2 @@ -71,15 +71,14 @@ - io.avaje - avaje-jsonb - ${avaje.jsonb.version} + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} - io.avaje - avaje-jsonb-generator - ${avaje.jsonb.version} - provided + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} diff --git a/scraper/pom.xml b/scraper/pom.xml index 8ec559d..0bdabf8 100644 --- a/scraper/pom.xml +++ b/scraper/pom.xml @@ -31,13 +31,8 @@ - io.avaje - avaje-jsonb - - - io.avaje - avaje-jsonb-generator - provided + com.fasterxml.jackson.core + jackson-databind diff --git a/scraper/src/main/java/com/pwinckles/cassette/scraper/Assembler.java b/scraper/src/main/java/com/pwinckles/cassette/scraper/Assembler.java index 0f61b7e..7ada8ec 100644 --- a/scraper/src/main/java/com/pwinckles/cassette/scraper/Assembler.java +++ b/scraper/src/main/java/com/pwinckles/cassette/scraper/Assembler.java @@ -1,11 +1,9 @@ package com.pwinckles.cassette.scraper; -import com.pwinckles.cassette.common.model.Data; +import com.fasterxml.jackson.databind.ObjectMapper; import com.pwinckles.cassette.common.model.DataBuilder; import com.pwinckles.cassette.common.model.Move; import com.pwinckles.cassette.common.model.Species; -import io.avaje.jsonb.JsonType; -import io.avaje.jsonb.Jsonb; import java.io.IOException; import java.io.UncheckedIOException; import java.nio.file.Files; @@ -17,15 +15,10 @@ public class Assembler { private static final Logger log = LoggerFactory.getLogger(Assembler.class); - private JsonType dataJsonType; - private final JsonType speciesJsonType; - private final JsonType moveJsonType; + private final ObjectMapper objectMapper; public Assembler() { - var jsonb = Jsonb.builder().build(); - this.dataJsonType = jsonb.type(Data.class); - this.speciesJsonType = jsonb.type(Species.class); - this.moveJsonType = jsonb.type(Move.class); + this.objectMapper = new ObjectMapper(); } public void assemble(Path dir) throws IOException { @@ -35,21 +28,19 @@ public void assemble(Path dir) throws IOException { var data = DataBuilder.builder(); try (var files = Files.list(dir.resolve(Constants.SPECIES_DIR))) { - files.map(file -> readJson(file, speciesJsonType)).forEach(data::addSpecies); + files.map(file -> readJson(file, Species.class)).forEach(data::addSpecies); } try (var files = Files.list(dir.resolve(Constants.MOVES_DIR))) { - files.map(file -> readJson(file, moveJsonType)).forEach(data::addMoves); + files.map(file -> readJson(file, Move.class)).forEach(data::addMoves); } - try (var writer = Files.newBufferedWriter(outputFile)) { - dataJsonType.toJson(data.build(), writer); - } + objectMapper.writeValue(outputFile.toFile(), data.build()); } - private T readJson(Path file, JsonType jsonType) { - try (var reader = Files.newBufferedReader(file)) { - return jsonType.fromJson(reader); + private T readJson(Path file, Class clazz) { + try { + return objectMapper.readValue(file.toFile(), clazz); } catch (IOException e) { throw new UncheckedIOException(e.getMessage(), e); } diff --git a/scraper/src/main/java/com/pwinckles/cassette/scraper/WikiScraper.java b/scraper/src/main/java/com/pwinckles/cassette/scraper/WikiScraper.java index 7a72f6d..32268b8 100644 --- a/scraper/src/main/java/com/pwinckles/cassette/scraper/WikiScraper.java +++ b/scraper/src/main/java/com/pwinckles/cassette/scraper/WikiScraper.java @@ -1,11 +1,9 @@ package com.pwinckles.cassette.scraper; -import com.pwinckles.cassette.common.model.Move; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; import com.pwinckles.cassette.common.model.MoveBuilder; -import com.pwinckles.cassette.common.model.Species; import com.pwinckles.cassette.common.model.SpeciesBuilder; -import io.avaje.jsonb.JsonType; -import io.avaje.jsonb.Jsonb; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -27,17 +25,14 @@ public class WikiScraper { private final SpeciesScraper speciesScraper; private final MoveScraper moveScraper; - private final JsonType speciesJsonType; - private final JsonType moveJsonType; + private final ObjectMapper objectMapper; private final Duration wait; public WikiScraper() { this.speciesScraper = new SpeciesScraper(); this.moveScraper = new MoveScraper(); - var jsonb = Jsonb.builder().build(); - this.speciesJsonType = jsonb.type(Species.class); - this.moveJsonType = jsonb.type(Move.class); + this.objectMapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT); this.wait = Duration.ofSeconds(1); } @@ -62,8 +57,7 @@ private void scrapeSpecies(Path speciesDir) throws IOException, InterruptedExcep } else { var url = BASE_URL + s.ref; var scraped = SpeciesBuilder.from(speciesScraper.scrape(url)).withUrl(url); - var json = speciesJsonType.toJsonPretty(scraped); - Files.writeString(output, json); + objectMapper.writeValue(output.toFile(), scraped); if (it.hasNext()) { Thread.sleep(wait.toMillis()); @@ -88,8 +82,7 @@ private void scrapeMoves(Path movesDir) throws IOException, InterruptedException } else { var url = BASE_URL + move.ref; var scraped = MoveBuilder.from(moveScraper.scrape(url)).withUrl(url); - var json = moveJsonType.toJsonPretty(scraped); - Files.writeString(output, json); + objectMapper.writeValue(output.toFile(), scraped); if (it.hasNext()) { Thread.sleep(wait.toMillis());