Skip to content

Commit 12f8025

Browse files
committed
Add support for better formatting in toJson() method for the string and
lodash plugins.
1 parent 677d081 commit 12f8025

File tree

4 files changed

+503
-244
lines changed
  • lodash-plugin/src
  • string-plugin/src

4 files changed

+503
-244
lines changed

lodash-plugin/src/main/java/com/github/underscore/lodash/$.java

Lines changed: 83 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1163,8 +1163,74 @@ public static String trunc(final String string, final Integer length) {
11631163
return result + omission;
11641164
}
11651165

1166+
public static class JsonStringBuilder {
1167+
private final StringBuilder builder;
1168+
private int ident;
1169+
private boolean newString;
1170+
private boolean newKey;
1171+
private boolean newLine;
1172+
1173+
public JsonStringBuilder() {
1174+
builder = new StringBuilder();
1175+
}
1176+
1177+
public JsonStringBuilder append(final char character) {
1178+
switch (character) {
1179+
case '[':
1180+
case '{':
1181+
fillSpaces(newLine);
1182+
ident += 2;
1183+
break;
1184+
case ']':
1185+
case '}':
1186+
ident -= 2;
1187+
builder.append("\n");
1188+
fillSpaces(true);
1189+
break;
1190+
case '\"':
1191+
newString = !newString;
1192+
fillSpaces(newString && !newKey);
1193+
break;
1194+
default:
1195+
break;
1196+
}
1197+
builder.append(character);
1198+
if (character == ',' || character == '[' || character == '{') {
1199+
builder.append("\n");
1200+
newLine = true;
1201+
} else {
1202+
newLine = false;
1203+
}
1204+
if (character == ':') {
1205+
builder.append(' ');
1206+
newKey = true;
1207+
} else {
1208+
newKey = false;
1209+
}
1210+
return this;
1211+
}
1212+
1213+
public JsonStringBuilder append(final String string) {
1214+
fillSpaces(!newString && !newKey);
1215+
builder.append(string);
1216+
return this;
1217+
}
1218+
1219+
private void fillSpaces(final boolean condition) {
1220+
if (condition) {
1221+
for (int index = 0; index < ident; index += 1) {
1222+
builder.append(' ');
1223+
}
1224+
}
1225+
}
1226+
1227+
public String toString() {
1228+
return builder.toString();
1229+
}
1230+
}
1231+
11661232
public static class JsonArray {
1167-
public static void writeJson(Collection collection, StringBuilder builder) {
1233+
public static void writeJson(Collection collection, JsonStringBuilder builder) {
11681234
if (collection == null) {
11691235
builder.append(NULL);
11701236
return;
@@ -1192,7 +1258,7 @@ public static void writeJson(Collection collection, StringBuilder builder) {
11921258
builder.append(']');
11931259
}
11941260

1195-
public static void writeJson(byte[] array, StringBuilder builder) {
1261+
public static void writeJson(byte[] array, JsonStringBuilder builder) {
11961262
if (array == null) {
11971263
builder.append(NULL);
11981264
} else if (array.length == 0) {
@@ -1210,7 +1276,7 @@ public static void writeJson(byte[] array, StringBuilder builder) {
12101276
}
12111277
}
12121278

1213-
public static void writeJson(short[] array, StringBuilder builder) {
1279+
public static void writeJson(short[] array, JsonStringBuilder builder) {
12141280
if (array == null) {
12151281
builder.append(NULL);
12161282
} else if (array.length == 0) {
@@ -1228,7 +1294,7 @@ public static void writeJson(short[] array, StringBuilder builder) {
12281294
}
12291295
}
12301296

1231-
public static void writeJson(int[] array, StringBuilder builder) {
1297+
public static void writeJson(int[] array, JsonStringBuilder builder) {
12321298
if (array == null) {
12331299
builder.append(NULL);
12341300
} else if (array.length == 0) {
@@ -1246,7 +1312,7 @@ public static void writeJson(int[] array, StringBuilder builder) {
12461312
}
12471313
}
12481314

1249-
public static void writeJson(long[] array, StringBuilder builder) {
1315+
public static void writeJson(long[] array, JsonStringBuilder builder) {
12501316
if (array == null) {
12511317
builder.append(NULL);
12521318
} else if (array.length == 0) {
@@ -1264,7 +1330,7 @@ public static void writeJson(long[] array, StringBuilder builder) {
12641330
}
12651331
}
12661332

1267-
public static void writeJson(float[] array, StringBuilder builder) {
1333+
public static void writeJson(float[] array, JsonStringBuilder builder) {
12681334
if (array == null) {
12691335
builder.append(NULL);
12701336
} else if (array.length == 0) {
@@ -1282,7 +1348,7 @@ public static void writeJson(float[] array, StringBuilder builder) {
12821348
}
12831349
}
12841350

1285-
public static void writeJson(double[] array, StringBuilder builder) {
1351+
public static void writeJson(double[] array, JsonStringBuilder builder) {
12861352
if (array == null) {
12871353
builder.append(NULL);
12881354
} else if (array.length == 0) {
@@ -1300,7 +1366,7 @@ public static void writeJson(double[] array, StringBuilder builder) {
13001366
}
13011367
}
13021368

1303-
public static void writeJson(boolean[] array, StringBuilder builder) {
1369+
public static void writeJson(boolean[] array, JsonStringBuilder builder) {
13041370
if (array == null) {
13051371
builder.append(NULL);
13061372
} else if (array.length == 0) {
@@ -1318,25 +1384,25 @@ public static void writeJson(boolean[] array, StringBuilder builder) {
13181384
}
13191385
}
13201386

1321-
public static void writeJson(char[] array, StringBuilder builder) {
1387+
public static void writeJson(char[] array, JsonStringBuilder builder) {
13221388
if (array == null) {
13231389
builder.append(NULL);
13241390
} else if (array.length == 0) {
13251391
builder.append("[]");
13261392
} else {
1327-
builder.append("[\"");
1393+
builder.append('[').append('\"');
13281394
builder.append(String.valueOf(array[0]));
13291395

13301396
for (int i = 1; i < array.length; i++) {
1331-
builder.append("\",\"");
1397+
builder.append('\"').append(',').append('\"');
13321398
builder.append(String.valueOf(array[i]));
13331399
}
13341400

1335-
builder.append("\"]");
1401+
builder.append('\"').append(']');
13361402
}
13371403
}
13381404

1339-
public static void writeJson(Object[] array, StringBuilder builder) {
1405+
public static void writeJson(Object[] array, JsonStringBuilder builder) {
13401406
if (array == null) {
13411407
builder.append(NULL);
13421408
} else if (array.length == 0) {
@@ -1356,7 +1422,7 @@ public static void writeJson(Object[] array, StringBuilder builder) {
13561422
}
13571423

13581424
public static class JsonObject {
1359-
public static void writeJson(Map map, StringBuilder builder) {
1425+
public static void writeJson(Map map, JsonStringBuilder builder) {
13601426
if (map == null) {
13611427
builder.append(NULL);
13621428
return;
@@ -1384,7 +1450,7 @@ public static void writeJson(Map map, StringBuilder builder) {
13841450
}
13851451

13861452
public static class JsonValue {
1387-
public static void writeJson(Object value, StringBuilder builder) {
1453+
public static void writeJson(Object value, JsonStringBuilder builder) {
13881454
if (value == null) {
13891455
builder.append(NULL);
13901456
} else if (value instanceof String) {
@@ -1490,7 +1556,7 @@ static void escape(String s, StringBuilder sb) {
14901556
}
14911557

14921558
public static String toJson(Collection collection) {
1493-
final StringBuilder builder = new StringBuilder();
1559+
final JsonStringBuilder builder = new JsonStringBuilder();
14941560

14951561
JsonArray.writeJson(collection, builder);
14961562
return builder.toString();
@@ -1501,7 +1567,7 @@ public String toJson() {
15011567
}
15021568

15031569
public static String toJson(Map map) {
1504-
final StringBuilder builder = new StringBuilder();
1570+
final JsonStringBuilder builder = new JsonStringBuilder();
15051571

15061572
JsonObject.writeJson(map, builder);
15071573
return builder.toString();

0 commit comments

Comments
 (0)