You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ra...@apache.org on 2020/10/08 09:00:42 UTC

[olingo-odata2] branch master updated: [OLINGO-1483]Handle Decimal types in JsonPropertyConsumer

This is an automated email from the ASF dual-hosted git repository.

ramyav pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/olingo-odata2.git


The following commit(s) were added to refs/heads/master by this push:
     new 24ec404  [OLINGO-1483]Handle Decimal types in JsonPropertyConsumer
24ec404 is described below

commit 24ec4046285fb28965f06dacd1d966bfa21533c3
Author: ramya vasanth <ra...@sap.com>
AuthorDate: Thu Oct 8 14:30:27 2020 +0530

    [OLINGO-1483]Handle Decimal types in JsonPropertyConsumer
---
 .../odata2/core/ep/consumer/JsonPropertyConsumer.java     |  8 ++++++++
 .../odata2/core/ep/consumer/JsonPropertyConsumerTest.java | 15 +++++++++++++++
 .../odata2/core/ep/consumer/XmlPropertyConsumerTest.java  | 13 +++++++++++++
 .../org/apache/olingo/odata2/testutil/mock/EdmMock.java   |  4 +++-
 4 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumer.java
index 7589aa5..e8a7cf2 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumer.java
@@ -219,6 +219,14 @@ public class JsonPropertyConsumer {
               .addContent(entityPropertyInfo.getName()));
         }
         break;
+      case Decimal:
+    	  if (tokenType == JsonToken.NUMBER || tokenType == JsonToken.STRING) {
+              value = reader.nextString();
+            } else {
+              throw new EntityProviderException(EntityProviderException.INVALID_PROPERTY_VALUE
+                  .addContent(entityPropertyInfo.getName()));
+            }
+    	  break;
       default:
         if (tokenType == JsonToken.STRING) {
           value = reader.nextString();
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumerTest.java
index 36b1cca..6d73fca 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonPropertyConsumerTest.java
@@ -97,6 +97,21 @@ public class JsonPropertyConsumerTest extends BaseTest {
     when(edmProperty.getType()).thenReturn(EdmSimpleTypeKind.Int32.getEdmSimpleTypeInstance());
     resultMap = execute(edmProperty, reader);
     assertEquals(Integer.valueOf("67"), resultMap.get("Age"));
+    // Decimal
+    reader = prepareReader(simplePropertyJson);
+    when(edmProperty.getType()).thenReturn(EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance());
+    resultMap = execute(edmProperty, reader);
+    assertEquals(BigDecimal.valueOf(67), resultMap.get("Age"));
+    //Decimal
+    simplePropertyJson = "{\"d\":{\"Revenue\":67.56}}";
+    edmProperty = mock(EdmProperty.class);
+    when(edmProperty.getName()).thenReturn("Revenue");
+    when(edmProperty.isSimple()).thenReturn(true);
+    
+    reader = prepareReader(simplePropertyJson);
+    when(edmProperty.getType()).thenReturn(EdmSimpleTypeKind.Decimal.getEdmSimpleTypeInstance());
+    resultMap = execute(edmProperty, reader);
+    assertEquals(BigDecimal.valueOf(67.56), resultMap.get("Revenue"));
   }
 
   @Test
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlPropertyConsumerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlPropertyConsumerTest.java
index 1b3bc8c..367eefd 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlPropertyConsumerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlPropertyConsumerTest.java
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Collections;
@@ -67,6 +68,18 @@ public class XmlPropertyConsumerTest extends AbstractXmlConsumerTest {
 
     assertEquals(Integer.valueOf(67), resultMap.get("Age"));
   }
+  
+  @Test
+  public void readDecimalProperty() throws Exception {
+    String xml = "<Revenue xmlns=\"" + Edm.NAMESPACE_D_2007_08 + "\">67.56</Revenue>";
+    XMLStreamReader reader = createReaderForTest(xml, true);
+    final EdmProperty property =
+        (EdmProperty) MockFacade.getMockEdm().getEntityType("RefScenario", "Organization").getProperty("Revenue");
+
+    Map<String, Object> resultMap = new XmlPropertyConsumer().readProperty(reader, property, null);
+
+    assertEquals(BigDecimal.valueOf(67.56), resultMap.get("Revenue"));
+  }
 
   @Test
   public void readIntegerPropertyAsLong() throws Exception {
diff --git a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/mock/EdmMock.java b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/mock/EdmMock.java
index d069b29..5a9a2ee 100644
--- a/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/mock/EdmMock.java
+++ b/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/mock/EdmMock.java
@@ -180,11 +180,13 @@ class EdmMock {
     createProperty("NGO", EdmSimpleTypeKind.Boolean, companyType);
 
     EdmEntityType organizationType = organizationsEntitySet.getEntityType();
-    when(organizationType.getPropertyNames()).thenReturn(Arrays.asList("Id", "Name", "Kind", "Location", "NoOfTeam"));
+    when(organizationType.getPropertyNames()).thenReturn(Arrays.asList("Id", "Name", "Kind", "Location", "NoOfTeam"
+    		, "Revenue"));
     when(organizationType.getProperty("Location")).thenReturn(locationComplexProperty);
     EdmProperty orgName = createProperty("Name", EdmSimpleTypeKind.String, organizationType);
     EdmProperty orgKind = createProperty("Kind", EdmSimpleTypeKind.String, organizationType);
     createProperty("NoOfTeam", EdmSimpleTypeKind.Int16, organizationType);
+    createProperty("Revenue", EdmSimpleTypeKind.Decimal, organizationType);
     
     EdmFacets orgNameFacets = mock(EdmFacets.class);
     when(orgNameFacets.isNullable()).thenReturn(null);