You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2015/11/22 14:27:18 UTC

olingo-odata2 git commit: [OLINGO-822] Support skip facets in expand for JSON producer

Repository: olingo-odata2
Updated Branches:
  refs/heads/OLINGO-822_WritePropertiesForExpandContext bdaec2fa9 -> 21dfed3b6


[OLINGO-822] Support skip facets in expand for JSON producer


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/21dfed3b
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/21dfed3b
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/21dfed3b

Branch: refs/heads/OLINGO-822_WritePropertiesForExpandContext
Commit: 21dfed3b6b399e4629729e35cc300104b74cb153
Parents: bdaec2f
Author: mibo <mi...@mirb.de>
Authored: Sun Nov 22 14:27:03 2015 +0100
Committer: mibo <mi...@mirb.de>
Committed: Sun Nov 22 14:27:03 2015 +0100

----------------------------------------------------------------------
 .../ep/producer/JsonEntryEntityProducer.java    |   1 +
 .../producer/JsonEntryEntityProducerTest.java   | 122 +++++++++++++++++--
 2 files changed, 116 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/21dfed3b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java
----------------------------------------------------------------------
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 19736cf..df563b0 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
@@ -139,6 +139,7 @@ public class JsonEntryEntityProducer {
     context.setSourceEntitySet(entitySet);
     context.setNavigationProperty(navigationProperty);
     context.setEntryData(data);
+    context.setCurrentWriteProperties(properties);
     context.setCurrentExpandSelectTreeNode(properties.getExpandSelectTree().getLinks().get(
         navigationPropertyName));
 

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/21dfed3b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java
----------------------------------------------------------------------
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 67b65d2..2b86d06 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
@@ -30,13 +30,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.net.URI;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TimeZone;
+import java.util.*;
 
 import org.apache.olingo.odata2.api.ODataCallback;
 import org.apache.olingo.odata2.api.edm.*;
@@ -585,6 +579,120 @@ public class JsonEntryEntityProducerTest extends BaseTest {
         json);
   }
 
