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:47 UTC

[cayenne] branch master updated (524a43f3e -> 473e943e9)

This is an automated email from the ASF dual-hosted git repository.

ntimofeev pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git


    from 524a43f3e CAY-2776 Upgrade Gradle to 7.6
     new 11a54e949 fix typo
     new 11ea4681a update CryptoModuleExtender
     new e6b17d789 refactor list/map builders providers
     new dede9d921 fix: add skipped primitives converters
     new bd1b7bf00 Merge remote-tracking branch 'parent/pr/537' into asf-master
     new 473e943e9 CAY-2772 Bootique-style module "extenders" for smoother configuration  - cleanup Crypto module

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../CacheInvalidationModuleExtender.java           |   5 +-
 .../cayenne/commitlog/CommitLogModuleExtender.java |   5 +-
 .../org/apache/cayenne/crypto/CryptoModule.java    | 183 ++++++---------
 .../cayenne/crypto/CryptoModuleExtender.java       | 261 +++++++--------------
 .../transformer/value/BytesToBytesConverter.java   |  11 +-
 ...lderTest.java => CryptoModuleExtenderTest.java} |  15 +-
 .../apache/cayenne/crypto/Runtime_AES128_Base.java |  22 +-
 .../cayenne/project/ProjectModuleExtender.java     |  10 +-
 .../configuration/server/ServerModuleExtender.java |  59 ++++-
 9 files changed, 250 insertions(+), 321 deletions(-)
 rename cayenne-crypto/src/test/java/org/apache/cayenne/crypto/{CryptoModuleBuilderTest.java => CryptoModuleExtenderTest.java} (76%)


[cayenne] 03/06: refactor list/map builders providers

Posted by nt...@apache.org.
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 e6b17d78951dbb404734cbe2038b5a9c89fafcfe
Author: Mikhail Dzianishchyts <mi...@gmail.com>
AuthorDate: Wed Nov 16 13:16:18 2022 +0300

    refactor list/map builders providers
---
 .../CacheInvalidationModuleExtender.java           |  5 +-
 .../cayenne/commitlog/CommitLogModuleExtender.java |  5 +-
 .../cayenne/project/ProjectModuleExtender.java     | 10 +++-
 .../configuration/server/ServerModuleExtender.java | 59 ++++++++++++++++++----
 4 files changed, 64 insertions(+), 15 deletions(-)

diff --git a/cayenne-cache-invalidation/src/main/java/org/apache/cayenne/cache/invalidation/CacheInvalidationModuleExtender.java b/cayenne-cache-invalidation/src/main/java/org/apache/cayenne/cache/invalidation/CacheInvalidationModuleExtender.java
index 606b0e6a6..72f303e0d 100644
--- a/cayenne-cache-invalidation/src/main/java/org/apache/cayenne/cache/invalidation/CacheInvalidationModuleExtender.java
+++ b/cayenne-cache-invalidation/src/main/java/org/apache/cayenne/cache/invalidation/CacheInvalidationModuleExtender.java
@@ -71,7 +71,10 @@ public class CacheInvalidationModuleExtender {
     }
 
     private ListBuilder<InvalidationHandler> contributeInvalidationHandlers() {
-        return invalidationHandlers != null ? invalidationHandlers : (invalidationHandlers = binder.bindList(InvalidationHandler.class));
+        if (invalidationHandlers == null) {
+            invalidationHandlers = binder.bindList(InvalidationHandler.class);
+        }
+        return invalidationHandlers;
     }
 
 }
