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