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: