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

olingo-odata4 git commit: [OLINGO-570] JsonMetadataDeserializer part4

Repository: olingo-odata4
Updated Branches:
  refs/heads/jsonMetadata 1e6d06e2c -> cfa2cdde1


[OLINGO-570] JsonMetadataDeserializer part4


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

Branch: refs/heads/jsonMetadata
Commit: cfa2cdde133fcd320ee05ac26fcaff49793b8454
Parents: 1e6d06e
Author: Christian Amend <ch...@sap.com>
Authored: Fri Aug 21 09:37:09 2015 +0200
Committer: Christian Amend <ch...@sap.com>
Committed: Fri Aug 21 09:37:09 2015 +0200

----------------------------------------------------------------------
 .../ClientCsdlFunctionImportDeserializer.java   |  5 +-
 .../edm/json/ClientCsdlSchemasDeserializer.java | 22 ++---
 .../olingo/client/core/v4/JsonMetadataTest.java | 95 ++++++++++++++++++++
 .../client/core/v4/metadata.action.imports.json |  1 +
 .../core/v4/metadata.function.imports.json      |  1 +
 .../core/v4/metadata.multiple.schema.json       |  1 +
 .../client/core/v4/metadata.singletons.json     |  2 +
 7 files changed, 115 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/cfa2cdde/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/json/ClientCsdlFunctionImportDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/json/ClientCsdlFunctionImportDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/json/ClientCsdlFunctionImportDeserializer.java
index 4dacacd..8d772b9 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/json/ClientCsdlFunctionImportDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/json/ClientCsdlFunctionImportDeserializer.java
@@ -47,11 +47,12 @@ public class ClientCsdlFunctionImportDeserializer extends JsonDeserializer<CsdlF
             functionImport.setFunction(new FullQualifiedName(tree.get("function").asText()));
         }
         if (tree.has("entitySet")) {
-            functionImport.setEntitySet(tree.get("entitySet").asText());
+            FullQualifiedName fullQualifiedName = new FullQualifiedName(tree.get("entitySet").asText());
+            functionImport.setEntitySet(fullQualifiedName.getName());
         }
         if (tree.has("includeInServiceDocument")) {
             functionImport.setIncludeInServiceDocument(tree.get("includeInServiceDocument").asBoolean());
         }
-        return null;
+        return functionImport;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/cfa2cdde/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/json/ClientCsdlSchemasDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/json/ClientCsdlSchemasDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/json/ClientCsdlSchemasDeserializer.java
index 2aeee20..f06d86a 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/json/ClientCsdlSchemasDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/json/ClientCsdlSchemasDeserializer.java
@@ -67,17 +67,19 @@ public class ClientCsdlSchemasDeserializer extends JsonDeserializer<ClientJsonSc
                 if(entityContainer.has("extend")){
                     container.setExtendsContainer(entityContainer.get("extend").asText());
                 }
