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/02/20 04:41:41 UTC

[olingo-odata4] branch master updated: [OLINGO-1429]Enhance metadata serializer to include Entity Set attribute for an Action Import

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-odata4.git


The following commit(s) were added to refs/heads/master by this push:
     new 5b790f8  [OLINGO-1429]Enhance metadata serializer to include Entity Set attribute for an Action Import
5b790f8 is described below

commit 5b790f82c70f00d418dda1a0697d9a6e3a949fe7
Author: ramya vasanth <ra...@sap.com>
AuthorDate: Thu Feb 20 10:11:25 2020 +0530

    [OLINGO-1429]Enhance metadata serializer to include Entity Set attribute for an Action Import
---
 .../xml/MetadataDocumentXmlSerializer.java         | 11 +++
 .../xml/MetadataDocumentXmlSerializerTest.java     | 78 ++++++++++++++++++++--
 2 files changed, 85 insertions(+), 4 deletions(-)

diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
index 152ca98..5411d90 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
@@ -607,6 +607,17 @@ public class MetadataDocumentXmlSerializer {
       writer.writeStartElement(XML_ACTION_IMPORT);
       writer.writeAttribute(XML_NAME, actionImport.getName());
       writer.writeAttribute(XML_ACTION, getAliasedFullQualifiedName(actionImport.getUnboundAction(), false));
+      EdmEntitySet returnedEntitySet = actionImport.getReturnedEntitySet();
+      if (returnedEntitySet != null) {
+        String fullQualifiedName = returnedEntitySet.getEntityContainer()
+            .getFullQualifiedName().getFullQualifiedNameAsString();
+        if (!actionImport.getEntityContainer().getFullQualifiedName().getFullQualifiedNameAsString()
+            .equalsIgnoreCase(fullQualifiedName)) {
+          writer.writeAttribute(XML_ENTITY_SET, fullQualifiedName +  "/" + returnedEntitySet.getName());
+        } else {
+          writer.writeAttribute(XML_ENTITY_SET, returnedEntitySet.getName());
+        }
+      }
       appendAnnotations(writer, actionImport);
       writer.writeEndElement();
     }
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java
index e5a07d6..8b7e2ce 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java
@@ -318,6 +318,12 @@ public class MetadataDocumentXmlSerializerTest {
         "Function=\"Alias.UFNRTInt16\" IncludeInServiceDocument=\"true\"></FunctionImport>"));
     assertTrue(metadata.contains("<FunctionImport Name=\"FINRTET\" Function=\"Alias.UFNRTETAllPrim\" "
         + "EntitySet=\"ESAllPrim\" IncludeInServiceDocument=\"true\"></FunctionImport>"));
+    assertTrue(metadata.contains("<ActionImport Name=\"AIRTOtherEntity\" Action=\"Alias.UARTOtherEntity\" "
+        + "EntitySet=\"namespace1.container1/ES\"></ActionImport>"));
+    assertTrue(metadata.contains("<ActionImport Name=\"AIRTEntity\" Action=\"Alias.UARTEntity\" "
+        + "EntitySet=\"ESAllPrim\"></ActionImport>"));
+    assertTrue(metadata.contains("<ActionImport Name=\"AIRTEntityNoES\" Action=\"Alias.UARTEntity\">"
+        + "</ActionImport>"));
   }
 
   @Test
@@ -475,13 +481,17 @@ public class MetadataDocumentXmlSerializerTest {
 
   static class LocalProvider implements CsdlEdmProvider {
     private final static String nameSpace = "namespace";
+    private final static String nameSpace1 = "namespace1";
 
     private final FullQualifiedName nameETAbstract = new FullQualifiedName(nameSpace, "ETAbstract");
+    private final FullQualifiedName nameET = new FullQualifiedName(nameSpace1, "ET");
     private final FullQualifiedName nameETAbstractBase = new FullQualifiedName(nameSpace, "ETAbstractBase");
 
     private final FullQualifiedName nameInt16 = EdmPrimitiveTypeKind.Int16.getFullQualifiedName();
     private final FullQualifiedName nameString = EdmPrimitiveTypeKind.String.getFullQualifiedName();
     private final FullQualifiedName nameUARTPrimParam = new FullQualifiedName(nameSpace, "UARTPrimParam");
+    private final FullQualifiedName nameUARTOtherEntity = new FullQualifiedName(nameSpace, "UARTOtherEntity");
+    private final FullQualifiedName nameUARTEntity = new FullQualifiedName(nameSpace, "UARTEntity");
     private final CsdlProperty propertyInt16_NotNullable = new CsdlProperty()
     .setName("PropertyInt16")
     .setType(nameInt16)
@@ -495,6 +505,7 @@ public class MetadataDocumentXmlSerializerTest {
     private final FullQualifiedName nameUFNRTInt16 = new FullQualifiedName(nameSpace, "UFNRTInt16");
     private final FullQualifiedName nameUFNRTETAllPrim = new FullQualifiedName(nameSpace, "UFNRTETAllPrim");
     private final FullQualifiedName nameContainer = new FullQualifiedName(nameSpace, "container");
+    private final FullQualifiedName nameContainer1 = new FullQualifiedName(nameSpace1, "container1");
     private final FullQualifiedName nameENString = new FullQualifiedName(nameSpace, "ENString");
 
     @Override
@@ -528,6 +539,11 @@ public class MetadataDocumentXmlSerializerTest {
         .setBaseType(nameETAbstract)
         .setKey(Collections.singletonList(new CsdlPropertyRef().setName("PropertyInt16")))
         .setProperties(Collections.singletonList(propertyInt16_NotNullable));
+      } else if (entityTypeName.equals(nameET)) {
+        return new CsdlEntityType()
+        .setName("ET")
+        .setKey(Collections.singletonList(new CsdlPropertyRef().setName("PropertyInt16")))
+        .setProperties(Collections.singletonList(propertyInt16_NotNullable));
       }
       return null;
     }
@@ -558,6 +574,14 @@ public class MetadataDocumentXmlSerializerTest {
             .setParameters(Collections.singletonList(
                 new CsdlParameter().setName("ParameterInt16").setType(nameInt16)))
                 .setReturnType(new CsdlReturnType().setType(nameString)));
+      } else if (actionName.equals(nameUARTOtherEntity)) {
+        return Collections.singletonList(
+            new CsdlAction().setName("UARTOtherEntity")
+            .setReturnType(new CsdlReturnType().setType(nameET)));
+      } else if (actionName.equals(nameUARTEntity)) {
+        return Collections.singletonList(
+            new CsdlAction().setName("UARTEntity")
+            .setReturnType(new CsdlReturnType().setType(nameETAbstract)));
       }
       return null;
     }
@@ -587,6 +611,10 @@ public class MetadataDocumentXmlSerializerTest {
         return new CsdlEntitySet()
         .setName("ESAllPrim")
         .setType(nameETAbstractBase);
+      } else if (entitySetName.equals("ES")) {
+        return new CsdlEntitySet()
+        .setName("ES")
+        .setType(nameET);
       }
       return null;
     }
@@ -610,6 +638,20 @@ public class MetadataDocumentXmlSerializerTest {
           return new CsdlActionImport()
           .setName("AIRTPrimParam")
           .setAction(nameUARTPrimParam);
+        } else if (actionImportName.equals("AIRTOtherEntity")) {
+          return new CsdlActionImport()
+              .setName("AIRTOtherEntity")
+              .setAction(nameUARTOtherEntity)
+              .setEntitySet(nameContainer1.getFullQualifiedNameAsString() + "/ES");
+        } else if (actionImportName.equals("AIRTEntity")) {
+          return new CsdlActionImport()
+              .setName("AIRTEntity")
+              .setAction(nameUARTEntity)
+              .setEntitySet("ESAllPrim");
+        } else if (actionImportName.equals("AIRTEntityNoES")) {
+          return new CsdlActionImport()
+              .setName("AIRTEntityNoES")
+              .setAction(nameUARTEntity);
         }
       }
       return null;
@@ -643,6 +685,17 @@ public class MetadataDocumentXmlSerializerTest {
       schema.setNamespace(nameSpace);
       schema.setAlias("Alias");
       schemas.add(schema);
+      
+      CsdlSchema schema1 = new CsdlSchema();
+      schema1.setNamespace(nameSpace1);
+      schema1.setAlias("Alias1");
+      schemas.add(schema1);
+      
+      // Add entity type
+      schema1.setEntityTypes(Arrays.asList(getEntityType(nameET)));
+      
+      // Add entity container
+      schema1.setEntityContainer(getEntityContainer1());
 
       // EnumTypes
       schema.setEnumTypes(Collections.singletonList(getEnumType(nameENString)));
@@ -660,7 +713,11 @@ public class MetadataDocumentXmlSerializerTest {
       // TypeDefinitions
 
       // Actions
-      schema.setActions(getActions(nameUARTPrimParam));
+      List<CsdlAction> actions = new ArrayList<>();
+      actions.addAll(getActions(nameUARTPrimParam));
+      actions.addAll(getActions(nameUARTOtherEntity));
+      actions.addAll(getActions(nameUARTEntity));
+      schema.setActions(actions);
 
       // Functions
       schema.setFunctions(getFunctions(nameUFNRTInt16));
@@ -698,15 +755,19 @@ public class MetadataDocumentXmlSerializerTest {
     public CsdlEntityContainer getEntityContainer() throws ODataException {
       CsdlEntityContainer container = new CsdlEntityContainer();
       container.setName("container");
-
+      
       // EntitySets
-      container.setEntitySets(Collections.singletonList(getEntitySet(nameContainer, "ESAllPrim")));
+      List<CsdlEntitySet> entitySets = new ArrayList<>();
+      entitySets.add(getEntitySet(nameContainer, "ESAllPrim"));
+      container.setEntitySets(entitySets);
 
       // Singletons
       container.setSingletons(Collections.singletonList(getSingleton(nameContainer, "SI")));
 
       // ActionImports
-      container.setActionImports(Collections.singletonList(getActionImport(nameContainer, "AIRTPrimParam")));
+      container.setActionImports(Arrays.asList(getActionImport(nameContainer, "AIRTPrimParam"), 
+          getActionImport(nameContainer, "AIRTOtherEntity"), getActionImport(nameContainer, "AIRTEntity"),
+          getActionImport(nameContainer, "AIRTEntityNoES")));
 
       // FunctionImports
       container.setFunctionImports(Arrays.asList(getFunctionImport(nameContainer, "FINRTInt16"),
@@ -715,6 +776,15 @@ public class MetadataDocumentXmlSerializerTest {
       return container;
     }
 
+    public CsdlEntityContainer getEntityContainer1() throws ODataException {
+      CsdlEntityContainer container = new CsdlEntityContainer();
+      container.setName("container1");
+      
+      // EntitySets
+      container.setEntitySets(Collections.singletonList(getEntitySet(nameContainer1, "ES")));
+      return container;
+    }
+
     @Override
     public CsdlTypeDefinition getTypeDefinition(final FullQualifiedName typeDefinitionName) throws ODataException {
       return null;