This is an automated email from the ASF dual-hosted git repository. ntimofeev pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cayenne.git
commit 473e943e904b39bc87cf8a3e921242378f4257a2 Author: Nikita Timofeev <stari...@gmail.com> AuthorDate: Wed Nov 16 17:48:52 2022 +0300 CAY-2772 Bootique-style module "extenders" for smoother configuration - cleanup Crypto module --- .../org/apache/cayenne/crypto/CryptoModule.java | 6 ++--- .../cayenne/crypto/CryptoModuleExtender.java | 30 +++++++++++++++------- .../transformer/value/BytesToBytesConverter.java | 11 ++++---- .../cayenne/crypto/CryptoModuleExtenderTest.java | 10 +++++++- .../apache/cayenne/crypto/Runtime_AES128_Base.java | 4 +-- 5 files changed, 39 insertions(+), 22 deletions(-) diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModule.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModule.java index 97401891c..9f619393e 100644 --- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModule.java +++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModule.java @@ -103,12 +103,12 @@ public class CryptoModule implements Module { .keyStore((String) null, DEFAULT_KEY_PASSWORD, null) .keySource(JceksKeySource.class) - .valueTransformerFactory(DefaultValueTransformerFactory.class) - .bytesTransformerFactory(DefaultBytesTransformerFactory.class) + .valueTransformer(DefaultValueTransformerFactory.class) + .bytesTransformer(DefaultBytesTransformerFactory.class) .columnMapper(DEFAULT_COLUMN_MAPPER_PATTERN) - .objectToBytesConverter("byte[]", BytesToBytesConverter.INSTANCE) + .objectToBytesConverter(byte[].class, BytesToBytesConverter.INSTANCE) .objectToBytesConverter(String.class, Utf8StringConverter.INSTANCE) .objectToBytesConverter(Double.class, DoubleConverter.INSTANCE) diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModuleExtender.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModuleExtender.java index 0adfb9213..04f464fa4 100644 --- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModuleExtender.java +++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModuleExtender.java @@ -72,24 +72,18 @@ public class CryptoModuleExtender { return this; } - public CryptoModuleExtender valueTransformerFactory(Class<? extends ValueTransformerFactory> factoryType) { + public CryptoModuleExtender valueTransformer(Class<? extends ValueTransformerFactory> factoryType) { binder.bind(ValueTransformerFactory.class).to(factoryType); return this; } - public CryptoModuleExtender bytesTransformerFactory(Class<? extends BytesTransformerFactory> factoryType) { + public CryptoModuleExtender bytesTransformer(Class<? extends BytesTransformerFactory> factoryType) { binder.bind(BytesTransformerFactory.class).to(factoryType); return this; } public <T> CryptoModuleExtender objectToBytesConverter(Class<T> objectType, BytesConverter<T> converter) { - contributeObjectToByteConverters(binder).put(objectType.getName(), Objects.requireNonNull(converter)); - return this; - } - - // workaround for byte[] - CryptoModuleExtender objectToBytesConverter(String objectTypeName, BytesConverter<Object> converter) { - contributeObjectToByteConverters(binder).put(objectTypeName, Objects.requireNonNull(converter)); + contributeObjectToByteConverters(binder).put(typeName(objectType), Objects.requireNonNull(converter)); return this; } @@ -229,4 +223,22 @@ public class CryptoModuleExtender { } return objectToByteConverters; } + + /** + * Get a name of the provided Java type. + * Consistent with the logic of {@link org.apache.cayenne.di.AdhocObjectFactory#getJavaClass(String)} method + * @param objectType to get a name of + * @return a name of the type + * @param <T> the type of the class + */ + static <T> String typeName(Class<T> objectType) { + if(objectType.isArray()) { + if(objectType.getComponentType().isPrimitive()) { + return objectType.getComponentType().getSimpleName() + "[]"; + } else { + return objectType.getComponentType().getName() + "[]"; + } + } + return objectType.getName(); + } } diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/BytesToBytesConverter.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/BytesToBytesConverter.java index 302e613f0..78aa07100 100644 --- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/BytesToBytesConverter.java +++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/BytesToBytesConverter.java @@ -21,18 +21,17 @@ package org.apache.cayenne.crypto.transformer.value; /** * @since 4.0 */ -// we can't use <byte[]> , so parameterizing this converter to Object -public class BytesToBytesConverter implements BytesConverter<Object> { +public class BytesToBytesConverter implements BytesConverter<byte[]> { - public static final BytesConverter<Object> INSTANCE = new BytesToBytesConverter(); + public static final BytesConverter<byte[]> INSTANCE = new BytesToBytesConverter(); @Override - public byte[] toBytes(Object value) { - return (byte[]) value; + public byte[] toBytes(byte[] value) { + return value; } @Override - public Object fromBytes(byte[] bytes) { + public byte[] fromBytes(byte[] bytes) { return bytes; } diff --git a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/CryptoModuleExtenderTest.java b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/CryptoModuleExtenderTest.java index 20e03a900..b44d91f95 100644 --- a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/CryptoModuleExtenderTest.java +++ b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/CryptoModuleExtenderTest.java @@ -38,7 +38,7 @@ public class CryptoModuleExtenderTest { public void testBuild_KeySource() { URL ksUrl = JceksKeySourceTest.class.getResource(JceksKeySourceTest.KS1_JCEKS); Module m = b -> new CryptoModuleExtender(b).keyStore(ksUrl, JceksKeySourceTest.TEST_KEY_PASS, "k1") - .valueTransformerFactory(DefaultValueTransformerFactory.class); + .valueTransformer(DefaultValueTransformerFactory.class); Injector injector = DIBootstrap.createInjector(new CryptoModule(), m); @@ -52,4 +52,12 @@ public class CryptoModuleExtenderTest { assertEquals("k1", dkName); } + @Test + public void testTypeName() { + assertEquals("java.lang.String", CryptoModuleExtender.typeName(String.class)); + assertEquals("byte", CryptoModuleExtender.typeName(Byte.TYPE)); + assertEquals("java.lang.Byte", CryptoModuleExtender.typeName(Byte.class)); + assertEquals("int[]", CryptoModuleExtender.typeName(int[].class)); + assertEquals("java.lang.String[]", CryptoModuleExtender.typeName(String[].class)); + } } diff --git a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/Runtime_AES128_Base.java b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/Runtime_AES128_Base.java index 43c6873a3..8164cc41e 100644 --- a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/Runtime_AES128_Base.java +++ b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/Runtime_AES128_Base.java @@ -66,7 +66,7 @@ public class Runtime_AES128_Base { protected Module createCryptoModule(boolean compress, boolean useHMAC) { URL keyStoreUrl = JceksKeySourceTest.class.getResource(JceksKeySourceTest.KS1_JCEKS); - Module module = b -> { + return b -> { CryptoModuleExtender moduleExtender = CryptoModule.extend(b) .keyStore(keyStoreUrl, JceksKeySourceTest.TEST_KEY_PASS, "k3"); if (compress) { @@ -76,8 +76,6 @@ public class Runtime_AES128_Base { moduleExtender.useHMAC(); } }; - - return module; } }