@@ -71,10 +71,16 @@ private DefaultEnhancedDocument(Map<String, AttributeValue> attributeValueMap) {
71
71
}
72
72
73
73
public DefaultEnhancedDocument (DefaultBuilder builder ) {
74
- attributeValueMap = Collections .unmodifiableMap (builder .getAttributeValueMap ());
75
- attributeConverterProviders = ChainConverterProvider .create (builder .attributeConverterProviders );
74
+ List <AttributeConverterProvider > providers = builder .attributeConverterProviders ;
75
+ attributeConverterProviders =
76
+ ChainConverterProvider .create (providers != null && !providers .isEmpty ()
77
+ ? providers
78
+ : Collections .singletonList (AttributeConverterProvider .defaultProvider ()));
79
+ attributeValueMap = Collections .unmodifiableMap (objectMapToAttributeMap (builder .attributeValueMap ,
80
+ attributeConverterProviders ));
76
81
}
77
82
83
+
78
84
public static DefaultBuilder builder () {
79
85
return new DefaultBuilder ();
80
86
@@ -339,31 +345,19 @@ public String toJsonPretty() {
339
345
340
346
public static class DefaultBuilder implements EnhancedDocument .Builder {
341
347
342
- Map <String , AttributeValue > attributeValueMap = new LinkedHashMap <>();
348
+ Map <String , Object > attributeValueMap = new LinkedHashMap <>();
343
349
344
350
List <AttributeConverterProvider > attributeConverterProviders = new ArrayList <>();
345
351
346
- public DefaultBuilder () {
347
- }
348
-
349
- public Map <String , AttributeValue > getAttributeValueMap () {
350
- return attributeValueMap ;
352
+ private DefaultBuilder () {
351
353
}
352
354
353
355
@ Override
354
356
public Builder add (String attributeName , Object value ) {
355
- ChainConverterProvider attributeConverterProvider = providerFromBuildAndAppendDefault ();
356
- attributeValueMap .put (attributeName , convert (value , attributeConverterProvider ));
357
+ attributeValueMap .put (attributeName , value );
357
358
return this ;
358
359
}
359
360
360
- private ChainConverterProvider providerFromBuildAndAppendDefault () {
361
- List <AttributeConverterProvider > converterProviders = new ArrayList <>(attributeConverterProviders );
362
- converterProviders .add (DefaultAttributeConverterProvider .create ());
363
- ChainConverterProvider attributeConverterProvider = ChainConverterProvider .create (converterProviders );
364
- return attributeConverterProvider ;
365
- }
366
-
367
361
@ Override
368
362
public Builder addString (String attributeName , String value ) {
369
363
Validate .isTrue (!StringUtils .isEmpty (attributeName ), "attributeName cannot empty or null" );
@@ -440,7 +434,7 @@ public Builder addSdkBytesSet(String attributeName, Set<SdkBytes> values) {
440
434
public Builder addList (String attributeName , List <?> value ) {
441
435
Validate .isTrue (!StringUtils .isEmpty (attributeName ), "attributeName cannot empty or null" );
442
436
if (!isNullValueAdded (attributeName , value )) {
443
- attributeValueMap .put (attributeName , convert ( value , providerFromBuildAndAppendDefault ()) );
437
+ attributeValueMap .put (attributeName , value );
444
438
}
445
439
return this ;
446
440
}
@@ -449,7 +443,7 @@ public Builder addList(String attributeName, List<?> value) {
449
443
public Builder addMap (String attributeName , Map <String , ?> value ) {
450
444
Validate .isTrue (!StringUtils .isEmpty (attributeName ), "attributeName cannot empty or null" );
451
445
if (!isNullValueAdded (attributeName , value )) {
452
- attributeValueMap .put (attributeName , convert ( value , providerFromBuildAndAppendDefault ()) );
446
+ attributeValueMap .put (attributeName , value );
453
447
}
454
448
return this ;
455
449
}
@@ -507,7 +501,9 @@ public Builder json(String json) {
507
501
throw new IllegalArgumentException ("Could not parse argument json " + json );
508
502
}
509
503
AttributeValue attributeValue = JSON_ITEM_ATTRIBUTE_CONVERTER .transformFrom (jsonNode );
510
- this .attributeValueMap = attributeValue .m ();
504
+ if (attributeValue != null && attributeValue .hasM ()) {
505
+ attributeValueMap = new LinkedHashMap <>(attributeValue .m ());
506
+ }
511
507
return this ;
512
508
}
513
509
@@ -550,4 +546,21 @@ public int hashCode() {
550
546
result = 31 * result + (attributeConverterProviders != null ? attributeConverterProviders .hashCode () : 0 );
551
547
return result ;
552
548
}
549
+
550
+ private static Map <String , AttributeValue > objectMapToAttributeMap (Map <String , Object > objectMap ,
551
+ AttributeConverterProvider attributeConverterProvider ) {
552
+ if (objectMap == null ) {
553
+ return null ;
554
+ }
555
+ Map <String , AttributeValue > result = new LinkedHashMap <>(objectMap .size ());
556
+ objectMap .forEach ((key , value ) -> {
557
+ if (value instanceof AttributeValue ) {
558
+ result .put (key , (AttributeValue ) value );
559
+ } else {
560
+ result .put (key , convert (value , attributeConverterProvider ));
561
+ }
562
+ });
563
+ return result ;
564
+ }
565
+
553
566
}
0 commit comments