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 2017/10/13 12:06:45 UTC

cayenne git commit: CAY-2370 ValueObjectType for byte[] fails lookup

Repository: cayenne
Updated Branches:
  refs/heads/STABLE-4.0 859f459c2 -> 29c17b08f


CAY-2370 ValueObjectType for byte[] fails lookup


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/29c17b08
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/29c17b08
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/29c17b08

Branch: refs/heads/STABLE-4.0
Commit: 29c17b08fbeba73190afc887e0d86f3abfb22239
Parents: 859f459
Author: Nikita Timofeev <st...@gmail.com>
Authored: Fri Oct 13 15:06:05 2017 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Fri Oct 13 15:06:05 2017 +0300

----------------------------------------------------------------------
 .../access/types/ValueObjectTypeFactory.java    | 11 +--
 .../types/ValueObjectTypeFactoryOrderTest.java  | 70 ++++++++++++++++
 .../types/ValueObjectTypeFactoryTest.java       | 84 ++++++++++++++++++++
 docs/doc/src/main/resources/RELEASE-NOTES.txt   |  3 +-
 4 files changed, 162 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/29c17b08/cayenne-server/src/main/java/org/apache/cayenne/access/types/ValueObjectTypeFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ValueObjectTypeFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ValueObjectTypeFactory.java
index 5ce4273..bdcf863 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ValueObjectTypeFactory.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ValueObjectTypeFactory.java
@@ -22,6 +22,7 @@ package org.apache.cayenne.access.types;
 import java.sql.CallableStatement;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
