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 d0bd01e  [OLINGO-1497]Select option on Function Import returning 
collection of entities
d0bd01e is described below

commit d0bd01eec1ebb650f0a860345142a7f511a6967e
Author: ramya vasanth <ramya.vasa...@sap.com>
AuthorDate: Wed Mar 3 15:12:27 2021 +0530

    [OLINGO-1497]Select option on Function Import returning collection of 
entities
---
 .../odata2/client/core/uri/UriParserTest.java      |  7 ++++
 .../olingo/odata2/core/uri/UriParserImpl.java      | 38 +++++++++++++++++++++-
 2 files changed, 44 insertions(+), 1 deletion(-)

diff --git 
a/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/uri/UriParserTest.java
 
b/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/uri/UriParserTest.java
index c654e62..a61420b 100644
--- 
a/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/uri/UriParserTest.java
+++ 
b/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/uri/UriParserTest.java
@@ -657,6 +657,13 @@ public class UriParserTest {
     result = parse("OldestEmployee");
     assertEquals("OldestEmployee", result.getFunctionImport().getName());
     assertEquals(UriType.URI10, result.getUriType());
+    
+    result = 
parse("EmployeeSearch?$filter=EmployeeId%20eq%20%271%27&$select=EmployeeName");
+    assertEquals("Employee", 
result.getFunctionImport().getReturnType().getType().getName());
+    assertEquals(EdmMultiplicity.MANY, 
result.getFunctionImport().getReturnType().getMultiplicity());
+    assertEquals(UriType.URI10a, result.getUriType());
+    assertNotNull(result.getFilter());
+    assertEquals(1, result.getSelect().size());
   }
 
   @Test
diff --git 
a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java
 
b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java
index 1d28fae..881e97b 100644
--- 
a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java
+++ 
b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/UriParserImpl.java
@@ -221,6 +221,37 @@ public class UriParserImpl extends UriParser {
     }
   }
 
+  private void handleFunctionImportCollection(
+                 final EdmEntitySet entitySet, final String keyPredicate) 
throws UriSyntaxException,
+                       UriNotMatchingException, EdmException {
+       final EdmEntityType entityType = entitySet.getEntityType();
+
+    uriResult.setTargetType(entityType);
+    uriResult.setTargetEntitySet(entitySet);
+    
+    if (keyPredicate == null) {
+               if (pathSegments.isEmpty()) {
+               uriResult.setUriType(UriType.URI10a);
+             } else {
+               currentPathSegment = pathSegments.remove(0);
+               checkCount();
+               if (uriResult.isCount()) {
+                 uriResult.setUriType(UriType.URI15);
+               } else {
+                 throw new UriSyntaxException(
+                                 
UriSyntaxException.ENTITYSETINSTEADOFENTITY.addContent(entitySet.getName()));
+               }
+             }
+    } else {
+        uriResult.setKeyPredicates(parseKey(keyPredicate, entityType));
+        if (pathSegments.isEmpty()) {
+          uriResult.setUriType(UriType.URI2);
+        } else {
+          handleNavigationPathOptions();
+        }
+      }
+  }
+  
   private void handleEntitySet(final EdmEntitySet entitySet, final String 
keyPredicate) throws UriSyntaxException,
       UriNotMatchingException, EdmException {
     final EdmEntityType entityType = entitySet.getEntityType();
@@ -551,6 +582,11 @@ public class UriParserImpl extends UriParser {
       final EdmType type = returnType.getType();
       final boolean isCollection = returnType.getMultiplicity() == 
EdmMultiplicity.MANY;
   
+      if (type.getKind() == EdmTypeKind.ENTITY && isCollection) {
+          handleFunctionImportCollection(functionImport.getEntitySet(), 
keyPredicate);
+          return;
+        }
+      
       if (emptyParentheses != null) {
         throw new 
UriSyntaxException(UriSyntaxException.INVALIDSEGMENT.addContent(emptyParentheses));
       }
@@ -564,7 +600,7 @@ public class UriParserImpl extends UriParser {
         uriResult.setUriType(isCollection ? UriType.URI11 : UriType.URI12);
         break;
       case ENTITY:
-        uriResult.setUriType(isCollection ? UriType.URI10a : UriType.URI10);
+        uriResult.setUriType(UriType.URI10);
         break;
       default:
         throw new 
UriSyntaxException(UriSyntaxException.INVALIDRETURNTYPE.addContent(type.getKind()));

Reply via email to