Repository: olingo-odata4 Updated Branches: refs/heads/master 58b3896f7 -> 0b862cd68
[OLINGO-486] Abstract EdmEntities without keys do not hand down their empty key set Signed-off-by: Michael Bolz <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/0b862cd6 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/0b862cd6 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/0b862cd6 Branch: refs/heads/master Commit: 0b862cd68e15dae7a0d1ac3a473790444f31893a Parents: 58b3896 Author: Christian Holzer <[email protected]> Authored: Tue Dec 16 13:23:46 2014 +0100 Committer: Michael Bolz <[email protected]> Committed: Tue Dec 16 19:03:36 2014 +0100 ---------------------------------------------------------------------- .../core/edm/provider/EdmEntityTypeImpl.java | 3 +- .../edm/provider/EdmEntityTypeImplTest.java | 105 +++++++++++++++++++ 2 files changed, 107 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0b862cd6/lib/server-core/src/main/java/org/apache/olingo/server/core/edm/provider/EdmEntityTypeImpl.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/edm/provider/EdmEntityTypeImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/edm/provider/EdmEntityTypeImpl.java index bfc31e6..5ad7e99 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/edm/provider/EdmEntityTypeImpl.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/edm/provider/EdmEntityTypeImpl.java @@ -72,7 +72,8 @@ public class EdmEntityTypeImpl extends AbstractEdmEntityType { if (baseTypeName != null) { baseType = buildBaseType(baseTypeName); } - if (baseType == null) { + if (baseType == null + || (baseType.isAbstract() && ((AbstractEdmEntityType) baseType).getKeyPropertyRefs().size() == 0)) { entityBaseType = null; final List<PropertyRef> key = entityType.getKey(); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0b862cd6/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmEntityTypeImplTest.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmEntityTypeImplTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmEntityTypeImplTest.java index ddc9c28..7ba846e 100644 --- a/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmEntityTypeImplTest.java +++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmEntityTypeImplTest.java @@ -116,7 +116,112 @@ public class EdmEntityTypeImplTest { typeWithComplexKey = EdmEntityTypeImpl.getInstance(edm, typeWithComplexKeyName, typeWithComplexKeyProvider); } + + @Test + public void testAbstractBaseTypeWithoutKey() throws Exception { + EdmProvider provider = mock(EdmProvider.class); + EdmProviderImpl edm = new EdmProviderImpl(provider); + + FullQualifiedName baseName = new FullQualifiedName("namespace", "BaseTypeName"); + EntityType baseType = new EntityType(); + baseType.setName(baseName.getName()); + List<Property> properties = new ArrayList<Property>(); + properties.add(new Property().setName("Id").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName())); + properties.add(new Property().setName("Name").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName())); + baseType.setProperties(properties); + List<NavigationProperty> navigationProperties = new ArrayList<NavigationProperty>(); + navigationProperties.add(new NavigationProperty().setName("nav1")); + baseType.setNavigationProperties(navigationProperties); + when(provider.getEntityType(baseName)).thenReturn(baseType); + baseType.setAbstract(true); + EdmEntityType edmAbstarctBaseType = EdmEntityTypeImpl.getInstance(edm, baseName, baseType); + + FullQualifiedName typeName = new FullQualifiedName("namespace", "typeName"); + EntityType type = new EntityType(); + type.setName(typeName.getName()); + type.setBaseType(baseName); + List<Property> typeProperties = new ArrayList<Property>(); + typeProperties.add(new Property().setName("address").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName())); + typeProperties.add(new Property().setName("email").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName())); + type.setProperties(typeProperties); + List<PropertyRef> key = new ArrayList<PropertyRef>(); + key.add(new PropertyRef().setPropertyName("email")); + type.setKey(key); + List<NavigationProperty> typeNavigationProperties = new ArrayList<NavigationProperty>(); + typeNavigationProperties.add(new NavigationProperty().setName("nav2")); + type.setNavigationProperties(typeNavigationProperties); + when(provider.getEntityType(typeName)).thenReturn(type); + + EdmEntityType edmType = EdmEntityTypeImpl.getInstance(edm, typeName, type); + + assertEquals(2, edmAbstarctBaseType.getPropertyNames().size()); + + assertEquals(1, edmType.getKeyPropertyRefs().size()); + assertEquals("email", edmType.getKeyPredicateNames().get(0)); + + assertEquals(4, edmType.getPropertyNames().size()); + assertEquals("Id", edmType.getPropertyNames().get(0)); + assertEquals("Name", edmType.getPropertyNames().get(1)); + assertEquals("address", edmType.getPropertyNames().get(2)); + assertEquals("email", edmType.getPropertyNames().get(3)); + + assertEquals(2, edmType.getNavigationPropertyNames().size()); + assertEquals("nav1", edmType.getNavigationPropertyNames().get(0)); + assertEquals("nav2", edmType.getNavigationPropertyNames().get(1)); + } + + @Test + public void testAbstractBaseTypeWithtKey() throws Exception { + EdmProvider provider = mock(EdmProvider.class); + EdmProviderImpl edm = new EdmProviderImpl(provider); + FullQualifiedName baseName = new FullQualifiedName("namespace", "BaseTypeName"); + EntityType baseType = new EntityType(); + baseType.setName(baseName.getName()); + List<Property> properties = new ArrayList<Property>(); + properties.add(new Property().setName("Id").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName())); + properties.add(new Property().setName("Name").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName())); + baseType.setProperties(properties); + List<PropertyRef> key = new ArrayList<PropertyRef>(); + key.add(new PropertyRef().setPropertyName("Id")); + baseType.setKey(key); + List<NavigationProperty> navigationProperties = new ArrayList<NavigationProperty>(); + navigationProperties.add(new NavigationProperty().setName("nav1")); + baseType.setNavigationProperties(navigationProperties); + when(provider.getEntityType(baseName)).thenReturn(baseType); + baseType.setAbstract(true); + EdmEntityType edmAbstarctBaseType = EdmEntityTypeImpl.getInstance(edm, baseName, baseType); + + FullQualifiedName typeName = new FullQualifiedName("namespace", "typeName"); + EntityType type = new EntityType(); + type.setName(typeName.getName()); + type.setBaseType(baseName); + List<Property> typeProperties = new ArrayList<Property>(); + typeProperties.add(new Property().setName("address").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName())); + typeProperties.add(new Property().setName("email").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName())); + type.setProperties(typeProperties); + List<NavigationProperty> typeNavigationProperties = new ArrayList<NavigationProperty>(); + typeNavigationProperties.add(new NavigationProperty().setName("nav2")); + type.setNavigationProperties(typeNavigationProperties); + when(provider.getEntityType(typeName)).thenReturn(type); + EdmEntityType edmType = EdmEntityTypeImpl.getInstance(edm, typeName, type); + + assertEquals(2, edmAbstarctBaseType.getPropertyNames().size()); + + assertEquals(1, edmType.getKeyPropertyRefs().size()); + assertEquals("Id", edmType.getKeyPredicateNames().get(0)); + + assertEquals(4, edmType.getPropertyNames().size()); + assertEquals("Id", edmType.getPropertyNames().get(0)); + assertEquals("Name", edmType.getPropertyNames().get(1)); + assertEquals("address", edmType.getPropertyNames().get(2)); + assertEquals("email", edmType.getPropertyNames().get(3)); + + assertEquals(2, edmType.getNavigationPropertyNames().size()); + assertEquals("nav1", edmType.getNavigationPropertyNames().get(0)); + assertEquals("nav2", edmType.getNavigationPropertyNames().get(1)); + } + @Test public void hasStream() { assertFalse(typeWithBaseType.hasStream());
