You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ra...@apache.org on 2020/10/29 05:38:37 UTC

[olingo-odata2] branch master updated: [OLINGO-1488]-Support deep structures with identical navigation names

This is an automated email from the ASF dual-hosted git repository.

ramyav pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/olingo-odata2.git


The following commit(s) were added to refs/heads/master by this push:
     new 26cbf2c  [OLINGO-1488]-Support deep structures with identical navigation names
26cbf2c is described below

commit 26cbf2cbe39589723aecdb2decac955a4d34505d
Author: ramya vasanth <ra...@sap.com>
AuthorDate: Thu Oct 29 11:08:17 2020 +0530

    [OLINGO-1488]-Support deep structures with identical navigation names
---
 .../odata2/core/ep/producer/JsonEntryEntityProducer.java  | 15 +++++++++++++--
 .../core/ep/producer/JsonEntryEntityProducerTest.java     | 11 ++++++++++-
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java
index 887d4b9..80a4465 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java
@@ -116,7 +116,11 @@ public class JsonEntryEntityProducer {
         jsonStreamWriter.separator();
         jsonStreamWriter.name(navigationPropertyName);
         if (entityInfo.getExpandedNavigationPropertyNames().contains(navigationPropertyName)) {
-          if (properties.getCallbacks() != null && properties.getCallbacks().containsKey(navigationPropertyName)) {
+
+        String navigationPropertyNameFqn = concat(entityInfo.getEntityType().getName(), navigationPropertyName);
+        Map<String, ODataCallback> callbacks = properties.getCallbacks();
+        if (callbacks != null && (callbacks.containsKey(navigationPropertyName) || 
+                callbacks.containsKey(navigationPropertyNameFqn))) {
             writeExpandedNavigationProperty(writer, entityInfo, data, type, navigationPropertyName);
           } else {
             writeDeferredUri(entityInfo, navigationPropertyName);
@@ -128,6 +132,10 @@ public class JsonEntryEntityProducer {
     }
   }
 
+  private String concat(String s1, String s2) {
+    return s1.concat(".").concat(s2);
+  }
+
   private void writeExpandedNavigationProperty(final Writer writer, final EntityInfoAggregator entityInfo,
       final Map<String, Object> data,
       final EdmEntityType type, final String navigationPropertyName) throws EdmException, EntityProviderException,
@@ -145,7 +153,10 @@ public class JsonEntryEntityProducer {
     context.setCurrentExpandSelectTreeNode(properties.getExpandSelectTree().getLinks().get(
         navigationPropertyName));
 
-    ODataCallback callback = properties.getCallbacks().get(navigationPropertyName);
+    Map<String, ODataCallback> callbacks = properties.getCallbacks();
+    String navigationPropertyNameFqn = concat(entityInfo.getEntityType().getName(), navigationPropertyName);
+    ODataCallback callback = callbacks.get(navigationPropertyName);
+    callback = callback == null ? callbacks.get(navigationPropertyNameFqn) : callback;
     if (callback == null) {
       throw new EntityProviderProducerException(EntityProviderException.EXPANDNOTSUPPORTED);
     }
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java
index 899dd4f..f943148 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java
@@ -880,8 +880,17 @@ public class JsonEntryEntityProducerTest extends BaseTest {
         + "\"nr_Employees\":{\"__deferred\":{\"uri\":\"" + BASE_URI + "Rooms('1')/nr_Employees\"}},"
         + "\"nr_Building\":{\"__deferred\":{\"uri\":\"" + BASE_URI + "Rooms('1')/nr_Building\"}}}]}}}",
         json);
+
+    callbacks.clear();
+    callbacks.put("Building.nb_Rooms", new DataFeedCallback());
+    final ODataResponse responseWithNavigation =
+        new JsonEntityProvider().writeEntry(entitySet, buildingData,
+            EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI)).expandSelectTree(node1)
+                .callbacks(callbacks).build());
+    final String jsonWithNavigation = verifyResponse(responseWithNavigation);
+    assertEquals(json, jsonWithNavigation);
   }
-  
+
   class DataFeedCallback implements OnWriteFeedContent {
     @Override
     public WriteFeedCallbackResult retrieveFeedResult(final WriteFeedCallbackContext context)