You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ar...@apache.org on 2018/12/04 11:02:58 UTC

olingo-odata2 git commit: [Olingo-1259]Function Import enhancements

Repository: olingo-odata2
Updated Branches:
  refs/heads/master 39e00568c -> beccbbf3e


[Olingo-1259]Function Import enhancements


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

Branch: refs/heads/master
Commit: beccbbf3ee5cf4ac7ebd724d2aecf084d85a0769
Parents: 39e0056
Author: Archana Rai <ar...@sap.com>
Authored: Tue Dec 4 16:32:45 2018 +0530
Committer: Archana Rai <ar...@sap.com>
Committed: Tue Dec 4 16:32:45 2018 +0530

----------------------------------------------------------------------
 .../odata2/core/ep/AtomEntityProvider.java      | 33 +++++++++++---------
 .../odata2/core/ep/JsonEntityProvider.java      | 26 ++++++++-------
 .../ep/producer/JsonFunctionImportTest.java     | 21 +++++++++++++
 .../core/ep/producer/XmlFunctionImportTest.java | 16 ++++++++++
 .../odata2/ref/edm/ScenarioEdmProvider.java     |  8 +++++
 .../ref/processor/ScenarioDataSource.java       |  5 ++-
 .../olingo/odata2/testutil/mock/EdmMock.java    | 22 +++++++++++++
 7 files changed, 104 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/beccbbf3/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/AtomEntityProvider.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/AtomEntityProvider.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/AtomEntityProvider.java
