Added indentation support to the human readable serialisation

This commit is contained in:
jsrobson10 2020-03-24 09:39:56 +11:00
parent a05cbe7375
commit 47e7822177
7 changed files with 101 additions and 32 deletions

View File

@ -57,15 +57,25 @@ public class BdfArray implements IBdfType, Iterable<BdfObject>
}
@Override
public String serializeHumanReadable()
public String serializeHumanReadable(BdfIndent indent, int it)
{
if(elements.size() == 0) {
return "[]";
}
String data = "[";
for(int i=0;i<elements.size();i++)
{
BdfObject o = elements.get(i);
data += o.serializeHumanReadable();
data += indent.breaker;
for(int n=0;n<=it;n++) {
data += indent.indent;
}
data += o.serializeHumanReadable(indent, it + 1);
if(elements.size() > i+1)
{
@ -73,6 +83,12 @@ public class BdfArray implements IBdfType, Iterable<BdfObject>
}
}
data += indent.breaker;
for(int n=0;n<it;n++) {
data += indent.indent;
}
return data + "]";
}

View File

@ -0,0 +1,12 @@
package bdf.types;
public class BdfIndent
{
String indent;
String breaker;
public BdfIndent(String indent, String breaker) {
this.indent = indent;
this.breaker = breaker;
}
}

View File

@ -73,17 +73,27 @@ public class BdfNamedList implements IBdfType
}
@Override
public String serializeHumanReadable()
public String serializeHumanReadable(BdfIndent indent, int it)
{
if(elements.size() == 0) {
return "{}";
}
String data = "{";
for(int i=0;i<elements.size();i++)
{
Element e = elements.get(i);
data += indent.breaker;
for(int n=0;n<=it;n++) {
data += indent.indent;
}
data += DataHelpers.serializeString(new String(e.key, StandardCharsets.UTF_8));
data += ": ";
data += e.object.serializeHumanReadable();
data += e.object.serializeHumanReadable(indent, it + 1);
if(elements.size() > i+1)
{
@ -91,6 +101,12 @@ public class BdfNamedList implements IBdfType
}
}
data += indent.breaker;
for(int n=0;n<it;n++) {
data += indent.indent;
}
return data + "}";
}

View File

