Repository: olingo-odata4
Updated Branches:
  refs/heads/master 48f93fd87 -> 75cc7197e


[OLINGO-1237]Serialization changes for odata.metadata=minimal


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

Branch: refs/heads/master
Commit: 75cc7197e32773f94cfec7777c973784314d7d37
Parents: 48f93fd
Author: Archana Rai <archana....@sap.com>
Authored: Thu Feb 22 11:59:49 2018 +0530
Committer: Archana Rai <archana....@sap.com>
Committed: Thu Feb 22 11:59:49 2018 +0530

----------------------------------------------------------------------
 .../json/EdmAssistedJsonSerializer.java         |  24 +-
 .../json/EdmAssistedJsonSerializerTest.java     | 296 ++++++++++++++++++-
 2 files changed, 308 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/75cc7197/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/EdmAssistedJsonSerializer.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/EdmAssistedJsonSerializer.java
 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/EdmAssistedJsonSerializer.java
index fd68672..b9cbbd6 100644
--- 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/EdmAssistedJsonSerializer.java
+++ 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/EdmAssistedJsonSerializer.java
@@ -66,10 +66,12 @@ public class EdmAssistedJsonSerializer implements 
EdmAssistedSerializer {
 
   protected final boolean isIEEE754Compatible;
   protected final boolean isODataMetadataNone;
+  protected final boolean isODataMetadataFull;
 
   public EdmAssistedJsonSerializer(final ContentType contentType) {
     this.isIEEE754Compatible = 
ContentTypeHelper.isODataIEEE754Compatible(contentType);
     this.isODataMetadataNone = 
ContentTypeHelper.isODataMetadataNone(contentType);
+    this.isODataMetadataFull = 
ContentTypeHelper.isODataMetadataFull(contentType);
   }
 
   @Override
@@ -207,15 +209,17 @@ public class EdmAssistedJsonSerializer implements 
EdmAssistedSerializer {
       if (eTag != null) {
         json.writeStringField(Constants.JSON_ETAG, eTag);
       }
-      if (type != null) {
-        json.writeStringField(Constants.JSON_TYPE, type);
-      }
-      if (id == null) {
-        if (writeNullId) {
-          json.writeNullField(Constants.JSON_ID);
+      if(isODataMetadataFull){
+        if (type != null) {
+          json.writeStringField(Constants.JSON_TYPE, type);
+        }
+        if (id == null) {
+          if (writeNullId) {
+            json.writeNullField(Constants.JSON_ID);
+          }
+        } else {
+          json.writeStringField(Constants.JSON_ID, id.toASCIIString());
         }
-      } else {
-        json.writeStringField(Constants.JSON_ID, id.toASCIIString());
       }
     }
   }
@@ -326,7 +330,7 @@ public class EdmAssistedJsonSerializer implements 
EdmAssistedSerializer {
       final ComplexValue value) throws IOException, SerializerException {
     json.writeStartObject();
 
-    if (typeName != null && !isODataMetadataNone) {
+    if (typeName != null && isODataMetadataFull) {
       json.writeStringField(Constants.JSON_TYPE, typeName);
     }
 
@@ -362,7 +366,7 @@ public class EdmAssistedJsonSerializer implements 
EdmAssistedSerializer {
   protected void valuable(JsonGenerator json, final Valuable valuable, final 
String name, final EdmType type,
       final EdmProperty edmProperty) throws IOException, SerializerException {
 
-    if (!isODataMetadataNone
+    if (isODataMetadataFull
         && !(valuable instanceof Annotation) && !valuable.isComplex()) {
 
       String typeName = valuable.getType();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/75cc7197/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/EdmAssistedJsonSerializerTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/EdmAssistedJsonSerializerTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/EdmAssistedJsonSerializerTest.java
index 808e459..5874847 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/EdmAssistedJsonSerializerTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/EdmAssistedJsonSerializerTest.java
@@ -56,9 +56,13 @@ public class EdmAssistedJsonSerializerTest {
       new EdmTechProvider(), Collections.<EdmxReference> emptyList(), null);
   private static final EdmEntityContainer entityContainer = 
metadata.getEdm().getEntityContainer();
   private final EdmAssistedSerializer serializer;
+  private final EdmAssistedSerializer serializerMin;
+  private final EdmAssistedSerializer serializerNone;
 
   public EdmAssistedJsonSerializerTest() throws SerializerException {
-    serializer = oData.createEdmAssistedSerializer(ContentType.JSON);
+    serializer = 
oData.createEdmAssistedSerializer(ContentType.JSON_FULL_METADATA);
+    serializerMin = oData.createEdmAssistedSerializer(ContentType.JSON);
+    serializerNone = 
oData.createEdmAssistedSerializer(ContentType.JSON_NO_METADATA);
   }
 
   @Test
@@ -136,7 +140,7 @@ public class EdmAssistedJsonSerializerTest {
             + "\"proper...@odata.type\":\"#Byte\",\"Property3\":20}]}",
         serialize(
             oData.createEdmAssistedSerializer(
-                ContentType.create(ContentType.JSON, 
ContentType.PARAMETER_IEEE754_COMPATIBLE, "true")),
+                ContentType.create(ContentType.JSON_FULL_METADATA, 
ContentType.PARAMETER_IEEE754_COMPATIBLE, "true")),
             metadata, null, entityCollection, null));
   }
 
@@ -373,4 +377,292 @@ public class EdmAssistedJsonSerializerTest {
             
EdmAssistedSerializerOptions.with().contextURL(contextURLBuilder.build()).build())
             .getContent());
   }
+  
+
+  @Test
+  public void entityCollectionSimpleMetadataMin() throws Exception {
+    Entity entity = new Entity();
+    entity.setId(null);
+    entity.addProperty(new Property(null, "Property1", ValueType.PRIMITIVE, 
1.25F));
+    EntityCollection entityCollection = new EntityCollection();
+    entityCollection.getEntities().add(entity);
+    
Assert.assertEquals("{\"@odata.context\":\"$metadata#EntitySet(Property1)\","
+        + "\"value\":[{\"Property1\":1.25}]}",
+        serialize(serializerMin, metadata, null, entityCollection, null));
+  }
+  
+  @Test
+  public void entityCollectionSimpleMetadataNone() throws Exception {
+    Entity entity = new Entity();
+    entity.setId(null);
+    entity.addProperty(new Property(null, "Property1", ValueType.PRIMITIVE, 
1.25F));
+    EntityCollection entityCollection = new EntityCollection();
+    entityCollection.getEntities().add(entity);
+    Assert.assertEquals("{\"value\":[{\"Property1\":1.25}]}",
+        serialize(serializerNone, metadata, null, entityCollection, null));
+  }
+  
+  @Test
+  public void entityCollectionMetadataMin() throws Exception {
+    Entity entity = new Entity();
+    entity.setId(null);
+    entity.addProperty(new Property(null, "Property0", ValueType.PRIMITIVE, 
null))
+        .addProperty(new Property(null, "Property1", ValueType.PRIMITIVE, 1));
+    Calendar date = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
+    date.clear();
+    date.set(2000, 1, 29);
+    entity.addProperty(new Property("Edm.Date", "Property2", 
ValueType.PRIMITIVE, date))
+        .addProperty(new Property("Edm.DateTimeOffset", "Property3", 
ValueType.PRIMITIVE, date))
+        .addProperty(new Property(null, "Property4", 
ValueType.COLLECTION_PRIMITIVE,
+            Arrays.asList(true, false, null)));
+    EntityCollection entityCollection = new EntityCollection();
+    entityCollection.getEntities().add(entity);
+    entityCollection.setCount(2);
+    entityCollection.setNext(URI.create("nextLink"));
+    Assert.assertEquals(
+        
"{\"@odata.context\":\"$metadata#EntitySet(Property0,Property1,Property2,Property3,Property4)\","
+            + "\"@odata.count\":2,"
+            + "\"value\":[{"
+            + "\"Property0\":null,"
+            + "\"Property1\":1,"
+            + "\"Property2\":\"2000-02-29\","
+            + "\"Property3\":\"2000-02-29T00:00:00Z\","
+            + "\"Property4\":[true,false,null]}],"
+            + "\"@odata.nextLink\":\"nextLink\"}",
+        serialize(serializerMin, metadata, null, entityCollection, null));
+  }
+  
+  @Test
+  public void entityCollectionMetadataNone() throws Exception {
+    Entity entity = new Entity();
+    entity.setId(null);
+    entity.addProperty(new Property(null, "Property0", ValueType.PRIMITIVE, 
null))
+        .addProperty(new Property(null, "Property1", ValueType.PRIMITIVE, 1));
+    Calendar date = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
+    date.clear();
+    date.set(2000, 1, 29);
+    entity.addProperty(new Property("Edm.Date", "Property2", 
ValueType.PRIMITIVE, date))
+        .addProperty(new Property("Edm.DateTimeOffset", "Property3", 
ValueType.PRIMITIVE, date))
+        .addProperty(new Property(null, "Property4", 
ValueType.COLLECTION_PRIMITIVE,
+            Arrays.asList(true, false, null)));
+    EntityCollection entityCollection = new EntityCollection();
+    entityCollection.getEntities().add(entity);
+    entityCollection.setCount(2);
+    entityCollection.setNext(URI.create("nextLink"));
+    Assert.assertEquals(
+        "{"
+            + "\"@odata.count\":2,"
+            + "\"value\":[{"
+            + "\"Property0\":null,"
+            + "\"Property1\":1,"
+            + "\"Property2\":\"2000-02-29\","
+            + "\"Property3\":\"2000-02-29T00:00:00Z\","
+            + "\"Property4\":[true,false,null]}],"
+            + "\"@odata.nextLink\":\"nextLink\"}",
+        serialize(serializerNone, metadata, null, entityCollection, null));
+  }
+  
+  @Test
+  public void entityCollectionWithComplexPropertyMetadataMin() throws 
Exception {
+    Entity entity = new Entity();
+    entity.setId(null);
+    entity.addProperty(new Property(null, "Property1", ValueType.PRIMITIVE, 
1L));
+    ComplexValue complexValue = new ComplexValue();
+    complexValue.getValue().add(new Property(null, "Inner1", 
ValueType.PRIMITIVE,
+        BigDecimal.TEN.scaleByPowerOfTen(-5)));
+    Calendar time = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
+    time.clear();
+    time.set(Calendar.HOUR_OF_DAY, 13);
+    time.set(Calendar.SECOND, 59);
+    time.set(Calendar.MILLISECOND, 999);
+    complexValue.getValue().add(new Property("Edm.TimeOfDay", "Inner2", 
ValueType.PRIMITIVE, time));
+    entity.addProperty(new Property("Namespace.ComplexType", "Property2", 
ValueType.COMPLEX, complexValue));
+    EntityCollection entityCollection = new EntityCollection();
+    entityCollection.getEntities().add(entity);
+    
Assert.assertEquals("{\"@odata.context\":\"$metadata#EntitySet(Property1,Property2)\","
+        + "\"value\":[{"
+        + "\"Property1\":1,"
+        + "\"Property2\":{"
+        + "\"Inner1\":0.00010,"
+        + "\"Inner2\":\"13:00:59.999\"}}]}",
+        serialize(serializerMin, metadata, null, entityCollection, null));
+  }
+  
+  @Test
+  public void entityCollectionWithComplexPropertyMetadataNone() throws 
Exception {
+    Entity entity = new Entity();
+    entity.setId(null);
+    entity.addProperty(new Property(null, "Property1", ValueType.PRIMITIVE, 
1L));
+    ComplexValue complexValue = new ComplexValue();
+    complexValue.getValue().add(new Property(null, "Inner1", 
ValueType.PRIMITIVE,
+        BigDecimal.TEN.scaleByPowerOfTen(-5)));
+    Calendar time = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
+    time.clear();
+    time.set(Calendar.HOUR_OF_DAY, 13);
+    time.set(Calendar.SECOND, 59);
+    time.set(Calendar.MILLISECOND, 999);
+    complexValue.getValue().add(new Property("Edm.TimeOfDay", "Inner2", 
ValueType.PRIMITIVE, time));
+    entity.addProperty(new Property("Namespace.ComplexType", "Property2", 
ValueType.COMPLEX, complexValue));
+    EntityCollection entityCollection = new EntityCollection();
+    entityCollection.getEntities().add(entity);
+    Assert.assertEquals("{"
+        + "\"value\":[{"
+        + "\"Property1\":1,"
+        + "\"Property2\":{"
+        + "\"Inner1\":0.00010,"
+        + "\"Inner2\":\"13:00:59.999\"}}]}",
+        serialize(serializerNone, metadata, null, entityCollection, null));
+  }
+
+  @Test
+  public void entityCollectionWithComplexCollectionMin() throws Exception {
+    final EdmEntitySet entitySet = 
entityContainer.getEntitySet("ESMixPrimCollComp");
+    ComplexValue complexValue1 = new ComplexValue();
+    complexValue1.getValue().add(new Property(null, "PropertyInt16", 
ValueType.PRIMITIVE, 1));
+    complexValue1.getValue().add(new Property(null, "PropertyString", 
ValueType.PRIMITIVE, "one"));
+    ComplexValue complexValue2 = new ComplexValue();
+    complexValue2.getValue().add(new Property(null, "PropertyInt16", 
ValueType.PRIMITIVE, 2));
+    complexValue2.getValue().add(new Property(null, "PropertyString", 
ValueType.PRIMITIVE, "two"));
+    ComplexValue complexValue3 = new ComplexValue();
+    complexValue3.getValue().add(new Property(null, "PropertyInt16", 
ValueType.PRIMITIVE, 3));
+    complexValue3.getValue().add(new Property(null, "PropertyString", 
ValueType.PRIMITIVE, "three"));
+    EntityCollection entityCollection = new EntityCollection();
+    entityCollection.getEntities().add(new Entity()
+        .addProperty(new Property(null, "CollPropertyComp", 
ValueType.COLLECTION_COMPLEX,
+            Arrays.asList(complexValue1, complexValue2, complexValue3))));
+    
Assert.assertEquals("{\"@odata.context\":\"$metadata#ESMixPrimCollComp(CollPropertyComp)\","
+        + "\"value\":[{"
+        + "\"CollPropertyComp\":["
+        + "{\"PropertyInt16\":1,\"PropertyString\":\"one\"},"
+        + "{\"PropertyInt16\":2,\"PropertyString\":\"two\"},"
+        + "{\"PropertyInt16\":3,\"PropertyString\":\"three\"}]}]}",
+        serialize(serializerMin, metadata, entitySet, entityCollection, 
"CollPropertyComp"));
+  }
+  
+  @Test
+  public void entityCollectionWithComplexCollectionNone() throws Exception {
+    final EdmEntitySet entitySet = 
entityContainer.getEntitySet("ESMixPrimCollComp");
+    ComplexValue complexValue1 = new ComplexValue();
+    complexValue1.getValue().add(new Property(null, "PropertyInt16", 
ValueType.PRIMITIVE, 1));
+    complexValue1.getValue().add(new Property(null, "PropertyString", 
ValueType.PRIMITIVE, "one"));
+    ComplexValue complexValue2 = new ComplexValue();
+    complexValue2.getValue().add(new Property(null, "PropertyInt16", 
ValueType.PRIMITIVE, 2));
+    complexValue2.getValue().add(new Property(null, "PropertyString", 
ValueType.PRIMITIVE, "two"));
+    ComplexValue complexValue3 = new ComplexValue();
+    complexValue3.getValue().add(new Property(null, "PropertyInt16", 
ValueType.PRIMITIVE, 3));
+    complexValue3.getValue().add(new Property(null, "PropertyString", 
ValueType.PRIMITIVE, "three"));
+    EntityCollection entityCollection = new EntityCollection();
+    entityCollection.getEntities().add(new Entity()
+        .addProperty(new Property(null, "CollPropertyComp", 
ValueType.COLLECTION_COMPLEX,
+            Arrays.asList(complexValue1, complexValue2, complexValue3))));
+    Assert.assertEquals("{"
+        + "\"value\":[{"
+        + "\"CollPropertyComp\":["
+        + "{\"PropertyInt16\":1,\"PropertyString\":\"one\"},"
+        + "{\"PropertyInt16\":2,\"PropertyString\":\"two\"},"
+        + "{\"PropertyInt16\":3,\"PropertyString\":\"three\"}]}]}",
+        serialize(serializerNone, metadata, entitySet, entityCollection, 
"CollPropertyComp"));
+  }
+
+  @Test
+  public void entityCollectionWithEmptyCollectionMin() throws Exception {
+    final EdmEntitySet entitySet = 
entityContainer.getEntitySet("ESMixPrimCollComp");
+    EntityCollection entityCollection = new EntityCollection();
+    entityCollection.getEntities().add(new Entity()
+        .addProperty(new Property(null, "CollPropertyString", 
ValueType.COLLECTION_PRIMITIVE,
+            Collections.emptyList())));
+    Assert.assertEquals(
+        
"{\"@odata.context\":\"$metadata#ESMixPrimCollComp(CollPropertyString)\","
+            + "\"value\":[{\"CollPropertyString\":[]}]}",
+        serialize(serializerMin, metadata, entitySet, entityCollection, 
"CollPropertyString"));
+  }
+  
+  @Test
+  public void entityCollectionWithEmptyCollectionNone() throws Exception {
+    final EdmEntitySet entitySet = 
entityContainer.getEntitySet("ESMixPrimCollComp");
+    EntityCollection entityCollection = new EntityCollection();
+    entityCollection.getEntities().add(new Entity()
+        .addProperty(new Property(null, "CollPropertyString", 
ValueType.COLLECTION_PRIMITIVE,
+            Collections.emptyList())));
+    Assert.assertEquals(
+        "{"
+            + "\"value\":[{\"CollPropertyString\":[]}]}",
+        serialize(serializerNone, metadata, entitySet, entityCollection, 
"CollPropertyString"));
+  }
+
+  @Test
+  public void expandMetadataMin() throws Exception {
+    final Entity relatedEntity1 = new Entity().addProperty(new Property(null, 
"Related1", ValueType.PRIMITIVE, 1.5));
+    final Entity relatedEntity2 = new Entity().addProperty(new Property(null, 
"Related1", ValueType.PRIMITIVE, 2.75));
+    EntityCollection target = new EntityCollection();
+    target.getEntities().add(relatedEntity1);
+    target.getEntities().add(relatedEntity2);
+    Link link = new Link();
+    link.setTitle("NavigationProperty");
+    link.setInlineEntitySet(target);
+    Entity entity = new Entity();
+    entity.setId(null);
+    entity.addProperty(new Property(null, "Property1", ValueType.PRIMITIVE, 
(short) 1));
+    entity.getNavigationLinks().add(link);
+    EntityCollection entityCollection = new EntityCollection();
+    entityCollection.getEntities().add(entity);
+    
Assert.assertEquals("{\"@odata.context\":\"$metadata#EntitySet(Property1,NavigationProperty(Related1))\","
+        + "\"value\":[{"
+        + "\"Property1\":1,"
+        + "\"NavigationProperty\":["
+        + "{\"Related1\":1.5},"
+        + "{\"Related1\":2.75}]}]}",
+        serialize(serializerMin, metadata, null, entityCollection, 
"Property1,NavigationProperty(Related1)"));
+  }
+
+  @Test
+  public void expandMetadataNone() throws Exception {
+    final Entity relatedEntity1 = new Entity().addProperty(new Property(null, 
"Related1", ValueType.PRIMITIVE, 1.5));
+    final Entity relatedEntity2 = new Entity().addProperty(new Property(null, 
"Related1", ValueType.PRIMITIVE, 2.75));
+    EntityCollection target = new EntityCollection();
+    target.getEntities().add(relatedEntity1);
+    target.getEntities().add(relatedEntity2);
+    Link link = new Link();
+    link.setTitle("NavigationProperty");
+    link.setInlineEntitySet(target);
+    Entity entity = new Entity();
+    entity.setId(null);
+    entity.addProperty(new Property(null, "Property1", ValueType.PRIMITIVE, 
(short) 1));
+    entity.getNavigationLinks().add(link);
+    EntityCollection entityCollection = new EntityCollection();
+    entityCollection.getEntities().add(entity);
+    Assert.assertEquals("{"
+        + "\"value\":[{"
+        + "\"Property1\":1,"
+        + "\"NavigationProperty\":["
+        + "{\"Related1\":1.5},"
+        + "{\"Related1\":2.75}]}]}",
+        serialize(serializerNone, metadata, null, entityCollection, 
"Property1,NavigationProperty(Related1)"));
+  }
+
+  @Test
+  public void metadataMin() throws Exception {
+    final ServiceMetadata metadata = oData.createServiceMetadata(null, 
Collections.<EdmxReference> emptyList(),
+        new MetadataETagSupport("W/\"42\""));
+    Entity entity = new Entity();
+    entity.setType("Namespace.EntityType");
+    entity.setId(URI.create("ID"));
+    entity.setETag("W/\"1000\"");
+    Link link = new Link();
+    link.setHref("editLink");
+    entity.setEditLink(link);
+    entity.setMediaContentSource(URI.create("media"));
+    entity.addProperty(new Property(null, "Property1", ValueType.PRIMITIVE,
+        UUID.fromString("12345678-ABCD-1234-CDEF-123456789012")));
+    EntityCollection entityCollection = new EntityCollection();
+    entityCollection.getEntities().add(entity);
+    
Assert.assertEquals("{\"@odata.context\":\"$metadata#EntitySet(Property1)\","
+        + "\"@odata.metadataEtag\":\"W/\\\"42\\\"\",\"value\":[{"
+        + "\"@odata.etag\":\"W/\\\"1000\\\"\","
+        + "\"Property1\":\"12345678-abcd-1234-cdef-123456789012\","
+        + "\"@odata.editLink\":\"editLink\","
+        + "\"@odata.mediaReadLink\":\"editLink/$value\"}]}",
+        serialize(serializerMin, metadata, null, entityCollection, null));
+  }
+  
 }

Reply via email to