Repository: olingo-odata4
Updated Branches:
  refs/heads/master b86aa5d97 -> 387ba9c09


[OLINGO-1191] Code Improvements


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/387ba9c0
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/387ba9c0
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/387ba9c0

Branch: refs/heads/master
Commit: 387ba9c096cccd69436027b6dadaa4e83b5ea0d5
Parents: b86aa5d
Author: ramya vasanth <[email protected]>
Authored: Thu Dec 14 10:37:35 2017 +0530
Committer: ramya vasanth <[email protected]>
Committed: Thu Dec 14 10:37:35 2017 +0530

----------------------------------------------------------------------
 .../core/serialization/ODataBinderImpl.java     |  23 +--
 .../olingo/client/core/EntitySetTest.java       |  51 +++++++
 .../apache/olingo/client/core/EntityTest.java   |  51 +++++++
 .../olingo/client/core/containmentNav.json      |  33 +++++
 .../olingo/client/core/containmentNav1.json     |  36 +++++
 .../olingo/client/core/containmentNav2.json     |  33 +++++
 .../olingo/client/core/containmentNav3.json     |  33 +++++
 .../olingo/client/core/containmentNav4.json     |  68 +++++++++
 .../olingo/client/core/metadata_sample.xml      | 139 +++++++++++++++++++
 9 files changed, 458 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataBinderImpl.java
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataBinderImpl.java
 
b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataBinderImpl.java
index 7d0b61c..7d35668 100644
--- 
a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataBinderImpl.java
+++ 
b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ODataBinderImpl.java
@@ -496,10 +496,10 @@ public class ODataBinderImpl implements ODataBinder {
             inlineEntitySet)));
   }
 
-  private EdmEntityType findEntityType(
+  private EdmType findEntityType(
       final String entitySetOrSingletonOrType, final EdmEntityContainer 
container) {
 
-    EdmEntityType type = null;
+    EdmType type = null;
 
     final String firstToken = 
StringUtils.substringBefore(entitySetOrSingletonOrType, "/");
     EdmBindingTarget bindingTarget = container.getEntitySet(firstToken);
@@ -514,9 +514,14 @@ public class ODataBinderImpl implements ODataBinder {
       final String[] splitted = entitySetOrSingletonOrType.split("/");
       if (splitted.length > 1) {
         for (int i = 1; i < splitted.length && type != null; i++) {
-          final EdmNavigationProperty navProp = 
type.getNavigationProperty(splitted[i]);
+          final EdmNavigationProperty navProp = ((EdmStructuredType) 
type).getNavigationProperty(splitted[i]);
           if (navProp == null) {
-            type = null;
+            EdmProperty property = ((EdmStructuredType) 
type).getStructuralProperty(splitted[i]);
+            if (property != null) {
+              type = property.getType();
+            } else {
+              type = null;
+            }
           } else {
             type = navProp.getType();
           }
@@ -548,17 +553,17 @@ public class ODataBinderImpl implements ODataBinder {
           for (EdmSchema schema : edm.getSchemas()) {
             final EdmEntityContainer container = schema.getEntityContainer();
             if (container != null) {
-              final EdmEntityType entityType = 
findEntityType(contextURL.getEntitySetOrSingletonOrType(), container);
+              final EdmType structuredType = 
findEntityType(contextURL.getEntitySetOrSingletonOrType(), container);
 
-              if (entityType != null) {
+              if (structuredType != null) {
                 if (contextURL.getNavOrPropertyPath() == null) {
-                  type = entityType;
+                  type = structuredType;
                 } else {
                   final EdmNavigationProperty navProp =
-                      
entityType.getNavigationProperty(contextURL.getNavOrPropertyPath());
+                      ((EdmStructuredType) 
structuredType).getNavigationProperty(contextURL.getNavOrPropertyPath());
 
                   type = navProp == null
-                      ? entityType
+                      ? structuredType
                       : navProp.getType();
                 }
               }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/java/org/apache/olingo/client/core/EntitySetTest.java
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/java/org/apache/olingo/client/core/EntitySetTest.java
 
b/lib/client-core/src/test/java/org/apache/olingo/client/core/EntitySetTest.java
index b968c5f..6ea256b 100644
--- 
a/lib/client-core/src/test/java/org/apache/olingo/client/core/EntitySetTest.java
+++ 
b/lib/client-core/src/test/java/org/apache/olingo/client/core/EntitySetTest.java
@@ -26,16 +26,39 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
 
+import org.apache.olingo.client.api.EdmEnabledODataClient;
 import org.apache.olingo.client.api.data.ResWrap;
 import org.apache.olingo.client.api.domain.ClientEntity;
 import org.apache.olingo.client.api.domain.ClientEntitySet;
 import org.apache.olingo.client.api.serialization.ODataDeserializerException;
 import org.apache.olingo.commons.api.data.EntityCollection;
+import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.format.ContentType;
 import org.junit.Test;
 
 public class EntitySetTest extends AbstractTest {
 
+private EdmEnabledODataClient getEdmEnabledClient1() {
+    return new EdmEnabledODataClientImpl(null, null, null) {
+
+      private Edm edm;
+
+      @Override
+      public Edm getEdm(final String metadataETag) {
+        return getCachedEdm();
+      }
+
+      @Override
+      public Edm getCachedEdm() {
+        if (edm == null) {
+          edm = 
getReader().readMetadata(getClass().getResourceAsStream("metadata_sample.xml"));
+        }
+        return edm;
+      }
+
+    };
+  }
+  
   private void read(final ContentType contentType) throws IOException, 
ODataDeserializerException {
     final InputStream input = getClass().getResourceAsStream("Customers." + 
getSuffix(contentType));
     final ClientEntitySet entitySet = client.getBinder().getODataEntitySet(
@@ -102,4 +125,32 @@ public class EntitySetTest extends AbstractTest {
   public void jsonRef() throws Exception {
     ref(ContentType.JSON);
   }
+  
+  @Test
+  public void testContainmentNav() throws Exception {
+    final InputStream input = 
getClass().getResourceAsStream("containmentNav1." + 
+       getSuffix(ContentType.JSON_FULL_METADATA));
+    final ClientEntitySet entity = getEdmEnabledClient1().getBinder().
+       getODataEntitySet(client.getDeserializer(
+       ContentType.JSON_FULL_METADATA).toEntitySet(input));
+    assertNotNull(entity);
+    assertEquals("olingo.odata.test1.ETTwoCont", 
+        
entity.getEntities().get(0).getTypeName().getFullQualifiedNameAsString());
+    assertEquals("olingo.odata.test1.ETTwoCont", 
+        
entity.getEntities().get(1).getTypeName().getFullQualifiedNameAsString());
+  }
+  
+  @Test
+  public void testContainmentNavOnSingleton() throws Exception {
+    final InputStream input = 
getClass().getResourceAsStream("containmentNav4." + 
+  getSuffix(ContentType.JSON_FULL_METADATA));
+    final ClientEntitySet entity = getEdmEnabledClient1().getBinder().
+  getODataEntitySet(client.getDeserializer(
+  ContentType.JSON_FULL_METADATA).toEntitySet(input));
+    assertNotNull(entity);
+    assertEquals("olingo.odata.test1.ETCont", 
+        
entity.getEntities().get(0).getTypeName().getFullQualifiedNameAsString());
+    assertEquals("olingo.odata.test1.ETCont", 
+        
entity.getEntities().get(1).getTypeName().getFullQualifiedNameAsString());
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/java/org/apache/olingo/client/core/EntityTest.java
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/java/org/apache/olingo/client/core/EntityTest.java 
b/lib/client-core/src/test/java/org/apache/olingo/client/core/EntityTest.java
index d80846b..bc08918 100644
--- 
a/lib/client-core/src/test/java/org/apache/olingo/client/core/EntityTest.java
+++ 
b/lib/client-core/src/test/java/org/apache/olingo/client/core/EntityTest.java
@@ -76,6 +76,27 @@ public class EntityTest extends AbstractTest {
 
     };
   }
+  
+  private EdmEnabledODataClient getEdmEnabledClient1() {
+    return new EdmEnabledODataClientImpl(null, null, null) {
+
+      private Edm edm;
+
+      @Override
+      public Edm getEdm(final String metadataETag) {
+        return getCachedEdm();
+      }
+
+      @Override
+      public Edm getCachedEdm() {
+        if (edm == null) {
+          edm = 
getReader().readMetadata(getClass().getResourceAsStream("metadata_sample.xml"));
+        }
+        return edm;
+      }
+
+    };
+  }
 
   private void singleton(final ContentType contentType) throws Exception {
     final InputStream input = getClass().getResourceAsStream("VipCustomer." + 
getSuffix(contentType));
@@ -404,4 +425,34 @@ public class EntityTest extends AbstractTest {
     assertTrue(property.isPrimitive());
     assertEquals(property.getValueType(), ValueType.PRIMITIVE);
   }
+  
+  @Test
+  public void testContainmentNav() throws Exception {
+    final InputStream input = getClass().getResourceAsStream(
+       "containmentNav." + getSuffix(ContentType.JSON_FULL_METADATA));
+    final ClientEntity entity = 
getEdmEnabledClient1().getBinder().getODataEntity(
+        
client.getDeserializer(ContentType.JSON_FULL_METADATA).toEntity(input));
+    assertNotNull(entity);
+    assertEquals("olingo.odata.test1.ETCont", 
entity.getTypeName().getFullQualifiedNameAsString());
+  }
+  
+  @Test
+  public void testContainmentNavOnComplexType() throws Exception {
+    final InputStream input = getClass().getResourceAsStream(
+  "containmentNav2." + getSuffix(ContentType.JSON_FULL_METADATA));
+    final ClientEntity entity = 
getEdmEnabledClient1().getBinder().getODataEntity(
+        
client.getDeserializer(ContentType.JSON_FULL_METADATA).toEntity(input));
+    assertNotNull(entity);
+    assertEquals("olingo.odata.test1.ETCont", 
entity.getTypeName().getFullQualifiedNameAsString());
+  }
+  
+  @Test
+  public void testContainmentNavOnSingleton() throws Exception {
+    final InputStream input = getClass().getResourceAsStream(
+  "containmentNav3." + getSuffix(ContentType.JSON_FULL_METADATA));
+    final ClientEntity entity = 
getEdmEnabledClient1().getBinder().getODataEntity(
+        
client.getDeserializer(ContentType.JSON_FULL_METADATA).toEntity(input));
+    assertNotNull(entity);
+    assertEquals("olingo.odata.test1.ETCont", 
entity.getTypeName().getFullQualifiedNameAsString());
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav.json
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav.json
 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav.json
new file mode 100644
index 0000000..b864163
--- /dev/null
+++ 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav.json
@@ -0,0 +1,33 @@
+{
+    "@odata.context": 
"../../$metadata#ESKeyNavCont(-32766)/NavPropertyETBaseContMany(-32768)/olingo.odata.test1.ETCont/$entity",
+    "@odata.metadataEtag": "W/\"c32f78fd-8c2d-44a1-a602-2c6527d44930\"",
+    "[email protected]": "#Int16",
+    "PropertyInt16": -32768,
+    "PropertyString": "Second Resource - negative values",
+    "[email protected]": "#Int32",
+    "PropertyInt32": -2147483648,
+    "[email protected]": "#Int64",
+    "PropertyInt64": -9223372036854775808,
+    "[email protected]": "#Single",
+    "PropertySingle": -179000000,
+    "PropertyDouble": -179000,
+    "[email protected]": "#Decimal",
+    "PropertyDecimal": -34,
+    "[email protected]": "#Binary",
+    "PropertyBinary": "ASNFZ4mrze8=",
+    "[email protected]": "#Date",
+    "PropertyDate": "2015-11-05",
+    "[email protected]": "#DateTimeOffset",
+    "PropertyDateTimeOffset": "2005-12-03T07:17:08Z",
+    "[email protected]": "#Duration",
+    "PropertyDuration": "PT9S",
+    "[email protected]": "#Guid",
+    "PropertyGuid": "76543201-23ab-cdef-0123-456789dddfff",
+    "[email protected]": "#TimeOfDay",
+    "PropertyTimeOfDay": "23:49:14",
+    "PropertyBoolean": false,
+    "[email protected]": "#Byte",
+    "PropertyByte": 0,
+    "[email protected]": "#SByte",
+    "PropertySByte": -128
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav1.json
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav1.json
 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav1.json
new file mode 100644
index 0000000..f752e0d
--- /dev/null
+++ 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav1.json
@@ -0,0 +1,36 @@
+{
+    "@odata.context": 
"../../$metadata#ESKeyNavCont(-32766)/NavPropertyETBaseContMany(0)/NavPropertyETBaseContTwoContMany",
+    "@odata.metadataEtag": "W/\"c32f78fd-8c2d-44a1-a602-2c6527d44930\"",
+    "value": [
+        {
+            "PropertyInt16": -32768,
+            "PropertyString": "Second Resource - negative values",
+            "PropertyInt32": -2147483648,
+            "PropertyInt64": -9223372036854775808,
+            "PropertySingle": -179000000,
+            "PropertyDouble": -179000,
+            "PropertyDecimal": -34,
+            "PropertyBinary": "ASNFZ4mrze8=",
+            "PropertyDate": "2015-11-05",
+            "PropertyDateTimeOffset": "2005-12-03T07:17:08Z",
+            "PropertyDuration": "PT9S",
+            "PropertyGuid": "76543201-23ab-cdef-0123-456789dddfff",
+            "PropertyTimeOfDay": "23:49:14"
+        },
+        {
+            "PropertyInt16": 0,
+            "PropertyString": "",
+            "PropertyInt32": 0,
+            "PropertyInt64": 0,
+            "PropertySingle": 0,
+            "PropertyDouble": 0,
+            "PropertyDecimal": 0,
+            "PropertyBinary": "",
+            "PropertyDate": "1970-01-01",
+            "PropertyDateTimeOffset": "2005-12-03T00:00:00Z",
+            "PropertyDuration": "PT0S",
+            "PropertyGuid": "76543201-23ab-cdef-0123-456789cccddd",
+            "PropertyTimeOfDay": "00:01:01"
+        }
+    ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav2.json
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav2.json
 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav2.json
new file mode 100644
index 0000000..bc7113b
--- /dev/null
+++ 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav2.json
@@ -0,0 +1,33 @@
+{
+    "@odata.context": 
"../../$metadata#ESKeyNavCont(-32766)/PropertyCompNavCont/NavPropertyETTwoKeyNavETContOne/$entity",
+    "@odata.metadataEtag": "W/\"c32f78fd-8c2d-44a1-a602-2c6527d44930\"",
+    "[email protected]": "#Int16",
+    "PropertyInt16": -32768,
+    "PropertyString": "Second Resource - negative values",
+    "[email protected]": "#Int32",
+    "PropertyInt32": -2147483648,
+    "[email protected]": "#Int64",
+    "PropertyInt64": -9223372036854775808,
+    "[email protected]": "#Single",
+    "PropertySingle": -179000000,
+    "PropertyDouble": -179000,
+    "[email protected]": "#Decimal",
+    "PropertyDecimal": -34,
+    "[email protected]": "#Binary",
+    "PropertyBinary": "ASNFZ4mrze8=",
+    "[email protected]": "#Date",
+    "PropertyDate": "2015-11-05",
+    "[email protected]": "#DateTimeOffset",
+    "PropertyDateTimeOffset": "2005-12-03T07:17:08Z",
+    "[email protected]": "#Duration",
+    "PropertyDuration": "PT9S",
+    "[email protected]": "#Guid",
+    "PropertyGuid": "76543201-23ab-cdef-0123-456789dddfff",
+    "[email protected]": "#TimeOfDay",
+    "PropertyTimeOfDay": "23:49:14",
+    "PropertyBoolean": false,
+    "[email protected]": "#Byte",
+    "PropertyByte": 0,
+    "[email protected]": "#SByte",
+    "PropertySByte": -128
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav3.json
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav3.json
 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav3.json
new file mode 100644
index 0000000..bd17c0e
--- /dev/null
+++ 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav3.json
@@ -0,0 +1,33 @@
+{
+    "@odata.context": 
"../../$metadata#SI/PropertyCompNavCont/NavPropertyETTwoKeyNavETContOne/$entity",
+    "@odata.metadataEtag": "W/\"c32f78fd-8c2d-44a1-a602-2c6527d44930\"",
+    "[email protected]": "#Int16",
+    "PropertyInt16": -32768,
+    "PropertyString": "Second Resource - negative values",
+    "[email protected]": "#Int32",
+    "PropertyInt32": -2147483648,
+    "[email protected]": "#Int64",
+    "PropertyInt64": -9223372036854775808,
+    "[email protected]": "#Single",
+    "PropertySingle": -179000000,
+    "PropertyDouble": -179000,
+    "[email protected]": "#Decimal",
+    "PropertyDecimal": -34,
+    "[email protected]": "#Binary",
+    "PropertyBinary": "ASNFZ4mrze8=",
+    "[email protected]": "#Date",
+    "PropertyDate": "2015-11-05",
+    "[email protected]": "#DateTimeOffset",
+    "PropertyDateTimeOffset": "2005-12-03T07:17:08Z",
+    "[email protected]": "#Duration",
+    "PropertyDuration": "PT9S",
+    "[email protected]": "#Guid",
+    "PropertyGuid": "76543201-23ab-cdef-0123-456789dddfff",
+    "[email protected]": "#TimeOfDay",
+    "PropertyTimeOfDay": "23:49:14",
+    "PropertyBoolean": false,
+    "[email protected]": "#Byte",
+    "PropertyByte": 0,
+    "[email protected]": "#SByte",
+    "PropertySByte": -128
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav4.json
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav4.json
 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav4.json
new file mode 100644
index 0000000..d317ef1
--- /dev/null
+++ 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/containmentNav4.json
@@ -0,0 +1,68 @@
+{
+    "@odata.context": "../../$metadata#SI/NavPropertyETContMany",
+    "@odata.metadataEtag": "W/\"c32f78fd-8c2d-44a1-a602-2c6527d44930\"",
+    "value": [
+        {
+            "[email protected]": "#Int16",
+                   "PropertyInt16": -32768,
+                   "PropertyString": "Second Resource - negative values",
+                   "[email protected]": "#Int32",
+                   "PropertyInt32": -2147483648,
+                   "[email protected]": "#Int64",
+                   "PropertyInt64": -9223372036854775808,
+                   "[email protected]": "#Single",
+                   "PropertySingle": -179000000,
+                   "PropertyDouble": -179000,
+                   "[email protected]": "#Decimal",
+                   "PropertyDecimal": -34,
+                   "[email protected]": "#Binary",
+                   "PropertyBinary": "ASNFZ4mrze8=",
+                   "[email protected]": "#Date",
+                   "PropertyDate": "2015-11-05",
+                   "[email protected]": "#DateTimeOffset",
+                   "PropertyDateTimeOffset": "2005-12-03T07:17:08Z",
+                   "[email protected]": "#Duration",
+                   "PropertyDuration": "PT9S",
+                   "[email protected]": "#Guid",
+                   "PropertyGuid": "76543201-23ab-cdef-0123-456789dddfff",
+                   "[email protected]": "#TimeOfDay",
+                   "PropertyTimeOfDay": "23:49:14",
+                   "PropertyBoolean": false,
+                   "[email protected]": "#Byte",
+                   "PropertyByte": 0,
+                   "[email protected]": "#SByte",
+                   "PropertySByte": -128
+        },
+        {
+            "[email protected]": "#Int16",
+                   "PropertyInt16": -365,
+                   "PropertyString": "Second Resource - negative values",
+                   "[email protected]": "#Int32",
+                   "PropertyInt32": -2147483648,
+                   "[email protected]": "#Int64",
+                   "PropertyInt64": -9223372036854775808,
+                   "[email protected]": "#Single",
+                   "PropertySingle": -179000000,
+                   "PropertyDouble": -179000,
+                   "[email protected]": "#Decimal",
+                   "PropertyDecimal": -34,
+                   "[email protected]": "#Binary",
+                   "PropertyBinary": "ASNFZ4mrze8=",
+                   "[email protected]": "#Date",
+                   "PropertyDate": "2015-11-05",
+                   "[email protected]": "#DateTimeOffset",
+                   "PropertyDateTimeOffset": "2005-12-03T07:17:08Z",
+                   "[email protected]": "#Duration",
+                   "PropertyDuration": "PT9S",
+                   "[email protected]": "#Guid",
+                   "PropertyGuid": "76543201-23ab-cdef-0123-456789dddfff",
+                   "[email protected]": "#TimeOfDay",
+                   "PropertyTimeOfDay": "23:49:14",
+                   "PropertyBoolean": false,
+                   "[email protected]": "#Byte",
+                   "PropertyByte": 0,
+                   "[email protected]": "#SByte",
+                   "PropertySByte": -128
+        }
+    ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/387ba9c0/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_sample.xml
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_sample.xml
 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_sample.xml
new file mode 100644
index 0000000..4be77ab
--- /dev/null
+++ 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/metadata_sample.xml
@@ -0,0 +1,139 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx";>
+       <edmx:Reference Uri="../v4.0/cs02/vocabularies/Org.OData.Core.V1.xml">
+               <edmx:Include Namespace="Org.OData.Core.V1" Alias="Core" />
+       </edmx:Reference>
+       <edmx:DataServices>
+               <Schema xmlns="http://docs.oasis-open.org/odata/ns/edm";
+                       Namespace="olingo.odata.test1" Alias="Namespace1_Alias">
+                       <EntityType Name="ETKeyNavCont">
+                               <Key>
+                                       <PropertyRef Name="PropertyInt16" />
+                               </Key>
+                               <Property Name="PropertyInt16" Type="Edm.Int16" 
Nullable="false" />
+                               <Property Name="PropertyString" 
Type="Edm.String" Nullable="false" />
+                               <Property Name="PropertyCompNavCont" 
Type="Namespace1_Alias.CTNavCont" />
+                               <NavigationProperty Name="NavPropertyETContOne"
+                                       Type="Namespace1_Alias.ETCont" 
ContainsTarget="true" />
+                               <NavigationProperty Name="NavPropertyETContMany"
+                                       
Type="Collection(Namespace1_Alias.ETCont)" ContainsTarget="true" />
+                               <NavigationProperty 
Name="NavPropertyETBaseContMany"
+                                       
Type="Collection(Namespace1_Alias.ETBaseCont)" ContainsTarget="true" />
+                       </EntityType>
+                       <EntityType Name="ETBaseCont">
+                               <Key>
+                                       <PropertyRef Name="PropertyInt16" />
+                               </Key>
+                               <Property Name="PropertyInt16" Type="Edm.Int16" 
Nullable="false" />
+                               <Property Name="PropertyString" 
Type="Edm.String" />
+                               <Property Name="PropertyInt32" Type="Edm.Int32" 
/>
+                               <Property Name="PropertyInt64" Type="Edm.Int64" 
/>
+                               <Property Name="PropertySingle" 
Type="Edm.Single" />
+                               <Property Name="PropertyDouble" 
Type="Edm.Double" />
+                               <Property Name="PropertyDecimal" 
Type="Edm.Decimal" Scale="10" />
+                               <Property Name="PropertyBinary" 
Type="Edm.Binary" />
+                               <Property Name="PropertyDate" Type="Edm.Date" />
+                               <Property Name="PropertyDateTimeOffset" 
Type="Edm.DateTimeOffset" />
+                               <Property Name="PropertyDuration" 
Type="Edm.Duration" />
+                               <Property Name="PropertyGuid" Type="Edm.Guid" />
+                               <Property Name="PropertyTimeOfDay" 
Type="Edm.TimeOfDay" />
+                               <NavigationProperty 
Name="NavPropertyETBaseContTwoContMany"
+                                       
Type="Collection(Namespace1_Alias.ETTwoCont)" ContainsTarget="true" />
+                               <NavigationProperty 
Name="NavPropertyETBaseContTwoContOne"
+                                       Type="Namespace1_Alias.ETTwoCont" 
Nullable="false" ContainsTarget="true" />
+                       </EntityType>
+                       <EntityType Name="ETCont" 
BaseType="Namespace1_Alias.ETBaseCont">
+                               <Property Name="PropertyBoolean" 
Type="Edm.Boolean" />
+                               <Property Name="PropertyByte" Type="Edm.Byte" />
+                               <Property Name="PropertySByte" Type="Edm.SByte" 
/>
+                       </EntityType>
+                       <EntityType Name="ETTwoCont">
+                               <Key>
+                                       <PropertyRef Name="PropertyInt16" />
+                                       <PropertyRef Name="PropertyString" />
+                               </Key>
+                               <Property Name="PropertyInt16" Type="Edm.Int16" 
Nullable="false" />
+                               <Property Name="PropertyString" 
Type="Edm.String" Nullable="false" />
+                               <Property Name="PropertyInt32" Type="Edm.Int32" 
/>
+                               <Property Name="PropertyInt64" Type="Edm.Int64" 
/>
+                               <Property Name="PropertySingle" 
Type="Edm.Single" />
+                               <Property Name="PropertyDouble" 
Type="Edm.Double" />
+                               <Property Name="PropertyDecimal" 
Type="Edm.Decimal" Scale="10" />
+                               <Property Name="PropertyBinary" 
Type="Edm.Binary" />
+                               <Property Name="PropertyDate" Type="Edm.Date" />
+                               <Property Name="PropertyDateTimeOffset" 
Type="Edm.DateTimeOffset" />
+                               <Property Name="PropertyDuration" 
Type="Edm.Duration" />
+                               <Property Name="PropertyGuid" Type="Edm.Guid" />
+                               <Property Name="PropertyTimeOfDay" 
Type="Edm.TimeOfDay" />
+                       </EntityType>
+                       <ComplexType Name="CTNavCont">
+                               <NavigationProperty 
Name="NavPropertyETTwoKeyNavETContOne"
+                                       Type="Namespace1_Alias.ETCont" 
ContainsTarget="true" />
+                               <NavigationProperty 
Name="NavPropertyETTwoKeyNavETContMany"
+                                       
Type="Collection(Namespace1_Alias.ETBaseCont)" ContainsTarget="true" />
+                       </ComplexType>
+                       <EntityType Name="ETTwoPrim">
+                               <Key>
+                                       <PropertyRef Name="PropertyInt16" />
+                               </Key>
+                               <Property Name="PropertyInt16" Type="Edm.Int16" 
Nullable="false" />
+                               <Property Name="PropertyString" 
Type="Edm.String" />
+                               <Property Name="PropertyCompNavCont" 
Type="Namespace1_Alias.CTNavCont" />
+                               <NavigationProperty Name="NavPropertyETContOne"
+                                       Type="Namespace1_Alias.ETCont" 
ContainsTarget="true" />
+                               <NavigationProperty Name="NavPropertyETContMany"
+                                       
Type="Collection(Namespace1_Alias.ETCont)" ContainsTarget="true" />
+                       </EntityType>
+                       <EntityContainer Name="Container">
+                               <EntitySet Name="ESKeyNavCont" 
EntityType="Namespace1_Alias.ETKeyNavCont">
+                                       <NavigationPropertyBinding
+                                               
Path="NavPropertyETTwoKeyNavOne/NavPropertyETKeyNavOne" Target="ESKeyNav" />
+                                       <NavigationPropertyBinding
+                                               
Path="NavPropertyETTwoKeyNavMany/NavPropertyETKeyNavOne" Target="ESKeyNav" />
+                                       <NavigationPropertyBinding 
Path="NavPropertyETTwoKeyNavContOne"
+                                               Target="ESTwoKeyNavCont" />
+                                       <NavigationPropertyBinding 
Path="NavPropertyETTwoKeyNavContMany"
+                                               Target="ESTwoKeyNavCont" />
+                                       <NavigationPropertyBinding
+                                               
Path="PropertyCompNavCont/NavPropertyETKeyNavOne/NavPropertyETKeyNavOne"
+                                               Target="ESKeyNav" />
+                                       <NavigationPropertyBinding
+                                               
Path="PropertyCompNavCont/NavPropertyETKeyNavMany/NavPropertyETKeyNavOne"
+                                               Target="ESKeyNav" />
+                                       <NavigationPropertyBinding
+                                               
Path="PropertyCompNavCont/NavPropertyETTwoKeyNavOne/NavPropertyETKeyNavOne"
+                                               Target="ESKeyNav" />
+                                       <NavigationPropertyBinding
+                                               
Path="PropertyCompNavCont/NavPropertyETTwoKeyNavMany/NavPropertyETKeyNavOne"
+                                               Target="ESKeyNav" />
+                                       <Annotation Term="Core.Description">
+                                               <String>Contains entities with 
containment navigation properties
+                                               </String>
+                                       </Annotation>
+                                       <Annotation 
Term="Namespace1_Alias.Data">
+                                               <Bool>false</Bool>
+                                       </Annotation>
+                               </EntitySet>
+                               <Singleton Name="SI" 
Type="Namespace1_Alias.ETTwoPrim" />
+                       </EntityContainer>
+               </Schema>
+       </edmx:DataServices>
+</edmx:Edmx>
\ No newline at end of file

Reply via email to