diff --git a/cayenne-commitlog/src/main/java/org/apache/cayenne/commitlog/CommitLogModuleExtender.java b/cayenne-commitlog/src/main/java/org/apache/cayenne/commitlog/CommitLogModuleExtender.java
index a75aee0f4..74f0d4102 100644
--- a/cayenne-commitlog/src/main/java/org/apache/cayenne/commitlog/CommitLogModuleExtender.java
+++ b/cayenne-commitlog/src/main/java/org/apache/cayenne/commitlog/CommitLogModuleExtender.java
@@ -95,6 +95,9 @@ public class CommitLogModuleExtender {
     }
 
     private ListBuilder<CommitLogListener> contributeCommitLogListeners() {
-        return commitLogListeners != null ? commitLogListeners : (commitLogListeners = binder.bindList(CommitLogListener.class));
+        if (commitLogListeners == null) {
+            commitLogListeners = binder.bindList(CommitLogListener.class);
+        }
+        return commitLogListeners;
     }
 }
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/ProjectModuleExtender.java b/cayenne-project/src/main/java/org/apache/cayenne/project/ProjectModuleExtender.java
index 758d8f7bd..de9c3aca8 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/ProjectModuleExtender.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/ProjectModuleExtender.java
@@ -46,10 +46,16 @@ public class ProjectModuleExtender {
     }
 
     private ListBuilder<ProjectExtension> contributeExtensions() {
-        return extensions != null ? extensions : (extensions = binder.bindList(ProjectExtension.class));
+        if (extensions == null) {
+            extensions = binder.bindList(ProjectExtension.class);
+        }
+        return extensions;
     }
 
     private ListBuilder<UpgradeHandler> contributeUpgradeHandler() {
-        return upgradeHandlers != null ? upgradeHandlers : (upgradeHandlers = binder.bindList(UpgradeHandler.class));
+        if (upgradeHandlers == null) {
+            upgradeHandlers = binder.bindList(UpgradeHandler.class);
+        }
+        return upgradeHandlers;
     }
 }
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModuleExtender.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModuleExtender.java
index dd3269a89..540edc6d1 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModuleExtender.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/ServerModuleExtender.java
@@ -292,46 +292,83 @@ public class ServerModuleExtender {
     }
 
     private ListBuilder<String> contributeProjectLocations() {
-        return projectLocations != null ? projectLocations : (projectLocations = binder.bindList(String.class, Constants.SERVER_PROJECT_LOCATIONS_LIST));
+        if (projectLocations == null) {
+            projectLocations = binder.bindList(String.class, Constants.SERVER_PROJECT_LOCATIONS_LIST);
+        }
+        return projectLocations;
     }
 
     private MapBuilder<String> contributeProperties() {
-        return properties != null ? properties : (properties = binder.bindMap(String.class, Constants.PROPERTIES_MAP));
+        if (properties == null) {
+            properties = binder.bindMap(String.class, Constants.PROPERTIES_MAP);
+        }
+        return properties;
     }
 
     private ListBuilder<DataChannelQueryFilter> contributeQueryFilters() {
-        return queryFilters != null ? queryFilters : (queryFilters = binder.bindList(DataChannelQueryFilter.class));
+        if (queryFilters == null) {
+            queryFilters = binder.bindList(DataChannelQueryFilter.class);
+        }
+        return queryFilters;
     }
 
     private ListBuilder<DataChannelSyncFilter> contributeSyncFilters() {
-        return syncFilters != null ? syncFilters : (syncFilters = binder.bindList(DataChannelSyncFilter.class));
+        if (syncFilters == null) {
+            syncFilters = binder.bindList(DataChannelSyncFilter.class);
+        }
+        return syncFilters;
     }
 
     private ListBuilder<Object> contributeListeners() {
-        return listeners != null ? listeners : (listeners = binder.bindList(Object.class, Constants.SERVER_DOMAIN_LISTENERS_LIST));
+        if (listeners == null) {
+            listeners = binder.bindList(Object.class, Constants.SERVER_DOMAIN_LISTENERS_LIST);
+        }
+        return listeners;
     }
 
     private ListBuilder<DbAdapterDetector> contributeAdapterDetectors() {
-        return adapterDetectors != null ? adapterDetectors : (adapterDetectors = binder.bindList(DbAdapterDetector.class, Constants.SERVER_ADAPTER_DETECTORS_LIST));
+        if (adapterDetectors == null) {
+            adapterDetectors = binder.bindList(DbAdapterDetector.class,
+                                               Constants.SERVER_ADAPTER_DETECTORS_LIST);
+        }
+        return adapterDetectors;
     }
 
     private ListBuilder<ExtendedType> contributeDefaultExtendedTypes() {
-        return defaultExtendedTypes != null ? defaultExtendedTypes : (defaultExtendedTypes = binder.bindList(ExtendedType.class, Constants.SERVER_DEFAULT_TYPES_LIST));
+        if (defaultExtendedTypes == null) {
+            defaultExtendedTypes = binder.bindList(ExtendedType.class,
+                                                   Constants.SERVER_DEFAULT_TYPES_LIST);
+        }
+        return defaultExtendedTypes;
     }
 
     private ListBuilder<ExtendedType> contributeUserExtendedTypes() {
-        return userExtendedTypes != null ? userExtendedTypes : (userExtendedTypes = binder.bindList(ExtendedType.class, Constants.SERVER_USER_TYPES_LIST));
+        if (userExtendedTypes == null) {
+            userExtendedTypes = binder.bindList(ExtendedType.class,
+                                                Constants.SERVER_USER_TYPES_LIST);
+        }
+        return userExtendedTypes;
     }
 
     private ListBuilder<ExtendedTypeFactory> contributeExtendedTypeFactories() {
-        return extendedTypeFactories != null ? extendedTypeFactories : (extendedTypeFactories = binder.bindList(ExtendedTypeFactory.class, Constants.SERVER_TYPE_FACTORIES_LIST));
+        if (extendedTypeFactories == null) {
+            extendedTypeFactories = binder.bindList(ExtendedTypeFactory.class,
+                                                    Constants.SERVER_TYPE_FACTORIES_LIST);
+        }
+        return extendedTypeFactories;
     }
 
     private ListBuilder<ValueObjectType> contributeValueObjectTypes() {
-        return valueObjectTypes != null ? valueObjectTypes : (valueObjectTypes = binder.bindList(ValueObjectType.class));
+        if (valueObjectTypes == null) {
+            valueObjectTypes = binder.bindList(ValueObjectType.class);
+        }
+        return valueObjectTypes;
     }
 
     private MapBuilder<PkGenerator> contributePkGenerators() {
-        return pkGenerators != null ? pkGenerators : (pkGenerators = binder.bindMap(PkGenerator.class));
+        if (pkGenerators == null) {
+            pkGenerators = binder.bindMap(PkGenerator.class);
+        }
+        return pkGenerators;
     }
 }


[cayenne] 02/06: update CryptoModuleExtender

Posted by nt...@apache.org.
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 11ea4681a14c743ce9294aa4bb78575cf472e1f4
Author: Mikhail Dzianishchyts <mi...@gmail.com>
AuthorDate: Wed Nov 16 12:31:09 2022 +0300

    update CryptoModuleExtender
---
 .../org/apache/cayenne/crypto/CryptoModule.java    | 176 +++++---------
 .../cayenne/crypto/CryptoModuleExtender.java       | 253 +++++++--------------
 ...lderTest.java => CryptoModuleExtenderTest.java} |   7 +-
 .../apache/cayenne/crypto/Runtime_AES128_Base.java |  24 +-
 4 files changed, 158 insertions(+), 302 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 631b7b74e..d4e8de7a5 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
@@ -18,27 +18,13 @@
  */
 package org.apache.cayenne.crypto;
 
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.sql.Types;
-import java.time.Duration;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.Period;
-import java.util.Date;
-
 import org.apache.cayenne.access.jdbc.reader.RowReaderFactory;
 import org.apache.cayenne.access.translator.batch.BatchTranslatorFactory;
 import org.apache.cayenne.configuration.DataMapLoader;
 import org.apache.cayenne.crypto.batch.CryptoBatchTranslatorFactoryDecorator;
-import org.apache.cayenne.crypto.cipher.CipherFactory;
 import org.apache.cayenne.crypto.cipher.DefaultCipherFactory;
 import org.apache.cayenne.crypto.key.JceksKeySource;
-import org.apache.cayenne.crypto.key.KeySource;
-import org.apache.cayenne.crypto.map.ColumnMapper;
 import org.apache.cayenne.crypto.map.CryptoDataMapLoader;
-import org.apache.cayenne.crypto.map.PatternColumnMapper;
 import org.apache.cayenne.crypto.reader.CryptoRowReaderFactoryDecorator;
 import org.apache.cayenne.crypto.transformer.DefaultTransformerFactory;
 import org.apache.cayenne.crypto.transformer.TransformerFactory;