+  @Test(expected=EntityProviderException.class)
+  public void entryWithExpandedEntryWithFacets() throws Exception {
+    Edm edm = MockFacade.getMockEdm();
+    EdmTyped imageUrlProperty = edm.getEntityType("RefScenario", "Employee").getProperty("ImageUrl");
+    EdmFacets facets = mock(EdmFacets.class);
+    when(facets.getMaxLength()).thenReturn(1);
+    when(((EdmProperty) imageUrlProperty).getFacets()).thenReturn(facets);
+
+    Map<String, Object> roomData = new HashMap<String, Object>();
+    roomData.put("Id", "1");
+    roomData.put("Name", "Neu Schwanstein");
+    roomData.put("Seats", new Integer(20));
+    roomData.put("Version", new Integer(3));
+
+    ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
+    Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
+    links.put("nr_Employees", node2);
+    ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
+    Mockito.when(node1.getLinks()).thenReturn(links);
+
+    class EntryCallback implements OnWriteFeedContent {
+      @Override
+      public WriteFeedCallbackResult retrieveFeedResult(final WriteFeedCallbackContext context)
+          throws ODataApplicationException {
+        Map<String, Object> data = new HashMap<String, Object>();
+        data.put("EmployeeId", "1");
+        data.put("ImageUrl", "hhtp://url");
+        WriteFeedCallbackResult result = new WriteFeedCallbackResult();
+        result.setFeedData(Collections.singletonList(data));
+        result.setInlineProperties(DEFAULT_PROPERTIES);
+        return result;
+      }
+    }
+
+    EntryCallback callback = new EntryCallback();
+    Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
+    callbacks.put("nr_Employees", callback);
+
+    EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Rooms");
+    final ODataResponse response =
+        new JsonEntityProvider().writeEntry(entitySet, roomData,
+            EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI)).expandSelectTree(node1)
+                .callbacks(callbacks).build());
+    assertNotNull(response);
+  }
+
+  @Test
+  public void entryWithExpandedEntryIgnoreFacets() throws Exception {
+    Edm edm = MockFacade.getMockEdm();
+    EdmTyped imageUrlProperty = edm.getEntityType("RefScenario", "Employee").getProperty("ImageUrl");
+    EdmFacets facets = mock(EdmFacets.class);
+    when(facets.getMaxLength()).thenReturn(1);
+    when(((EdmProperty) imageUrlProperty).getFacets()).thenReturn(facets);
+
+    Map<String, Object> roomData = new HashMap<String, Object>();
+    roomData.put("Id", "1");
+    roomData.put("Name", "Neu Schwanstein");
+    roomData.put("Seats", new Integer(20));
+    roomData.put("Version", new Integer(3));
+
+    ExpandSelectTreeNode node2 = Mockito.mock(ExpandSelectTreeNode.class);
+    Map<String, ExpandSelectTreeNode> links = new HashMap<String, ExpandSelectTreeNode>();
+    links.put("nr_Employees", node2);
+    ExpandSelectTreeNode node1 = Mockito.mock(ExpandSelectTreeNode.class);
+    Mockito.when(node1.getLinks()).thenReturn(links);
+
+    class EntryCallback implements OnWriteFeedContent {
+      @Override
+      public WriteFeedCallbackResult retrieveFeedResult(final WriteFeedCallbackContext context)
+          throws ODataApplicationException {
+        Map<String, Object> data = new HashMap<String, Object>();
+        data.put("EmployeeId", "1");
+        data.put("ImageUrl", "hhtp://url");
+        WriteFeedCallbackResult result = new WriteFeedCallbackResult();
+        result.setFeedData(Collections.singletonList(data));
+        result.setInlineProperties(DEFAULT_PROPERTIES);
+        EntityProviderWriteProperties properties =
+            EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI))
+                .validatingFacets(context.getCurrentWriteProperties().isValidatingFacets()).build();
+        result.setInlineProperties(properties);
+        return result;
+      }
+    }
+
+    EntryCallback callback = new EntryCallback();
+    Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
+    callbacks.put("nr_Employees", callback);
+
+
+    EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Rooms");
+    final ODataResponse response =
+        new JsonEntityProvider().writeEntry(entitySet, roomData,
+            EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI)).expandSelectTree(node1)
+                .validatingFacets(false)
+                .callbacks(callbacks).build());
+    final String json = verifyResponse(response);
+    assertEquals("{\"d\":{\"__metadata\":{\"id\":\"http://host:80/service/Rooms('1')\"," +
+        "\"uri\":\"http://host:80/service/Rooms('1')\",\"type\":\"RefScenario.Room\",\"etag\":\"W/\\\"3\\\"\"}," +
+        "\"nr_Employees\":{\"results\":[{\"__metadata\":{\"id\":\"http://host:80/service/Employees('1')\"," +
+        "\"uri\":\"http://host:80/service/Employees('1')\",\"type\":\"RefScenario.Employee\"," +
+        "\"content_type\":\"application/octet-stream\"," +
+        "\"media_src\":\"http://host:80/service/Employees('1')/$value\"," +
+        "\"edit_media\":\"http://host:80/service/Employees('1')/$value\"},\"EmployeeId\":\"1\",\"EmployeeName\":null," +
+        "\"ManagerId\":null,\"RoomId\":null,\"TeamId\":null," +
+        "\"Location\":{\"__metadata\":{\"type\":\"RefScenario.c_Location\"}," +
+        "\"City\":{\"__metadata\":{\"type\":\"RefScenario.c_City\"}," +
+        "\"PostalCode\":null,\"CityName\":null},\"Country\":null}," +
+        "\"Age\":null,\"EntryDate\":null,\"ImageUrl\":\"hhtp://url\"," +
+        "\"ne_Manager\":{\"__deferred\":{\"uri\":\"http://host:80/service/Employees('1')/ne_Manager\"}}," +
+        "\"ne_Team\":{\"__deferred\":{\"uri\":\"http://host:80/service/Employees('1')/ne_Team\"}}," +
+        "\"ne_Room\":{\"__deferred\":{\"uri\":\"http://host:80/service/Employees('1')/ne_Room\"}}}]}}}",
+        json);
+  }
+
   @Test
   public void entryWithExpandedEntryButNoRegisteredCallback() throws Exception {
     final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");