final Class<T> clazz = parameters.getModelClass(); ModelClassMetadata metadata = metadataCache.get(clazz);
final Class<T> clazz = parameters.getModelClass(); ModelClassMetadata metadata = metadataCache.get(clazz);
private static EncryptionContext paramsToContext(Parameters<?> params) { final Class<?> clazz = params.getModelClass(); final TableAadOverride override = clazz.getAnnotation(TableAadOverride.class); final String tableName = ((override == null) ? params.getTableName() : override.tableName()); return new EncryptionContext.Builder() .withHashKeyName(params.getHashKeyName()) .withRangeKeyName(params.getRangeKeyName()) .withTableName(tableName) .withModeledClass(params.getModelClass()) .withAttributeValues(params.getAttributeValues()).build(); }
@Override public Map<String, AttributeValue> transform(final Parameters<?> parameters) { // one map of attributeFlags per model class final ModelClassMetadata metadata = getModelClassMetadata(parameters); final Map<String, AttributeValue> attributeValues = parameters.getAttributeValues(); // If this class is marked as "DoNotTouch" then we know our encryptor will not change it at all // so we may as well fast-return and do nothing. This also avoids emitting errors when they would not apply. if (metadata.doNotTouch) { return attributeValues; } // When AttributeEncryptor is used without SaveBehavior.PUT or CLOBBER, it is trying to transform only a subset // of the actual fields stored in DynamoDB. This means that the generated signature will not cover any // unmodified fields. Thus, upon untransform, the signature verification will fail as it won't cover all // expected fields. if (parameters.isPartialUpdate()) { throw new DynamoDBMappingException( "Use of AttributeEncryptor without SaveBehavior.PUT or SaveBehavior.CLOBBER is an error " + "and can result in data-corruption. This occured while trying to save " + parameters.getModelClass()); } try { return encryptor.encryptRecord( attributeValues, metadata.getEncryptionFlags(), paramsToContext(parameters)); } catch (Exception ex) { throw new DynamoDBMappingException(ex); } }
@Override public Map<String, AttributeValue> transform(final Parameters<?> parameters) { // one map of attributeFlags per model class final ModelClassMetadata metadata = getModelClassMetadata(parameters); final Map<String, AttributeValue> attributeValues = parameters.getAttributeValues(); // If this class is marked as "DoNotTouch" then we know our encryptor will not change it at all // so we may as well fast-return and do nothing. This also avoids emitting errors when they would not apply. if (metadata.doNotTouch) { return attributeValues; } // When AttributeEncryptor is used without SaveBehavior.PUT or CLOBBER, it is trying to transform only a subset // of the actual fields stored in DynamoDB. This means that the generated signature will not cover any // unmodified fields. Thus, upon untransform, the signature verification will fail as it won't cover all // expected fields. if (parameters.isPartialUpdate()) { throw new DynamoDBMappingException( "Use of AttributeEncryptor without SaveBehavior.PUT or SaveBehavior.CLOBBER is an error " + "and can result in data-corruption. This occured while trying to save " + parameters.getModelClass()); } try { return encryptor.encryptRecord( attributeValues, metadata.getEncryptionFlags(), paramsToContext(parameters)); } catch (Exception ex) { throw new DynamoDBMappingException(ex); } }
@Override public Class<T> getModelClass() { return delegate.getModelClass(); }
private static EncryptionContext paramsToContext(Parameters<?> params) { final Class<?> clazz = params.getModelClass(); final TableAadOverride override = clazz.getAnnotation(TableAadOverride.class); final String tableName = ((override == null) ? params.getTableName() : override.tableName()); return new EncryptionContext.Builder() .withHashKeyName(params.getHashKeyName()) .withRangeKeyName(params.getRangeKeyName()) .withTableName(tableName) .withModeledClass(params.getModelClass()) .withAttributeValues(params.getAttributeValues()).build(); }
/** * The one true implementation of marshallIntoObject. */ private <T> T privateMarshallIntoObject( AttributeTransformer.Parameters<T> parameters) { Class<T> clazz = parameters.getModelClass(); Map<String, AttributeValue> values = untransformAttributes(parameters); final DynamoDBMapperTableModel<T> model = getTableModel(clazz, parameters.getMapperConfig()); return model.unconvert(values); }
@Override public Class<T> getModelClass() { return delegate.getModelClass(); }
/** * The one true implementation of marshallIntoObject. */ private <T> T privateMarshallIntoObject( AttributeTransformer.Parameters<T> parameters) { Class<T> clazz = parameters.getModelClass(); Map<String, AttributeValue> values = untransformAttributes(parameters); final DynamoDBMapperTableModel<T> model = getTableModel(clazz, parameters.getMapperConfig()); return model.unconvert(values); }