You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by sk...@apache.org on 2014/03/07 09:59:03 UTC
git commit: [OLINGO-167] service document serialization (json)
Repository: incubator-olingo-odata4
Updated Branches:
refs/heads/olingo167MetadataDocument bd8f4c592 -> 57f7faaff
[OLINGO-167] service document serialization (json)
Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/commit/57f7faaf
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/tree/57f7faaf
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/diff/57f7faaf
Branch: refs/heads/olingo167MetadataDocument
Commit: 57f7faaffc8fcd2d225e2c28f5941a53f1fede15
Parents: bd8f4c5
Author: Stephan Klevenz <st...@sap.com>
Authored: Thu Mar 6 17:37:25 2014 +0100
Committer: Stephan Klevenz <st...@sap.com>
Committed: Fri Mar 7 09:58:23 2014 +0100
----------------------------------------------------------------------
.../olingo/odata4/commons/api/edm/Edm.java | 1 +
.../commons/api/edm/EdmEntityContainer.java | 8 ++
.../odata4/commons/api/edm/EdmEntitySet.java | 2 +
.../commons/api/edm/EdmFunctionImport.java | 2 +
.../api/edm/provider/EntityContainerInfo.java | 13 +++
odata4-lib/odata4-server-core/pom.xml | 4 +
.../edm/provider/EdmEntityContainerImpl.java | 63 ++++++++++---
.../core/edm/provider/EdmEntitySetImpl.java | 11 ++-
.../edm/provider/EdmFunctionImportImpl.java | 5 +
.../core/edm/provider/EdmProviderImpl.java | 1 +
.../core/edm/provider/EdmSingletonImpl.java | 1 +
.../serializer/json/ODataJsonSerializer.java | 97 +++++++++++++++++--
.../core/serializer/ServiceDocumentTest.java | 99 ++++++++++++++++++--
.../server/core/testutil/EdmTechProvider.java | 6 +-
pom.xml | 6 ++
15 files changed, 284 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/57f7faaf/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/Edm.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/Edm.java b/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/Edm.java
index 635b342..c4623c1 100644
--- a/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/Edm.java
+++ b/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/Edm.java
@@ -92,4 +92,5 @@ public interface Edm {
* @return {@link EdmServiceMetadata}
*/
EdmServiceMetadata getServiceMetadata();
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/57f7faaf/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmEntityContainer.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmEntityContainer.java b/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmEntityContainer.java
index dd8af30..9f86c25 100644
--- a/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmEntityContainer.java
+++ b/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmEntityContainer.java
@@ -18,6 +18,8 @@
******************************************************************************/
package org.apache.olingo.odata4.commons.api.edm;
+import java.util.Collection;
+
/**
* A CSDL EntityContainer element
*
@@ -58,4 +60,10 @@ public interface EdmEntityContainer extends EdmNamed {
*/
EdmFunctionImport getFunctionImport(String name);
+ Collection<EdmEntitySet> getEntitySets();
+
+ Collection<EdmFunctionImport> getFunctionImports();
+
+ Collection<EdmSingleton> getSingletons();
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/57f7faaf/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmEntitySet.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmEntitySet.java b/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmEntitySet.java
index 3eed41e..0474aca 100644
--- a/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmEntitySet.java
+++ b/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmEntitySet.java
@@ -25,4 +25,6 @@ package org.apache.olingo.odata4.commons.api.edm;
*/
public interface EdmEntitySet extends EdmBindingTarget {
+ boolean isIncludeInServiceDocument();
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/57f7faaf/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmFunctionImport.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmFunctionImport.java b/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmFunctionImport.java
index fb561e1..a686be4 100644
--- a/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmFunctionImport.java
+++ b/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmFunctionImport.java
@@ -27,4 +27,6 @@ public interface EdmFunctionImport extends EdmOperationImport {
public EdmFunction getFunction(List<String> parameterNames);
+ public boolean includeInServiceDocument();
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/57f7faaf/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityContainerInfo.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityContainerInfo.java b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityContainerInfo.java
index 3f83b8d..70372f3 100644
--- a/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityContainerInfo.java
+++ b/odata4-lib/odata4-server-api/src/main/java/org/apache/olingo/odata4/server/api/edm/provider/EntityContainerInfo.java
@@ -18,11 +18,15 @@
******************************************************************************/
package org.apache.olingo.odata4.server.api.edm.provider;
+import java.util.Collections;
+import java.util.List;
+
import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
public class EntityContainerInfo {
private FullQualifiedName containerName;
private FullQualifiedName extendsContainer;
+ private List<String> entitySetNames;
public FullQualifiedName getContainerName() {
return containerName;
@@ -42,4 +46,13 @@ public class EntityContainerInfo {
return this;
}
+ public EntityContainerInfo setEntitySetNames(List<String> names) {
+ entitySetNames = names;
+ return this;
+ }
+
+ public List<String> getEntitySetNames() {
+ return Collections.unmodifiableList(entitySetNames);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/57f7faaf/odata4-lib/odata4-server-core/pom.xml
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/pom.xml b/odata4-lib/odata4-server-core/pom.xml
index 8343b1e..eb84685 100644
--- a/odata4-lib/odata4-server-core/pom.xml
+++ b/odata4-lib/odata4-server-core/pom.xml
@@ -52,6 +52,10 @@
<artifactId>jackson-core</artifactId>
<version>2.2.3</version>
</dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ </dependency>
<!-- <dependency> -->
<!-- <groupId>com.fasterxml.jackson.core</groupId> -->
<!-- <artifactId>jackson-databind</artifactId> -->
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/57f7faaf/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmEntityContainerImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmEntityContainerImpl.java b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmEntityContainerImpl.java
index 8908406..36b6060 100644
--- a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmEntityContainerImpl.java
+++ b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmEntityContainerImpl.java
@@ -18,7 +18,10 @@
******************************************************************************/
package org.apache.olingo.odata4.server.core.edm.provider;
+import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.apache.olingo.odata4.commons.api.ODataException;
@@ -44,12 +47,14 @@ public class EdmEntityContainerImpl extends EdmNamedImpl implements EdmEntityCon
private final Map<String, EdmEntitySet> entitySets = new HashMap<String, EdmEntitySet>();
private final Map<String, EdmActionImport> actionImports = new HashMap<String, EdmActionImport>();
private final Map<String, EdmFunctionImport> functionImports = new HashMap<String, EdmFunctionImport>();
+ private EntityContainerInfo entityContainerInfo;
public EdmEntityContainerImpl(final EdmProviderImpl edm, final EdmProvider provider,
final EntityContainerInfo entityContainerInfo) {
super(edm, entityContainerInfo.getContainerName().getName());
this.provider = provider;
entityContainerName = entityContainerInfo.getContainerName();
+ this.entityContainerInfo = entityContainerInfo;
}
@Override
@@ -78,21 +83,14 @@ public class EdmEntityContainerImpl extends EdmNamedImpl implements EdmEntityCon
@Override
public EdmEntitySet getEntitySet(final String entitySetName) {
- EdmEntitySet entitySet = entitySets.get(entitySetName);
- if (entitySet == null) {
- try {
- EntitySet providerEntitySet = provider.getEntitySet(entityContainerName, entitySetName);
- if (providerEntitySet != null) {
- entitySet = new EdmEntitySetImpl(edm, this, providerEntitySet);
- if (entitySet != null) {
- entitySets.put(entitySetName, entitySet);
- }
- }
- } catch (ODataException e) {
- throw new EdmException(e);
- }
+ try {
+ loadEntitySet(entitySetName);
+ EdmEntitySet entitySet = entitySets.get(entitySetName);
+
+ return entitySet;
+ } catch (ODataException e) {
+ throw new EdmException(e);
}
- return entitySet;
}
@Override
@@ -133,4 +131,41 @@ public class EdmEntityContainerImpl extends EdmNamedImpl implements EdmEntityCon
return functionImport;
}
+ private void loadEntitySet(String name) throws ODataException {
+ if (!entitySets.containsKey(name)) {
+ EntitySet providerEntitySet = provider.getEntitySet(entityContainerName, name);
+ if (providerEntitySet != null) {
+ EdmEntitySetImpl entitySet = new EdmEntitySetImpl(edm, this, providerEntitySet);
+ if (entitySet != null) {
+ entitySets.put(name, entitySet);
+ }
+ }
+ }
+ }
+
+ @Override
+ public Collection<EdmEntitySet> getEntitySets() {
+ try {
+ List<String> names = entityContainerInfo.getEntitySetNames();
+
+ for (String name : names) {
+ loadEntitySet(name);
+ }
+
+ return Collections.unmodifiableCollection(entitySets.values());
+ } catch (ODataException e) {
+ throw new EdmException(e);
+ }
+ }
+
+ @Override
+ public Collection<EdmFunctionImport> getFunctionImports() {
+ return null;
+ }
+
+ @Override
+ public Collection<EdmSingleton> getSingletons() {
+ return null;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/57f7faaf/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmEntitySetImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmEntitySetImpl.java b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmEntitySetImpl.java
index 61868d4..53bd6f3 100644
--- a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmEntitySetImpl.java
+++ b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmEntitySetImpl.java
@@ -24,8 +24,17 @@ import org.apache.olingo.odata4.server.api.edm.provider.EntitySet;
public class EdmEntitySetImpl extends EdmBindingTargetImpl implements EdmEntitySet {
+ private EntitySet entitySet;
+
public EdmEntitySetImpl(final EdmProviderImpl edm, final EdmEntityContainer container, final EntitySet entitySet) {
- super(edm, container, entitySet);
+ super(edm, container, entitySet);
+
+ this.entitySet = entitySet;
+ }
+
+ @Override
+ public boolean isIncludeInServiceDocument() {
+ return entitySet.isIncludeInServiceDocument();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/57f7faaf/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmFunctionImportImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmFunctionImportImpl.java b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmFunctionImportImpl.java
index 42e04b9..3577acc 100644
--- a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmFunctionImportImpl.java
+++ b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmFunctionImportImpl.java
@@ -40,4 +40,9 @@ public class EdmFunctionImportImpl extends EdmOperationImportImpl implements Edm
return edm.getFunction(functionImport.getFunction(), null, null, parameterNames);
}
+ @Override
+ public boolean includeInServiceDocument() {
+ return false;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/57f7faaf/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmProviderImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmProviderImpl.java b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmProviderImpl.java
index a7594ad..700f019 100644
--- a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmProviderImpl.java
+++ b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmProviderImpl.java
@@ -291,4 +291,5 @@ public class EdmProviderImpl extends EdmImpl {
throw new EdmException(e);
}
}
+
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/57f7faaf/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmSingletonImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmSingletonImpl.java b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmSingletonImpl.java
index f98a328..79ad0b4 100644
--- a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmSingletonImpl.java
+++ b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/edm/provider/EdmSingletonImpl.java
@@ -27,4 +27,5 @@ public class EdmSingletonImpl extends EdmBindingTargetImpl implements EdmSinglet
public EdmSingletonImpl(final EdmProviderImpl edm, final EdmEntityContainer container, final Singleton singleton) {
super(edm, container, singleton);
}
+
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/57f7faaf/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/serializer/json/ODataJsonSerializer.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/serializer/json/ODataJsonSerializer.java b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/serializer/json/ODataJsonSerializer.java
index 130d345..4e15980 100644
--- a/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/serializer/json/ODataJsonSerializer.java
+++ b/odata4-lib/odata4-server-core/src/main/java/org/apache/olingo/odata4/server/core/serializer/json/ODataJsonSerializer.java
@@ -22,20 +22,41 @@ import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
+import java.util.List;
import org.apache.olingo.odata4.commons.api.ODataRuntimeException;
import org.apache.olingo.odata4.commons.api.edm.Edm;
+import org.apache.olingo.odata4.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.odata4.commons.api.edm.EdmEntitySet;
+import org.apache.olingo.odata4.commons.api.edm.EdmFunctionImport;
+import org.apache.olingo.odata4.commons.api.edm.EdmSingleton;
import org.apache.olingo.odata4.server.api.ODataSerializer;
import org.apache.olingo.odata4.server.core.CircleStreamBuffer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
public class ODataJsonSerializer implements ODataSerializer {
+ private static final Logger log = LoggerFactory.getLogger(ODataJsonSerializer.class);
+
private static final String DEFAULT_CHARSET = "UTF-8";
+ public static final String ODATA_CONTEXT = "@odata.context";
+ public static final String METADATA = "$metadata";
+ public static final String VALUE = "value";
+ public static final String NAME = "name";
+ public static final String URL = "url";
+ public static final String KIND = "kind";
+
+ public static final String FUNCTION_IMPORT = "FunctionImport";
+ public static final String SINGLETON = "Singleton";
+ public static final String SERVICE_DOCUMENT = "ServiceDocument";
+
@Override
public InputStream metadata(Edm edm) {
throw new ODataRuntimeException("Metadata in JSON format not supported!");
@@ -43,20 +64,28 @@ public class ODataJsonSerializer implements ODataSerializer {
@Override
public InputStream serviceDocument(Edm edm, String serviceRoot) {
+ CircleStreamBuffer buffer;
+ BufferedWriter writer;
+ JsonFactory factory;
+ JsonGenerator gen = null;
try {
- CircleStreamBuffer buffer = new CircleStreamBuffer();
- BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(buffer.getOutputStream(), DEFAULT_CHARSET));
+ buffer = new CircleStreamBuffer();
+ writer = new BufferedWriter(new OutputStreamWriter(buffer.getOutputStream(), DEFAULT_CHARSET));
+ factory = new JsonFactory();
+ gen = factory.createGenerator(writer);
- JsonFactory factory = new JsonFactory();
- JsonGenerator gen = factory.createGenerator(writer);
-
gen.setPrettyPrinter(new DefaultPrettyPrinter());
gen.writeStartObject();
- gen.writeObjectField("bla1", new Integer(3));
- gen.writeObjectField("bla2", new Integer(3));
- gen.writeEndObject();
+
+ Object metadataUri = serviceRoot + "/" + METADATA;
+ gen.writeObjectField(ODATA_CONTEXT, metadataUri);
+ gen.writeArrayFieldStart(VALUE);
+
+ writeEntitySets(gen, edm);
+ writeFunctionImports(gen, edm);
+ writeSingletons(gen, edm);
gen.close();
@@ -64,9 +93,57 @@ public class ODataJsonSerializer implements ODataSerializer {
// buffer.closeWrite();
return buffer.getInputStream();
-
- } catch (IOException e) {
+
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
throw new ODataRuntimeException(e);
+ } finally {
+ if (gen != null) {
+ try {
+ gen.close();
+ } catch (IOException e) {
+ throw new ODataRuntimeException(e);
+ }
+ }
+ }
+ }
+
+ private void writeEntitySets(JsonGenerator gen, Edm edm) throws JsonGenerationException, IOException {
+ EdmEntityContainer container = edm.getEntityContainer(null);
+
+ for (EdmEntitySet edmEntitySet : container.getEntitySets()) {
+ if (edmEntitySet.isIncludeInServiceDocument()) {
+ gen.writeStartObject();
+ gen.writeObjectField(NAME, edmEntitySet.getName());
+ gen.writeObjectField(URL, edmEntitySet.getName());
+ gen.writeEndObject();
+ }
+ }
+ }
+
+ private void writeFunctionImports(JsonGenerator gen, Edm edm) throws JsonGenerationException, IOException {
+ EdmEntityContainer container = edm.getEntityContainer(null);
+
+ for (EdmFunctionImport edmFunctionImport : container.getFunctionImports()) {
+ if (edmFunctionImport.includeInServiceDocument()) {
+ gen.writeStartObject();
+ gen.writeObjectField(NAME, edmFunctionImport.getName());
+ gen.writeObjectField(URL, edmFunctionImport.getName());
+ gen.writeObjectField(KIND, FUNCTION_IMPORT);
+ gen.writeEndObject();
+ }
+ }
+ }
+
+ private void writeSingletons(JsonGenerator gen, Edm edm) throws JsonGenerationException, IOException {
+ EdmEntityContainer container = edm.getEntityContainer(null);
+
+ for (EdmSingleton edmSingleton : container.getSingletons()) {
+ gen.writeStartObject();
+ gen.writeObjectField(NAME, edmSingleton.getName());
+ gen.writeObjectField(URL, edmSingleton.getName());
+ gen.writeObjectField(KIND, SINGLETON);
+ gen.writeEndObject();
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/57f7faaf/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/serializer/ServiceDocumentTest.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/serializer/ServiceDocumentTest.java b/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/serializer/ServiceDocumentTest.java
index c0f9b5c..228a0b9 100644
--- a/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/serializer/ServiceDocumentTest.java
+++ b/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/serializer/ServiceDocumentTest.java
@@ -15,30 +15,98 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
- */
+ */
package org.apache.olingo.odata4.server.core.serializer;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.*;
import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
import org.apache.olingo.odata4.commons.api.edm.Edm;
+import org.apache.olingo.odata4.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.odata4.commons.api.edm.EdmEntitySet;
+import org.apache.olingo.odata4.commons.api.edm.EdmFunctionImport;
+import org.apache.olingo.odata4.commons.api.edm.EdmSingleton;
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
import org.apache.olingo.odata4.server.api.ODataFormat;
import org.apache.olingo.odata4.server.api.ODataSerializer;
import org.apache.olingo.odata4.server.api.ODataServer;
-import org.apache.olingo.odata4.server.core.edm.provider.EdmProviderImpl;
-import org.apache.olingo.odata4.server.core.testutil.EdmTechProvider;
import org.apache.olingo.odata4.server.core.testutil.StringUtil;
+import org.junit.Before;
import org.junit.Test;
public class ServiceDocumentTest {
-
- private Edm edm = new EdmProviderImpl(new EdmTechProvider());
+
+ private Edm edm;
+
+ @Before
+ public void before() {
+
+ EdmEntitySet edmEntitySet1 = mock(EdmEntitySet.class);
+ when(edmEntitySet1.getName()).thenReturn("entitySetName1");
+ when(edmEntitySet1.isIncludeInServiceDocument()).thenReturn(true);
+
+ EdmEntitySet edmEntitySet2 = mock(EdmEntitySet.class);
+ when(edmEntitySet2.getName()).thenReturn("entitySetName2");
+ when(edmEntitySet2.isIncludeInServiceDocument()).thenReturn(true);
+
+ EdmEntitySet edmEntitySet3 = mock(EdmEntitySet.class);
+ when(edmEntitySet3.getName()).thenReturn("entitySetName3");
+ when(edmEntitySet3.isIncludeInServiceDocument()).thenReturn(false);
+
+ Collection<EdmEntitySet> entitySets = new ArrayList<EdmEntitySet>();
+ entitySets.add(edmEntitySet1);
+ entitySets.add(edmEntitySet2);
+ entitySets.add(edmEntitySet3);
+
+ EdmFunctionImport functionImport1 = mock(EdmFunctionImport.class);
+ when(functionImport1.getName()).thenReturn("functionImport1");
+ when(functionImport1.includeInServiceDocument()).thenReturn(true);
+
+ EdmFunctionImport functionImport2 = mock(EdmFunctionImport.class);
+ when(functionImport2.getName()).thenReturn("functionImport2");
+ when(functionImport2.includeInServiceDocument()).thenReturn(true);
+
+ EdmFunctionImport functionImport3 = mock(EdmFunctionImport.class);
+ when(functionImport3.getName()).thenReturn("functionImport3");
+ when(functionImport3.includeInServiceDocument()).thenReturn(false);
+
+ Collection<EdmFunctionImport> functionImports = new ArrayList<EdmFunctionImport>();
+ functionImports.add(functionImport1);
+ functionImports.add(functionImport2);
+ functionImports.add(functionImport3);
+
+ EdmSingleton singleton1 = mock(EdmSingleton.class);
+ when(singleton1.getName()).thenReturn("singleton1");
+
+ EdmSingleton singleton2 = mock(EdmSingleton.class);
+ when(singleton2.getName()).thenReturn("singleton2");
+
+ EdmSingleton singleton3 = mock(EdmSingleton.class);
+ when(singleton3.getName()).thenReturn("singleton3");
+
+ Collection<EdmSingleton> singletons = new ArrayList<EdmSingleton>();
+ singletons.add(singleton1);
+ singletons.add(singleton2);
+ singletons.add(singleton3);
+
+ EdmEntityContainer edmEntityContainer = mock(EdmEntityContainer.class);
+ when(edmEntityContainer.getEntitySets()).thenReturn(entitySets);
+ when(edmEntityContainer.getFunctionImports()).thenReturn(functionImports);
+ when(edmEntityContainer.getSingletons()).thenReturn(singletons);
+
+ edm = mock(Edm.class);
+ when(edm.getEntityContainer(null)).thenReturn(edmEntityContainer);
+ }
@Test
public void writeServiceDocumentJson() throws Exception {
String serviceRoot = "http://localhost:8080/odata.svc";
-
+
ODataServer server = ODataServer.newInstance();
assertNotNull(server);
@@ -47,7 +115,20 @@ public class ServiceDocumentTest {
InputStream result = serializer.serviceDocument(edm, serviceRoot);
assertNotNull(result);
-
- System.out.println(StringUtil.inputStreamToString(result, true));
+ String jsonString = StringUtil.inputStreamToString(result, true);
+
+ System.out.println(jsonString);
+
+ assertTrue(jsonString.contains("entitySetName1"));
+ assertTrue(jsonString.contains("entitySetName2"));
+ assertFalse(jsonString.contains("entitySetName3"));
+
+ assertTrue(jsonString.contains("functionImport1"));
+ assertTrue(jsonString.contains("functionImport2"));
+ assertFalse(jsonString.contains("functionImport3"));
+
+ assertTrue(jsonString.contains("singleton1"));
+ assertTrue(jsonString.contains("singleton2"));
+ assertTrue(jsonString.contains("singleton3"));
}
}
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/57f7faaf/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/testutil/EdmTechProvider.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/testutil/EdmTechProvider.java b/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/testutil/EdmTechProvider.java
index 1be927d..d85a073 100644
--- a/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/testutil/EdmTechProvider.java
+++ b/odata4-lib/odata4-server-core/src/test/java/org/apache/olingo/odata4/server/core/testutil/EdmTechProvider.java
@@ -365,8 +365,12 @@ public class EdmTechProvider extends EdmProvider {
.setName("CollPropertyTimeOfDay")
.setType(nameTimeOfDay)
.setCollection(true);
+
+ ArrayList<String> entitySetNames = new ArrayList<String>();
+
+
EntityContainerInfo entityContainerInfoTest1 =
- new EntityContainerInfo().setContainerName(nameContainer);
+ new EntityContainerInfo().setContainerName(nameContainer).setEntitySetNames(entitySetNames);
NavigationProperty navPropertyETKeyNavOne_ETKeyNav = new NavigationProperty()
.setName("NavPropertyETKeyNavOne")
.setType(nameETKeyNav);
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/57f7faaf/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 953fb30..2eb4f8b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -116,6 +116,12 @@
<artifactId>slf4j-api</artifactId>
<version>${sl4j.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>${sl4j.version}</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</dependencyManagement>