@@ -50,7 +36,6 @@ import org.apache.cayenne.crypto.transformer.value.BigDecimalConverter;
 import org.apache.cayenne.crypto.transformer.value.BigIntegerConverter;
 import org.apache.cayenne.crypto.transformer.value.BooleanConverter;
 import org.apache.cayenne.crypto.transformer.value.ByteConverter;
-import org.apache.cayenne.crypto.transformer.value.BytesConverter;
 import org.apache.cayenne.crypto.transformer.value.BytesToBytesConverter;
 import org.apache.cayenne.crypto.transformer.value.DefaultValueTransformerFactory;
 import org.apache.cayenne.crypto.transformer.value.DoubleConverter;
@@ -68,9 +53,18 @@ import org.apache.cayenne.crypto.transformer.value.Utf8StringConverter;
 import org.apache.cayenne.crypto.transformer.value.UtilDateConverter;
 import org.apache.cayenne.crypto.transformer.value.ValueTransformerFactory;
 import org.apache.cayenne.di.Binder;
-import org.apache.cayenne.di.MapBuilder;
 import org.apache.cayenne.di.Module;
 
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.sql.Types;
+import java.time.Duration;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.Period;
+import java.util.Date;
+
 /**
  * Contains cryptography extensions for Cayenne.
  *
@@ -82,65 +76,75 @@ public class CryptoModule implements Module {
     private static final String DEFAULT_CIPHER_MODE = "CBC";
     private static final String DEFAULT_CIPHER_PADDING = "PKCS5Padding";
     // same as default keystore password in java...
+    // credentials are stored as char[] to potentially allow wiping them clean in memory...
     private static final char[] DEFAULT_KEY_PASSWORD = "changeit".toCharArray();
     private static final String DEFAULT_COLUMN_MAPPER_PATTERN = "^CRYPTO_";
 
     /**
-     * Returns a new extender that helps to build a custom module that provides required configuration for {@link CryptoModule}
+     * Returns a new extender that helps to build a custom module that provides required configuration for
+     * {@link CryptoModule}
      * as well as custom strategies overriding the defaults defined here.
      *
      * @return a new extender that helps to build a custom module that provides required configuration for {@link CryptoModule}.
+     * @since 5.0
      */