+import java.util.Objects;
 
 /**
  * @since 4.0
@@ -45,19 +46,19 @@ public class ValueObjectTypeFactory implements ExtendedTypeFactory {
         if(valueObjectType == null) {
             return null;
         }
-        ExtendedType<?> decorator = map.getExplictlyRegisteredType(valueObjectType.getTargetType().getName());
+        ExtendedType<?> decorator = map.getExplictlyRegisteredType(valueObjectType.getTargetType().getCanonicalName());
 
         return new ExtendedTypeConverter(decorator, valueObjectType);
     }
 
     static class ExtendedTypeConverter<T, E> implements ExtendedType<T> {
 
-        private ExtendedType<E> extendedType;
-        private ValueObjectType<T, E> valueObjectType;
+        ExtendedType<E> extendedType;
+        ValueObjectType<T, E> valueObjectType;
 
         ExtendedTypeConverter(ExtendedType<E> extendedType, ValueObjectType<T, E> valueObjectType) {
-            this.extendedType = extendedType;
-            this.valueObjectType = valueObjectType;
+            this.extendedType = Objects.requireNonNull(extendedType);
+            this.valueObjectType = Objects.requireNonNull(valueObjectType);
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29c17b08/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryOrderTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryOrderTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryOrderTest.java
new file mode 100644
index 0000000..41843a9
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryOrderTest.java
@@ -0,0 +1,70 @@
+package org.apache.cayenne.access.types;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class ValueObjectTypeFactoryOrderTest {
+    ExtendedTypeMap extendedTypeMap;
+    ValueObjectType valueObjectType1, valueObjectType2;
+    ExtendedType tstType1, tstType2;
+
+    @Before
+    public void setUpRegistry(){
+        valueObjectType1 = createMockValueType(UUID.class, byte[].class);
+        valueObjectType2 = createMockValueType(UUID.class, String.class);
+
+        extendedTypeMap = new ExtendedTypeMap();
+
+        tstType1 = mock(ExtendedType.class);
+        when(tstType1.getClassName()).thenReturn("byte[]");
+        extendedTypeMap.registerType(tstType1);
+
+        tstType2 = new MockExtendedType(String.class);
+        extendedTypeMap.registerType(tstType2);
+    }
+
+    private ValueObjectType createMockValueType(Class<?> valueClass, Class<?> targetClass) {
+        ValueObjectType valueObjectType = mock(ValueObjectType.class);
+        when(valueObjectType.getValueType()).thenReturn(valueClass);
+        when(valueObjectType.getTargetType()).thenReturn(targetClass);
+        return valueObjectType;
+    }
+
+    @Test
+    public void testByteFirstOrder(){
+        List<ValueObjectType<?, ?>> list = new ArrayList<>();
+        list.add(valueObjectType1);
+        list.add(valueObjectType2);
+
+        DefaultValueObjectTypeRegistry registry = new DefaultValueObjectTypeRegistry(list);
+        ValueObjectTypeFactory factory = new ValueObjectTypeFactory(extendedTypeMap,registry);
+
+        ValueObjectTypeFactory.ExtendedTypeConverter converter = (ValueObjectTypeFactory.ExtendedTypeConverter) factory.getType(UUID.class);
+        assertNotNull(converter);
+        assertNotSame(tstType1, converter.extendedType);
+        assertSame(tstType2,converter.extendedType);
+    }
+
+    @Test
+    public void testStringFirstOrder(){
+        List<ValueObjectType<?, ?>> list = new ArrayList<>();
+        list.add(valueObjectType2);
+        list.add(valueObjectType1);
+
+        DefaultValueObjectTypeRegistry registry = new DefaultValueObjectTypeRegistry(list);
+        ValueObjectTypeFactory factory = new ValueObjectTypeFactory(extendedTypeMap,registry);
+
+        ValueObjectTypeFactory.ExtendedTypeConverter converter = (ValueObjectTypeFactory.ExtendedTypeConverter) factory.getType(UUID.class);
+        assertNotNull(converter);
+        assertNotSame(tstType2, converter.extendedType);
+        assertSame(tstType1,converter.extendedType);
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29c17b08/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryTest.java
new file mode 100644
index 0000000..463bf76
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryTest.java
@@ -0,0 +1,84 @@
+package org.apache.cayenne.access.types;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class ValueObjectTypeFactoryTest {
+
+    ExtendedType tstType1, tstType2, tstType3, tstType4;
+
+    ValueObjectTypeFactory factory;
+
+    @Before
+    public void setUpRegistry(){
+        List<ValueObjectType<?, ?>> list = new ArrayList<>();
+        list.add(createMockValueType(UUID.class, byte[].class));
+        list.add(createMockValueType(String.class, String.class));
+        list.add(createMockValueType(int.class, int.class));
+        list.add(createMockValueType(String[].class, String[].class));
+
+        DefaultValueObjectTypeRegistry registry = new DefaultValueObjectTypeRegistry(list);
+
+        ExtendedTypeMap extendedTypeMap = new ExtendedTypeMap();
+
+        tstType1 = mock(ExtendedType.class);
+        when(tstType1.getClassName()).thenReturn("byte[]");
+        extendedTypeMap.registerType(tstType1);
+
+        tstType2 = new MockExtendedType(String.class);
+        extendedTypeMap.registerType(tstType2);
+
+        tstType3 = new MockExtendedType(int.class);
+        extendedTypeMap.registerType(tstType3);
+
+        tstType4 = mock(ExtendedType.class);
+        when(tstType4.getClassName()).thenReturn(String[].class.getCanonicalName());
+        extendedTypeMap.registerType(tstType4);
+
+        factory = new ValueObjectTypeFactory(extendedTypeMap,registry);
+    }
+
+    private ValueObjectType createMockValueType(Class<?> valueClass, Class<?> targetClass) {
+        ValueObjectType valueObjectType = mock(ValueObjectType.class);
+        when(valueObjectType.getValueType()).thenReturn(valueClass);
+        when(valueObjectType.getTargetType()).thenReturn(targetClass);
+        return valueObjectType;
+    }
+
+    @Test
+    public void testUUIDtoByteArray(){
+        ValueObjectTypeFactory.ExtendedTypeConverter converter1 = (ValueObjectTypeFactory.ExtendedTypeConverter) factory.getType(UUID.class);
+        assertNotNull(converter1);
+        assertSame(tstType1, converter1.extendedType);
+    }
+
+    @Test
+    public void testString(){
+        ValueObjectTypeFactory.ExtendedTypeConverter converter2 = (ValueObjectTypeFactory.ExtendedTypeConverter) factory.getType(String.class);
+        assertNotNull(converter2);
+        assertSame(tstType2, converter2.extendedType);
+    }
+
+    @Test
+    public void testInt(){
+        ValueObjectTypeFactory.ExtendedTypeConverter converter3 = (ValueObjectTypeFactory.ExtendedTypeConverter) factory.getType(int.class);
+        assertNotNull(converter3);
+        assertSame(tstType3, converter3.extendedType);
+    }
+
+    @Test
+    public void testStringArray(){
+        ValueObjectTypeFactory.ExtendedTypeConverter converter4 = (ValueObjectTypeFactory.ExtendedTypeConverter) factory.getType(String[].class);
+        assertNotNull(converter4);
+        assertSame(tstType4, converter4.extendedType);
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/29c17b08/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 052fd2f..0687aad 100644
--- a/docs/doc/src/main/resources/RELEASE-NOTES.txt
+++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt
@@ -19,10 +19,11 @@ CAY-2364 Wrong logging in SQLTemplate
 CAY-2365 SQLExec query tries to convert (unexpected) result set into objects
 CAY-2367 ClassCastException reading object with an attribute of type 'char'
 CAY-2368 ColumnSelect: Property.self() translates into wrong SQL code
+CAY-2370 ValueObjectType for byte[] fails lookup
 
 ----------------------------------
 Release: 4.0.B2
-Date:
+Date: October 06, 2017
 ----------------------------------
 
 Bug Fixes: