You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2016/08/25 08:32:20 UTC
[1/4] cayenne git commit: CAY-2106: cayenne-crypto: allow DI
contribution of type converters inside ValueTransformerFactory
Repository: cayenne
Updated Branches:
refs/heads/master a97fc4ebc -> a5b833d5f
CAY-2106: cayenne-crypto: allow DI contribution of type converters inside ValueTransformerFactory
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/e7978a4d
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/e7978a4d
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/e7978a4d
Branch: refs/heads/master
Commit: e7978a4d34613af4b44115a8ae510e7fe47ff105
Parents: 938fbb3
Author: Andrei Tomashpolskiy <no...@gmail.com>
Authored: Mon Aug 22 15:19:02 2016 +0300
Committer: Andrei Tomashpolskiy <no...@gmail.com>
Committed: Mon Aug 22 15:19:02 2016 +0300
----------------------------------------------------------------------
.../cayenne/crypto/CryptoModuleBuilder.java | 40 +++++++++
.../value/DefaultValueTransformerFactory.java | 86 +++++---------------
.../value/DefaultValueTransformerFactoryIT.java | 18 ++--
3 files changed, 72 insertions(+), 72 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e7978a4d/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModuleBuilder.java
----------------------------------------------------------------------
diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModuleBuilder.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModuleBuilder.java
index 8d19b85..23e768b 100644
--- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModuleBuilder.java
+++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModuleBuilder.java
@@ -32,6 +32,7 @@ import org.apache.cayenne.crypto.transformer.DefaultTransformerFactory;
import org.apache.cayenne.crypto.transformer.TransformerFactory;
import org.apache.cayenne.crypto.transformer.bytes.BytesTransformerFactory;
import org.apache.cayenne.crypto.transformer.bytes.DefaultBytesTransformerFactory;
+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;
@@ -41,6 +42,9 @@ 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;
/**
* A builder of a Cayenne DI module that will contain all extension to Cayenne
@@ -59,6 +63,9 @@ public class CryptoModuleBuilder {
private Class<? extends ValueTransformerFactory> valueTransformerFactoryType;
private Class<? extends BytesTransformerFactory> bytesTransformerFactoryType;
+ private Map<String, BytesConverter<?>> extraObjectToBytes;
+ private Map<Integer, BytesConverter<?>> extraDbToBytes;
+
private String columnMapperPattern;
private ColumnMapper columnMapper;
private Class<? extends ColumnMapper> columnMapperType;
@@ -120,6 +127,22 @@ public class CryptoModuleBuilder {
return this;
}
+ public <T> CryptoModuleBuilder objectToBytesConverter(Class<T> objectType, BytesConverter<T> converter) {
+ if (extraObjectToBytes == null) {
+ extraObjectToBytes = new HashMap<>();
+ }
+ extraObjectToBytes.put(objectType.getName(), Objects.requireNonNull(converter));
+ return this;
+ }
+
+ public CryptoModuleBuilder dbToBytesConverter(int sqlType, BytesConverter<?> converter) {
+ if (extraDbToBytes == null) {
+ extraDbToBytes = new HashMap<>();
+ }
+ extraDbToBytes.put(sqlType, Objects.requireNonNull(converter));
+ return this;
+ }
+
public CryptoModuleBuilder bytesTransformer(Class<? extends BytesTransformerFactory> factoryType) {
this.bytesTransformerFactoryType = factoryType;
return this;
@@ -303,6 +326,23 @@ public class CryptoModuleBuilder {
binder.bind(CipherFactory.class).to(cipherFactoryType);
binder.bind(TransformerFactory.class).to(DefaultTransformerFactory.class);
binder.bind(ValueTransformerFactory.class).to(valueTransformerFactoryType);
+
+ MapBuilder<BytesConverter<?>> extraDbToBytesBinder =
+ binder.bindMap(DefaultValueTransformerFactory.EXTRA_DB_TO_BYTE_CONVERTERS_KEY);
+ if (extraDbToBytes != null) {
+ for (Map.Entry<Integer, BytesConverter<?>> extraConverter : extraDbToBytes.entrySet()) {
+ extraDbToBytesBinder.put(extraConverter.getKey().toString(), extraConverter.getValue());
+ }
+ }
+
+ MapBuilder<BytesConverter<?>> extraObjectToBytesBinder =
+ binder.bindMap(DefaultValueTransformerFactory.EXTRA_OBJECT_TO_BYTE_CONVERTERS_KEY);
+ if (extraObjectToBytes != null) {
+ for (Map.Entry<String, BytesConverter<?>> extraConverter : extraObjectToBytes.entrySet()) {
+ extraObjectToBytesBinder.put(extraConverter.getKey(), extraConverter.getValue());
+ }
+ }
+
binder.bind(BytesTransformerFactory.class).to(bytesTransformerFactoryType);
if (keySource != null) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e7978a4d/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactory.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactory.java
index 6c4d194..1bb778a 100644
--- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactory.java
+++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactory.java
@@ -47,27 +47,38 @@ import java.util.concurrent.ConcurrentMap;
*/
public class DefaultValueTransformerFactory implements ValueTransformerFactory {
+ public static final String EXTRA_DB_TO_BYTE_CONVERTERS_KEY =
+ "org.apache.cayenne.crypto.transformer.value.DefaultValueTransformerFactory.dbToBytes";
+
+ public static final String EXTRA_OBJECT_TO_BYTE_CONVERTERS_KEY =
+ "org.apache.cayenne.crypto.transformer.value.DefaultValueTransformerFactory.objectToBytes";
+
private final Key defaultKey;
private final Map<String, BytesConverter<?>> objectToBytes;
private final Map<Integer, BytesConverter<?>> dbToBytes;
- private final Map<String, BytesConverter<?>> bytesToObject;
- private final Map<Integer, BytesConverter<?>> bytesToDb;
-
private final ConcurrentMap<DbAttribute, ValueEncryptor> encryptors;
private final ConcurrentMap<DbAttribute, ValueDecryptor> decryptors;
- public DefaultValueTransformerFactory(@Inject KeySource keySource) {
+ public DefaultValueTransformerFactory(@Inject KeySource keySource,
+ @Inject(EXTRA_DB_TO_BYTE_CONVERTERS_KEY) Map<String, BytesConverter<?>> extraDbToBytes,
+ @Inject(EXTRA_OBJECT_TO_BYTE_CONVERTERS_KEY) Map<String, BytesConverter<?>> extraObjectToBytes) {
+
this.defaultKey = keySource.getKey(keySource.getDefaultKeyAlias());
- this.encryptors = new ConcurrentHashMap<DbAttribute, ValueEncryptor>();
- this.decryptors = new ConcurrentHashMap<DbAttribute, ValueDecryptor>();
+ this.encryptors = new ConcurrentHashMap<>();
+ this.decryptors = new ConcurrentHashMap<>();
this.objectToBytes = createObjectToBytesConverters();
+ for (Map.Entry<String, BytesConverter<?>> extraConverter : extraObjectToBytes.entrySet()) {
+ objectToBytes.put(extraConverter.getKey(), extraConverter.getValue());
+ }
+
this.dbToBytes = createDbToBytesConverters();
- this.bytesToObject = createBytesToObjectConverters();
- this.bytesToDb = createBytesToDbConverters();
+ for (Map.Entry<String, BytesConverter<?>> extraConverter : extraDbToBytes.entrySet()) {
+ dbToBytes.put(Integer.valueOf(extraConverter.getKey()), extraConverter.getValue());
+ }
}
@Override
@@ -120,26 +131,6 @@ public class DefaultValueTransformerFactory implements ValueTransformerFactory {
return map;
}
- protected Map<Integer, BytesConverter<?>> createBytesToDbConverters() {
- Map<Integer, BytesConverter<?>> map = new HashMap<>();
-
- map.put(Types.BINARY, BytesToBytesConverter.INSTANCE);
- map.put(Types.BLOB, BytesToBytesConverter.INSTANCE);
- map.put(Types.VARBINARY, BytesToBytesConverter.INSTANCE);
- map.put(Types.LONGVARBINARY, BytesToBytesConverter.INSTANCE);
-
- map.put(Types.CHAR, Base64StringConverter.INSTANCE);
- map.put(Types.NCHAR, Base64StringConverter.INSTANCE);
- map.put(Types.CLOB, Base64StringConverter.INSTANCE);
- map.put(Types.NCLOB, Base64StringConverter.INSTANCE);
- map.put(Types.LONGVARCHAR, Base64StringConverter.INSTANCE);
- map.put(Types.LONGNVARCHAR, Base64StringConverter.INSTANCE);
- map.put(Types.VARCHAR, Base64StringConverter.INSTANCE);
- map.put(Types.NVARCHAR, Base64StringConverter.INSTANCE);
-
- return map;
- }
-
protected Map<String, BytesConverter<?>> createObjectToBytesConverters() {
Map<String, BytesConverter<?>> map = new HashMap<>();
@@ -174,41 +165,6 @@ public class DefaultValueTransformerFactory implements ValueTransformerFactory {
return map;
}
- protected Map<String, BytesConverter<?>> createBytesToObjectConverters() {
-
- Map<String, BytesConverter<?>> map = new HashMap<>();
-
- map.put("byte[]", BytesToBytesConverter.INSTANCE);
- map.put(String.class.getName(), Utf8StringConverter.INSTANCE);
-
- map.put(Double.class.getName(), DoubleConverter.INSTANCE);
- map.put(Double.TYPE.getName(), DoubleConverter.INSTANCE);
-
- map.put(Float.class.getName(), FloatConverter.INSTANCE);
- map.put(Float.TYPE.getName(), FloatConverter.INSTANCE);
-
- map.put(Long.class.getName(), LongConverter.INSTANCE);
- map.put(Long.TYPE.getName(), LongConverter.INSTANCE);
-
- map.put(Integer.class.getName(), IntegerConverter.INSTANCE);
- map.put(Integer.TYPE.getName(), IntegerConverter.INSTANCE);
-
- map.put(Short.class.getName(), ShortConverter.INSTANCE);
- map.put(Short.TYPE.getName(), ShortConverter.INSTANCE);
-
- map.put(Byte.class.getName(), ByteConverter.INSTANCE);
- map.put(Byte.TYPE.getName(), ByteConverter.INSTANCE);
-
- map.put(Boolean.class.getName(), BooleanConverter.INSTANCE);
- map.put(Boolean.TYPE.getName(), BooleanConverter.INSTANCE);
-
- map.put(Date.class.getName(), UtilDateConverter.INSTANCE);
- map.put(BigInteger.class.getName(), BigIntegerConverter.INSTANCE);
- map.put(BigDecimal.class.getName(), BigDecimalConverter.INSTANCE);
-
- return map;
- }
-
protected ValueEncryptor createEncryptor(DbAttribute a) {
String type = getJavaType(a);
@@ -219,7 +175,7 @@ public class DefaultValueTransformerFactory implements ValueTransformerFactory {
+ " has no object-to-bytes conversion");
}
- BytesConverter<?> fromBytes = bytesToDb.get(a.getType());
+ BytesConverter<?> fromBytes = dbToBytes.get(a.getType());
if (fromBytes == null) {
throw new IllegalArgumentException("The type " + TypesMapping.getSqlNameByType(a.getType())
+ " for attribute " + a + " has no bytes-to-db conversion");
@@ -237,7 +193,7 @@ public class DefaultValueTransformerFactory implements ValueTransformerFactory {
}
String type = getJavaType(a);
- BytesConverter<?> fromBytes = bytesToObject.get(type);
+ BytesConverter<?> fromBytes = objectToBytes.get(type);
if (fromBytes == null) {
throw new IllegalArgumentException("The type " + type + " for attribute " + a
+ " has no bytes-to-object conversion");
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e7978a4d/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactoryIT.java
----------------------------------------------------------------------
diff --git a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactoryIT.java b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactoryIT.java
index 1bb896a..1baf0fc 100644
--- a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactoryIT.java
+++ b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactoryIT.java
@@ -22,10 +22,12 @@ import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.crypto.key.KeySource;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
+import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import java.sql.Types;
+import java.util.Collections;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -40,6 +42,8 @@ public class DefaultValueTransformerFactoryIT {
private static DbEntity t2;
private static DbEntity t3;
+ private DefaultValueTransformerFactory f;
+
@BeforeClass
public static void beforeClass() throws Exception {
ServerRuntime runtime = new ServerRuntime("cayenne-crypto.xml");
@@ -48,11 +52,16 @@ public class DefaultValueTransformerFactoryIT {
t3 = runtime.getChannel().getEntityResolver().getDbEntity("TABLE3");
}
+ @Before
+ public void before() {
+ f = new DefaultValueTransformerFactory(mock(KeySource.class),
+ Collections.<String, BytesConverter<?>>emptyMap(),
+ Collections.<String, BytesConverter<?>>emptyMap());
+ }
+
@Test
public void testGetJavaType() {
- DefaultValueTransformerFactory f = new DefaultValueTransformerFactory(mock(KeySource.class));
-
DbAttribute t1_ct = t1.getAttribute("CRYPTO_STRING");
assertEquals("java.lang.String", f.getJavaType(t1_ct));
@@ -79,7 +88,6 @@ public class DefaultValueTransformerFactoryIT {
@Test
public void testCreateEncryptor() {
- DefaultValueTransformerFactory f = new DefaultValueTransformerFactory(mock(KeySource.class));
DbAttribute t1_ct = t1.getAttribute("CRYPTO_STRING");
@@ -100,7 +108,6 @@ public class DefaultValueTransformerFactoryIT {
@Test
public void testCreateDecryptor() {
- DefaultValueTransformerFactory f = new DefaultValueTransformerFactory(mock(KeySource.class));
DbAttribute t1_ct = t1.getAttribute("CRYPTO_STRING");
@@ -129,7 +136,6 @@ public class DefaultValueTransformerFactoryIT {
@Test
public void testEncryptor() {
- DefaultValueTransformerFactory f = new DefaultValueTransformerFactory(mock(KeySource.class));
DbAttribute t1_ct = t1.getAttribute("CRYPTO_STRING");
@@ -148,7 +154,6 @@ public class DefaultValueTransformerFactoryIT {
@Test
public void testDecryptor() {
- DefaultValueTransformerFactory f = new DefaultValueTransformerFactory(mock(KeySource.class));
DbAttribute t1_ct = t1.getAttribute("CRYPTO_STRING");
@@ -164,5 +169,4 @@ public class DefaultValueTransformerFactoryIT {
assertSame(t2, f.decryptor(t2_cb));
assertSame(t2, f.decryptor(t2_cb));
}
-
}
[2/4] cayenne git commit: CAY-2106: cayenne-crypto: allow DI
contribution of type converters inside ValueTransformerFactory
Posted by aa...@apache.org.
CAY-2106: cayenne-crypto: allow DI contribution of type converters inside ValueTransformerFactory
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/888a852b
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/888a852b
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/888a852b
Branch: refs/heads/master
Commit: 888a852ba90f6cca2af99a3ad226b3fea050cef0
Parents: e7978a4
Author: Andrei Tomashpolskiy <no...@gmail.com>
Authored: Tue Aug 23 13:54:59 2016 +0300
Committer: Andrei Tomashpolskiy <no...@gmail.com>
Committed: Tue Aug 23 13:54:59 2016 +0300
----------------------------------------------------------------------
.../cayenne/crypto/CryptoModuleBuilder.java | 79 ++++++++++++++++++--
.../value/Base64StringConverter.java | 2 +-
.../transformer/value/BooleanConverter.java | 2 +-
.../value/BytesToBytesConverter.java | 2 +-
.../value/DefaultValueTransformerFactory.java | 78 +++----------------
.../value/DefaultValueTransformerFactoryIT.java | 69 ++++++++++++++++-
6 files changed, 150 insertions(+), 82 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/888a852b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModuleBuilder.java
----------------------------------------------------------------------
diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModuleBuilder.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModuleBuilder.java
index 23e768b..151e320 100644
--- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModuleBuilder.java
+++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/CryptoModuleBuilder.java
@@ -32,16 +32,33 @@ import org.apache.cayenne.crypto.transformer.DefaultTransformerFactory;
import org.apache.cayenne.crypto.transformer.TransformerFactory;
import org.apache.cayenne.crypto.transformer.bytes.BytesTransformerFactory;
import org.apache.cayenne.crypto.transformer.bytes.DefaultBytesTransformerFactory;
+import org.apache.cayenne.crypto.transformer.value.Base64StringConverter;
+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;
+import org.apache.cayenne.crypto.transformer.value.FloatConverter;
+import org.apache.cayenne.crypto.transformer.value.IntegerConverter;
+import org.apache.cayenne.crypto.transformer.value.LongConverter;
+import org.apache.cayenne.crypto.transformer.value.ShortConverter;
+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.io.File;
+import java.math.BigDecimal;
+import java.math.BigInteger;
import java.net.MalformedURLException;
import java.net.URL;
+import java.sql.Types;
+import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
@@ -327,19 +344,21 @@ public class CryptoModuleBuilder {
binder.bind(TransformerFactory.class).to(DefaultTransformerFactory.class);
binder.bind(ValueTransformerFactory.class).to(valueTransformerFactoryType);
- MapBuilder<BytesConverter<?>> extraDbToBytesBinder =
- binder.bindMap(DefaultValueTransformerFactory.EXTRA_DB_TO_BYTE_CONVERTERS_KEY);
+ MapBuilder<BytesConverter<?>> dbToBytesBinder =
+ binder.bindMap(DefaultValueTransformerFactory.DB_TO_BYTE_CONVERTERS_KEY);
+ contributeDefaultDbConverters(dbToBytesBinder);
if (extraDbToBytes != null) {
for (Map.Entry<Integer, BytesConverter<?>> extraConverter : extraDbToBytes.entrySet()) {
- extraDbToBytesBinder.put(extraConverter.getKey().toString(), extraConverter.getValue());
+ dbToBytesBinder.put(extraConverter.getKey().toString(), extraConverter.getValue());
}
}
- MapBuilder<BytesConverter<?>> extraObjectToBytesBinder =
- binder.bindMap(DefaultValueTransformerFactory.EXTRA_OBJECT_TO_BYTE_CONVERTERS_KEY);
+ MapBuilder<BytesConverter<?>> objectToBytesBinder =
+ binder.bindMap(DefaultValueTransformerFactory.OBJECT_TO_BYTE_CONVERTERS_KEY);
+ contributeDefaultObjectConverters(objectToBytesBinder);
if (extraObjectToBytes != null) {
for (Map.Entry<String, BytesConverter<?>> extraConverter : extraObjectToBytes.entrySet()) {
- extraObjectToBytesBinder.put(extraConverter.getKey(), extraConverter.getValue());
+ objectToBytesBinder.put(extraConverter.getKey(), extraConverter.getValue());
}
}
@@ -364,4 +383,52 @@ public class CryptoModuleBuilder {
}
};
}
+
+ 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);
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/888a852b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/Base64StringConverter.java
----------------------------------------------------------------------
diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/Base64StringConverter.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/Base64StringConverter.java
index 652bdf5..497659e 100644
--- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/Base64StringConverter.java
+++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/Base64StringConverter.java
@@ -25,7 +25,7 @@ import javax.xml.bind.DatatypeConverter;
*/
public class Base64StringConverter implements BytesConverter<String> {
- static final BytesConverter<String> INSTANCE = new Base64StringConverter();
+ public static final BytesConverter<String> INSTANCE = new Base64StringConverter();
@Override
public byte[] toBytes(String value) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/888a852b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/BooleanConverter.java
----------------------------------------------------------------------
diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/BooleanConverter.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/BooleanConverter.java
index 5282dbd..fb1a08f 100644
--- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/BooleanConverter.java
+++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/BooleanConverter.java
@@ -25,7 +25,7 @@ package org.apache.cayenne.crypto.transformer.value;
*/
public class BooleanConverter implements BytesConverter<Boolean> {
- static final BytesConverter<Boolean> INSTANCE = new BooleanConverter();
+ public static final BytesConverter<Boolean> INSTANCE = new BooleanConverter();
@Override
public Boolean fromBytes(byte[] bytes) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/888a852b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/BytesToBytesConverter.java
----------------------------------------------------------------------
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 0eb9e20..57b8d4e 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
@@ -24,7 +24,7 @@ package org.apache.cayenne.crypto.transformer.value;
// we can't use <byte[]> , so parameterizing this converter to Object
public class BytesToBytesConverter implements BytesConverter<Object> {
- static final BytesConverter<Object> INSTANCE = new BytesToBytesConverter();
+ public static final BytesConverter<Object> INSTANCE = new BytesToBytesConverter();
@Override
public byte[] toBytes(Object value) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/888a852b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactory.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactory.java
index 1bb778a..cca9619 100644
--- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactory.java
+++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactory.java
@@ -27,12 +27,8 @@ import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
-import java.math.BigDecimal;
-import java.math.BigInteger;
import java.security.Key;
-import java.sql.Types;
import java.util.Collection;
-import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@@ -47,10 +43,10 @@ import java.util.concurrent.ConcurrentMap;
*/
public class DefaultValueTransformerFactory implements ValueTransformerFactory {
- public static final String EXTRA_DB_TO_BYTE_CONVERTERS_KEY =
+ public static final String DB_TO_BYTE_CONVERTERS_KEY =
"org.apache.cayenne.crypto.transformer.value.DefaultValueTransformerFactory.dbToBytes";
- public static final String EXTRA_OBJECT_TO_BYTE_CONVERTERS_KEY =
+ public static final String OBJECT_TO_BYTE_CONVERTERS_KEY =
"org.apache.cayenne.crypto.transformer.value.DefaultValueTransformerFactory.objectToBytes";
private final Key defaultKey;
@@ -62,23 +58,21 @@ public class DefaultValueTransformerFactory implements ValueTransformerFactory {
private final ConcurrentMap<DbAttribute, ValueDecryptor> decryptors;
public DefaultValueTransformerFactory(@Inject KeySource keySource,
- @Inject(EXTRA_DB_TO_BYTE_CONVERTERS_KEY) Map<String, BytesConverter<?>> extraDbToBytes,
- @Inject(EXTRA_OBJECT_TO_BYTE_CONVERTERS_KEY) Map<String, BytesConverter<?>> extraObjectToBytes) {
+ @Inject(DB_TO_BYTE_CONVERTERS_KEY) Map<String, BytesConverter<?>> dbToBytes,
+ @Inject(OBJECT_TO_BYTE_CONVERTERS_KEY) Map<String, BytesConverter<?>> objectToBytes) {
this.defaultKey = keySource.getKey(keySource.getDefaultKeyAlias());
this.encryptors = new ConcurrentHashMap<>();
this.decryptors = new ConcurrentHashMap<>();
- this.objectToBytes = createObjectToBytesConverters();
- for (Map.Entry<String, BytesConverter<?>> extraConverter : extraObjectToBytes.entrySet()) {
- objectToBytes.put(extraConverter.getKey(), extraConverter.getValue());
- }
+ this.objectToBytes = objectToBytes;
- this.dbToBytes = createDbToBytesConverters();
- for (Map.Entry<String, BytesConverter<?>> extraConverter : extraDbToBytes.entrySet()) {
- dbToBytes.put(Integer.valueOf(extraConverter.getKey()), extraConverter.getValue());
+ Map<Integer, BytesConverter<?>> m = new HashMap<>();
+ for (Map.Entry<String, BytesConverter<?>> extraConverter : dbToBytes.entrySet()) {
+ m.put(Integer.valueOf(extraConverter.getKey()), extraConverter.getValue());
}
+ this.dbToBytes = m;
}
@Override
@@ -111,60 +105,6 @@ public class DefaultValueTransformerFactory implements ValueTransformerFactory {
return e;
}
- protected Map<Integer, BytesConverter<?>> createDbToBytesConverters() {
- Map<Integer, BytesConverter<?>> map = new HashMap<>();
-
- map.put(Types.BINARY, BytesToBytesConverter.INSTANCE);
- map.put(Types.BLOB, BytesToBytesConverter.INSTANCE);
- map.put(Types.VARBINARY, BytesToBytesConverter.INSTANCE);
- map.put(Types.LONGVARBINARY, BytesToBytesConverter.INSTANCE);
-
- map.put(Types.CHAR, Base64StringConverter.INSTANCE);
- map.put(Types.NCHAR, Base64StringConverter.INSTANCE);
- map.put(Types.CLOB, Base64StringConverter.INSTANCE);
- map.put(Types.NCLOB, Base64StringConverter.INSTANCE);
- map.put(Types.LONGVARCHAR, Base64StringConverter.INSTANCE);
- map.put(Types.LONGNVARCHAR, Base64StringConverter.INSTANCE);
- map.put(Types.VARCHAR, Base64StringConverter.INSTANCE);
- map.put(Types.NVARCHAR, Base64StringConverter.INSTANCE);
-
- return map;
- }
-
- protected Map<String, BytesConverter<?>> createObjectToBytesConverters() {
- Map<String, BytesConverter<?>> map = new HashMap<>();
-
- map.put("byte[]", BytesToBytesConverter.INSTANCE);
- map.put(String.class.getName(), Utf8StringConverter.INSTANCE);
-
- map.put(Double.class.getName(), DoubleConverter.INSTANCE);
- map.put(Double.TYPE.getName(), DoubleConverter.INSTANCE);
-
- map.put(Float.class.getName(), FloatConverter.INSTANCE);
- map.put(Float.TYPE.getName(), FloatConverter.INSTANCE);
-
- map.put(Long.class.getName(), LongConverter.INSTANCE);
- map.put(Long.TYPE.getName(), LongConverter.INSTANCE);
-
- map.put(Integer.class.getName(), IntegerConverter.INSTANCE);
- map.put(Integer.TYPE.getName(), IntegerConverter.INSTANCE);
-
- map.put(Short.class.getName(), ShortConverter.INSTANCE);
- map.put(Short.TYPE.getName(), ShortConverter.INSTANCE);
-
- map.put(Byte.class.getName(), ByteConverter.INSTANCE);
- map.put(Byte.TYPE.getName(), ByteConverter.INSTANCE);
-
- map.put(Boolean.class.getName(), BooleanConverter.INSTANCE);
- map.put(Boolean.TYPE.getName(), BooleanConverter.INSTANCE);
-
- map.put(Date.class.getName(), UtilDateConverter.INSTANCE);
- map.put(BigInteger.class.getName(), BigIntegerConverter.INSTANCE);
- map.put(BigDecimal.class.getName(), BigDecimalConverter.INSTANCE);
-
- return map;
- }
-
protected ValueEncryptor createEncryptor(DbAttribute a) {
String type = getJavaType(a);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/888a852b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactoryIT.java
----------------------------------------------------------------------
diff --git a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactoryIT.java b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactoryIT.java
index 1baf0fc..e40137e 100644
--- a/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactoryIT.java
+++ b/cayenne-crypto/src/test/java/org/apache/cayenne/crypto/transformer/value/DefaultValueTransformerFactoryIT.java
@@ -26,8 +26,12 @@ import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
+import java.math.BigDecimal;
+import java.math.BigInteger;
import java.sql.Types;
-import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -42,6 +46,8 @@ public class DefaultValueTransformerFactoryIT {
private static DbEntity t2;
private static DbEntity t3;
+ private static Map<String, BytesConverter<?>> dbToBytes, objectToBytes;
+
private DefaultValueTransformerFactory f;
@BeforeClass
@@ -50,13 +56,14 @@ public class DefaultValueTransformerFactoryIT {
t1 = runtime.getChannel().getEntityResolver().getDbEntity("TABLE1");
t2 = runtime.getChannel().getEntityResolver().getDbEntity("TABLE2");
t3 = runtime.getChannel().getEntityResolver().getDbEntity("TABLE3");
+
+ dbToBytes = getDefaultDbConverters();
+ objectToBytes = getDefaultObjectConverters();
}
@Before
public void before() {
- f = new DefaultValueTransformerFactory(mock(KeySource.class),
- Collections.<String, BytesConverter<?>>emptyMap(),
- Collections.<String, BytesConverter<?>>emptyMap());
+ f = new DefaultValueTransformerFactory(mock(KeySource.class), dbToBytes, objectToBytes);
}
@Test
@@ -169,4 +176,58 @@ public class DefaultValueTransformerFactoryIT {
assertSame(t2, f.decryptor(t2_cb));
assertSame(t2, f.decryptor(t2_cb));
}
+
+ private static Map<String, BytesConverter<?>> getDefaultDbConverters() {
+ Map<String, BytesConverter<?>> dbToBytes = new HashMap<>();
+
+ dbToBytes.put(String.valueOf(Types.BINARY), BytesToBytesConverter.INSTANCE);
+ dbToBytes.put(String.valueOf(Types.BLOB), BytesToBytesConverter.INSTANCE);
+ dbToBytes.put(String.valueOf(Types.VARBINARY), BytesToBytesConverter.INSTANCE);
+ dbToBytes.put(String.valueOf(Types.LONGVARBINARY), BytesToBytesConverter.INSTANCE);
+
+ dbToBytes.put(String.valueOf(Types.CHAR), Base64StringConverter.INSTANCE);
+ dbToBytes.put(String.valueOf(Types.NCHAR), Base64StringConverter.INSTANCE);
+ dbToBytes.put(String.valueOf(Types.CLOB), Base64StringConverter.INSTANCE);
+ dbToBytes.put(String.valueOf(Types.NCLOB), Base64StringConverter.INSTANCE);
+ dbToBytes.put(String.valueOf(Types.LONGVARCHAR), Base64StringConverter.INSTANCE);
+ dbToBytes.put(String.valueOf(Types.LONGNVARCHAR), Base64StringConverter.INSTANCE);
+ dbToBytes.put(String.valueOf(Types.VARCHAR), Base64StringConverter.INSTANCE);
+ dbToBytes.put(String.valueOf(Types.NVARCHAR), Base64StringConverter.INSTANCE);
+
+ return dbToBytes;
+ }
+
+ private static Map<String, BytesConverter<?>> getDefaultObjectConverters() {
+ Map<String, BytesConverter<?>> objectToBytes = new HashMap<>();
+
+ objectToBytes.put("byte[]", BytesToBytesConverter.INSTANCE);
+ objectToBytes.put(String.class.getName(), Utf8StringConverter.INSTANCE);
+
+ objectToBytes.put(Double.class.getName(), DoubleConverter.INSTANCE);
+ objectToBytes.put(Double.TYPE.getName(), DoubleConverter.INSTANCE);
+
+ objectToBytes.put(Float.class.getName(), FloatConverter.INSTANCE);
+ objectToBytes.put(Float.TYPE.getName(), FloatConverter.INSTANCE);
+
+ objectToBytes.put(Long.class.getName(), LongConverter.INSTANCE);
+ objectToBytes.put(Long.TYPE.getName(), LongConverter.INSTANCE);
+
+ objectToBytes.put(Integer.class.getName(), IntegerConverter.INSTANCE);
+ objectToBytes.put(Integer.TYPE.getName(), IntegerConverter.INSTANCE);
+
+ objectToBytes.put(Short.class.getName(), ShortConverter.INSTANCE);
+ objectToBytes.put(Short.TYPE.getName(), ShortConverter.INSTANCE);
+
+ objectToBytes.put(Byte.class.getName(), ByteConverter.INSTANCE);
+ objectToBytes.put(Byte.TYPE.getName(), ByteConverter.INSTANCE);
+
+ objectToBytes.put(Boolean.class.getName(), BooleanConverter.INSTANCE);
+ objectToBytes.put(Boolean.TYPE.getName(), BooleanConverter.INSTANCE);
+
+ objectToBytes.put(Date.class.getName(), UtilDateConverter.INSTANCE);
+ objectToBytes.put(BigInteger.class.getName(), BigIntegerConverter.INSTANCE);
+ objectToBytes.put(BigDecimal.class.getName(), BigDecimalConverter.INSTANCE);
+
+ return objectToBytes;
+ }
}
[4/4] cayenne git commit: CAY-2106: cayenne-crypto: allow DI
contribution of type converters inside ValueTransformerFactory
Posted by aa...@apache.org.
CAY-2106: cayenne-crypto: allow DI contribution of type converters inside ValueTransformerFactory
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/a5b833d5
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/a5b833d5
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/a5b833d5
Branch: refs/heads/master
Commit: a5b833d5fb8524bcb3cf194f58c1524905bc7a5e
Parents: c7276d6
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Thu Aug 25 11:29:29 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Thu Aug 25 11:29:29 2016 +0300
----------------------------------------------------------------------
docs/doc/src/main/resources/RELEASE-NOTES.txt | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/a5b833d5/docs/doc/src/main/resources/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt
index 0555097..cd3d28a 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -27,6 +27,7 @@ CAY-2090 Untangle HttpRemoteService from ServiceContext thread local setup
CAY-2100 Add supporting generated keys for PostgreSQL
CAY-2102 EJBQL: db: path not supported in select columns
CAY-2103 cayenne-crypto: support for mapping non-String and non-binary types
+CAY-2106: cayenne-crypto: allow DI contribution of type converters inside ValueTransformerFactory
Bug Fixes:
[3/4] cayenne git commit: Merge branch '108'
Posted by aa...@apache.org.
Merge branch '108'
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/c7276d67
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/c7276d67
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/c7276d67
Branch: refs/heads/master
Commit: c7276d67d48877a7b86933d341d275de0f5074f6
Parents: a97fc4e 888a852
Author: Andrus Adamchik <an...@objectstyle.com>
Authored: Thu Aug 25 11:27:06 2016 +0300
Committer: Andrus Adamchik <an...@objectstyle.com>
Committed: Thu Aug 25 11:27:06 2016 +0300
----------------------------------------------------------------------
.../cayenne/crypto/CryptoModuleBuilder.java | 107 ++++++++++++++
.../value/Base64StringConverter.java | 2 +-
.../transformer/value/BooleanConverter.java | 2 +-
.../value/BytesToBytesConverter.java | 2 +-
.../value/DefaultValueTransformerFactory.java | 146 +++----------------
.../value/DefaultValueTransformerFactoryIT.java | 77 +++++++++-
6 files changed, 202 insertions(+), 134 deletions(-)
----------------------------------------------------------------------