You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by sk...@apache.org on 2014/01/14 12:01:28 UTC

git commit: [OLINGO-117] deleted entries support]

Updated Branches:
  refs/heads/olingo-117 f23e8c7a8 -> 3c327f2fb


[OLINGO-117] deleted entries support]


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

Branch: refs/heads/olingo-117
Commit: 3c327f2fbaaaf985b44e01b6a333e22b78acef25
Parents: f23e8c7
Author: Stephan Klevenz <sk...@apache.org>
Authored: Tue Jan 14 09:50:51 2014 +0100
Committer: Stephan Klevenz <sk...@apache.org>
Committed: Tue Jan 14 12:01:46 2014 +0100

----------------------------------------------------------------------
 .../JsonDeletedEntryEntityProducer.java         | 49 ++++++++++++++++++++
 .../ep/producer/JsonFeedEntityProducer.java     | 10 ++++
 .../olingo/odata2/core/ep/util/FormatJson.java  |  1 +
 .../JsonFeedWithDeltaLinkProducerTest.java      | 46 ++++++++++++++++--
 4 files changed, 101 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/3c327f2f/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonDeletedEntryEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonDeletedEntryEntityProducer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonDeletedEntryEntityProducer.java
new file mode 100644
index 0000000..88f54f2
--- /dev/null
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonDeletedEntryEntityProducer.java
@@ -0,0 +1,49 @@
+package org.apache.olingo.odata2.core.ep.producer;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.olingo.odata2.api.ep.EntityProviderException;
+import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
+import org.apache.olingo.odata2.core.ep.aggregator.EntityInfoAggregator;
+import org.apache.olingo.odata2.core.ep.util.FormatJson;
+import org.apache.olingo.odata2.core.ep.util.JsonStreamWriter;
+
+public class JsonDeletedEntryEntityProducer {
+
+  private EntityProviderWriteProperties properties;
+
+  public JsonDeletedEntryEntityProducer(EntityProviderWriteProperties properties) {
+    this.properties = properties;
+  }
+
+  public void append(Writer writer, EntityInfoAggregator entityInfo, List<Map<String, Object>> deletedEntries)
+      throws EntityProviderException {
+    JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
+    try {
+      if (deletedEntries.size() > 0) {
+        jsonStreamWriter.separator();
+        for (Map<String, Object> deletedEntry : deletedEntries) {
+          jsonStreamWriter.beginObject();
+
+          String odataContextValue = "$metadata#" + entityInfo.getEntitySetName() + "/$deletedEntity";
+          String selfLink = AtomEntryEntityProducer.createSelfLink(entityInfo, deletedEntry, null);
+          String idValue = properties.getServiceRoot().toASCIIString() + selfLink;
+
+          jsonStreamWriter.namedStringValue(FormatJson.ODATA_CONTEXT, odataContextValue);
+          jsonStreamWriter.separator();
+          jsonStreamWriter.namedStringValue(FormatJson.ID, idValue);
+
+          jsonStreamWriter.endObject();
+        }
+      }
+    } catch (final IOException e) {
+      throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
+          .getSimpleName()), e);
+    }
+
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/3c327f2f/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducer.java
index eb84b5b..25af754 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedEntityProducer.java
@@ -75,6 +75,16 @@ public class JsonFeedEntityProducer {
         }
         entryProducer.append(writer, entityInfo, entryData, false);
       }
