From b5491330a557b35c44dafcad6de6759f17a0bebe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=CC=88rg=20Prante?= Date: Fri, 15 Oct 2021 21:57:12 +0200 Subject: [PATCH] more convenience for builders --- .../java/org/xbib/datastructures/api/Builder.java | 12 ++++++++++-- .../xbib/datastructures/json/tiny/JsonBuilder.java | 8 ++++++++ .../xbib/datastructures/yaml/tiny/YamlBuilder.java | 14 +++++++++++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/datastructures-api/src/main/java/org/xbib/datastructures/api/Builder.java b/datastructures-api/src/main/java/org/xbib/datastructures/api/Builder.java index 5b788ba..970e089 100644 --- a/datastructures-api/src/main/java/org/xbib/datastructures/api/Builder.java +++ b/datastructures-api/src/main/java/org/xbib/datastructures/api/Builder.java @@ -18,11 +18,19 @@ public interface Builder { Builder buildCollection(Collection collection) throws IOException; - Builder buildKey(CharSequence charSequence) throws IOException; + Builder buildKey(CharSequence key) throws IOException; - Builder buildValue(Object object) throws IOException; + Builder buildValue(Object value) throws IOException; Builder buildNull() throws IOException; + default Builder buildIfNotNull(CharSequence key, Object value) throws IOException { + if (value != null){ + buildKey(key); + buildValue(value); + } + return this; + } + String build(); } diff --git a/datastructures-json-tiny/src/main/java/org/xbib/datastructures/json/tiny/JsonBuilder.java b/datastructures-json-tiny/src/main/java/org/xbib/datastructures/json/tiny/JsonBuilder.java index ed7e707..aac0550 100644 --- a/datastructures-json-tiny/src/main/java/org/xbib/datastructures/json/tiny/JsonBuilder.java +++ b/datastructures-json-tiny/src/main/java/org/xbib/datastructures/json/tiny/JsonBuilder.java @@ -28,6 +28,14 @@ public class JsonBuilder implements Builder { this.state = new State(null, 0, Structure.MAP, true); } + public static JsonBuilder builder() { + return new JsonBuilder(); + } + + public static JsonBuilder builder(Writer writer) { + return new JsonBuilder(writer); + } + @Override public Builder beginCollection() throws IOException { this.state = new State(state, state.level + 1, Structure.COLLECTION, true); diff --git a/datastructures-yaml-tiny/src/main/java/org/xbib/datastructures/yaml/tiny/YamlBuilder.java b/datastructures-yaml-tiny/src/main/java/org/xbib/datastructures/yaml/tiny/YamlBuilder.java index 2a1ec2e..b5d97dd 100644 --- a/datastructures-yaml-tiny/src/main/java/org/xbib/datastructures/yaml/tiny/YamlBuilder.java +++ b/datastructures-yaml-tiny/src/main/java/org/xbib/datastructures/yaml/tiny/YamlBuilder.java @@ -3,8 +3,8 @@ package org.xbib.datastructures.yaml.tiny; import org.xbib.datastructures.api.Builder; import org.xbib.datastructures.api.ByteSizeValue; import org.xbib.datastructures.api.TimeValue; - import java.io.IOException; +import java.io.StringWriter; import java.io.UncheckedIOException; import java.io.Writer; import java.time.Instant; @@ -20,6 +20,10 @@ public class YamlBuilder implements Builder { private State state; + public YamlBuilder() { + this(new StringWriter()); + } + public YamlBuilder(Writer writer) { this(writer, 2); } @@ -30,6 +34,14 @@ public class YamlBuilder implements Builder { this.state = new State(null, 0, Structure.MAP, false); } + public static YamlBuilder builder() { + return new YamlBuilder(); + } + + public static YamlBuilder builder(Writer writer) { + return new YamlBuilder(writer); + } + @Override public Builder beginCollection() { this.state = new State(state, state.level + 1, Structure.COLLECTION, true);