CAY-2050 Refactoring: ParameterBinding to contain ExtendedType property * explicit extended types in cayenne-crypto * assuming ParameterBinding always has an ET
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/01618222 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/01618222 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/01618222 Branch: refs/heads/master Commit: 0161822270ba51844073fdb292330af6ed742256 Parents: e6585ef Author: Andrus Adamchik <and...@objectstyle.com> Authored: Tue Jan 24 15:08:03 2017 +0300 Committer: Andrus Adamchik <and...@objectstyle.com> Committed: Tue Jan 24 15:08:03 2017 +0300 ---------------------------------------------------------------------- .../CryptoBatchTranslatorFactoryDecorator.java | 4 ++-- .../transformer/DefaultBindingsTransformer.java | 16 +++++++++++-- .../transformer/DefaultTransformerFactory.java | 5 ++-- .../crypto/transformer/TransformerFactory.java | 3 ++- .../org/apache/cayenne/dba/JdbcAdapter.java | 24 ++++++++------------ 5 files changed, 31 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/01618222/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/batch/CryptoBatchTranslatorFactoryDecorator.java ---------------------------------------------------------------------- diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/batch/CryptoBatchTranslatorFactoryDecorator.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/batch/CryptoBatchTranslatorFactoryDecorator.java index 4b8a471..5d3d319 100644 --- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/batch/CryptoBatchTranslatorFactoryDecorator.java +++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/batch/CryptoBatchTranslatorFactoryDecorator.java @@ -44,7 +44,7 @@ public class CryptoBatchTranslatorFactoryDecorator implements BatchTranslatorFac } @Override - public BatchTranslator translator(BatchQuery query, DbAdapter adapter, String trimFunction) { + public BatchTranslator translator(BatchQuery query, final DbAdapter adapter, String trimFunction) { final BatchTranslator delegateTranslator = delegate.translator(query, adapter, trimFunction); return new BatchTranslator() { @@ -54,7 +54,7 @@ public class CryptoBatchTranslatorFactoryDecorator implements BatchTranslatorFac private void ensureEncryptorCompiled() { if (!encryptorCompiled) { - encryptor = cryptoFactory.encryptor(getBindings()); + encryptor = cryptoFactory.encryptor(getBindings(), adapter.getExtendedTypes()); encryptorCompiled = true; } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/01618222/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultBindingsTransformer.java ---------------------------------------------------------------------- diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultBindingsTransformer.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultBindingsTransformer.java index 4844795..3524b41 100644 --- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultBindingsTransformer.java +++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultBindingsTransformer.java @@ -19,6 +19,8 @@ package org.apache.cayenne.crypto.transformer; import org.apache.cayenne.access.translator.DbAttributeBinding; +import org.apache.cayenne.access.types.ExtendedType; +import org.apache.cayenne.access.types.ExtendedTypeMap; import org.apache.cayenne.crypto.transformer.bytes.BytesEncryptor; import org.apache.cayenne.crypto.transformer.value.ValueEncryptor; @@ -30,11 +32,16 @@ public class DefaultBindingsTransformer implements BindingsTransformer { private int[] positions; private ValueEncryptor[] transformers; private BytesEncryptor encryptor; + private ExtendedTypeMap extendedTypeMap; - public DefaultBindingsTransformer(int[] positions, ValueEncryptor[] transformers, BytesEncryptor encryptor) { + public DefaultBindingsTransformer(int[] positions, + ValueEncryptor[] transformers, + BytesEncryptor encryptor, + ExtendedTypeMap extendedTypeMap) { this.positions = positions; this.transformers = transformers; this.encryptor = encryptor; + this.extendedTypeMap = extendedTypeMap; } @Override @@ -46,7 +53,12 @@ public class DefaultBindingsTransformer implements BindingsTransformer { DbAttributeBinding b = bindings[positions[i]]; Object transformed = transformers[i].encrypt(encryptor, b.getValue()); b.setValue(transformed); - b.setExtendedType(null); // TODO fast hack + + ExtendedType extendedType = transformed != null + ? extendedTypeMap.getRegisteredType(transformed.getClass()) + : extendedTypeMap.getDefaultType(); + + b.setExtendedType(extendedType); } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/01618222/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultTransformerFactory.java ---------------------------------------------------------------------- diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultTransformerFactory.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultTransformerFactory.java index 9e1cc72..935a2f8 100644 --- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultTransformerFactory.java +++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/DefaultTransformerFactory.java @@ -20,6 +20,7 @@ package org.apache.cayenne.crypto.transformer; import org.apache.cayenne.access.jdbc.ColumnDescriptor; import org.apache.cayenne.access.translator.DbAttributeBinding; +import org.apache.cayenne.access.types.ExtendedTypeMap; import org.apache.cayenne.crypto.map.ColumnMapper; import org.apache.cayenne.crypto.transformer.bytes.BytesTransformerFactory; import org.apache.cayenne.crypto.transformer.value.ValueDecryptor; @@ -90,7 +91,7 @@ public class DefaultTransformerFactory implements TransformerFactory { } @Override - public BindingsTransformer encryptor(DbAttributeBinding[] bindings) { + public BindingsTransformer encryptor(DbAttributeBinding[] bindings, ExtendedTypeMap extendedTypeMap) { int len = bindings.length; List<Integer> cryptoColumns = null; @@ -120,7 +121,7 @@ public class DefaultTransformerFactory implements TransformerFactory { transformers[i] = transformerFactory.encryptor(b.getAttribute()); } - return new DefaultBindingsTransformer(positions, transformers, bytesTransformerFactory.encryptor()); + return new DefaultBindingsTransformer(positions, transformers, bytesTransformerFactory.encryptor(), extendedTypeMap); } return null; http://git-wip-us.apache.org/repos/asf/cayenne/blob/01618222/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/TransformerFactory.java ---------------------------------------------------------------------- diff --git a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/TransformerFactory.java b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/TransformerFactory.java index a8893d1..64f1389 100644 --- a/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/TransformerFactory.java +++ b/cayenne-crypto/src/main/java/org/apache/cayenne/crypto/transformer/TransformerFactory.java @@ -20,6 +20,7 @@ package org.apache.cayenne.crypto.transformer; import org.apache.cayenne.access.jdbc.ColumnDescriptor; import org.apache.cayenne.access.translator.DbAttributeBinding; +import org.apache.cayenne.access.types.ExtendedTypeMap; /** * A factory that creates encryption transformers used for processing batch @@ -29,7 +30,7 @@ import org.apache.cayenne.access.translator.DbAttributeBinding; */ public interface TransformerFactory { - BindingsTransformer encryptor(DbAttributeBinding[] bindings); + BindingsTransformer encryptor(DbAttributeBinding[] bindings, ExtendedTypeMap extendedTypeMap); MapTransformer decryptor(ColumnDescriptor[] columns, Object sampleRow); } http://git-wip-us.apache.org/repos/asf/cayenne/blob/01618222/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java ---------------------------------------------------------------------- diff --git a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java index b058719..74f9035 100644 --- a/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java +++ b/cayenne-server/src/main/java/org/apache/cayenne/dba/JdbcAdapter.java @@ -19,15 +19,6 @@ package org.apache.cayenne.dba; -import java.net.URL; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.sql.Types; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - import org.apache.cayenne.CayenneRuntimeException; import org.apache.cayenne.access.DataNode; import org.apache.cayenne.access.translator.ParameterBinding; @@ -57,6 +48,15 @@ import org.apache.cayenne.resource.Resource; import org.apache.cayenne.resource.ResourceLocator; import org.apache.cayenne.util.Util; +import java.net.URL; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.sql.Types; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + /** * A generic DbAdapter implementation. Can be used as a default adapter or as a * superclass of a concrete adapter implementation. @@ -545,11 +545,7 @@ public class JdbcAdapter implements DbAdapter { if (binding.getValue() == null) { statement.setNull(binding.getStatementPosition(), binding.getType()); } else { - ExtendedType typeProcessor = binding.getExtendedType() != null - ? binding.getExtendedType() - : getExtendedTypes().getRegisteredType(binding.getValue().getClass()); - - typeProcessor.setJdbcObject(statement, + binding.getExtendedType().setJdbcObject(statement, binding.getValue(), binding.getStatementPosition(), binding.getType(),