+
+      if (callback != null) {
+        JsonDeletedEntryEntityProducer deletedEntryProducer = new JsonDeletedEntryEntityProducer(properties);
+        TombstoneCallbackResult callbackResult = callback.getTombstoneCallbackResult();
+        List<Map<String, Object>> deletedEntries = callbackResult.getDeletedEntriesData();
+        if (deletedEntries != null) {
+          deletedEntryProducer.append(writer, entityInfo, deletedEntries);
+        }
+      }
+
       jsonStreamWriter.endArray();
 
       appendNextLink(jsonStreamWriter);

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/3c327f2f/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/util/FormatJson.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/util/FormatJson.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/util/FormatJson.java
index 28b31e1..4d108b7 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/util/FormatJson.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/util/FormatJson.java
@@ -50,4 +50,5 @@ public class FormatJson {
   public static final String VALUE = "value";
   public static final String INNER_ERROR = "innererror";
   public static final String DELTA = "__delta";
+  public static final String ODATA_CONTEXT = "@odata.context";
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/3c327f2f/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedWithDeltaLinkProducerTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedWithDeltaLinkProducerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedWithDeltaLinkProducerTest.java
index 7927b02..03d7e0c 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedWithDeltaLinkProducerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFeedWithDeltaLinkProducerTest.java
@@ -1,12 +1,12 @@
 package org.apache.olingo.odata2.core.ep.producer;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.*;
 
+import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.Type;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -14,6 +14,7 @@ import java.util.Map;
 
 import org.apache.olingo.odata2.api.ODataCallback;
 import org.apache.olingo.odata2.api.edm.EdmEntitySet;
+import org.apache.olingo.odata2.api.ep.EntityProviderException;
 import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
 import org.apache.olingo.odata2.api.ep.callback.TombstoneCallback;
 import org.apache.olingo.odata2.api.processor.ODataResponse;
@@ -75,8 +76,45 @@ public class JsonFeedWithDeltaLinkProducerTest extends BaseTest {
     final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");
 
     TombstoneCallback tombstoneCallback =
+        new TombstoneCallbackImpl(null, BASE_URI + "Rooms?!deltatoken=1234");
+
+    final String json = writeRoomData(entitySet, tombstoneCallback);
+
+    assertTrue("Delta Link missing or wrong!", json
+        .contains("__delta\":\"http://host:80/service/Rooms?!deltatoken=1234"));
+  }
+
+  @Test
+  public void deletedEntries() throws Exception {
+    final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");
+
+    TombstoneCallback tombstoneCallback =
+        new TombstoneCallbackImpl(deletedRoomData, null);
+
+    final String json = writeRoomData(entitySet, tombstoneCallback);
+
+    assertTrue("Somthing wring with @odata.context!", json
+        .contains("{\"@odata.context\":\"$metadata#Rooms/$deletedEntity\",\""));
+    System.out.println(json);
+  }
+
+  @Test
+  public void deletedEntriesAndDeltaLink() throws Exception {
+    final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");
+
+    TombstoneCallback tombstoneCallback =
         new TombstoneCallbackImpl(deletedRoomData, BASE_URI + "Rooms?!deltatoken=1234");
 
+    final String json = writeRoomData(entitySet, tombstoneCallback);
+
+    assertTrue("Delta Link missing or wrong!", json
+        .contains("__delta\":\"http://host:80/service/Rooms?!deltatoken=1234"));
+    assertTrue("Somthing wring with @odata.context!", json
+        .contains("{\"@odata.context\":\"$metadata#Rooms/$deletedEntity\",\""));
+  }
+
+  private String writeRoomData(final EdmEntitySet entitySet, TombstoneCallback tombstoneCallback)
+      throws URISyntaxException, EntityProviderException, IOException {
     Map<String, ODataCallback> callbacks = new HashMap<String, ODataCallback>();
     callbacks.put(TombstoneCallback.CALLBACK_KEY_TOMBSTONE, tombstoneCallback);
 
@@ -91,9 +129,7 @@ public class JsonFeedWithDeltaLinkProducerTest extends BaseTest {
 
     final String json = StringHelper.inputStreamToString((InputStream) response.getEntity());
     assertNotNull(json);
-
-    assertTrue("Delta Link missing or wrong!", json.contains("__delta\":\"http://host:80/service/Rooms?!deltatoken=1234"));
-    
+    return json;
   }
 
 }