From 852dd46a1b6a91a38f15b276c696ec88a6014c4d Mon Sep 17 00:00:00 2001 From: akwizgran Date: Mon, 17 Jul 2017 18:10:33 +0100 Subject: [PATCH] Utility class for converting BDF to strings. (cherry picked from commit 9e94917) --- .../bramble/api/data/BdfStringUtils.java | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfStringUtils.java diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfStringUtils.java b/bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfStringUtils.java new file mode 100644 index 000000000..7f02ecbd0 --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfStringUtils.java @@ -0,0 +1,71 @@ +package org.briarproject.bramble.api.data; + +import org.briarproject.bramble.api.Bytes; +import org.briarproject.bramble.api.FormatException; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import javax.annotation.Nullable; + +import static org.briarproject.bramble.api.data.BdfDictionary.NULL_VALUE; +import static org.briarproject.bramble.util.StringUtils.toHexString; + +@NotNullByDefault +public class BdfStringUtils { + + public static String toString(@Nullable Object o) throws FormatException { + return toString(o, 0); + } + + private static String toString(@Nullable Object o, int indent) + throws FormatException { + if (o == null || o == NULL_VALUE) return "null"; + if (o instanceof Boolean) return o.toString(); + if (o instanceof Number) return o.toString(); + if (o instanceof String) return "\"" + o + "\""; + if (o instanceof Bytes) + return "x" + toHexString(((Bytes) o).getBytes()); + if (o instanceof byte[]) + return "x" + toHexString((byte[]) o); + if (o instanceof List) { + List list = (List) o; + StringBuilder sb = new StringBuilder(); + sb.append("[\n"); + int i = 0, size = list.size(); + for (Object e : list) { + indent(sb, indent + 1); + sb.append(toString(e, indent + 1)); + if (i++ < size - 1) sb.append(','); + sb.append('\n'); + } + indent(sb, indent); + sb.append(']'); + return sb.toString(); + } + if (o instanceof Map) { + Map map = (Map) o; + StringBuilder sb = new StringBuilder(); + sb.append("{\n"); + int i = 0, size = map.size(); + for (Entry e : map.entrySet()) { + indent(sb, indent + 1); + sb.append(toString(e.getKey(), indent + 1)); + sb.append(": "); + sb.append(toString(e.getValue(), indent + 1)); + if (i++ < size - 1) sb.append(','); + sb.append('\n'); + } + indent(sb, indent); + sb.append('}'); + return sb.toString(); + } + throw new FormatException(); + } + + private static void indent(StringBuilder sb, int indent) { + for (int i = 0; i < indent; i++) sb.append('\t'); + } +}