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"}}}}}
+