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 2014/09/02 13:49:35 UTC

[15/50] [abbrv] git commit: [OLINGO-310] Omit D wrapper in Json payload if needed

[OLINGO-310] Omit D wrapper in Json payload if needed


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

Branch: refs/heads/Olingo-129_PocJpaDataStore
Commit: ebc5c79a52c27a68fc4a27adce98d2751c9da3ce
Parents: 242d961
Author: Christian Amend <ch...@apache.org>
Authored: Mon Jun 23 09:59:37 2014 +0200
Committer: Christian Amend <ch...@apache.org>
Committed: Wed Jun 25 14:37:31 2014 +0200

----------------------------------------------------------------------
 .../api/ep/EntityProviderWriteProperties.java   | 12 +++++++
 .../ep/producer/JsonEntryEntityProducer.java    |  4 +--
 .../ep/ODataEntityProviderPropertiesTest.java   |  4 +++
 .../producer/JsonEntryEntityProducerTest.java   | 18 +++++++++++
 .../ep/producer/JsonFeedEntityProducerTest.java | 33 ++++++++++++++++++++
 5 files changed, 69 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/ebc5c79a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderWriteProperties.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderWriteProperties.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderWriteProperties.java
index 822fc84..df99f21 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderWriteProperties.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderWriteProperties.java
@@ -24,6 +24,7 @@ import java.util.Map;
 
 import org.apache.olingo.odata2.api.ODataCallback;
 import org.apache.olingo.odata2.api.commons.InlineCount;