-    public static CryptoModuleExtender extend() {
-        return new CryptoModuleExtender();
-    }
-
-    static MapBuilder<String> contributeProperties(Binder binder) {
-        return binder.bindMap(String.class, CryptoConstants.PROPERTIES_MAP);
-    }
-
-    static MapBuilder<char[]> contributeCredentials(Binder binder) {
-        return binder.bindMap(char[].class, CryptoConstants.CREDENTIALS_MAP);
-    }
-
-    @SuppressWarnings("unchecked")
-    static MapBuilder<BytesConverter<?>> contributeDbToByteConverters(Binder binder) {
-        MapBuilder mapBuilder = binder.bindMap(BytesConverter.class, DefaultValueTransformerFactory.DB_TO_BYTE_CONVERTERS_KEY);
-        return (MapBuilder<BytesConverter<?>>) mapBuilder;
-    }
-
-    @SuppressWarnings("unchecked")
-    static MapBuilder<BytesConverter<?>> contributeObjectToByteConverters(Binder binder) {
-        MapBuilder mapBuilder = binder.bindMap(BytesConverter.class, DefaultValueTransformerFactory.OBJECT_TO_BYTE_CONVERTERS_KEY);
-        return (MapBuilder<BytesConverter<?>>) mapBuilder;
+    public static CryptoModuleExtender extend(Binder binder) {
+        return new CryptoModuleExtender(binder);
     }
 
     @Override
     public void configure(Binder binder) {
+        extend(binder)
+                .cipherAlgorithm(DEFAULT_CIPHER_ALGORITHM)
+                .cipherMode(DEFAULT_CIPHER_MODE)
+                .cipherPadding(DEFAULT_CIPHER_PADDING)
+                .cipherFactory(DefaultCipherFactory.class)
+
+                .keyStore((String) null, DEFAULT_KEY_PASSWORD, null)
+                .keySource(JceksKeySource.class)
+
+                .valueTransformerFactory(DefaultValueTransformerFactory.class)
+                .bytesTransformerFactory(DefaultBytesTransformerFactory.class)
+
+                .columnMapper(DEFAULT_COLUMN_MAPPER_PATTERN)
+
+                .objectToBytesConverter("byte[]", BytesToBytesConverter.INSTANCE)
+                .objectToBytesConverter(String.class, Utf8StringConverter.INSTANCE)
+
+                .objectToBytesConverter(Double.class, DoubleConverter.INSTANCE)
+                .objectToBytesConverter(Float.class, FloatConverter.INSTANCE)
+                .objectToBytesConverter(Long.class, LongConverter.INSTANCE)
+                .objectToBytesConverter(Integer.class, IntegerConverter.INSTANCE)
+                .objectToBytesConverter(Short.class, ShortConverter.INSTANCE)
+                .objectToBytesConverter(Byte.class, ByteConverter.INSTANCE)
+                .objectToBytesConverter(Boolean.class, BooleanConverter.INSTANCE)
+
+                .objectToBytesConverter(BigInteger.class, BigIntegerConverter.INSTANCE)
+                .objectToBytesConverter(BigDecimal.class, BigDecimalConverter.INSTANCE)
+                .objectToBytesConverter(Date.class, UtilDateConverter.INSTANCE)
+                .objectToBytesConverter(LocalDate.class, LocalDateConverter.INSTANCE)
+                .objectToBytesConverter(LocalTime.class, LocalTimeConverter.INSTANCE)
+                .objectToBytesConverter(LocalDateTime.class, LocalDateTimeConverter.INSTANCE)
+                .objectToBytesConverter(Duration.class, DurationConverter.INSTANCE)
+                .objectToBytesConverter(Period.class, PeriodConverter.INSTANCE)
+
+                .dbToBytesConverter(Types.BINARY, BytesToBytesConverter.INSTANCE)
+                .dbToBytesConverter(Types.BLOB, BytesToBytesConverter.INSTANCE)
+                .dbToBytesConverter(Types.VARBINARY, BytesToBytesConverter.INSTANCE)
+                .dbToBytesConverter(Types.LONGVARBINARY, BytesToBytesConverter.INSTANCE)
+
+                .dbToBytesConverter(Types.CHAR, Base64StringConverter.INSTANCE)
+                .dbToBytesConverter(Types.NCHAR, Base64StringConverter.INSTANCE)
+                .dbToBytesConverter(Types.CLOB, Base64StringConverter.INSTANCE)
+                .dbToBytesConverter(Types.NCLOB, Base64StringConverter.INSTANCE)
+                .dbToBytesConverter(Types.LONGVARCHAR, Base64StringConverter.INSTANCE)
+                .dbToBytesConverter(Types.LONGNVARCHAR, Base64StringConverter.INSTANCE)
+                .dbToBytesConverter(Types.VARCHAR, Base64StringConverter.INSTANCE)
+                .dbToBytesConverter(Types.NVARCHAR, Base64StringConverter.INSTANCE);
 
-        contributeProperties(binder)
-                .put(CryptoConstants.CIPHER_ALGORITHM, DEFAULT_CIPHER_ALGORITHM)
-                .put(CryptoConstants.CIPHER_MODE, DEFAULT_CIPHER_MODE)
-                .put(CryptoConstants.CIPHER_PADDING, DEFAULT_CIPHER_PADDING);
-
-        // credentials are stored as char[] to potentially allow wiping them clean in memory...
-        contributeCredentials(binder).put(CryptoConstants.KEY_PASSWORD, DEFAULT_KEY_PASSWORD);
-
-        binder.bind(CipherFactory.class).to(DefaultCipherFactory.class);
         binder.bind(TransformerFactory.class).to(DefaultTransformerFactory.class);
-        binder.bind(ValueTransformerFactory.class).to(DefaultValueTransformerFactory.class);
-
-        MapBuilder<BytesConverter<?>> dbToBytesBinder = contributeDbToByteConverters(binder);
-        contributeDefaultDbConverters(dbToBytesBinder);
-
-        MapBuilder<BytesConverter<?>> objectToBytesBinder = contributeObjectToByteConverters(binder);
-        contributeDefaultObjectConverters(objectToBytesBinder);
 
-        binder.bind(BytesTransformerFactory.class).to(DefaultBytesTransformerFactory.class);
-        binder.bind(KeySource.class).to(JceksKeySource.class);
-        binder.bind(ColumnMapper.class).toInstance(new PatternColumnMapper(DEFAULT_COLUMN_MAPPER_PATTERN));
         binder.decorate(DataMapLoader.class).before(CryptoDataMapLoader.class);
-        
         binder.decorate(BatchTranslatorFactory.class).before(CryptoBatchTranslatorFactoryDecorator.class);
         binder.bind(RowReaderFactory.class).to(CryptoRowReaderFactoryDecorator.class);
 
@@ -149,58 +153,4 @@ public class CryptoModule implements Module {
         binder.decorate(ValueTransformerFactory.class).after(LazyValueTransformerFactory.class);
         binder.decorate(BytesTransformerFactory.class).after(LazyBytesTransformerFactory.class);
     }
-
-    private static void contributeDefaultDbConverters(MapBuilder<BytesConverter<?>> mapBuilder) {
-
-        mapBuilder.put(String.valueOf(Types.BINARY), BytesToBytesConverter.INSTANCE);
-        mapBuilder.put(String.valueOf(Types.BLOB), BytesToBytesConverter.INSTANCE);
-        mapBuilder.put(String.valueOf(Types.VARBINARY), BytesToBytesConverter.INSTANCE);
-        mapBuilder.put(String.valueOf(Types.LONGVARBINARY), BytesToBytesConverter.INSTANCE);
-
-        mapBuilder.put(String.valueOf(Types.CHAR), Base64StringConverter.INSTANCE);
-        mapBuilder.put(String.valueOf(Types.NCHAR), Base64StringConverter.INSTANCE);
-        mapBuilder.put(String.valueOf(Types.CLOB), Base64StringConverter.INSTANCE);
-        mapBuilder.put(String.valueOf(Types.NCLOB), Base64StringConverter.INSTANCE);
-        mapBuilder.put(String.valueOf(Types.LONGVARCHAR), Base64StringConverter.INSTANCE);
-        mapBuilder.put(String.valueOf(Types.LONGNVARCHAR), Base64StringConverter.INSTANCE);
-        mapBuilder.put(String.valueOf(Types.VARCHAR), Base64StringConverter.INSTANCE);
-        mapBuilder.put(String.valueOf(Types.NVARCHAR), Base64StringConverter.INSTANCE);
-    }
-
-    private static void contributeDefaultObjectConverters(MapBuilder<BytesConverter<?>> mapBuilder) {
-
-        mapBuilder.put("byte[]", BytesToBytesConverter.INSTANCE);
-        mapBuilder.put(String.class.getName(), Utf8StringConverter.INSTANCE);
-
-        mapBuilder.put(Double.class.getName(), DoubleConverter.INSTANCE);
-        mapBuilder.put(Double.TYPE.getName(), DoubleConverter.INSTANCE);
-
-        mapBuilder.put(Float.class.getName(), FloatConverter.INSTANCE);
-        mapBuilder.put(Float.TYPE.getName(), FloatConverter.INSTANCE);
-
-        mapBuilder.put(Long.class.getName(), LongConverter.INSTANCE);
-        mapBuilder.put(Long.TYPE.getName(), LongConverter.INSTANCE);
-
-        mapBuilder.put(Integer.class.getName(), IntegerConverter.INSTANCE);
-        mapBuilder.put(Integer.TYPE.getName(), IntegerConverter.INSTANCE);
-
-        mapBuilder.put(Short.class.getName(), ShortConverter.INSTANCE);
-        mapBuilder.put(Short.TYPE.getName(), ShortConverter.INSTANCE);
-
-        mapBuilder.put(Byte.class.getName(), ByteConverter.INSTANCE);
-        mapBuilder.put(Byte.TYPE.getName(), ByteConverter.INSTANCE);
-
-        mapBuilder.put(Boolean.class.getName(), BooleanConverter.INSTANCE);
-        mapBuilder.put(Boolean.TYPE.getName(), BooleanConverter.INSTANCE);
-
-        mapBuilder.put(Date.class.getName(), UtilDateConverter.INSTANCE);
-        mapBuilder.put(BigInteger.class.getName(), BigIntegerConverter.INSTANCE);
-        mapBuilder.put(BigDecimal.class.getName(), BigDecimalConverter.INSTANCE);
-
-        mapBuilder.put(LocalDate.class.getName(), LocalDateConverter.INSTANCE);
-        mapBuilder.put(LocalTime.class.getName(), LocalTimeConverter.INSTANCE);
-        mapBuilder.put(LocalDateTime.class.getName(), LocalDateTimeConverter.INSTANCE);
-        mapBuilder.put(Duration.class.getName(), DurationConverter.INSTANCE);
-        mapBuilder.put(Period.class.getName(), PeriodConverter.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 b3720e680..0adfb9213 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
@@ -24,15 +24,14 @@ import org.apache.cayenne.crypto.map.ColumnMapper;
 import org.apache.cayenne.crypto.map.PatternColumnMapper;
 import org.apache.cayenne.crypto.transformer.bytes.BytesTransformerFactory;
 import org.apache.cayenne.crypto.transformer.value.BytesConverter;
+import org.apache.cayenne.crypto.transformer.value.DefaultValueTransformerFactory;
 import org.apache.cayenne.crypto.transformer.value.ValueTransformerFactory;
+import org.apache.cayenne.di.Binder;
 import org.apache.cayenne.di.MapBuilder;
-import org.apache.cayenne.di.Module;
 
 import java.io.File;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.Objects;
 
 /**
@@ -42,91 +41,75 @@ import java.util.Objects;
  */
 public class CryptoModuleExtender {
 
-    private Class<? extends ValueTransformerFactory> valueTransformerFactoryType;
-    private Class<? extends BytesTransformerFactory> bytesTransformerFactoryType;
+    private final Binder binder;
 
-    private Map<String, BytesConverter<?>> extraObjectToBytes;
-    private Map<Integer, BytesConverter<?>> extraDbToBytes;
+    private MapBuilder<String> properties;
+    private MapBuilder<char[]> credentials;
+    private MapBuilder<BytesConverter<?>> dbToByteConverters;
+    private MapBuilder<BytesConverter<?>> objectToByteConverters;
 
-    private String columnMapperPattern;
-    private ColumnMapper columnMapper;
-    private Class<? extends ColumnMapper> columnMapperType;
-
-    private String cipherAlgorithm;
-    private String cipherMode;
-    private Class<? extends CipherFactory> cipherFactoryType;
-
-    private URL keyStoreUrl;
-    private String keyStoreUrlString;
-    private File keyStoreFile;
-    private Class<? extends KeySource> keySourceType;
-    private KeySource keySource;
-
-    private String encryptionKeyAlias;
-    private char[] keyPassword;
-
-    private boolean compress;
-    private boolean useHMAC;
-
-    // use CryptoModule.builder() to create the builder...
-    protected CryptoModuleExtender() {
-        this.extraDbToBytes = new HashMap<>();
-        this.extraObjectToBytes = new HashMap<>();
+    protected CryptoModuleExtender(Binder binder) {
+        this.binder = binder;
     }
 
     public CryptoModuleExtender cipherAlgorithm(String algorithm) {
-        this.cipherAlgorithm = Objects.requireNonNull(algorithm);
+        contributeProperties(binder).put(CryptoConstants.CIPHER_ALGORITHM, algorithm);
         return this;
     }
 
     public CryptoModuleExtender cipherMode(String mode) {
-        this.cipherMode = Objects.requireNonNull(mode);
+        contributeProperties(binder).put(CryptoConstants.CIPHER_MODE, mode);
+        return this;
+    }
+
+    public CryptoModuleExtender cipherPadding(String padding) {
+        contributeProperties(binder).put(CryptoConstants.CIPHER_PADDING, padding);
         return this;
     }
 
     public CryptoModuleExtender cipherFactory(Class<? extends CipherFactory> factoryType) {
-        this.cipherFactoryType = Objects.requireNonNull(factoryType);
+        binder.bind(CipherFactory.class).to(factoryType);
+        return this;
+    }
+
+    public CryptoModuleExtender valueTransformerFactory(Class<? extends ValueTransformerFactory> factoryType) {
+        binder.bind(ValueTransformerFactory.class).to(factoryType);
         return this;
     }
 
-    public CryptoModuleExtender valueTransformer(Class<? extends ValueTransformerFactory> factoryType) {
-        this.valueTransformerFactoryType = Objects.requireNonNull(factoryType);
+    public CryptoModuleExtender bytesTransformerFactory(Class<? extends BytesTransformerFactory> factoryType) {
+        binder.bind(BytesTransformerFactory.class).to(factoryType);
         return this;
     }
 
     public <T> CryptoModuleExtender objectToBytesConverter(Class<T> objectType, BytesConverter<T> converter) {
-        extraObjectToBytes.put(objectType.getName(), Objects.requireNonNull(converter));
+        contributeObjectToByteConverters(binder).put(objectType.getName(), Objects.requireNonNull(converter));
         return this;
     }
 
-    public CryptoModuleExtender dbToBytesConverter(int sqlType, BytesConverter<?> converter) {
-        extraDbToBytes.put(sqlType, Objects.requireNonNull(converter));
+    // workaround for byte[]
+    CryptoModuleExtender objectToBytesConverter(String objectTypeName, BytesConverter<Object> converter) {
+        contributeObjectToByteConverters(binder).put(objectTypeName, Objects.requireNonNull(converter));
         return this;
     }
 
-    public CryptoModuleExtender bytesTransformer(Class<? extends BytesTransformerFactory> factoryType) {
-        this.bytesTransformerFactoryType = Objects.requireNonNull(factoryType);
+    public CryptoModuleExtender dbToBytesConverter(int sqlType, BytesConverter<?> converter) {
+        contributeDbToByteConverters(binder).put(String.valueOf(sqlType), Objects.requireNonNull(converter));
         return this;
     }
 
     public CryptoModuleExtender columnMapper(Class<? extends ColumnMapper> columnMapperType) {
-        this.columnMapperPattern = null;
-        this.columnMapperType = Objects.requireNonNull(columnMapperType);
-        this.columnMapper = null;
+        binder.bind(ColumnMapper.class).to(columnMapperType);
         return this;
     }
 
     public CryptoModuleExtender columnMapper(ColumnMapper columnMapper) {
-        this.columnMapperPattern = null;
-        this.columnMapperType = null;
-        this.columnMapper = Objects.requireNonNull(columnMapper);
+        binder.bind(ColumnMapper.class).toInstance(columnMapper);
         return this;
     }
 
     public CryptoModuleExtender columnMapper(String pattern) {
-        this.columnMapperPattern = Objects.requireNonNull(pattern);
-        this.columnMapperType = null;
-        this.columnMapper = null;
+        binder.bind(ColumnMapper.class).toInstance(new PatternColumnMapper(pattern));
         return this;
     }
 
@@ -135,13 +118,13 @@ public class CryptoModuleExtender {
      *                           encryption by default.
      */
     public CryptoModuleExtender encryptionKeyAlias(String encryptionKeyAlias) {
-        this.encryptionKeyAlias = Objects.requireNonNull(encryptionKeyAlias);
+        contributeProperties(binder).put(CryptoConstants.ENCRYPTION_KEY_ALIAS, encryptionKeyAlias);
         return this;
     }
 
     /**
      * Configures keystore parameters. The KeyStore must be of "jceks" type and
-     * contain all needed secret keys for the target database. Currently all
+     * contain all needed secret keys for the target database. Currently, all
      * keys must be protected with the same password.
      *
      * @param file               A file to load keystore from.
@@ -150,17 +133,17 @@ public class CryptoModuleExtender {
      *                           encryption by default.
      */
     public CryptoModuleExtender keyStore(File file, char[] passwordForAllKeys, String encryptionKeyAlias) {
-        this.encryptionKeyAlias = encryptionKeyAlias;
-        this.keyPassword = passwordForAllKeys;
-        this.keyStoreUrl = null;
-        this.keyStoreUrlString = null;
-        this.keyStoreFile = Objects.requireNonNull(file);
-        return this;
+        try {
+            String fileUrl = file.toURI().toURL().toExternalForm();
+            return keyStore(fileUrl, passwordForAllKeys, encryptionKeyAlias);
+        } catch (MalformedURLException e) {
+            throw new IllegalArgumentException("Invalid keyStore file", e);
+        }
     }
 
     /**
      * Configures keystore parameters. The KeyStore must be of "jceks" type and
-     * contain all needed secret keys for the target database. Currently all
+     * contain all needed secret keys for the target database. Currently, all
      * keys must be protected with the same password.
      *
      * @param url                A URL to load keystore from.
@@ -168,18 +151,13 @@ public class CryptoModuleExtender {
      * @param encryptionKeyAlias The name of the key in the keystore that should be used for
      *                           encryption by default.
      */
-    public CryptoModuleExtender keyStore(String url, char[] passwordForAllKeys, String encryptionKeyAlias) {
-        this.encryptionKeyAlias = encryptionKeyAlias;
-        this.keyPassword = passwordForAllKeys;
-        this.keyStoreUrl = null;
-        this.keyStoreUrlString = Objects.requireNonNull(url);
-        this.keyStoreFile = null;
-        return this;
+    public CryptoModuleExtender keyStore(URL url, char[] passwordForAllKeys, String encryptionKeyAlias) {
+        return keyStore(url.toExternalForm(), passwordForAllKeys, encryptionKeyAlias);
     }
 
     /**
      * Configures keystore parameters. The KeyStore must be of "jceks" type and
-     * contain all needed secret keys for the target database. Currently all
+     * contain all needed secret keys for the target database. Currently, all
      * keys must be protected with the same password.
      *
      * @param url                A URL to load keystore from.
@@ -187,29 +165,26 @@ public class CryptoModuleExtender {
      * @param encryptionKeyAlias The name of the key in the keystore that should be used for
      *                           encryption by default.
      */
-    public CryptoModuleExtender keyStore(URL url, char[] passwordForAllKeys, String encryptionKeyAlias) {
-        this.encryptionKeyAlias = encryptionKeyAlias;
-        this.keyPassword = passwordForAllKeys;
-        this.keyStoreUrl = Objects.requireNonNull(url);
-        this.keyStoreUrlString = null;
-        this.keyStoreFile = null;
+    public CryptoModuleExtender keyStore(String url, char[] passwordForAllKeys, String encryptionKeyAlias) {
+        MapBuilder<String> propertiesBuilder = contributeProperties(binder);
+        propertiesBuilder.put(CryptoConstants.KEYSTORE_URL, url);
+        propertiesBuilder.put(CryptoConstants.ENCRYPTION_KEY_ALIAS, encryptionKeyAlias);
+        contributeCredentials(binder).put(CryptoConstants.KEY_PASSWORD, passwordForAllKeys);
         return this;
     }
 
-    public CryptoModuleExtender keySource(Class<? extends KeySource> type) {
-        this.keySourceType = Objects.requireNonNull(type);
-        this.keySource = null;
+    public CryptoModuleExtender keySource(Class<? extends KeySource> keySourceType) {
+        binder.bind(KeySource.class).to(keySourceType);
         return this;
     }
 
     public CryptoModuleExtender keySource(KeySource keySource) {
-        this.keySourceType = null;
-        this.keySource = Objects.requireNonNull(keySource);
+        binder.bind(KeySource.class).toInstance(keySource);
         return this;
     }
 
     public CryptoModuleExtender compress() {
-        this.compress = true;
+        contributeProperties(binder).put(CryptoConstants.COMPRESSION, "true");
         return this;
     }
 
@@ -217,109 +192,41 @@ public class CryptoModuleExtender {
      * Enable authentication codes
      */
     public CryptoModuleExtender useHMAC() {
-        this.useHMAC = true;
+        contributeProperties(binder).put(CryptoConstants.USE_HMAC, "true");
         return this;
     }
 
-    /**
-     * Produces a module that can be used to start Cayenne runtime.
-     */
-    public Module module() {
-
-        return binder -> {
-
-            MapBuilder<String> props = CryptoModule.contributeProperties(binder);
-
-            if (cipherAlgorithm != null) {
-                props.put(CryptoConstants.CIPHER_ALGORITHM, cipherAlgorithm);
-            }
-
-            if (cipherMode != null) {
-                props.put(CryptoConstants.CIPHER_MODE, cipherMode);
-            }
-
-            String keyStoreUrl = keyStoreUrl();
-            if (keyStoreUrl != null) {
-                props.put(CryptoConstants.KEYSTORE_URL, keyStoreUrl);
-            }
-
-            if (encryptionKeyAlias != null) {
-                props.put(CryptoConstants.ENCRYPTION_KEY_ALIAS, encryptionKeyAlias);
-            }
-
-            if (compress) {
-                props.put(CryptoConstants.COMPRESSION, "true");
-            }
-
-            if (useHMAC) {
-                props.put(CryptoConstants.USE_HMAC, "true");
-            }
-
-            if (keyPassword != null) {
-                CryptoModule.contributeCredentials(binder).put(CryptoConstants.KEY_PASSWORD, keyPassword);
-            }
-
-            if (cipherFactoryType != null) {
-                binder.bind(CipherFactory.class).to(cipherFactoryType);
-            }
-
-            if (valueTransformerFactoryType != null) {
-                binder.bind(ValueTransformerFactory.class).to(valueTransformerFactoryType);
-            }
-
-            if (!extraDbToBytes.isEmpty()) {
-                MapBuilder<BytesConverter<?>> dbToBytesBinder = CryptoModule.contributeDbToByteConverters(binder);
-                for (Map.Entry<Integer, BytesConverter<?>> extraConverter : extraDbToBytes.entrySet()) {
-                    dbToBytesBinder.put(extraConverter.getKey().toString(), extraConverter.getValue());
-                }
-            }
-
-            if (!extraObjectToBytes.isEmpty()) {
-                MapBuilder<BytesConverter<?>> objectToBytesBinder = CryptoModule.contributeObjectToByteConverters(binder);
-                for (Map.Entry<String, BytesConverter<?>> extraConverter : extraObjectToBytes.entrySet()) {
-                    objectToBytesBinder.put(extraConverter.getKey(), extraConverter.getValue());
-                }
-            }
-
-            if (bytesTransformerFactoryType != null) {
-                binder.bind(BytesTransformerFactory.class).to(bytesTransformerFactoryType);
-            }
-
-            if (keySource != null) {
-                binder.bind(KeySource.class).toInstance(keySource);
-            } else if (keySourceType != null) {
-                binder.bind(KeySource.class).to(keySourceType);
-            }
-
-            if (columnMapperPattern != null) {
-                binder.bind(ColumnMapper.class).toInstance(new PatternColumnMapper(columnMapperPattern));
-            } else if (columnMapperType != null) {
-                binder.bind(ColumnMapper.class).to(columnMapperType);
-            } else if (columnMapper != null) {
-                binder.bind(ColumnMapper.class).toInstance(columnMapper);
-            }
-        };
+    private MapBuilder<String> contributeProperties(Binder binder) {
+        if (properties == null) {
+            properties = binder.bindMap(String.class, CryptoConstants.PROPERTIES_MAP);
+        }
+        return properties;
     }
 
-    protected String keyStoreUrl() {
-        if (this.keyStoreUrl != null) {
-            return this.keyStoreUrl.toExternalForm();
+    private MapBuilder<char[]> contributeCredentials(Binder binder) {
+        if (credentials == null) {
+            credentials = binder.bindMap(char[].class, CryptoConstants.CREDENTIALS_MAP);
         }
+        return credentials;
+    }
 
-        if (this.keyStoreUrlString != null) {
-            return this.keyStoreUrlString;
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    private MapBuilder<BytesConverter<?>> contributeDbToByteConverters(Binder binder) {
+        if (dbToByteConverters == null) {
+            MapBuilder mapBuilder = binder.bindMap(BytesConverter.class,
+                                                   DefaultValueTransformerFactory.DB_TO_BYTE_CONVERTERS_KEY);
+            dbToByteConverters = mapBuilder;
         }
+        return dbToByteConverters;
+    }
 
-        if (keyStoreFile != null) {
-            try {
-                return keyStoreFile.toURI().toURL().toExternalForm();
-            } catch (MalformedURLException e) {
-                throw new IllegalStateException("Invalid keyStore file", e);
-            }
+    @SuppressWarnings({"rawtypes", "unchecked"})
+    private MapBuilder<BytesConverter<?>> contributeObjectToByteConverters(Binder binder) {
+        if (objectToByteConverters == null) {
+            MapBuilder mapBuilder = binder.bindMap(BytesConverter.class,
+                                                   DefaultValueTransformerFactory.OBJECT_TO_BYTE_CONVERTERS_KEY);
+            objectToByteConverters = mapBuilder;
         }
-
-        return null;
+        return objectToByteConverters;
     }
-
-
 }
diff --git a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/CryptoModuleBuilderTest.java b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/CryptoModuleExtenderTest.java
similarity index 89%
rename from cayenne-crypto/src/test/java/org/apache/cayenne/crypto/CryptoModuleBuilderTest.java
rename to cayenne-crypto/src/test/java/org/apache/cayenne/crypto/CryptoModuleExtenderTest.java
index 4e79817d9..20e03a900 100644
--- a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/CryptoModuleBuilderTest.java
+++ b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/CryptoModuleExtenderTest.java
@@ -32,14 +32,13 @@ import java.security.Key;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
-public class CryptoModuleBuilderTest {
+public class CryptoModuleExtenderTest {
 
     @Test
     public void testBuild_KeySource() {
-
         URL ksUrl = JceksKeySourceTest.class.getResource(JceksKeySourceTest.KS1_JCEKS);
-        Module m = new CryptoModuleExtender().keyStore(ksUrl, JceksKeySourceTest.TEST_KEY_PASS, "k1")
-                .valueTransformer(DefaultValueTransformerFactory.class).module();
+        Module m = b -> new CryptoModuleExtender(b).keyStore(ksUrl, JceksKeySourceTest.TEST_KEY_PASS, "k1")
+                .valueTransformerFactory(DefaultValueTransformerFactory.class);
 
         Injector injector = DIBootstrap.createInjector(new CryptoModule(), m);
 
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 8eb9b16d8..43c6873a3 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,18 +66,18 @@ public class Runtime_AES128_Base {
     protected Module createCryptoModule(boolean compress, boolean useHMAC) {
         URL keyStoreUrl = JceksKeySourceTest.class.getResource(JceksKeySourceTest.KS1_JCEKS);
 
-        CryptoModuleExtender builder = CryptoModule
-                .extend()
-                .keyStore(keyStoreUrl, JceksKeySourceTest.TEST_KEY_PASS, "k3");
-
-        if (compress) {
-            builder.compress();
-        }
-        if(useHMAC) {
-            builder.useHMAC();
-        }
-
-        return builder.module();
+        Module module = b -> {
+            CryptoModuleExtender moduleExtender = CryptoModule.extend(b)
+                    .keyStore(keyStoreUrl, JceksKeySourceTest.TEST_KEY_PASS, "k3");
+            if (compress) {
+                moduleExtender.compress();
+            }
+            if(useHMAC) {
+                moduleExtender.useHMAC();
+            }
+        };
+
+        return module;
     }
 
 }


[cayenne] 05/06: Merge remote-tracking branch 'parent/pr/537' into asf-master

Posted by nt...@apache.org.
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 bd1b7bf0012089e5b80fe878cf618ff1a721abe6
Merge: 524a43f3e dede9d921
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Wed Nov 16 17:43:04 2022 +0300

    Merge remote-tracking branch 'parent/pr/537' into asf-master

 .../CacheInvalidationModuleExtender.java           |   5 +-
 .../cayenne/commitlog/CommitLogModuleExtender.java |   5 +-
 .../org/apache/cayenne/crypto/CryptoModule.java    | 183 ++++++---------
 .../cayenne/crypto/CryptoModuleExtender.java       | 253 +++++++--------------
 ...lderTest.java => CryptoModuleExtenderTest.java} |   7 +-
 .../apache/cayenne/crypto/Runtime_AES128_Base.java |  24 +-
 .../cayenne/project/ProjectModuleExtender.java     |  10 +-
 .../configuration/server/ServerModuleExtender.java |  59 ++++-
 8 files changed, 229 insertions(+), 317 deletions(-)


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

Posted by nt...@apache.org.
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;
     }
 
 }


[cayenne] 01/06: fix typo

Posted by nt...@apache.org.
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 11a54e9493dff0133110eaf5aada062910c45cd1
Author: Mikhail Dzianishchyts <mi...@gmail.com>
AuthorDate: Wed Nov 16 09:23:08 2022 +0300

    fix typo
---
 .../main/java/org/apache/cayenne/crypto/CryptoModuleExtender.java | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

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 23279e19c..b3720e680 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
@@ -52,7 +52,7 @@ public class CryptoModuleExtender {
     private ColumnMapper columnMapper;
     private Class<? extends ColumnMapper> columnMapperType;
 
-    private String cipherAlgoritm;
+    private String cipherAlgorithm;
     private String cipherMode;
     private Class<? extends CipherFactory> cipherFactoryType;
 
@@ -75,7 +75,7 @@ public class CryptoModuleExtender {
     }
 
     public CryptoModuleExtender cipherAlgorithm(String algorithm) {
-        this.cipherAlgoritm = Objects.requireNonNull(algorithm);
+        this.cipherAlgorithm = Objects.requireNonNull(algorithm);
         return this;
     }
 
@@ -230,8 +230,8 @@ public class CryptoModuleExtender {
 
             MapBuilder<String> props = CryptoModule.contributeProperties(binder);
 
-            if (cipherAlgoritm != null) {
-                props.put(CryptoConstants.CIPHER_ALGORITHM, cipherAlgoritm);
+            if (cipherAlgorithm != null) {
+                props.put(CryptoConstants.CIPHER_ALGORITHM, cipherAlgorithm);
             }
 
             if (cipherMode != null) {


[cayenne] 04/06: fix: add skipped primitives converters

Posted by nt...@apache.org.
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 dede9d92169e3f35f2dc9ea2f72da387e66785f2
Author: Mikhail Dzianishchyts <mi...@gmail.com>
AuthorDate: Wed Nov 16 13:39:00 2022 +0300

    fix: add skipped primitives converters
---
 .../src/main/java/org/apache/cayenne/crypto/CryptoModule.java      | 7 +++++++
 1 file changed, 7 insertions(+)

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 d4e8de7a5..97401891c 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
@@ -112,12 +112,19 @@ public class CryptoModule implements Module {
                 .objectToBytesConverter(String.class, Utf8StringConverter.INSTANCE)
 
                 .objectToBytesConverter(Double.class, DoubleConverter.INSTANCE)
+                .objectToBytesConverter(Double.TYPE, DoubleConverter.INSTANCE)
                 .objectToBytesConverter(Float.class, FloatConverter.INSTANCE)
+                .objectToBytesConverter(Float.TYPE, FloatConverter.INSTANCE)
                 .objectToBytesConverter(Long.class, LongConverter.INSTANCE)
+                .objectToBytesConverter(Long.TYPE, LongConverter.INSTANCE)
                 .objectToBytesConverter(Integer.class, IntegerConverter.INSTANCE)
+                .objectToBytesConverter(Integer.TYPE, IntegerConverter.INSTANCE)
                 .objectToBytesConverter(Short.class, ShortConverter.INSTANCE)
+                .objectToBytesConverter(Short.TYPE, ShortConverter.INSTANCE)
                 .objectToBytesConverter(Byte.class, ByteConverter.INSTANCE)
+                .objectToBytesConverter(Byte.TYPE, ByteConverter.INSTANCE)
                 .objectToBytesConverter(Boolean.class, BooleanConverter.INSTANCE)
+                .objectToBytesConverter(Boolean.TYPE, BooleanConverter.INSTANCE)
 
                 .objectToBytesConverter(BigInteger.class, BigIntegerConverter.INSTANCE)
                 .objectToBytesConverter(BigDecimal.class, BigDecimalConverter.INSTANCE)