Skip to content

Commit 8b952f7

Browse files
committed
Sync with underscore-java.
1 parent d42967c commit 8b952f7

File tree

2 files changed

+63
-1
lines changed

2 files changed

+63
-1
lines changed

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

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ public enum Mode {
9999
REPLACE_EMPTY_VALUE_WITH_NULL,
100100
FORCE_ATTRIBUTE_USAGE,
101101
DEFINE_ROOT_NAME,
102-
FORCE_ATTRIBUTE_USAGE_AND_DEFINE_ROOT_NAME
102+
FORCE_ATTRIBUTE_USAGE_AND_DEFINE_ROOT_NAME,
103+
REPLACE_NULL_WITH_EMPTY_VALUE
103104
}
104105

105106
public U(final Iterable<T> iterable) {
@@ -2253,6 +2254,8 @@ public static String jsonToXml(String json, Xml.XmlStringBuilder.Step identStep,
22532254
result = Xml.toXml((Map) object, identStep, newRootName);
22542255
} else if (mode == Mode.FORCE_ATTRIBUTE_USAGE_AND_DEFINE_ROOT_NAME) {
22552256
result = Xml.toXml(forceAttributeUsage((Map) object), identStep, newRootName);
2257+
} else if (mode == Mode.REPLACE_NULL_WITH_EMPTY_VALUE) {
2258+
result = Xml.toXml(replaceNullWithEmptyValue((Map) object), identStep, newRootName);
22562259
} else {
22572260
result = Xml.toXml((Map) object, identStep);
22582261
}
@@ -2496,6 +2499,33 @@ private static Object makeAttributeUsage(Object value) {
24962499
return result;
24972500
}
24982501

2502+
@SuppressWarnings("unchecked")
2503+
public static Map<String, Object> replaceNullWithEmptyValue(Map<String, Object> map) {
2504+
Map<String, Object> outMap = newLinkedHashMap();
2505+
for (Map.Entry<String, Object> entry : map.entrySet()) {
2506+
outMap.put(entry.getKey(), entry.getValue() == null ? newLinkedHashMap() :
2507+
makeReplaceNullValue(entry.getValue()));
2508+
}
2509+
return outMap;
2510+
}
2511+
2512+
@SuppressWarnings("unchecked")
2513+
private static Object makeReplaceNullValue(Object value) {
2514+
final Object result;
2515+
if (value instanceof List) {
2516+
List<Object> values = newArrayList();
2517+
for (Object item : (List) value) {
2518+
values.add(item instanceof Map ? replaceNullWithEmptyValue((Map) item) : item);
2519+
}
2520+
result = values;
2521+
} else if (value instanceof Map) {
2522+
result = replaceNullWithEmptyValue((Map) value);
2523+
} else {
2524+
result = value;
2525+
}
2526+
return result;
2527+
}
2528+
24992529
public static long gcd(long value1, long value2) {
25002530
if (value1 == 0) {
25012531
return value2;

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

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -762,6 +762,10 @@ public void formatXml() {
762762
U.formatXml("<a>\n <b></b>\n <b></b>\n</a>", Xml.XmlStringBuilder.Step.TABS));
763763
assertEquals("<a number=\"true\">1.00</a>", U.formatXml("<a number=\"true\">1.00</a>"));
764764
assertEquals("<a number=\"true\">2.01</a>", U.formatXml("<a number=\"true\">2.01</a>"));
765+
}
766+
767+
@Test
768+
public void forceAttributeUsage() {
765769
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
766770
+ "<RootElm>\n"
767771
+ " <author DOB=\"\" EMailID=\"\" PlaceId=\"\" SSN=\"\">\n"
@@ -793,6 +797,34 @@ public void formatXml() {
793797
U.forceAttributeUsage(map2);
794798
}
795799

800+
@Test
801+
public void replaceNullWithEmptyValue() {
802+
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
803+
+ "<RootElm>\n"
804+
+ " <author>\n"
805+
+ " <DOB></DOB>\n"
806+
+ " <value string=\"true\"/>\n"
807+
+ " </author>\n"
808+
+ "</RootElm>", U.jsonToXml("{\n"
809+
+ " \"RootElm\": {\n"
810+
+ " \"author\": {\n"
811+
+ " \"DOB\": null,\n"
812+
+ " \"value\": \"\"\n"
813+
+ " }\n"
814+
+ " }\n"
815+
+ "}", U.Mode.REPLACE_NULL_WITH_EMPTY_VALUE));
816+
Map<String, Object> map = U.newLinkedHashMap();
817+
List<Object> list = U.newArrayList();
818+
list.add(U.newLinkedHashMap());
819+
map.put("list", list);
820+
U.replaceNullWithEmptyValue(map);
821+
Map<String, Object> map2 = U.newLinkedHashMap();
822+
List<Object> list2 = U.newArrayList();
823+
list2.add(U.newArrayList());
824+
map2.put("list", list2);
825+
U.replaceNullWithEmptyValue(map2);
826+
}
827+
796828
@Test
797829
public void changeXmlEncoding() {
798830
assertEquals("<?xml version=\"1.0\" encoding=\"windows-1251\"?>\n<a>Test</a>",

0 commit comments

Comments
 (0)