Skip to content

Commit fce1d03

Browse files
committed
Sync with underscore-java.
1 parent ca3bfd0 commit fce1d03

File tree

2 files changed

+120
-7
lines changed

2 files changed

+120
-7
lines changed

src/main/java/com/github/underscore/U.java

Lines changed: 80 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,11 @@ public Chain<Map<String, Object>> set(final String path, Object value) {
569569
return new Chain<>(map());
570570
}
571571

572+
public Chain<Map<String, Object>> set(final List<String> paths, Object value) {
573+
U.set(map(), paths, value);
574+
return new Chain<>(map());
575+
}
576+
572577
@Override
573578
public Chain<T> reverse() {
574579
return new Chain<>(Underscore.reverse(value()));
@@ -1715,10 +1720,9 @@ private enum OperationType {
17151720
@SuppressWarnings("unchecked")
17161721
private static <T> T baseGetOrSetOrRemove(
17171722
final Map<String, Object> object,
1718-
final String path,
1723+
final List<String> paths,
17191724
final Object value,
17201725
OperationType operationType) {
1721-
final List<String> paths = stringToPath(path);
17221726
int index = 0;
17231727
final int length = paths.size();
17241728

@@ -1774,15 +1778,28 @@ private static Map.Entry getMapEntry(Map map) {
17741778
}
17751779

17761780
public static <T> T get(final Map<String, Object> object, final String path) {
1777-
return baseGetOrSetOrRemove(object, path, null, OperationType.GET);
1781+
return get(object, stringToPath(path));
1782+
}
1783+
1784+
public static <T> T get(final Map<String, Object> object, final List<String> paths) {
1785+
return baseGetOrSetOrRemove(object, paths, null, OperationType.GET);
17781786
}
17791787

17801788
public static <T> T set(final Map<String, Object> object, final String path, Object value) {
1781-
return baseGetOrSetOrRemove(object, path, value, OperationType.SET);
1789+
return set(object, stringToPath(path), value);
1790+
}
1791+
1792+
public static <T> T set(
1793+
final Map<String, Object> object, final List<String> paths, Object value) {
1794+
return baseGetOrSetOrRemove(object, paths, value, OperationType.SET);
17821795
}
17831796

17841797
public static <T> T remove(final Map<String, Object> object, final String path) {
1785-
return baseGetOrSetOrRemove(object, path, null, OperationType.REMOVE);
1798+
return remove(object, stringToPath(path));
1799+
}
1800+
1801+
public static <T> T remove(final Map<String, Object> object, final List<String> paths) {
1802+
return baseGetOrSetOrRemove(object, paths, null, OperationType.REMOVE);
17861803
}
17871804

17881805
public static Map<String, Object> rename(
@@ -2658,6 +2675,43 @@ public static String xmlToJson(String xml, Mode mode) {
26582675
return xmlToJson(xml, Json.JsonStringBuilder.Step.TWO_SPACES, mode);
26592676
}
26602677

2678+
public enum TextType {
2679+
JSON,
2680+
XML,
2681+
OTHER
2682+
}
2683+
2684+
public static TextType getTextType(String text) {
2685+
String trimmed = trim(text);
2686+
final TextType textType;
2687+
if (trimmed.startsWith("{") && trimmed.endsWith("}")
2688+
|| trimmed.startsWith("[") && trimmed.endsWith("]")) {
2689+
textType = TextType.JSON;
2690+
} else if (trimmed.startsWith("<") && trimmed.endsWith(">")) {
2691+
textType = TextType.XML;
2692+
} else {
2693+
textType = TextType.OTHER;
2694+
}
2695+
return textType;
2696+
}
2697+
2698+
public static String formatJsonOrXml(String jsonOrXml, String identStep) {
2699+
TextType textType = getTextType(jsonOrXml);
2700+
final String result;
2701+
if (textType == TextType.JSON) {
2702+
result = formatJson(jsonOrXml, Json.JsonStringBuilder.Step.valueOf(identStep));
2703+
} else if (textType == TextType.XML) {
2704+
result = formatXml(jsonOrXml, Xml.XmlStringBuilder.Step.valueOf(identStep));
2705+
} else {
2706+
result = jsonOrXml;
2707+
}
2708+
return result;
2709+
}
2710+
2711+
public static String formatJsonOrXml(String jsonOrXml) {
2712+
return formatJsonOrXml(jsonOrXml, "TWO_SPACES");
2713+
}
2714+
26612715
public static String formatJson(String json, Json.JsonStringBuilder.Step identStep) {
26622716
return Json.formatJson(json, identStep);
26632717
}
@@ -3119,16 +3173,30 @@ public <T> T get(final String path) {
31193173
return U.get(data, path);
31203174
}
31213175

3176+
public <T> T get(final List<String> paths) {
3177+
return U.get(data, paths);
3178+
}
3179+
31223180
public Builder set(final String path, final Object value) {
31233181
U.set(data, path, value);
31243182
return this;
31253183
}
31263184

3185+
public Builder set(final List<String> paths, final Object value) {
3186+
U.set(data, paths, value);
3187+
return this;
3188+
}
3189+
31273190
public Builder remove(final String key) {
31283191
U.remove(data, key);
31293192
return this;
31303193
}
31313194

3195+
public Builder remove(final List<String> keys) {
3196+
U.remove(data, keys);
3197+
return this;
3198+
}
3199+
31323200
public Builder clear() {
31333201
data.clear();
31343202
return this;
@@ -3238,6 +3306,13 @@ public <T> T get(final String path) {
32383306
return U.get(U.getStringObjectMap(data), "value." + path);
32393307
}
32403308

3309+
public <T> T get(final List<String> paths) {
3310+
List<String> newPaths = new ArrayList<>();
3311+
newPaths.add("value");
3312+
newPaths.addAll(paths);
3313+
return U.get(U.getStringObjectMap(data), newPaths);
3314+
}
3315+
32413316
public ArrayBuilder set(final int index, final Object value) {
32423317
data.set(index, value);
32433318
return this;

src/test/java/com/github/underscore/LodashTest.java

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,9 @@ void set() {
431431
Map<String, Object> map4 = U.newLinkedHashMap();
432432
map4.put("a", "b");
433433
assertNull(U.<String>set(map4, "a.b", "b"));
434+
Map<String, Object> map5 = U.newLinkedHashMap();
435+
map5.put("a", "b");
436+
assertNull(U.chain(map5.entrySet()).set(asList("a", "b"), "b").value());
434437
}
435438

436439
@Test
@@ -1041,6 +1044,37 @@ void jsonToXml() {
10411044
U.jsonToXml("{\"a\" : {\n \"b\" : \"v1\" }, \"c\" : [\"v1\", \"v2\", \"v3\"]}"));
10421045
}
10431046

1047+
@Test
1048+
void getTextType() {
1049+
assertEquals(
1050+
U.TextType.OTHER,
1051+
U.getTextType("<root><element>1</element><element>2</element></root"));
1052+
assertEquals(
1053+
U.TextType.OTHER,
1054+
U.getTextType("root><element>1</element><element>2</element></root>"));
1055+
assertEquals(U.TextType.OTHER, U.getTextType("{\n \"a\": {\n }\n"));
1056+
assertEquals(U.TextType.OTHER, U.getTextType("\n \"a\": {\n }\n}"));
1057+
assertEquals(U.TextType.OTHER, U.getTextType("[\n 1.00\n"));
1058+
assertEquals(U.TextType.OTHER, U.getTextType("\n 1.00\n]"));
1059+
}
1060+
1061+
@Test
1062+
void formatJsonOrXml() {
1063+
assertEquals(
1064+
"<root>\n <element>1</element>\n <element>2</element>\n</root>",
1065+
U.formatJsonOrXml("<root><element>1</element><element>2</element></root>"));
1066+
assertEquals(
1067+
"<a>\n <b></b>\n <b></b>\n</a>",
1068+
U.formatJsonOrXml("<a>\n <b></b>\n <b></b>\n</a>", "FOUR_SPACES"));
1069+
assertEquals("{\n \"a\": {\n }\n}", U.formatJsonOrXml("{\n \"a\": {\n }\n}"));
1070+
assertEquals("[\n]", U.formatJsonOrXml("[]"));
1071+
assertEquals("[\n 1.00\n]", U.formatJsonOrXml("[1.00]"));
1072+
assertEquals(
1073+
"{\n \"a\": {\n }\n}",
1074+
U.formatJsonOrXml("{\n \"a\": {\n }\n}", "FOUR_SPACES"));
1075+
assertEquals("text", U.formatJsonOrXml("text", "FOUR_SPACES"));
1076+
}
1077+
10441078
@Test
10451079
void formatXml() {
10461080
assertEquals(
@@ -1246,8 +1280,7 @@ void changeXmlEncoding() {
12461280
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><a>Test</a>",
12471281
Xml.XmlStringBuilder.Step.COMPACT,
12481282
"windows-1251"));
1249-
assertNull(
1250-
U.changeXmlEncoding(null, Xml.XmlStringBuilder.Step.COMPACT, "windows-1251"));
1283+
assertNull(U.changeXmlEncoding(null, Xml.XmlStringBuilder.Step.COMPACT, "windows-1251"));
12511284
}
12521285

12531286
@Test
@@ -1374,6 +1407,10 @@ void objectBuilder() {
13741407
assertEquals("{1=3}", builder.build().toString());
13751408
assertEquals("3", builder.<String>get("1"));
13761409
builder.remove("1");
1410+
builder.set(asList("2"), "4");
1411+
assertEquals("{2=4}", builder.build().toString());
1412+
assertEquals("4", builder.<String>get(asList("2")));
1413+
builder.remove(asList("2"));
13771414
assertEquals("{}", builder.build().toString());
13781415
builder.clear();
13791416
builder.isEmpty();
@@ -1419,6 +1456,7 @@ void arrayBuilder() {
14191456
builder.add(builder);
14201457
builder.toJson();
14211458
assertEquals("1", builder.<String>get("0"));
1459+
assertEquals("1", builder.<String>get(asList("0")));
14221460
U.ArrayBuilder.fromJson("[]");
14231461
builder.toXml();
14241462
U.ArrayBuilder.fromXml(

0 commit comments

Comments
 (0)