index 9c79747..201ffc7 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/AtomEntityProvider.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/AtomEntityProvider.java
@@ -333,21 +333,24 @@ public class AtomEntityProvider implements ContentTypeBasedEntityProvider {
   public ODataResponse writeFunctionImport(final EdmFunctionImport functionImport, final Object data,
       final EntityProviderWriteProperties properties) throws EntityProviderException {
     try {
-      final EdmType type = functionImport.getReturnType().getType();
-      final boolean isCollection = functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY;
-
-      if (type.getKind() == EdmTypeKind.ENTITY) {
-        @SuppressWarnings("unchecked")
-        Map<String, Object> map = (Map<String, Object>) data;
-        return writeEntry(functionImport.getEntitySet(), map, properties);
-      }
-
-      final EntityPropertyInfo info = EntityInfoAggregator.create(functionImport);
-      if (isCollection) {
-        return writeCollection(info, (List<?>) data);
-      } else {
-        return writeSingleTypedElement(info, data);
-      }
+      if(functionImport.getReturnType() !=null){
+        final EdmType type = functionImport.getReturnType().getType();
+        final boolean isCollection = functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY;
+  
+        if (type.getKind() == EdmTypeKind.ENTITY) {
+          @SuppressWarnings("unchecked")
+          Map<String, Object> map = (Map<String, Object>) data;
+          return writeEntry(functionImport.getEntitySet(), map, properties);
+        }
+        final EntityPropertyInfo info = EntityInfoAggregator.create(functionImport);
+        if (isCollection) {
+          return writeCollection(info, (List<?>) data);
+        } else {
+          return writeSingleTypedElement(info, data);
+        }
+     }else{
+       return ODataResponse.newBuilder().status(HttpStatusCodes.ACCEPTED).build();
+     }
     } catch (EdmException e) {
       throw new EntityProviderProducerException(e.getMessageReference(), e);
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/beccbbf3/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/JsonEntityProvider.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/JsonEntityProvider.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/JsonEntityProvider.java
index 20a9f9b..fa94320 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/JsonEntityProvider.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/JsonEntityProvider.java
@@ -286,17 +286,21 @@ public class JsonEntityProvider implements ContentTypeBasedEntityProvider {
   public ODataResponse writeFunctionImport(final EdmFunctionImport functionImport, final Object data,
       final EntityProviderWriteProperties properties) throws EntityProviderException {
     try {
-      if (functionImport.getReturnType().getType().getKind() == EdmTypeKind.ENTITY) {
-        @SuppressWarnings("unchecked")
-        Map<String, Object> map = (Map<String, Object>) data;
-        return writeEntry(functionImport.getEntitySet(), map, properties);
-      }
-
-      final EntityPropertyInfo info = EntityInfoAggregator.create(functionImport);
-      if (functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY) {
-        return writeCollection(info, (List<?>) data);
-      } else {
-        return writeSingleTypedElement(info, data);
+      if(functionImport.getReturnType() !=null){
+        if (functionImport.getReturnType().getType().getKind() == EdmTypeKind.ENTITY) {
+          @SuppressWarnings("unchecked")
+          Map<String, Object> map = (Map<String, Object>) data;
+          return writeEntry(functionImport.getEntitySet(), map, properties);
+        }
+  
+        final EntityPropertyInfo info = EntityInfoAggregator.create(functionImport);
+        if (functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY) {
+          return writeCollection(info, (List<?>) data);
+        } else {
+          return writeSingleTypedElement(info, data);
+        }
+      }else{
+        return ODataResponse.newBuilder().status(HttpStatusCodes.ACCEPTED).build();
       }
     } catch (final EdmException e) {
       throw new EntityProviderProducerException(e.getMessageReference(), e);

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/beccbbf3/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFunctionImportTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFunctionImportTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFunctionImportTest.java
index 69177f1..f211abd 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFunctionImportTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonFunctionImportTest.java
@@ -30,6 +30,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
 import org.apache.olingo.odata2.api.edm.EdmFunctionImport;
 import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
 import org.apache.olingo.odata2.api.processor.ODataResponse;
@@ -161,4 +162,24 @@ public class JsonFunctionImportTest extends BaseTest {
         + "\"ne_Room\":{\"__deferred\":{\"uri\":\"" + uri + "Employees('1')/ne_Room\"}}}}",
         json);
   }
+  
+  
+  @Test
+  public void noReturnTypeAction() throws Exception {
+    final EdmFunctionImport functionImport =
+        MockFacade.getMockEdm().getDefaultEntityContainer().getFunctionImport("AddEmployee");
+    final String uri = "http://host:80/service/";
+    final EntityProviderWriteProperties properties =
+        EntityProviderWriteProperties.serviceRoot(URI.create(uri)).build();
+    Map<String, Object> employeeData = new HashMap<String, Object>();
+    employeeData.put("EmployeeId", "1");
+    employeeData.put("getImageType", "image/jpeg");
+    final ODataResponse response =
+        new JsonEntityProvider().writeFunctionImport(functionImport, employeeData, properties);
+    assertNotNull(response);
+    assertNull(response.getEntity());
+    assertNull(response.getContentHeader());
+    assertEquals(HttpStatusCodes.ACCEPTED, response.getStatus());
+   
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/beccbbf3/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/XmlFunctionImportTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/XmlFunctionImportTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/XmlFunctionImportTest.java
index de71435..eb248a0 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/XmlFunctionImportTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/XmlFunctionImportTest.java
@@ -20,12 +20,14 @@ package org.apache.olingo.odata2.core.ep.producer;
 
 import static org.custommonkey.xmlunit.XMLAssert.assertXpathEvaluatesTo;
 import static org.custommonkey.xmlunit.XMLAssert.assertXpathExists;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
 import java.io.InputStream;
 import java.util.Arrays;
 
+import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
 import org.apache.olingo.odata2.api.edm.EdmFunctionImport;
 import org.apache.olingo.odata2.api.processor.ODataResponse;
 import org.apache.olingo.odata2.core.ep.AbstractProviderTest;
@@ -140,4 +142,18 @@ public class XmlFunctionImportTest extends AbstractProviderTest {
     assertXpathExists("/a:entry/a:link[@href=\"Employees('1')/$value\"]", xml);
     assertXpathEvaluatesTo("Duckburg", "/a:entry/m:properties/d:Location/d:City/d:CityName/text()", xml);
   }
+  
+  @Test
+  public void noReturnTypeAction() throws Exception {
+    final EdmFunctionImport functionImport =
+        MockFacade.getMockEdm().getDefaultEntityContainer().getFunctionImport("AddEmployee");
+
+    final ODataResponse response =
+        createAtomEntityProvider().writeFunctionImport(functionImport, employeeData, DEFAULT_PROPERTIES);
+    assertNotNull(response);
+    assertNull(response.getEntity());
+    assertNull(response.getContentHeader());
+    assertEquals(HttpStatusCodes.ACCEPTED, response.getStatus());
+   
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/beccbbf3/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/edm/ScenarioEdmProvider.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/edm/ScenarioEdmProvider.java b/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/edm/ScenarioEdmProvider.java
index 91a8afe..38693db 100644
--- a/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/edm/ScenarioEdmProvider.java
+++ b/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/edm/ScenarioEdmProvider.java
@@ -102,6 +102,7 @@ public class ScenarioEdmProvider extends EdmProvider {
   private static final String FUNCTION_IMPORT_5 = "MostCommonLocation";
   private static final String FUNCTION_IMPORT_6 = "ManagerPhoto";
   private static final String FUNCTION_IMPORT_7 = "OldestEmployee";
+  private static final String ACTION_IMPORT_1   = "AddEmployee";
 
   @Override
   public List<Schema> getSchemas() throws ODataException {
@@ -157,6 +158,7 @@ public class ScenarioEdmProvider extends EdmProvider {
     functionImports.add(getFunctionImport(ENTITY_CONTAINER_1, FUNCTION_IMPORT_5));
     functionImports.add(getFunctionImport(ENTITY_CONTAINER_1, FUNCTION_IMPORT_6));
     functionImports.add(getFunctionImport(ENTITY_CONTAINER_1, FUNCTION_IMPORT_7));
+    functionImports.add(getFunctionImport(ENTITY_CONTAINER_1, ACTION_IMPORT_1));
     entityContainer.setFunctionImports(functionImports);
 
     schema.setEntityContainers(Arrays.asList(entityContainer));
@@ -472,6 +474,12 @@ public class ScenarioEdmProvider extends EdmProvider {
             .setReturnType(new ReturnType().setTypeName(ENTITY_TYPE_1_1).setMultiplicity(EdmMultiplicity.ZERO_TO_ONE))
             .setEntitySet(ENTITY_SET_1_1)
             .setHttpMethod("GET");
+      } else if (ACTION_IMPORT_1.equals(name)) {
+        return new FunctionImport().setName(name)
+            .setEntitySet(ENTITY_SET_1_1)
+            .setHttpMethod("POST")/*.setParameters(Arrays.asList(
+                new FunctionImportParameter().setName("Id").setType(EdmSimpleTypeKind.String)
+                .setFacets(new Facets().setNullable(false))))*/;
       }
     }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/beccbbf3/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ScenarioDataSource.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ScenarioDataSource.java b/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ScenarioDataSource.java
index ff8813a..2db59b7 100644
--- a/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ScenarioDataSource.java
+++ b/odata2-lib/odata-ref/src/main/java/org/apache/olingo/odata2/ref/processor/ScenarioDataSource.java
@@ -266,7 +266,10 @@ public class ScenarioDataSource {
       }
       throw new ODataNotFoundException(ODataNotFoundException.ENTITY);
 
-    } else if (function.getName().equals("OldestEmployee")) {
+    } else if (function.getName().equals("AddEmployee")) {
+        return null;
+
+    }  else if (function.getName().equals("OldestEmployee")) {
       return getOldestEmployee();
 
     } else {

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/beccbbf3/odata2-lib/odata-testutil/src/main/java/org/apache/olingo/odata2/testutil/mock/EdmMock.java
----------------------------------------------------------------------
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 de1506e..d069b29 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
@@ -247,6 +247,13 @@ class EdmMock {
     when(employeeActionImport.getEntitySet()).thenReturn(employeeEntitySet);
     when(employeeActionImport.getHttpMethod()).thenReturn(ODataHttpMethod.POST.name());
 
+    //Issue no return type
+    EdmFunctionImport addEmployeeActionImport =
+        createActionImportMock(defaultContainer, "AddEmployee", null, EdmMultiplicity.ONE);
+    when(addEmployeeActionImport.getEntitySet()).thenReturn(employeeEntitySet);
+    when(addEmployeeActionImport.getHttpMethod()).thenReturn(ODataHttpMethod.POST.name());
+    
+    
     // Issue with not explicitly nullable parameters and facets
     EdmFunctionImport functionImportNullableParameter =
         createFunctionImportMock(defaultContainer, "FINullableParameter", EdmSimpleTypeKind.Boolean
@@ -433,4 +440,19 @@ class EdmMock {
 
     return functionImport;
   }
+  
+  
+  
+  private static EdmFunctionImport createActionImportMock(final EdmEntityContainer container, final String name,
+      final EdmType type, final EdmMultiplicity multiplicity) throws EdmException {
+
+    EdmFunctionImport functionImport = mock(EdmFunctionImport.class);
+    when(functionImport.getName()).thenReturn(name);
+    when(functionImport.getReturnType()).thenReturn(null);
+    when(functionImport.getHttpMethod()).thenReturn(ODataHttpMethod.GET.name());
+
+    when(container.getFunctionImport(name)).thenReturn(functionImport);
+
+    return functionImport;
+  }
 }