You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2014/10/14 08:38:38 UTC
[4/6] git commit: [OLINGO-423] Added implementation
[OLINGO-423] Added implementation
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/e3121831
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/e3121831
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/e3121831
Branch: refs/heads/master
Commit: e3121831b426e192890855a2db8671a525a76571
Parents: 87f0f06
Author: Michael Bolz <mi...@sap.com>
Authored: Mon Oct 13 14:59:00 2014 +0200
Committer: Michael Bolz <mi...@sap.com>
Committed: Mon Oct 13 14:59:00 2014 +0200
----------------------------------------------------------------------
.../xml/MetadataDocumentXmlSerializer.java | 47 ++++++--
.../serializer/xml/MetadataDocumentTest.java | 111 ++++++++++++++++++-
2 files changed, 144 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/e3121831/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
----------------------------------------------------------------------
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 ec3dd5f..a9cf2f8 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
@@ -21,6 +21,8 @@ package org.apache.olingo.server.core.serializer.xml;
import org.apache.olingo.commons.api.edm.*;
import org.apache.olingo.server.api.edmx.EdmxReference;
import org.apache.olingo.server.api.ServiceMetadata;
+import org.apache.olingo.server.api.edmx.EdmxReferenceInclude;
+import org.apache.olingo.server.api.edmx.EdmxReferenceIncludeAnnotation;
import org.apache.olingo.server.api.serializer.ODataSerializer;
import javax.xml.stream.XMLStreamException;
@@ -70,6 +72,13 @@ public class MetadataDocumentXmlSerializer {
private static final String XML_ALIAS = "Alias";
private static final String XML_NAMESPACE = "Namespace";
private static final String XML_TYPE_DEFINITION = "TypeDefinition";
+ private static final String REFERENCE = "Reference";
+ private static final String INCLUDE = "Include";
+ private static final String INCLUDE_ANNOTATIONS = "IncludeAnnotations";
+ private static final String XML_TERM_NAMESPACE = "TermNamespace";
+ private static final String XML_TARGET_NAMESPACE = "TargetNamespace";
+ private static final String XML_QUALIFIER = "Qualifier";
+ private static final String URI = "Uri";
private final ServiceMetadata serviceMetadata;
@@ -463,7 +472,7 @@ public class MetadataDocumentXmlSerializer {
writer.writeStartElement(XML_KEY);
for (EdmKeyPropertyRef keyRef : keyPropertyRefs) {
writer.writeEmptyElement(XML_PROPERTY_REF);
- String keyName = null;
+ final String keyName;
if (keyRef.getPath() != null) {
keyName = keyRef.getPath() + "/" + keyRef.getKeyPropertyName();
} else {
@@ -511,15 +520,33 @@ public class MetadataDocumentXmlSerializer {
private void appendReference(final XMLStreamWriter writer) throws XMLStreamException {
List<EdmxReference> references = serviceMetadata.getReferences();
for (EdmxReference reference: references) {
- writer.writeStartElement(NS_EDMX, "Reference");
- // TODO: Which value can we use here?
- // <http://docs.oasis-open.org/odata/odata/v4.0/cs02/vocabularies/Org.OData.Core.V1.xml>
- // is an external site we don't want to query each time an EDM-enabled client is used.
- writer.writeAttribute("Uri", reference.getUri().toASCIIString());
- // writer.writeEmptyElement(NS_EDMX, "Include");
- // writer.writeAttribute(XML_NAMESPACE, reference.getIncludeNamespace());
- // writer.writeAttribute(XML_ALIAS, reference.getIncludeAlias());
- // writer.writeEndElement();
+ writer.writeStartElement(PREFIX_EDMX, REFERENCE, NS_EDMX);
+ writer.writeAttribute(URI, reference.getUri().toASCIIString());
+
+ List<EdmxReferenceInclude> includes = reference.getIncludes();
+ for (EdmxReferenceInclude include : includes) {
+ writer.writeStartElement(PREFIX_EDMX, INCLUDE, NS_EDMX);
+ writer.writeAttribute(XML_NAMESPACE, include.getNamespace());
+ if(include.getAlias() != null) {
+ writer.writeAttribute(XML_ALIAS, include.getAlias());
+ }
+ writer.writeEndElement();
+ }
+
+ List<EdmxReferenceIncludeAnnotation> includeAnnotations = reference.getIncludeAnnotations();
+ for (EdmxReferenceIncludeAnnotation includeAnnotation : includeAnnotations) {
+ writer.writeStartElement(PREFIX_EDMX, INCLUDE_ANNOTATIONS, NS_EDMX);
+ writer.writeAttribute(XML_TERM_NAMESPACE, includeAnnotation.getTermNamespace());
+ if(includeAnnotation.getQualifier() != null) {
+ writer.writeAttribute(XML_QUALIFIER, includeAnnotation.getQualifier());
+ }
+ if(includeAnnotation.getTargetNamespace() != null) {
+ writer.writeAttribute(XML_TARGET_NAMESPACE, includeAnnotation.getTargetNamespace());
+ }
+ writer.writeEndElement();
+ }
+
+ writer.writeEndElement();
}
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/e3121831/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
index 8fbbf15..85ac1e8 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentTest.java
@@ -24,6 +24,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.InputStream;
+import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -59,11 +60,12 @@ import org.apache.olingo.server.api.edm.provider.Schema;
import org.apache.olingo.server.api.edm.provider.Singleton;
import org.apache.olingo.server.api.edm.provider.TypeDefinition;
import org.apache.olingo.server.api.edmx.EdmxReference;
+import org.apache.olingo.server.api.edmx.EdmxReferenceInclude;
import org.apache.olingo.server.api.serializer.ODataSerializer;
-import org.apache.olingo.server.api.serializer.SerializerException;
import org.apache.olingo.server.core.ServiceMetadataImpl;
-import org.apache.olingo.server.core.edm.provider.EdmProviderImpl;
-import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
+import org.apache.olingo.server.core.edmx.EdmxReferenceImpl;
+import org.apache.olingo.server.core.edmx.EdmxReferenceIncludeAnnotationImpl;
+import org.apache.olingo.server.core.edmx.EdmxReferenceIncludeImpl;
import org.junit.Test;
public class MetadataDocumentTest {
@@ -78,14 +80,96 @@ public class MetadataDocumentTest {
}
@Test
+ public void writeEdmxWithLocalTestEdm() throws Exception {
+ ODataSerializer serializer = OData.newInstance().createSerializer(ODataFormat.XML);
+
+ List<EdmxReference> edmxReferences = new ArrayList<EdmxReference>();
+ EdmxReferenceImpl reference = new EdmxReferenceImpl(URI.create("http://example.com"));
+ edmxReferences.add(reference);
+
+ EdmxReferenceImpl referenceWithInclude = new EdmxReferenceImpl(
+ URI.create("http://localhost/odata/odata/v4.0/referenceWithInclude"));
+ EdmxReferenceInclude include = new EdmxReferenceIncludeImpl("Org.OData.Core.V1", "Core");
+ referenceWithInclude.addInclude(include);
+ edmxReferences.add(referenceWithInclude);
+
+ EdmxReferenceImpl referenceWithTwoIncludes = new EdmxReferenceImpl(
+ URI.create("http://localhost/odata/odata/v4.0/referenceWithTwoIncludes"));
+ referenceWithTwoIncludes.addInclude(new EdmxReferenceIncludeImpl("Org.OData.Core.2", "Core2"));
+ referenceWithTwoIncludes.addInclude(new EdmxReferenceIncludeImpl("Org.OData.Core.3", "Core3"));
+ edmxReferences.add(referenceWithTwoIncludes);
+
+ EdmxReferenceImpl referenceWithIncludeAnnos = new EdmxReferenceImpl(
+ URI.create("http://localhost/odata/odata/v4.0/referenceWithIncludeAnnos"));
+ referenceWithIncludeAnnos.addIncludeAnnotation(
+ new EdmxReferenceIncludeAnnotationImpl("TermNs.2", "Q.2", "TargetNS.2"));
+ referenceWithIncludeAnnos.addIncludeAnnotation(
+ new EdmxReferenceIncludeAnnotationImpl("TermNs.3", "Q.3","TargetNS.3"));
+ edmxReferences.add(referenceWithIncludeAnnos);
+
+ EdmxReferenceImpl referenceWithAll = new EdmxReferenceImpl(
+ URI.create("http://localhost/odata/odata/v4.0/referenceWithAll"));
+ referenceWithAll.addInclude(new EdmxReferenceIncludeImpl("ReferenceWithAll.1", "Core1"));
+ referenceWithAll.addInclude(new EdmxReferenceIncludeImpl("ReferenceWithAll.2", "Core2"));
+ referenceWithAll.addIncludeAnnotation(
+ new EdmxReferenceIncludeAnnotationImpl("ReferenceWithAllTermNs.4", "Q.4", "TargetNS.4"));
+ referenceWithAll.addIncludeAnnotation(
+ new EdmxReferenceIncludeAnnotationImpl("ReferenceWithAllTermNs.5", "Q.5", "TargetNS.5"));
+ edmxReferences.add(referenceWithAll);
+
+ ServiceMetadata serviceMetadata = new ServiceMetadataImpl(ODataServiceVersion.V40,
+ new TestMetadataProvider(), edmxReferences);
+ InputStream metadata = serializer.metadataDocument(serviceMetadata);
+ assertNotNull(metadata);
+
+ String metadataString = IOUtils.toString(metadata);
+ // edmx reference
+ assertTrue(metadataString.contains(
+ "<edmx:Reference Uri=\"http://example.com\"/>"));
+ assertTrue(metadataString.contains(
+ "<edmx:Reference " +
+ "Uri=\"http://localhost/odata/odata/v4.0/referenceWithInclude\">" +
+ "<edmx:Include Namespace=\"Org.OData.Core.V1\" Alias=\"Core\"/>" +
+ "</edmx:Reference>"));
+ assertTrue(metadataString.contains(
+ "<edmx:Reference " +
+ "Uri=\"http://localhost/odata/odata/v4.0/referenceWithTwoIncludes\">" +
+ "<edmx:Include Namespace=\"Org.OData.Core.2\" Alias=\"Core2\"/>" +
+ "<edmx:Include Namespace=\"Org.OData.Core.3\" Alias=\"Core3\"/>" +
+ "</edmx:Reference>"));
+ assertTrue(metadataString.contains(
+ "<edmx:Reference Uri=\"http://localhost/odata/odata/v4.0/referenceWithIncludeAnnos\">" +
+ "<edmx:IncludeAnnotations TermNamespace=\"TermNs.2\" Qualifier=\"Q.2\" TargetNamespace=\"TargetNS.2\"/>" +
+ "<edmx:IncludeAnnotations TermNamespace=\"TermNs.3\" Qualifier=\"Q.3\" TargetNamespace=\"TargetNS.3\"/>" +
+ "</edmx:Reference>"));
+ assertTrue(metadataString.contains(
+ "<edmx:Reference Uri=\"http://localhost/odata/odata/v4.0/referenceWithAll\">" +
+ "<edmx:Include Namespace=\"ReferenceWithAll.1\" Alias=\"Core1\"/>" +
+ "<edmx:Include Namespace=\"ReferenceWithAll.2\" Alias=\"Core2\"/>" +
+ "<edmx:IncludeAnnotations TermNamespace=\"ReferenceWithAllTermNs.4\" " +
+ "Qualifier=\"Q.4\" TargetNamespace=\"TargetNS.4\"/>" +
+ "<edmx:IncludeAnnotations TermNamespace=\"ReferenceWithAllTermNs.5\" " +
+ "Qualifier=\"Q.5\" TargetNamespace=\"TargetNS.5\"/>" +
+ "</edmx:Reference>"));
+ }
+
+ @Test
public void writeMetadataWithLocalTestEdm() throws Exception {
ODataSerializer serializer = OData.newInstance().createSerializer(ODataFormat.XML);
+ List<EdmxReference> edmxReferences = getEdmxReferences();
ServiceMetadata serviceMetadata = new ServiceMetadataImpl(ODataServiceVersion.V40,
- new TestMetadataProvider(), Collections.<EdmxReference>emptyList());
+ new TestMetadataProvider(), edmxReferences);
InputStream metadata = serializer.metadataDocument(serviceMetadata);
assertNotNull(metadata);
String metadataString = IOUtils.toString(metadata);
+ // edmx reference
+ assertTrue(metadataString
+ .contains("<edmx:Reference " +
+ "Uri=\"http://docs.oasis-open.org/odata/odata/v4.0/cs02/vocabularies/Org.OData.Core.V1.xml\">" +
+ "<edmx:Include Namespace=\"Org.OData.Core.V1\" Alias=\"Core\"/>" +
+ "</edmx:Reference>"));
+
assertTrue(metadataString
.contains("<edmx:Edmx Version=\"4.0\" xmlns:edmx=\"http://docs.oasis-open.org/odata/ns/edmx\">"));
@@ -147,6 +231,25 @@ public class MetadataDocumentTest {
assertTrue(metadataString.contains("</EntityContainer></Schema></edmx:DataServices></edmx:Edmx>"));
}
+ /**
+ * <code>
+ * <edmx:Reference Uri="http://docs.oasis-open.org/odata/odata/v4.0/cs02/vocabularies/Org.OData.Core.V1.xml">
+ * <edmx:Include Namespace="Org.OData.Core.V1" Alias="Core"/>
+ * </edmx:Reference>
+ * </code>
+ *
+ * @return default emdx reference
+ */
+ private List<EdmxReference> getEdmxReferences() {
+ List<EdmxReference> edmxReferences = new ArrayList<EdmxReference>();
+ EdmxReferenceImpl reference = new EdmxReferenceImpl(
+ URI.create("http://docs.oasis-open.org/odata/odata/v4.0/cs02/vocabularies/Org.OData.Core.V1.xml"));
+ EdmxReferenceInclude include = new EdmxReferenceIncludeImpl("Org.OData.Core.V1", "Core");
+ reference.addInclude(include);
+ edmxReferences.add(reference);
+ return edmxReferences;
+ }
+
@Test
public void writeMetadataWithTechnicalScenario() throws Exception {
ODataSerializer serializer = OData.newInstance().createSerializer(ODataFormat.XML);