-                Iterator<Map.Entry<String, JsonNode>> itr = entityContainer.get("entitySets").fields();
-                while (itr.hasNext()) {
-                    Map.Entry<String, JsonNode> entitySetEntry = itr.next();
-                    JsonNode entitySetNode = entitySetEntry.getValue();
-                    CsdlEntitySet entitySet = new ClientCsdlEntitySetDeserializer(schema, entitySetEntry.getKey())
-                            .deserialize(entitySetNode.traverse(parser.getCodec()), ctxt);
-                    container.getEntitySets().add(entitySet);
+                if (entityContainer.has("entitySets")) {
+                    Iterator<Map.Entry<String, JsonNode>> itr = entityContainer.get("entitySets").fields();
+                    while (itr.hasNext()) {
+                        Map.Entry<String, JsonNode> entitySetEntry = itr.next();
+                        JsonNode entitySetNode = entitySetEntry.getValue();
+                        CsdlEntitySet entitySet = new ClientCsdlEntitySetDeserializer(schema, entitySetEntry.getKey())
+                                .deserialize(entitySetNode.traverse(parser.getCodec()), ctxt);
+                        container.getEntitySets().add(entitySet);
+                    }
                 }
                 if (entityContainer.has("singletons")) {
                     Iterator<Map.Entry<String, JsonNode>> itr2 = entityContainer.get("singletons").fields();
-                    while (itr.hasNext()) {
+                    while (itr2.hasNext()) {
                         Map.Entry<String, JsonNode> singletonEntry = itr2.next();
                         JsonNode singletonNode = singletonEntry.getValue();
                         CsdlSingleton singleton = new ClientCsdlSingletonDeserializer(singletonEntry.getKey())
@@ -87,7 +89,7 @@ public class ClientCsdlSchemasDeserializer extends JsonDeserializer<ClientJsonSc
                 }
                 if (entityContainer.has("functionImports")) {
                     Iterator<Map.Entry<String, JsonNode>> itr3 = entityContainer.get("functionImports").fields();
-                    while (itr.hasNext()) {
+                    while (itr3.hasNext()) {
                         Map.Entry<String, JsonNode> functionImportEntry = itr3.next();
                         JsonNode functionImportNode = functionImportEntry.getValue();
                         CsdlFunctionImport functionImport = new ClientCsdlFunctionImportDeserializer
@@ -98,7 +100,7 @@ public class ClientCsdlSchemasDeserializer extends JsonDeserializer<ClientJsonSc
                 }
                 if (entityContainer.has("actionImports")) {
                     Iterator<Map.Entry<String, JsonNode>> itr4 = entityContainer.get("actionImports").fields();
-                    while (itr.hasNext()) {
+                    while (itr4.hasNext()) {
                         Map.Entry<String, JsonNode> actionImportEntry = itr4.next();
                         JsonNode actionImportNode = actionImportEntry.getValue();
                         CsdlActionImport actionImport = new ClientCsdlActionImportDeserializer

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/cfa2cdde/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/JsonMetadataTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/JsonMetadataTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/JsonMetadataTest.java
index e2adc36..32777cd 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/JsonMetadataTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/JsonMetadataTest.java
@@ -20,8 +20,10 @@
 package org.apache.olingo.client.core.v4;
 
 import org.apache.olingo.client.api.ODataClient;
+import org.apache.olingo.client.api.edm.xml.XMLMetadata;
 import org.apache.olingo.client.core.AbstractTest;
 import org.apache.olingo.commons.api.edm.*;
+import org.apache.olingo.commons.api.edm.provider.CsdlSchema;
 import org.apache.olingo.commons.api.format.ODataFormat;
 import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
 import org.junit.Test;
@@ -38,6 +40,7 @@ public class JsonMetadataTest extends AbstractTest {
 
     @Test
     public void parse() {
+
         //container
         final Edm edm = getClient().getReader().
                 readMetadata(getClass().getResourceAsStream("metadata.json"), ODataFormat.JSON);
@@ -72,5 +75,97 @@ public class JsonMetadataTest extends AbstractTest {
                 function.getReturnType().getType());
         assertFalse(function.isBound());
 
+
+        //references
+        final XMLMetadata metadata = getClient().getDeserializer(ODataFormat.JSON).
+                toMetadata(getClass().getResourceAsStream("metadata.json"));
+        assertNotNull(metadata);
+        //references size
+        assertEquals(metadata.getReferences().size(), 1);
+        assertEquals(metadata.getReferences().get(0).getUri().toASCIIString(), "http://docs.oasis-open.org/odata/" +
+                "odata/v4.0/cs02/vocabularies/Org.OData.Core.V1.xml");
+        //references includes size
+        assertEquals(metadata.getReferences().get(0).getIncludes().size(), 1);
+        assertEquals(metadata.getReferences().get(0).getIncludes().get(0).getAlias(), "Core");
+        assertEquals(metadata.getReferences().get(0).getIncludes().get(0).getNamespace(), "Org.OData.Core.V1");
+        //references include annotations
+        assertEquals(metadata.getReferences().get(0).getIncludeAnnotations().size(), 0);
+
+        //singleton
+        final Edm edm3 = getClient().getReader().
+                readMetadata(getClass().getResourceAsStream("metadata.singletons.json"), ODataFormat.JSON);
+        assertNotNull(edm3);
+        assertEquals(edm3.getEntityContainer(
+                new FullQualifiedName("olingo.odata.test1", "container")).getSingletons().size(), 1);
+        EdmSingleton singleton = edm3.getEntityContainer(
+                new FullQualifiedName("olingo.odata.test1", "container")).getSingleton("SINav");
+        assertNotNull(singleton);
+        assertNotNull(singleton.getEntityType());
+        assertEquals(singleton.getEntityType().getName(), "ETTwoKeyNav");
+        assertEquals(singleton.getEntityType().getNamespace(), "olingo.odata.test1");
+        assertNotNull(edm3.getEntityType(new FullQualifiedName("olingo.odata.test1", "ETTwoKeyNav")));
+        assertEquals(edm3.getEntityType(new FullQualifiedName("olingo.odata.test1", "ETTwoKeyNav")),
+                edm3.getEntityContainer(new FullQualifiedName("olingo.odata.test1", "container"))
+                        .getEntitySet("ESTwoKeyNav").getEntityType());
+        assertEquals(singleton.getNavigationPropertyBindings().size(), 3);
+
+
+        //action imports
+        final Edm edm4 = getClient().getReader().
+                readMetadata(getClass().getResourceAsStream("metadata.action.imports.json"), ODataFormat.JSON);
+        assertNotNull(edm4);
+        assertNotNull(edm4.getEntityContainer(
+                new FullQualifiedName("namespace", "container")));
+        assertNotNull(edm4.getEntityContainer(
+                new FullQualifiedName("namespace", "container")).getActionImport("AIRTString"));
+        EdmActionImport actionImport = edm4.getEntityContainer(
+                new FullQualifiedName("namespace", "container")).getActionImport("AIRTString");
+        assertNotNull(actionImport.getUnboundAction());
+        assertEquals(actionImport.getUnboundAction().getName(), "UARTString");
+        assertEquals(actionImport.getUnboundAction().getNamespace(), "namespace");
+
+        //function imports
+        final Edm edm5 = getClient().getReader().
+                readMetadata(getClass().getResourceAsStream("metadata.function.imports.json"), ODataFormat.JSON);
+        assertNotNull(edm5);
+        assertNotNull(edm5.getEntityContainer(
+                new FullQualifiedName("namespace", "container")));
+        assertNotNull(edm5.getEntityContainer(
+                new FullQualifiedName("namespace", "container")).getFunctionImport("FICRTCollESTwoKeyNavParam"));
+        EdmFunctionImport functionImport = edm5.getEntityContainer(
+                new FullQualifiedName("namespace", "container")).getFunctionImport("FICRTCollESTwoKeyNavParam");
+        assertEquals(functionImport.isIncludeInServiceDocument(), true);
+        assertEquals(functionImport.getUnboundFunctions().size(), 1);
+        assertEquals(functionImport.getUnboundFunctions().get(0).getName(), "UFCRTCollETTwoKeyNavParam");
+        assertEquals(EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Int16),
+                functionImport.getUnboundFunctions().get(0).getReturnType().getType());
+        assertEquals(functionImport.getReturnedEntitySet().getName(), "ESTwoKeyNav");
+        assertEquals(functionImport.getReturnedEntitySet().isIncludeInServiceDocument(), true);
+
+    }
+
+    @Test
+    public void multipleSchemas() {
+
+        final XMLMetadata metadata = getClient().getDeserializer(ODataFormat.JSON).
+                toMetadata(getClass().getResourceAsStream("metadata.multiple.schema.json"));
+        assertNotNull(metadata);
+        assertEquals(metadata.getSchemas().size(), 3);
+
+        CsdlSchema first = metadata.getSchema("namespace1");
+        assertNotNull(first);
+        assertEquals(first.getAlias(), "Alias1");
+
+        CsdlSchema second = metadata.getSchema("namespace2");
+        assertNotNull(second);
+        assertEquals(second.getAlias(), "Alias2");
+
+        CsdlSchema third = metadata.getSchema("namespace3");
+        assertNotNull(third);
+        assertEquals(third.getAlias(), "Alias3");
+
+        assertNotNull(third.getEntityContainer());
+        assertEquals(third.getEntityContainer().getName(), "container");
+
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/cfa2cdde/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.action.imports.json
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.action.imports.json b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.action.imports.json
new file mode 100644
index 0000000..8001982
--- /dev/null
+++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.action.imports.json
@@ -0,0 +1 @@
+{"$schema":"http://docs.oasis-open.org/odata/odata-json-csdl/v4.0/edm.json#","definitions":{"namespace.ENString":{"enum":["String1"],"String1@odata.value":"1"},"namespace.ETAbstractBase":{"type":"object","allOf":[{"$ref":"http://docs.oasis-open.org/odata/odata-json-csdl/v4.0/edm.json#/definitions/namespace.ETAbstract"}],"keys":[{"name":"PropertyInt16"}],"properties":{"PropertyInt16":{"$ref":"http://docs.oasis-open.org/odata/odata-json-csdl/v4.0/edm.json#/definitions/Edm.Int16"}}}},"schemas":{"namespace":{"alias":"Alias","actions":[{"name":"UARTString","isBound":false,"parameters":{"ParameterInt16":{"type":"Edm.Int16"}},"returnType":{"type":"Edm.String"}}],"entityContainer":{"name":"container","actionImports":{"AIRTString":{"action":"Alias.UARTString"}}}}},"references":{"http://docs.oasis-open.org/odata/odata/v4.0/cs02/vocabularies/Org.OData.Core.V1.xml":{"includes":{"Org.OData.Core.V1":{"alias":"Core"}}}}}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/cfa2cdde/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.function.imports.json
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.function.imports.json b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.function.imports.json
new file mode 100644
index 0000000..40d43f9
--- /dev/null
+++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.function.imports.json
@@ -0,0 +1 @@
+{"$schema":"http://docs.oasis-open.org/odata/odata-json-csdl/v4.0/edm.json#","definitions":{"namespace.ENString":{"enum":["String1"],"String1@odata.value":"1"},"namespace.ETAbstractBase":{"type":"object","allOf":[{"$ref":"http://docs.oasis-open.org/odata/odata-json-csdl/v4.0/edm.json#/definitions/namespace.ETAbstract"}],"keys":[{"name":"PropertyInt16"}],"properties":{"PropertyInt16":{"$ref":"http://docs.oasis-open.org/odata/odata-json-csdl/v4.0/edm.json#/definitions/Edm.Int16"}}}},"schemas":{"namespace":{"alias":"Alias","functions":[{"name":"UFCRTCollETTwoKeyNavParam","returnType":{"type":"Edm.Int16"}}],"entityContainer":{"name":"container","entitySets":{"ESTwoKeyNav":{"entityType":"Alias.ETAbstractBase"}},"functionImports":{"FICRTCollESTwoKeyNavParam":{"function":"Alias.UFCRTCollETTwoKeyNavParam","entitySet":"Alias.ESTwoKeyNav","includeInServiceDocument":true}}}}},"references":{"http://docs.oasis-open.org/odata/odata/v4.0/cs02/vocabularies/Org.OData.Core.V1.xml":{"includes":{"Org.O
 Data.Core.V1":{"alias":"Core"}}}}}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/cfa2cdde/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.multiple.schema.json
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.multiple.schema.json b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.multiple.schema.json
new file mode 100644
index 0000000..d021ce2
--- /dev/null
+++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.multiple.schema.json
@@ -0,0 +1 @@
+{"$schema":"http://docs.oasis-open.org/odata/odata-json-csdl/v4.0/edm.json#","definitions":{},"schemas":{"namespace1":{"alias":"Alias1"},"namespace2":{"alias":"Alias2"},"namespace3":{"alias":"Alias3","entityContainer":{"name":"container"}}},"references":{"http://docs.oasis-open.org/odata/odata/v4.0/cs02/vocabularies/Org.OData.Core.V1.xml":{"includes":{"Org.OData.Core.V1":{"alias":"Core"}}}}}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/cfa2cdde/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.singletons.json
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.singletons.json b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.singletons.json
new file mode 100644
index 0000000..4b9c003
--- /dev/null
+++ b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/metadata.singletons.json
@@ -0,0 +1,2 @@
+{"$schema":"http://docs.oasis-open.org/odata/odata-json-csdl/v4.0/edm.json#","definitions":{"olingo.odata.test1.ETTwoKeyNav":{"type":"object","keys":[{"name":"PropertyInt16"},{"name":"PropertyString"}],"properties":{"PropertyInt16":{"$ref":"http://docs.oasis-open.org/odata/odata-json-csdl/v4.0/edm.json#/definitions/Edm.Int16"},"PropertyString":{"type":"string"}}}},"schemas":{"olingo.odata.test1":{"alias":"Namespace1_Alias","entityContainer":{"name":"container","entitySets":{"ESTwoKeyNav":{"entityType":"Namespace1_Alias.ETTwoKeyNav","navigationPropertyBindings":{"NavPropertyETKeyNavOne":{"target":"ESKeyNav"}}}},"singletons":{"SINav":{"type":"Namespace1_Alias.ETTwoKeyNav","navigationPropertyBindings":{"NavPropertyETTwoKeyNavMany":{"target":"ESTwoKeyNav"},"NavPropertyETTwoKeyNavOne":{"target":"ESTwoKeyNav"},"NavPropertyETKeyNavOne":{"target":"ESKeyNav"}}}}}}},"references":{"http://docs.oasis-open.org/odata/odata/v4.0/cs02/vocabularies/Org.OData.Core.V1.xml":{"includes":{"Org.OData.Core
 .V1":{"alias":"Core"}}}}}
+