You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2022/11/16 14:50:53 UTC

[cayenne] 06/06: CAY-2772 Bootique-style module "extenders" for smoother configuration - cleanup Crypto module

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 <st...@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;
     }
 
 }