@ -1,7 +1,6 @@
package bdf.types;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import bdf.data.BdfDatabase;
import bdf.util.DataHelpers;
@ -48,7 +47,16 @@ public class BdfObject implements IBdfType
return BdfDatabase.add(new BdfDatabase(type), database);
}
public String serializeHumanReadable()
private String calcIndent(BdfIndent indent, int it) {
String t = "";
t += indent.breaker;
for(int i=0;i<=it;i++) {
t += indent.indent;
}
return t;
}
public String serializeHumanReadable(BdfIndent indent, int it)
{
if(type == BdfTypes.BOOLEAN) {
if(this.getBoolean()) return "true";
@ -56,8 +64,8 @@ public class BdfObject implements IBdfType
}
// Objects
if(type == BdfTypes.ARRAY) return ((IBdfType)object).serializeHumanReadable();
if(type == BdfTypes.NAMED_LIST) return ((IBdfType)object).serializeHumanReadable();
if(type == BdfTypes.ARRAY) return ((IBdfType)object).serializeHumanReadable(indent, it);
if(type == BdfTypes.NAMED_LIST) return ((IBdfType)object).serializeHumanReadable(indent, it);
if(type == BdfTypes.STRING) return DataHelpers.serializeString((String)object);
// Primitives
@ -71,63 +79,63 @@ public class BdfObject implements IBdfType
// Arrays
if(type == BdfTypes.ARRAY_INTEGER) {
String str = "(";
String str = "(" + calcIndent(indent, it);
for(int i : this.getIntegerArray()) {
str += Integer.toString(i) + "I, ";
str += Integer.toString(i) + "I, " + calcIndent(indent, it);
}
str = str.substring(0, str.length() - 2) + ")";
return str;
}
if(type == BdfTypes.ARRAY_BOOLEAN) {
String str = "(";
String str = "(" + calcIndent(indent, it);
for(boolean i : this.getBooleanArray()) {
str += (i ? "true" : "false") + ", ";
str += (i ? "true" : "false") + ", " + calcIndent(indent, it);
}
str = str.substring(0, str.length() - 2) + ")";
return str;
}
if(type == BdfTypes.ARRAY_BYTE) {
String str = "(";
String str = "(" + calcIndent(indent, it);
for(byte i : this.getByteArray()) {
str += Byte.toString(i) + "B, ";
str += Byte.toString(i) + "B, " + calcIndent(indent, it);
}
str = str.substring(0, str.length() - 2) + ")";
return str;
}
if(type == BdfTypes.ARRAY_LONG) {
String str = "(";
String str = "(" + calcIndent(indent, it);
for(long i : this.getLongArray()) {
str += Long.toString(i) + "L, ";
str += Long.toString(i) + "L, " + calcIndent(indent, it);
}
str = str.substring(0, str.length() - 2) + ")";
return str;
}
if(type == BdfTypes.ARRAY_SHORT) {
String str = "(";
String str = "(" + calcIndent(indent, it);
for(short i : this.getShortArray()) {
str += Short.toString(i) + "S, ";
str += Short.toString(i) + "S, " + calcIndent(indent, it);
}
str = str.substring(0, str.length() - 2) + ")";
return str;
}
if(type == BdfTypes.ARRAY_DOUBLE) {
String str = "(";
String str = "(" + calcIndent(indent, it);
for(double i : this.getDoubleArray()) {
str += Double.toString(i) + "D, ";
str += Double.toString(i) + "D, " + calcIndent(indent, it);
}
str = str.substring(0, str.length() - 2) + ")";
return str;
}
if(type == BdfTypes.ARRAY_FLOAT) {
String str = "(";
String str = "(" + calcIndent(indent, it);
for(float i : this.getFloatArray()) {
str += Float.toString(i) + "F, ";
str += Float.toString(i) + "F, " + calcIndent(indent, it);
}
str = str.substring(0, str.length() - 2) + ")";
return str;

View File

@ -5,5 +5,13 @@ import bdf.data.BdfDatabase;
public interface IBdfType
{
public BdfDatabase serialize();
public String serializeHumanReadable();
String serializeHumanReadable(BdfIndent indent, int it);
public default String serializeHumanReadable(BdfIndent indent) {
return this.serializeHumanReadable(indent, 0);
}
public default String serializeHumanReadable() {
return this.serializeHumanReadable(new BdfIndent("", ""), 0);
}
}

View File

@ -5,9 +5,6 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.InflaterInputStream;
import java.util.zip.ZipException;
import com.sun.corba.se.impl.ior.ByteBuffer;
public class FileHelpers
{

View File

@ -1,10 +1,8 @@
package tests;
import java.nio.ByteBuffer;
import bdf.data.BdfDatabase;
import bdf.file.BdfCompressedFileManager;
import bdf.file.BdfFileManager;
import bdf.types.BdfArray;
import bdf.types.BdfIndent;
import bdf.types.BdfNamedList;
import bdf.types.BdfObject;
@ -16,9 +14,23 @@ public class Tests {
BdfNamedList nl = bdf.getNamedList();
nl.set("it", BdfObject.withInteger(nl.get("it").getInteger() + 1));
int array[] = {1,2,3,6,7,0};
int array2[] = {1,2,3,6,7,0};
System.out.println(bdf.serializeHumanReadable());
BdfArray array_bdf = new BdfArray();
array_bdf.add(BdfObject.withBoolean(true));
array_bdf.add(BdfObject.withBoolean(false));
array_bdf.add(BdfObject.withInteger(7));
array_bdf.add(BdfObject.withNamedList());
array_bdf.add(BdfObject.withArray());
array_bdf.add(BdfObject.withIntegerArray(array2));
nl.set("it", BdfObject.withInteger(nl.get("it").getInteger() + 1));
nl.set("int_array", BdfObject.withIntegerArray(array));
nl.set("array", BdfObject.withArray(array_bdf));
System.out.println(bdf.serializeHumanReadable(new BdfIndent(" ", "\n")));
bdf.saveDatabase();
}