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(),

Reply via email to