@@ -113,7 +113,6 @@ public enum Mode {
113113 REPLACE_EMPTY_TAG_WITH_EMPTY_STRING ,
114114 FORCE_ATTRIBUTE_USAGE ,
115115 DEFINE_ROOT_NAME ,
116- FORCE_ATTRIBUTE_USAGE_AND_DEFINE_ROOT_NAME ,
117116 REPLACE_NULL_WITH_EMPTY_VALUE ,
118117 REPLACE_EMPTY_STRING_WITH_EMPTY_VALUE ,
119118 REMOVE_FIRST_LEVEL_XML_TO_JSON ,
@@ -212,7 +211,6 @@ public Chain<T> compact(final T falsyValue) {
212211 }
213212
214213 @ Override
215- @ SuppressWarnings ("unchecked" )
216214 public Chain flatten () {
217215 return new Chain <>(Underscore .flatten (value ()));
218216 }
@@ -967,9 +965,7 @@ public static <T> List<T> fill(List<T> list, T item) {
967965 }
968966
969967 public static <T > T [] fill (T [] array , T item ) {
970- for (int i = 0 ; i < array .length ; i ++) {
971- array [i ] = item ;
972- }
968+ Arrays .fill (array , item );
973969 return array ;
974970 }
975971
@@ -1764,7 +1760,6 @@ public static <T> T remove(final Map<String, Object> object, final String path)
17641760 return baseGetOrSetOrRemove (object , path , null , OperationType .REMOVE );
17651761 }
17661762
1767- @ SuppressWarnings ("unchecked" )
17681763 public static Map <String , Object > rename (
17691764 final Map <String , Object > map , final String oldKey , final String newKey ) {
17701765 Map <String , Object > outMap = newLinkedHashMap ();
@@ -1843,7 +1838,6 @@ private static Object makeObjectForSetValue(
18431838 return result ;
18441839 }
18451840
1846- @ SuppressWarnings ("unchecked" )
18471841 public static Map <String , Object > update (
18481842 final Map <String , Object > map1 , final Map <String , Object > map2 ) {
18491843 Map <String , Object > outMap = newLinkedHashMap ();
@@ -2364,7 +2358,6 @@ public static Map<String, Object> fromXmlMap(final String xml) {
23642358 return fromXmlMap (xml , Xml .FromType .FOR_CONVERT );
23652359 }
23662360
2367- @ SuppressWarnings ("unchecked" )
23682361 public static Map <String , Object > fromXmlMap (final String xml , final Xml .FromType fromType ) {
23692362 final Object object = Xml .fromXml (xml , fromType );
23702363 return getStringObjectMap (object );
@@ -2412,7 +2405,6 @@ public Object fromJson() {
24122405 return Json .fromJson (getString ().get ());
24132406 }
24142407
2415- @ SuppressWarnings ("unchecked" )
24162408 public static Map <String , Object > fromJsonMap (final String string ) {
24172409 final Object object = Json .fromJson (string );
24182410 return getStringObjectMap (object );
@@ -2445,11 +2437,9 @@ public static String jsonToXml(
24452437 final String result ;
24462438 if (object instanceof Map ) {
24472439 if (mode == Mode .FORCE_ATTRIBUTE_USAGE ) {
2448- result = Xml .toXml (forceAttributeUsage ((Map ) object ), identStep );
2440+ result = Xml .toXml (forceAttributeUsage ((Map ) object ), identStep , newRootName );
24492441 } else if (mode == Mode .DEFINE_ROOT_NAME ) {
24502442 result = Xml .toXml ((Map ) object , identStep , newRootName );
2451- } else if (mode == Mode .FORCE_ATTRIBUTE_USAGE_AND_DEFINE_ROOT_NAME ) {
2452- result = Xml .toXml (forceAttributeUsage ((Map ) object ), identStep , newRootName );
24532443 } else if (mode == Mode .REPLACE_NULL_WITH_EMPTY_VALUE ) {
24542444 result = Xml .toXml (replaceNullWithEmptyValue ((Map ) object ), identStep , newRootName );
24552445 } else if (mode == Mode .REPLACE_EMPTY_STRING_WITH_EMPTY_VALUE ) {
@@ -2461,7 +2451,7 @@ public static String jsonToXml(
24612451 } else if (mode == Mode .FORCE_ADD_ROOT_JSON_TO_XML
24622452 && !Xml .XmlValue .getMapKey (object ).equals (ROOT )) {
24632453 final Map <String , Object > map = U .newLinkedHashMap ();
2464- map .put (Underscore . isNull ( newRootName ) ? ROOT : newRootName , object );
2454+ map .put (newRootName , object );
24652455 result = Xml .toXml (map , identStep );
24662456 } else {
24672457 result = Xml .toXml ((Map ) object , identStep );
@@ -2472,7 +2462,7 @@ public static String jsonToXml(
24722462 }
24732463
24742464 public static String jsonToXml (String json , Mode mode ) {
2475- return jsonToXml (json , Xml .XmlStringBuilder .Step .TWO_SPACES , mode , null );
2465+ return jsonToXml (json , Xml .XmlStringBuilder .Step .TWO_SPACES , mode , ROOT );
24762466 }
24772467
24782468 public static String jsonToXml (String json , Mode mode , String newRootName ) {
@@ -2672,7 +2662,6 @@ private static Object makeObjectSelfClose(Object value, String newValue) {
26722662 return result ;
26732663 }
26742664
2675- @ SuppressWarnings ("unchecked" )
26762665 public static Map <String , Object > replaceEmptyValueWithNull (Map <String , Object > map ) {
26772666 if (map == null || map .isEmpty ()) {
26782667 return null ;
@@ -2701,7 +2690,6 @@ private static Object makeObjectEmptyValue(Object value) {
27012690 return result ;
27022691 }
27032692
2704- @ SuppressWarnings ("unchecked" )
27052693 public static Object replaceEmptyValueWithEmptyString (Map <String , Object > map ) {
27062694 if (map .isEmpty ()) {
27072695 return "" ;
@@ -2731,7 +2719,6 @@ private static Object makeObjectEmptyString(Object value) {
27312719 return result ;
27322720 }
27332721
2734- @ SuppressWarnings ("unchecked" )
27352722 public static Map <String , Object > forceAttributeUsage (Map <String , Object > map ) {
27362723 Map <String , Object > outMap = newLinkedHashMap ();
27372724 for (Map .Entry <String , Object > entry : map .entrySet ()) {
@@ -2763,7 +2750,6 @@ private static Object makeAttributeUsage(Object value) {
27632750 return result ;
27642751 }
27652752
2766- @ SuppressWarnings ("unchecked" )
27672753 public static Map <String , Object > replaceNullWithEmptyValue (Map <String , Object > map ) {
27682754 Map <String , Object > outMap = newLinkedHashMap ();
27692755 for (Map .Entry <String , Object > entry : map .entrySet ()) {
@@ -2793,7 +2779,6 @@ private static Object makeReplaceNullValue(Object value) {
27932779 return result ;
27942780 }
27952781
2796- @ SuppressWarnings ("unchecked" )
27972782 public static Map <String , Object > replaceEmptyStringWithEmptyValue (Map <String , Object > map ) {
27982783 Map <String , Object > outMap = newLinkedHashMap ();
27992784 for (Map .Entry <String , Object > entry : map .entrySet ()) {
@@ -2824,7 +2809,6 @@ private static Object makeReplaceEmptyString(Object value) {
28242809 return result ;
28252810 }
28262811
2827- @ SuppressWarnings ("unchecked" )
28282812 public static Map <String , Object > replaceFirstLevel (Map <String , Object > map ) {
28292813 return replaceFirstLevel (map , 0 );
28302814 }
@@ -2863,6 +2847,31 @@ private static Object makeReplaceFirstLevel(Object value, int level) {
28632847 return result ;
28642848 }
28652849
2850+ public static Map <String , Object > deepCopyMap (Map <String , Object > map ) {
2851+ Map <String , Object > outMap = newLinkedHashMap ();
2852+ for (Map .Entry <String , Object > entry : map .entrySet ()) {
2853+ outMap .put (entry .getKey (), makeDeepCopyMap (entry .getValue ()));
2854+ }
2855+ return outMap ;
2856+ }
2857+
2858+ @ SuppressWarnings ("unchecked" )
2859+ private static Object makeDeepCopyMap (Object value ) {
2860+ final Object result ;
2861+ if (value instanceof List ) {
2862+ List <Object > values = newArrayList ();
2863+ for (Object item : (List ) value ) {
2864+ values .add (item instanceof Map ? deepCopyMap ((Map ) item ) : item );
2865+ }
2866+ result = values ;
2867+ } else if (value instanceof Map ) {
2868+ result = deepCopyMap ((Map ) value );
2869+ } else {
2870+ result = value ;
2871+ }
2872+ return result ;
2873+ }
2874+
28662875 public static long gcd (long value1 , long value2 ) {
28672876 if (value1 == 0 ) {
28682877 return value2 ;
@@ -2944,6 +2953,12 @@ public static Builder fromXml(final String xml) {
29442953 return builder ;
29452954 }
29462955
2956+ public static Builder fromMap (final Map <String , Object > map ) {
2957+ final Builder builder = new Builder ();
2958+ deepCopyMap (map ).forEach (builder .data ::put );
2959+ return builder ;
2960+ }
2961+
29472962 public String toJson () {
29482963 return Json .toJson (data );
29492964 }
0 commit comments