+import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties.ODataEntityProviderPropertiesBuilder;
 import org.apache.olingo.odata2.api.uri.ExpandSelectTreeNode;
 
 /**
@@ -44,9 +45,14 @@ public class EntityProviderWriteProperties {
   private URI selfLink;
   private boolean includeSimplePropertyType;
   private Map<String, Map<String, Object>> additionalLinks;
+  private boolean omitJsonWrapper;
 
   private EntityProviderWriteProperties() {}
 
+  public final boolean isOmitJsonWrapper() {
+    return omitJsonWrapper;
+  }
+
   /**
    * Returns if type information of simple properties should be in the payload.
    * @return true if information should be in the payload.
@@ -239,6 +245,12 @@ public class EntityProviderWriteProperties {
       this.properties.selfLink = properties.getSelfLink();
       this.properties.includeSimplePropertyType = properties.includeSimplePropertyType;
       this.properties.additionalLinks = properties.additionalLinks;
+      this.properties.omitJsonWrapper = properties.omitJsonWrapper;
+      return this;
+    }
+
+    public ODataEntityProviderPropertiesBuilder omitJsonWrapper(boolean omitJsonWrapper) {
+      properties.omitJsonWrapper = omitJsonWrapper;
       return this;
     }
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/ebc5c79a/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 8ad5d42..1f3693b 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
@@ -70,7 +70,7 @@ public class JsonEntryEntityProducer {
 
     try {
       jsonStreamWriter = new JsonStreamWriter(writer);
-      if (isRootElement) {
+      if (isRootElement && !properties.isOmitJsonWrapper()) {
         jsonStreamWriter.beginObject().name(FormatJson.D);
       }
 
@@ -84,7 +84,7 @@ public class JsonEntryEntityProducer {
 
       jsonStreamWriter.endObject();
 
-      if (isRootElement) {
+      if (isRootElement && !properties.isOmitJsonWrapper()) {
         jsonStreamWriter.endObject();
       }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/ebc5c79a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/ODataEntityProviderPropertiesTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/ODataEntityProviderPropertiesTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/ODataEntityProviderPropertiesTest.java
index 3b0d5ab..51f39a8 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/ODataEntityProviderPropertiesTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/ODataEntityProviderPropertiesTest.java
@@ -74,6 +74,7 @@ public class ODataEntityProviderPropertiesTest extends BaseTest {
         .selfLink(selfLink)
         .includeSimplePropertyType(true)
         .additionalLinks(links)
+        .omitJsonWrapper(true)
         .build();
 
     assertEquals("Wrong amount of callbacks.", 1, properties.getCallbacks().size());
@@ -87,6 +88,7 @@ public class ODataEntityProviderPropertiesTest extends BaseTest {
     assertEquals("Wrong nextLink", "http://localhost", properties.getNextLink());
     assertTrue("Simple property types should be true", properties.isIncludeSimplePropertyType());
     assertEquals(Collections.emptyMap(), properties.getAdditionalLinks().get("aNavigationProperty"));
+    assertTrue("Json Wrapper should be omitted", properties.isOmitJsonWrapper());
   }
 
   @Test
@@ -118,6 +120,7 @@ public class ODataEntityProviderPropertiesTest extends BaseTest {
         .selfLink(selfLink)
         .includeSimplePropertyType(true)
         .additionalLinks(links)
+        .omitJsonWrapper(true)
         .build();
 
     //
@@ -136,5 +139,6 @@ public class ODataEntityProviderPropertiesTest extends BaseTest {
     assertEquals("Wrong nextLink", "http://localhost", fromProperties.getNextLink());
     assertTrue("Simple property types should be true", fromProperties.isIncludeSimplePropertyType());
     assertEquals(Collections.emptyMap(), fromProperties.getAdditionalLinks().get("aNavigationProperty"));
+    assertTrue("Json Wrapper should be omitted", properties.isOmitJsonWrapper());
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/ebc5c79a/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 8efd99a..942edf5 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
@@ -87,6 +87,24 @@ public class JsonEntryEntityProducerTest extends BaseTest {
         json);
   }
 
+  @Test
+  public void omitJsonWrapper() throws Exception {
+    final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Teams");
+    Map<String, Object> teamData = new HashMap<String, Object>();
+    teamData.put("Id", "1");
+    teamData.put("isScrumTeam", true);
+
+    EntityProviderWriteProperties properties =
+        EntityProviderWriteProperties.fromProperties(DEFAULT_PROPERTIES).omitJsonWrapper(true).build();
+    final ODataResponse response = new JsonEntityProvider().writeEntry(entitySet, teamData, properties);
+    final String json = verifyResponse(response);
+    assertEquals("{\"__metadata\":{\"id\":\"" + BASE_URI + "Teams('1')\","
+        + "\"uri\":\"" + BASE_URI + "Teams('1')\",\"type\":\"RefScenario.Team\"},"
+        + "\"Id\":\"1\",\"Name\":null,\"isScrumTeam\":true,"
+        + "\"nt_Employees\":{\"__deferred\":{\"uri\":\"" + BASE_URI + "Teams('1')/nt_Employees\"}}}",
+        json);
+  }
+
   @Test(expected = EntityProviderException.class)
   public void entryWithNullData() throws Exception {
     final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Teams");

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/ebc5c79a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducerTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducerTest.java
index a2195ae..418dc8a 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducerTest.java
@@ -79,6 +79,39 @@ public class JsonFeedEntityProducerTest extends BaseTest {
   }
 
   @Test
+  public void omitJsonWrapperMustHaveNoEffect() throws Exception {
+    final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Teams");
+    Map<String, Object> team1Data = new HashMap<String, Object>();
+    team1Data.put("Id", "1");
+    team1Data.put("isScrumTeam", true);
+    Map<String, Object> team2Data = new HashMap<String, Object>();
+    team2Data.put("Id", "2");
+    team2Data.put("isScrumTeam", false);
+    List<Map<String, Object>> teamsData = new ArrayList<Map<String, Object>>();
+    teamsData.add(team1Data);
+    teamsData.add(team2Data);
+
+    EntityProviderWriteProperties properties =
+        EntityProviderWriteProperties.fromProperties(DEFAULT_PROPERTIES).omitJsonWrapper(true).build();
+    final ODataResponse response = new JsonEntityProvider().writeFeed(entitySet, teamsData, properties);
+    assertNotNull(response);
+    assertNotNull(response.getEntity());
+    assertNull("EntitypProvider must not set content header", response.getContentHeader());
+
+    final String json = StringHelper.inputStreamToString((InputStream) response.getEntity());
+    assertNotNull(json);
+    assertEquals("{\"d\":{\"results\":[{\"__metadata\":{\"id\":\"" + BASE_URI + "Teams('1')\","
+        + "\"uri\":\"" + BASE_URI + "Teams('1')\",\"type\":\"RefScenario.Team\"},"
+        + "\"Id\":\"1\",\"Name\":null,\"isScrumTeam\":true,"
+        + "\"nt_Employees\":{\"__deferred\":{\"uri\":\"" + BASE_URI + "Teams('1')/nt_Employees\"}}},"
+        + "{\"__metadata\":{\"id\":\"" + BASE_URI + "Teams('2')\","
+        + "\"uri\":\"" + BASE_URI + "Teams('2')\",\"type\":\"RefScenario.Team\"},"
+        + "\"Id\":\"2\",\"Name\":null,\"isScrumTeam\":false,"
+        + "\"nt_Employees\":{\"__deferred\":{\"uri\":\"" + BASE_URI + "Teams('2')/nt_Employees\"}}}]}}",
+        json);
+  }
+
+  @Test
   public void inlineCount() throws Exception {
     final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Buildings");
     final ODataResponse response = new JsonEntityProvider().writeFeed(entitySet, new ArrayList<Map<String, Object>>(),