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 2013/12/18 15:05:02 UTC

git commit: [OLINGO-86] Test for 'readBinary'

Updated Branches:
  refs/heads/master e4a0e70ef -> 0a9439c53


[OLINGO-86] Test for 'readBinary'


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/0a9439c5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/tree/0a9439c5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/diff/0a9439c5

Branch: refs/heads/master
Commit: 0a9439c53ba962b06eaa6206749bc846f2ade9c5
Parents: e4a0e70
Author: Michael Bolz <mi...@apache.org>
Authored: Wed Dec 18 15:03:35 2013 +0100
Committer: Michael Bolz <mi...@apache.org>
Committed: Wed Dec 18 15:03:35 2013 +0100

----------------------------------------------------------------------
 .../annotation/data/AnnotationInMemoryDs.java   | 26 +++++++---
 .../data/AnnotationsInMemoryDsTest.java         | 54 ++++++++++++++++++++
 2 files changed, 74 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/0a9439c5/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/core/annotation/data/AnnotationInMemoryDs.java
----------------------------------------------------------------------
diff --git a/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/core/annotation/data/AnnotationInMemoryDs.java b/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/core/annotation/data/AnnotationInMemoryDs.java
index 640662f..a53ee8f 100644
--- a/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/core/annotation/data/AnnotationInMemoryDs.java
+++ b/odata2-annotation-processor/annotation-processor-core/src/main/java/org/apache/olingo/odata2/core/annotation/data/AnnotationInMemoryDs.java
@@ -175,8 +175,16 @@ public class AnnotationInMemoryDs implements DataSource {
     Object data = ANNOTATION_HELPER.getValueForField(mediaLinkEntryData, EdmMediaResourceContent.class);
     Object mimeType = ANNOTATION_HELPER.getValueForField(mediaLinkEntryData, EdmMediaResourceMimeType.class);
 
-    BinaryData db = new BinaryData((byte[]) data, String.valueOf(mimeType));
-    return db;
+    if(data == null && mimeType == null) {
+      DataStore<Object> dataStore = getDataStore(entitySet);
+      Object readEntry = dataStore.read(mediaLinkEntryData);
+      if(readEntry != null) {
+        data = ANNOTATION_HELPER.getValueForField(readEntry, EdmMediaResourceContent.class);
+        mimeType = ANNOTATION_HELPER.getValueForField(readEntry, EdmMediaResourceMimeType.class);
+      }
+    }
+    
+    return new BinaryData((byte[]) data, String.valueOf(mimeType));
   }
 
   @Override
@@ -197,10 +205,16 @@ public class AnnotationInMemoryDs implements DataSource {
       throws ODataNotImplementedException, ODataNotFoundException, EdmException, ODataApplicationException {
 
     try {
-      ANNOTATION_HELPER.setValueForAnnotatedField(
-          mediaEntityInstance, EdmMediaResourceContent.class, binaryData.getData());
-      ANNOTATION_HELPER.setValueForAnnotatedField(
-          mediaEntityInstance, EdmMediaResourceMimeType.class, binaryData.getMimeType());
+      DataStore<Object> dataStore = getDataStore(entitySet);
+      Object readEntry = dataStore.read(mediaEntityInstance);
+      if(readEntry == null) {
+        throw new ODataNotFoundException(ODataNotFoundException.ENTITY);
+      } else {
+        ANNOTATION_HELPER.setValueForAnnotatedField(
+            mediaEntityInstance, EdmMediaResourceContent.class, binaryData.getData());
+        ANNOTATION_HELPER.setValueForAnnotatedField(
+            mediaEntityInstance, EdmMediaResourceMimeType.class, binaryData.getMimeType());
+      }
     } catch (ODataAnnotationException e) {
       throw new ODataRuntimeException("Invalid media resource annotation at entity set '" + entitySet.getName()
           + "' with message '" + e.getMessage() + "'.", e);

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/0a9439c5/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/data/AnnotationsInMemoryDsTest.java
----------------------------------------------------------------------
diff --git a/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/data/AnnotationsInMemoryDsTest.java b/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/data/AnnotationsInMemoryDsTest.java
index 82becde..8b0e5d8 100644
--- a/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/data/AnnotationsInMemoryDsTest.java
+++ b/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/data/AnnotationsInMemoryDsTest.java
@@ -15,6 +15,7 @@
  */
 package org.apache.olingo.odata2.core.annotation.data;
 
+import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -27,6 +28,7 @@ import java.util.concurrent.TimeUnit;
 import org.apache.olingo.odata2.api.annotation.edm.EdmKey;
 import org.apache.olingo.odata2.api.annotation.edm.EdmProperty;
 import org.apache.olingo.odata2.api.data.DataSource;
+import org.apache.olingo.odata2.api.data.DataSource.BinaryData;
 import org.apache.olingo.odata2.api.edm.EdmEntitySet;
 import org.apache.olingo.odata2.api.edm.EdmEntityType;
 import org.apache.olingo.odata2.api.edm.FullQualifiedName;
@@ -157,6 +159,58 @@ public class AnnotationsInMemoryDsTest {
 
     return new Thread(run);
   }
+  
+  @Test
+  public void readBinaryData() throws Exception {
+    EdmEntitySet entitySet = createMockedEdmEntitySet("Photos");
+
+    DataStore<Photo> photoDataStore = datasource.getDataStore(Photo.class);
+    Photo photo = new Photo();
+    photo.setName("SomePic");
+    photo.setType("PNG");
+    byte[] image = "binary".getBytes(Charset.defaultCharset());
+    photo.setImage(image);
+    photo.setImageType("image/png");
+    Photo createdPhoto = photoDataStore.create(photo);
+    
+//    datasource.createData(entitySet, data);
+
+    Map<String, Object> keys = new HashMap<String, Object>();
+    keys.put("Name", "SomePic");
+    keys.put("ImageFormat", "PNG");
+    photo = (Photo) datasource.readData(entitySet, keys);
+    BinaryData readPhoto = datasource.readBinaryData(entitySet, photo);
+    
+    Assert.assertEquals("binary", new String(readPhoto.getData(), Charset.defaultCharset()));
+    Assert.assertArrayEquals(image, readPhoto.getData());
+    Assert.assertEquals("image/png", readPhoto.getMimeType());
+  }
+
+  @Test
+  public void readBinaryDataDirect() throws Exception {
+    EdmEntitySet entitySet = createMockedEdmEntitySet("Photos");
+
+    DataStore<Photo> photoDataStore = datasource.getDataStore(Photo.class);
+    Photo photo = new Photo();
+    photo.setName("SomePic");
+    photo.setType("PNG");
+    byte[] image = "binary".getBytes(Charset.defaultCharset());
+    photo.setImage(image);
+    photo.setImageType("image/png");
+    Photo createdPhoto = photoDataStore.create(photo);
+    
+    photo = new Photo();
+    photo.setName("SomePic");
+    photo.setType("PNG");
+    photo.setImage(null);
+    photo.setImageType(null);
+
+    BinaryData readPhoto = datasource.readBinaryData(entitySet, photo);
+    
+    Assert.assertEquals("binary", new String(readPhoto.getData(), Charset.defaultCharset()));
+    Assert.assertArrayEquals(image, readPhoto.getData());
+    Assert.assertEquals("image/png", readPhoto.getMimeType());
+  }
 
   @Test
   @SuppressWarnings("unchecked")