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/06/29 13:54:22 UTC
[18/34] olingo-odata4 git commit: [OLINGO-704] Refactoring ContentType
[OLINGO-704] Refactoring ContentType
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/91d04271
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/91d04271
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/91d04271
Branch: refs/heads/olingo712
Commit: 91d04271bacc85ff6eb0461454783b7100e64dc0
Parents: 628e2e7
Author: Christian Holzer <c....@sap.com>
Authored: Fri Jun 19 16:05:05 2015 +0200
Committer: Christian Holzer <c....@sap.com>
Committed: Fri Jun 19 16:27:48 2015 +0200
----------------------------------------------------------------------
.../olingo/fit/v4/EntityRetrieveTestITCase.java | 7 +-
.../api/domain/ClientEntitySetIterator.java | 7 +-
.../olingo/client/core/ODataClientImpl.java | 8 +-
.../cud/ODataValueUpdateRequestImpl.java | 3 +-
.../invoke/AbstractODataInvokeRequest.java | 4 +-
.../request/retrieve/ODataValueRequestImpl.java | 3 +-
.../ClientODataDeserializerImpl.java | 8 +-
.../apache/olingo/client/core/AbstractTest.java | 5 +-
.../olingo/client/core/v4/EntityTest.java | 3 +-
.../olingo/client/core/v4/PropertyTest.java | 5 +-
.../client/core/v4/ServiceDocumentTest.java | 3 +-
.../olingo/commons/api/format/ContentType.java | 82 +++++++++-----------
.../olingo/commons/api/format/Format.java | 41 ----------
.../serialization/JsonEntitySerializer.java | 7 +-
.../core/serialization/JsonSerializer.java | 10 ++-
.../olingo/server/core/ServiceRequest.java | 13 ++--
.../olingo/server/core/ContentNegotiator.java | 11 ++-
.../apache/olingo/server/core/ODataImpl.java | 39 ++++------
.../json/ODataJsonDeserializer.java | 4 +-
.../serializer/json/ODataJsonSerializer.java | 12 +--
.../json/ServiceDocumentJsonSerializer.java | 4 +-
.../serializer/utils/ContentTypeHelper.java | 28 +++++++
.../olingo/server/core/uri/parser/Parser.java | 10 ++-
.../processor/TechnicalActionProcessor.java | 5 +-
.../processor/TechnicalEntityProcessor.java | 5 +-
.../TechnicalPrimitiveComplexProcessor.java | 3 +-
.../tecsvc/processor/TechnicalProcessor.java | 5 ++
.../server/sample/processor/CarsProcessor.java | 12 ++-
28 files changed, 163 insertions(+), 184 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/fit/src/test/java/org/apache/olingo/fit/v4/EntityRetrieveTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/EntityRetrieveTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/EntityRetrieveTestITCase.java
index 903684d..58fc160 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/EntityRetrieveTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/EntityRetrieveTestITCase.java
@@ -46,7 +46,6 @@ import org.apache.olingo.client.api.uri.URIBuilder;
import org.apache.olingo.commons.api.data.ResWrap;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.junit.Test;
/**
@@ -71,8 +70,10 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
assertEquals("Edm.GeographyPoint", entity.getProperty("Home").getPrimitiveValue().getTypeName());
// In JSON with minimal metadata, links are not provided
- if (contentType.getODataFormat() == Format.ATOM
- || contentType.getODataFormat() == Format.JSON_FULL_METADATA) {
+ if(contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML)
+ || (contentType.isCompatible(ContentType.JSON)
+ && ContentType.VALUE_ODATA_METADATA_FULL
+ .equals(contentType.getParameter(ContentType.PARAMETER_ODATA_METADATA)))) {
assertEquals(testStaticServiceRootURL + "/Customers(1)", entity.getEditLink().toASCIIString());
assertEquals(3, entity.getNavigationLinks().size());
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ClientEntitySetIterator.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ClientEntitySetIterator.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ClientEntitySetIterator.java
index cbcd7f8..30a1caf 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ClientEntitySetIterator.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ClientEntitySetIterator.java
@@ -34,7 +34,6 @@ import org.apache.olingo.commons.api.Constants;
import org.apache.olingo.commons.api.data.Entity;
import org.apache.olingo.commons.api.data.ResWrap;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.api.serialization.ODataDeserializerException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -85,8 +84,8 @@ public class ClientEntitySetIterator<ES extends ClientEntitySet, E extends Clien
this.stream = stream;
this.contentType = contentType;
this.osEntitySet = new ByteArrayOutputStream();
-
- if (contentType.getODataFormat() == Format.ATOM) {
+
+ if(contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML)) {
namespaces = getAllElementAttributes(stream, "feed", osEntitySet);
} else {
namespaces = null;
@@ -111,7 +110,7 @@ public class ClientEntitySetIterator<ES extends ClientEntitySet, E extends Clien
@SuppressWarnings("unchecked")
public boolean hasNext() {
if (available && cached == null) {
- if (contentType.getODataFormat() == Format.ATOM) {
+ if (contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML)) {
cached = nextAtomEntityFromEntitySet(stream, osEntitySet, namespaces);
} else {
cached = nextJSONEntityFromEntitySet(stream, osEntitySet);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/client-core/src/main/java/org/apache/olingo/client/core/ODataClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/ODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/ODataClientImpl.java
index 6018c87..dd9f68e 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/ODataClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/ODataClientImpl.java
@@ -51,7 +51,6 @@ import org.apache.olingo.client.core.uri.FilterFactoryImpl;
import org.apache.olingo.client.core.uri.URIBuilderImpl;
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.api.serialization.ODataSerializer;
import org.apache.olingo.commons.core.serialization.AtomSerializer;
import org.apache.olingo.commons.core.serialization.JsonSerializer;
@@ -132,9 +131,10 @@ public class ODataClientImpl implements ODataClient {
@Override
public ODataSerializer getSerializer(final ContentType contentType) {
- return contentType.getODataFormat() == Format.ATOM || contentType.getODataFormat() == Format.XML ?
- new AtomSerializer() :
- new JsonSerializer(false, contentType);
+ return contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML,
+ ContentType.APPLICATION_XML) ?
+ new AtomSerializer() : new JsonSerializer(false, contentType);
+
}
@Override
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataValueUpdateRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataValueUpdateRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataValueUpdateRequestImpl.java
index 52e27fa..407a199 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataValueUpdateRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataValueUpdateRequestImpl.java
@@ -35,7 +35,6 @@ import org.apache.olingo.client.core.communication.response.AbstractODataRespons
import org.apache.olingo.client.core.uri.URIUtils;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.api.http.HttpMethod;
/**
@@ -110,7 +109,7 @@ public class ODataValueUpdateRequestImpl extends AbstractODataBasicRequest<OData
try {
resValue = odataClient.getObjectFactory().newPrimitiveValueBuilder().
- setType(contentType.getODataFormat() == Format.TEXT_PLAIN
+ setType(contentType.isCompatible(ContentType.TEXT_PLAIN)
? EdmPrimitiveTypeKind.String : EdmPrimitiveTypeKind.Stream).
setValue(getRawResponse()).
build();
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java
index 88fd2e2..c721ed8 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java
@@ -44,7 +44,6 @@ import org.apache.olingo.client.core.communication.request.AbstractODataBasicReq
import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
import org.apache.olingo.client.core.uri.URIUtils;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.api.http.HttpMethod;
import org.apache.olingo.commons.api.serialization.ODataDeserializerException;
import org.apache.olingo.commons.api.serialization.ODataSerializerException;
@@ -97,7 +96,8 @@ public abstract class AbstractODataInvokeRequest<T extends ClientInvokeResult>
}
private String getActualFormat(final ContentType contentType) {
- return ((ClientProperty.class.isAssignableFrom(reference) && contentType.getODataFormat() == Format.ATOM)
+ return ((ClientProperty.class.isAssignableFrom(reference)
+ && contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML))
? ContentType.APPLICATION_XML : contentType).toContentTypeString();
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataValueRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataValueRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataValueRequestImpl.java
index 229ab1a..e2161d4 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataValueRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataValueRequestImpl.java
@@ -30,7 +30,6 @@ import org.apache.olingo.client.api.domain.ClientPrimitiveValue;
import org.apache.olingo.client.api.http.HttpClientException;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
/**
* This class implements an OData entity property value query request.
@@ -79,7 +78,7 @@ public class ODataValueRequestImpl extends AbstractODataRetrieveRequest<ClientPr
try {
value = odataClient.getObjectFactory().newPrimitiveValueBuilder().
- setType(contentType.getODataFormat() == Format.TEXT_PLAIN
+ setType(contentType.isCompatible(ContentType.TEXT_PLAIN)
? EdmPrimitiveTypeKind.String : EdmPrimitiveTypeKind.Stream).
setValue(IOUtils.toString(getRawResponse())).build();
} catch (Exception e) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ClientODataDeserializerImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ClientODataDeserializerImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ClientODataDeserializerImpl.java
index 5c44372..9bd4c6c 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ClientODataDeserializerImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/ClientODataDeserializerImpl.java
@@ -38,7 +38,6 @@ import org.apache.olingo.commons.api.data.Property;
import org.apache.olingo.commons.api.data.ResWrap;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.api.serialization.ODataDeserializer;
import org.apache.olingo.commons.api.serialization.ODataDeserializerException;
import org.apache.olingo.commons.core.serialization.AtomDeserializer;
@@ -64,7 +63,8 @@ public class ClientODataDeserializerImpl implements ClientODataDeserializer {
public ClientODataDeserializerImpl(final boolean serverMode, final ContentType contentType) {
this.contentType = contentType;
- if (contentType.getODataFormat() == Format.XML || contentType.getODataFormat() == Format.ATOM) {
+ if(contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML,
+ ContentType.APPLICATION_XML )) {
deserializer = new AtomDeserializer();
} else {
deserializer = new JsonDeserializer(serverMode);
@@ -123,7 +123,7 @@ public class ClientODataDeserializerImpl implements ClientODataDeserializer {
@Override
public ResWrap<ServiceDocument> toServiceDocument(final InputStream input) throws ODataDeserializerException {
- return contentType.getODataFormat() == Format.XML ?
+ return contentType.isCompatible(ContentType.APPLICATION_XML) ?
new XMLServiceDocumentDeserializer(false).toServiceDocument(input) :
new JSONServiceDocumentDeserializer(false).toServiceDocument(input);
}
@@ -131,7 +131,7 @@ public class ClientODataDeserializerImpl implements ClientODataDeserializer {
@Override
public ResWrap<Delta> toDelta(final InputStream input) throws ODataDeserializerException {
try {
- return contentType.getODataFormat() == Format.ATOM ?
+ return contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML) ?
new AtomDeserializer().delta(input) :
new JsonDeltaDeserializer(false).toDelta(input);
} catch (XMLStreamException e) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/client-core/src/test/java/org/apache/olingo/client/core/AbstractTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/AbstractTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/AbstractTest.java
index ed21e24..beeda7e 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/AbstractTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/AbstractTest.java
@@ -20,7 +20,6 @@ package org.apache.olingo.client.core;
import org.apache.olingo.client.api.ODataClient;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.custommonkey.xmlunit.XMLUnit;
import org.junit.BeforeClass;
@@ -45,7 +44,7 @@ public abstract class AbstractTest {
}
protected String getSuffix(final ContentType contentType) {
- return contentType.getODataFormat() == Format.ATOM
- || contentType.getODataFormat() == Format.XML ? "xml" : "json";
+ return contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML,
+ ContentType.APPLICATION_XML) ? "xml": "json";
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
index 98ba7f9..a21cc15 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
@@ -45,7 +45,6 @@ import org.apache.olingo.commons.api.data.ResWrap;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.core.edm.primitivetype.EdmDateTimeOffset;
import org.apache.olingo.commons.core.edm.primitivetype.EdmDuration;
import org.junit.Ignore;
@@ -103,7 +102,7 @@ public class EntityTest extends AbstractTest {
}
if ("Orders".equals(link.getName())) {
checked++;
- if (contentType.getODataFormat() == Format.ATOM) {
+ if(contentType.isCompatible(ContentType.APPLICATION_ATOM_SVC, ContentType.APPLICATION_ATOM_XML)) {
assertEquals(ClientLinkType.ENTITY_SET_NAVIGATION, link.getType());
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/PropertyTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/PropertyTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/PropertyTest.java
index ccce804..73ae7f1 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/PropertyTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/PropertyTest.java
@@ -32,7 +32,6 @@ import org.apache.olingo.client.api.domain.ClientProperty;
import org.apache.olingo.client.api.domain.ClientValue;
import org.apache.olingo.client.core.AbstractTest;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.api.serialization.ODataDeserializerException;
import org.apache.olingo.commons.api.serialization.ODataSerializerException;
import org.junit.Test;
@@ -53,7 +52,7 @@ public class PropertyTest extends AbstractTest {
final ClientProperty written = getClient().getReader().readProperty(
getClient().getWriter().writeProperty(property, contentType), contentType);
// This is needed because type information gets lost with serialization
- if (contentType.getODataFormat() == Format.APPLICATION_XML) {
+ if (contentType.isCompatible(ContentType.APPLICATION_XML)) {
final ClientProperty comparable = getClient().getObjectFactory().newEnumProperty(property.getName(),
getClient().getObjectFactory().
newEnumValue(property.getEnumValue().getTypeName(), written.getEnumValue().getValue()));
@@ -114,7 +113,7 @@ public class PropertyTest extends AbstractTest {
final ClientProperty written = getClient().getReader().readProperty(
getClient().getWriter().writeProperty(property, contentType), contentType);
// This is needed because type information gets lost with JSON serialization
- if (contentType.getODataFormat() == Format.APPLICATION_XML) {
+ if(contentType.isCompatible(ContentType.APPLICATION_XML)) {
final ClientCollectionValue<ClientValue> typedValue = getClient().getObjectFactory().
newCollectionValue(property.getCollectionValue().getTypeName());
for (final Iterator<ClientValue> itor = written.getCollectionValue().iterator(); itor.hasNext();) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/ServiceDocumentTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/ServiceDocumentTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/ServiceDocumentTest.java
index 65bd697..97f6d81 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/ServiceDocumentTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/ServiceDocumentTest.java
@@ -30,7 +30,6 @@ import org.apache.olingo.client.api.domain.ClientServiceDocument;
import org.apache.olingo.client.core.AbstractTest;
import org.apache.olingo.commons.api.data.ResWrap;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.api.serialization.ODataDeserializerException;
import org.junit.Test;
@@ -42,7 +41,7 @@ public class ServiceDocumentTest extends AbstractTest {
}
private String getFileExtension(final ContentType contentType) {
- return contentType.getODataFormat() == Format.XML ? "xml" : "json";
+ return contentType.isCompatible(ContentType.APPLICATION_XML) ? "xml" : "json";
}
private ClientServiceDocument parse(final ContentType contentType) throws ODataDeserializerException {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/ContentType.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/ContentType.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/ContentType.java
index 90572a4..2aea46f 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/ContentType.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/ContentType.java
@@ -82,7 +82,12 @@ public final class ContentType {
public static final String PARAMETER_CHARSET = "charset";
public static final String PARAMETER_IEEE754_COMPATIBLE = "IEEE754Compatible";
-
+ public static final String PARAMETER_ODATA_METADATA = "odata.metadata";
+
+ public static final String VALUE_ODATA_METADATA_NONE = "none";
+ public static final String VALUE_ODATA_METADATA_MINIMAL = "minimal";
+ public static final String VALUE_ODATA_METADATA_FULL = "full";
+
private final String type;
private final String subtype;
private final Map<String, String> parameters;
@@ -249,7 +254,18 @@ public final class ContentType {
public Map<String, String> getParameters() {
return Collections.unmodifiableMap(parameters);
}
-
+
+ /**
+ * Returns the value of a given parameter.
+ * If the parameter does not exists the method returns null
+ *
+ * @param name The parameter to get
+ * @return the value of the parameter or null if the parameter is not present
+ */
+ public String getParameter(final String name) {
+ return parameters.get(name);
+ }
+
@Override
public int hashCode() {
return 1;
@@ -306,7 +322,24 @@ public final class ContentType {
public boolean isCompatible(final ContentType other) {
return type.equalsIgnoreCase(other.type) && subtype.equalsIgnoreCase(other.subtype);
}
-
+
+ /**
+ * <p>{@link ContentType}s are <b>compatible</b>
+ * if <code>type</code> and <code>subtype</code> have the same value.</p>
+ * <p>The set <code>parameters</code> are <b>always</b> ignored
+ * (for compare with parameters see {@link #equals(Object)}).</p>
+ * @return <code>true</code> if both instances are compatible (see definition above), otherwise <code>false</code>.
+ */
+ public boolean isCompatible(final ContentType...otherTypes) {
+ for(final ContentType otherType : otherTypes) {
+ if(isCompatible(otherType)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
/**
* Checks whether both strings are equal ignoring the case of the strings.
*
@@ -337,49 +370,6 @@ public final class ContentType {
return sb.toString();
}
- /**
- * Returns the {@link Format} of the current Content-Type
- *
- * @return {@link Format}
- */
- public Format getODataFormat() {
- if (isCompatible(ContentType.APPLICATION_ATOM_XML)
- || isCompatible(ContentType.APPLICATION_ATOM_SVC)) {
- return Format.ATOM;
- } else if (isCompatible(ContentType.APPLICATION_XML)) {
- return Format.XML;
- } else if (isCompatible(ContentType.APPLICATION_JSON)) {
- String jsonVariant = getParameters().get("odata.metadata");
- if (jsonVariant != null) {
- if ("none".equals(jsonVariant)) {
- return Format.JSON_NO_METADATA;
- } else if ("minimal".equals(jsonVariant)) {
- return Format.JSON;
- } else if ("full".equals(jsonVariant)) {
- return Format.JSON_FULL_METADATA;
- }
- }
- return Format.JSON;
- } else if (isCompatible(ContentType.APPLICATION_OCTET_STREAM)) {
- return Format.APPLICATION_OCTET_STREAM;
- } else if (isCompatible(ContentType.TEXT_PLAIN)) {
- return Format.TEXT_PLAIN;
- } else if (isCompatible(ContentType.APPLICATION_XHTML_XML)) {
- return Format.APPLICATION_XHTML_XML;
- } else if (isCompatible(ContentType.APPLICATION_SVG_XML)) {
- return Format.APPLICATION_SVG_XML;
- } else if (isCompatible(ContentType.APPLICATION_FORM_URLENCODED)) {
- return Format.APPLICATION_FORM_URLENCODED;
- } else if (isCompatible(ContentType.MULTIPART_FORM_DATA)) {
- return Format.MULTIPART_FORM_DATA;
- } else if (isCompatible(ContentType.TEXT_XML)) {
- return Format.TEXT_XML;
- } else if (isCompatible(ContentType.TEXT_HTML)) {
- return Format.TEXT_HTML;
- }
- return null;
- }
-
@Override
public String toString() {
return toContentTypeString();
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/Format.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/Format.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/Format.java
deleted file mode 100644
index 09e6a01..0000000
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/format/Format.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.olingo.commons.api.format;
-
-/**
- * Available formats to be used in various contexts.
- */
-public enum Format {
- JSON_NO_METADATA,
- JSON,
- JSON_FULL_METADATA,
- ATOM,
- XML,
- APPLICATION_XML,
- APPLICATION_XHTML_XML,
- APPLICATION_SVG_XML,
- APPLICATION_JSON,
- APPLICATION_FORM_URLENCODED,
- MULTIPART_FORM_DATA,
- APPLICATION_OCTET_STREAM,
- TEXT_PLAIN,
- TEXT_XML,
- TEXT_HTML
-}
-
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java
index 6cfd78d..35f9ec8 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java
@@ -30,7 +30,6 @@ import org.apache.olingo.commons.api.data.Property;
import org.apache.olingo.commons.api.data.ResWrap;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
import com.fasterxml.jackson.core.JsonGenerator;
@@ -70,12 +69,12 @@ public class JsonEntitySerializer extends JsonSerializer {
}
}
- if (StringUtils.isNotBlank(entity.getType()) && contentType.getODataFormat() != Format.JSON_NO_METADATA) {
+ if (StringUtils.isNotBlank(entity.getType()) && !isODataMetadataNone(contentType)) {
jgen.writeStringField(Constants.JSON_TYPE,
new EdmTypeInfo.Builder().setTypeExpression(entity.getType()).build().external());
}
- if (entity.getId() != null && contentType.getODataFormat() != Format.JSON_NO_METADATA) {
+ if (entity.getId() != null && !isODataMetadataNone(contentType)) {
jgen.writeStringField(Constants.JSON_ID, entity.getId().toASCIIString());
}
@@ -97,7 +96,7 @@ public class JsonEntitySerializer extends JsonSerializer {
}
}
- if (contentType.getODataFormat() != Format.JSON_NO_METADATA) {
+ if (!isODataMetadataNone(contentType)) {
links(entity, jgen);
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
index 7fb1b06..bfbfc8d 100755
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
@@ -44,7 +44,6 @@ import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.edm.geo.Geospatial;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.api.serialization.ODataSerializer;
import org.apache.olingo.commons.api.serialization.ODataSerializerException;
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
@@ -314,7 +313,7 @@ public class JsonSerializer implements ODataSerializer {
throws IOException, EdmPrimitiveTypeException {
jgen.writeStartObject();
- if (typeInfo != null && contentType.getODataFormat() != Format.JSON_NO_METADATA) {
+ if (typeInfo != null && !isODataMetadataNone(contentType)) {
jgen.writeStringField(Constants.JSON_TYPE, typeInfo.external());
}
@@ -361,7 +360,7 @@ public class JsonSerializer implements ODataSerializer {
valuable.isPrimitive()) || valuable.isNull()) {
type = EdmPrimitiveTypeKind.String.getFullQualifiedName().toString();
}
- if (StringUtils.isNotBlank(type) && contentType.getODataFormat() != Format.JSON_NO_METADATA) {
+ if (StringUtils.isNotBlank(type) && !isODataMetadataNone(contentType)) {
jgen.writeFieldName(
name + StringUtils.prependIfMissing(Constants.JSON_TYPE, "@"));
jgen.writeString(new EdmTypeInfo.Builder().setTypeExpression(type).build().external());
@@ -380,4 +379,9 @@ public class JsonSerializer implements ODataSerializer {
final String parameter = contentType.getParameters().get(ContentType.PARAMETER_IEEE754_COMPATIBLE);
return parameter == null ? false : "true".equals(parameter.toLowerCase());
}
+
+ protected boolean isODataMetadataNone(final ContentType contentType) {
+ return contentType.isCompatible(ContentType.APPLICATION_JSON)
+ && ContentType.VALUE_ODATA_METADATA_NONE.equals(contentType.getParameter(ContentType.PARAMETER_ODATA_METADATA));
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/ServiceRequest.java
----------------------------------------------------------------------
diff --git a/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/ServiceRequest.java b/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/ServiceRequest.java
index 26895de..76e8d5f 100644
--- a/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/ServiceRequest.java
+++ b/lib/server-core-ext/src/main/java/org/apache/olingo/server/core/ServiceRequest.java
@@ -28,7 +28,6 @@ import java.util.StringTokenizer;
import org.apache.olingo.commons.api.data.ContextURL;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.api.http.HttpHeader;
import org.apache.olingo.commons.api.http.HttpMethod;
import org.apache.olingo.server.api.OData;
@@ -143,16 +142,15 @@ public abstract class ServiceRequest {
@SuppressWarnings("unchecked")
public <T> T getSerializerOptions(Class<T> serilizerOptions, ContextURL contextUrl,
boolean references) throws ContentNegotiatorException {
- final Format format = getResponseContentType().getODataFormat();
-
+
if (serilizerOptions.isAssignableFrom(EntitySerializerOptions.class)) {
return (T) EntitySerializerOptions.with()
- .contextURL(format == Format.JSON_NO_METADATA ? null : contextUrl)
+ .contextURL(isODataMetadataNone(getResponseContentType()) ? null : contextUrl)
.expand(uriInfo.getExpandOption()).select(this.uriInfo.getSelectOption())
.setWriteOnlyReferences(references).build();
} else if (serilizerOptions.isAssignableFrom(EntityCollectionSerializerOptions.class)) {
return (T) EntityCollectionSerializerOptions.with()
- .contextURL(format == Format.JSON_NO_METADATA ? null : contextUrl)
+ .contextURL(isODataMetadataNone(getResponseContentType()) ? null : contextUrl)
.count(uriInfo.getCountOption()).expand(uriInfo.getExpandOption())
.select(uriInfo.getSelectOption()).setWriteOnlyReferences(references).build();
} else if (serilizerOptions.isAssignableFrom(ComplexSerializerOptions.class)) {
@@ -260,4 +258,9 @@ public abstract class ServiceRequest {
dispatcher.visit(uriInfo);
return (DataRequest)dispatcher.request;
}
+
+ private boolean isODataMetadataNone(final ContentType contentType) {
+ return contentType.isCompatible(ContentType.JSON)
+ && ContentType.VALUE_ODATA_METADATA_NONE.equals(contentType.getParameter(ContentType.PARAMETER_ODATA_METADATA));
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/server-core/src/main/java/org/apache/olingo/server/core/ContentNegotiator.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ContentNegotiator.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ContentNegotiator.java
index f7675d6..a262b69 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ContentNegotiator.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ContentNegotiator.java
@@ -23,7 +23,6 @@ import java.util.List;
import org.apache.olingo.commons.api.format.AcceptType;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.api.http.HttpHeader;
import org.apache.olingo.server.api.ODataRequest;
import org.apache.olingo.server.api.serializer.CustomContentTypeSupport;
@@ -32,6 +31,10 @@ import org.apache.olingo.server.api.uri.queryoption.FormatOption;
public class ContentNegotiator {
+ private static final String ATOM = "atom";
+ private static final String JSON = "json";
+ private static final String XML = "xml";
+
private ContentNegotiator() {}
private static List<ContentType> getDefaultSupportedContentTypes(final RepresentationType type) {
@@ -79,9 +82,9 @@ public class ContentNegotiator {
if (formatOption != null && formatOption.getFormat() != null) {
final String formatString = formatOption.getFormat().trim();
final ContentType contentType =
- Format.JSON.name().equalsIgnoreCase(formatString) ? ContentType.JSON :
- Format.XML.name().equalsIgnoreCase(formatString) ? ContentType.APPLICATION_XML :
- Format.ATOM.name().equalsIgnoreCase(formatString) ? ContentType.APPLICATION_ATOM_XML : null;
+ JSON.equalsIgnoreCase(formatString) ? ContentType.JSON :
+ XML.equalsIgnoreCase(formatString) ? ContentType.APPLICATION_XML :
+ ATOM.equalsIgnoreCase(formatString) ? ContentType.APPLICATION_ATOM_XML : null;
try {
result = getAcceptedType(
AcceptType.fromContentType(contentType == null ?
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataImpl.java
index 55c6b71..1ad95a1 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataImpl.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataImpl.java
@@ -24,7 +24,6 @@ import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
import org.apache.olingo.commons.api.edm.provider.CsdlEdmProvider;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
import org.apache.olingo.server.api.OData;
import org.apache.olingo.server.api.ODataHttpHandler;
@@ -51,21 +50,16 @@ public class ODataImpl extends OData {
@Override
public ODataSerializer createSerializer(final ContentType contentType) throws SerializerException {
- final Format format = contentType.getODataFormat();
ODataSerializer serializer;
-
- switch (format) {
- case JSON:
- case JSON_NO_METADATA:
- case JSON_FULL_METADATA:
+
+ // odata.metadata=none, odata.metadata=minimal, odata.metadata=full
+ if(contentType.isCompatible(ContentType.APPLICATION_JSON)) {
serializer = new ODataJsonSerializer(contentType);
- break;
- case XML:
+ } else if(contentType.isCompatible(ContentType.APPLICATION_XML)) {
serializer = new ODataXmlSerializerImpl();
- break;
- default:
- throw new SerializerException("Unsupported format: " + format,
- SerializerException.MessageKeys.UNSUPPORTED_FORMAT, format.toString());
+ } else {
+ throw new SerializerException("Unsupported format: " + contentType.toContentTypeString(),
+ SerializerException.MessageKeys.UNSUPPORTED_FORMAT, contentType.toContentTypeString());
}
return serializer;
@@ -105,21 +99,18 @@ public class ODataImpl extends OData {
@Override
public ODataDeserializer createDeserializer(final ContentType contentType) throws DeserializerException {
- final Format format = contentType.getODataFormat();
ODataDeserializer deserializer;
-
- switch (format) {
- case JSON:
- case JSON_NO_METADATA:
- case JSON_FULL_METADATA:
+
+ // odata.metadata=none, odata.metadata=minimal, odata.metadata=full
+ if(contentType.isCompatible(ContentType.JSON)) {
deserializer = new ODataJsonDeserializer(contentType);
- break;
- case XML:
+ //} else if(contentType.isCompatible(ContentType.APPLICATION_XML)) {
// We do not support XML deserialization right now so this must lead to an error.
- default:
- throw new DeserializerException("Unsupported format: " + format,
- DeserializerException.MessageKeys.UNSUPPORTED_FORMAT, format.toString());
+ } else {
+ throw new DeserializerException("Unsupported format: " + contentType.toContentTypeString(),
+ DeserializerException.MessageKeys.UNSUPPORTED_FORMAT, contentType.toContentTypeString());
}
+
return deserializer;
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java
index 9c3c763..c67efbc 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java
@@ -882,8 +882,8 @@ public class ODataJsonDeserializer implements ODataDeserializer {
}
private boolean isODataIEEE754Compatible(final ContentType contentType) {
- return contentType.getParameters().containsKey("ieee754compatible")
+ return contentType.getParameters().containsKey(ContentType.PARAMETER_IEEE754_COMPATIBLE)
&& Boolean.TRUE.toString().toLowerCase().equals(
- contentType.getParameters().get("ieee754compatible").toLowerCase());
+ contentType.getParameter(ContentType.PARAMETER_IEEE754_COMPATIBLE).toLowerCase());
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
index 671a069..f50fcad 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
@@ -42,7 +42,6 @@ import org.apache.olingo.commons.api.edm.EdmProperty;
import org.apache.olingo.commons.api.edm.EdmStructuredType;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
import org.apache.olingo.server.api.ODataServerError;
import org.apache.olingo.server.api.ServiceMetadata;
@@ -61,6 +60,7 @@ import org.apache.olingo.server.api.uri.queryoption.ExpandOption;
import org.apache.olingo.server.api.uri.queryoption.SelectOption;
import org.apache.olingo.server.core.serializer.SerializerResultImpl;
import org.apache.olingo.server.core.serializer.utils.CircleStreamBuffer;
+import org.apache.olingo.server.core.serializer.utils.ContentTypeHelper;
import org.apache.olingo.server.core.serializer.utils.ContextURLBuilder;
import org.apache.olingo.server.core.serializer.utils.ExpandSelectHelper;
import org.apache.olingo.server.core.uri.UriHelperImpl;
@@ -196,7 +196,7 @@ public class ODataJsonSerializer implements ODataSerializer {
}
private ContextURL checkContextURL(final ContextURL contextURL) throws SerializerException {
- if (contentType.getODataFormat() == Format.JSON_NO_METADATA) {
+ if(ContentTypeHelper.isODataMetadataNone(contentType)) {
return null;
} else if (contextURL == null) {
throw new SerializerException("ContextURL null!", SerializerException.MessageKeys.NO_CONTEXT_URL);
@@ -205,7 +205,7 @@ public class ODataJsonSerializer implements ODataSerializer {
}
private void writeMetadataETag(final ServiceMetadata metadata, JsonGenerator json) throws IOException {
- if (contentType.getODataFormat() != Format.JSON_NO_METADATA
+ if (!ContentTypeHelper.isODataMetadataNone(contentType)
&& metadata != null
&& metadata.getServiceMetadataETagSupport() != null
&& metadata.getServiceMetadataETagSupport().getMetadataETag() != null) {
@@ -236,7 +236,7 @@ public class ODataJsonSerializer implements ODataSerializer {
final SelectOption select, final boolean onlyReference, final JsonGenerator json)
throws IOException, SerializerException {
json.writeStartObject();
- if (contentType.getODataFormat() != Format.JSON_NO_METADATA) {
+ if(!ContentTypeHelper.isODataMetadataNone(contentType)) {
if (contextURL != null) { // top-level entity
json.writeStringField(Constants.JSON_CONTEXT, ContextURLBuilder.create(contextURL).toASCIIString());
writeMetadataETag(metadata, json);
@@ -754,8 +754,8 @@ public class ODataJsonSerializer implements ODataSerializer {
}
private boolean isODataIEEE754Compatible(final ContentType contentType) {
- return contentType.getParameters().containsKey("ieee754compatible")
+ return contentType.getParameters().containsKey(ContentType.PARAMETER_IEEE754_COMPATIBLE)
&& Boolean.TRUE.toString().toLowerCase().equals(
- contentType.getParameters().get("ieee754compatible").toLowerCase());
+ contentType.getParameter(ContentType.PARAMETER_IEEE754_COMPATIBLE).toLowerCase());
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentJsonSerializer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentJsonSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentJsonSerializer.java
index ad98aa7..5b34184 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentJsonSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentJsonSerializer.java
@@ -27,8 +27,8 @@ import org.apache.olingo.commons.api.edm.EdmEntitySet;
import org.apache.olingo.commons.api.edm.EdmFunctionImport;
import org.apache.olingo.commons.api.edm.EdmSingleton;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.server.api.ServiceMetadata;
+import org.apache.olingo.server.core.serializer.utils.ContentTypeHelper;
import com.fasterxml.jackson.core.JsonGenerator;
@@ -59,7 +59,7 @@ public class ServiceDocumentJsonSerializer {
+ Constants.METADATA;
gen.writeObjectField(Constants.JSON_CONTEXT, metadataUri);
- if (contentType.getODataFormat() != Format.JSON_NO_METADATA
+ if (!ContentTypeHelper.isODataMetadataNone(contentType)
&& metadata != null
&& metadata.getServiceMetadataETagSupport() != null
&& metadata.getServiceMetadataETagSupport().getMetadataETag() != null) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/utils/ContentTypeHelper.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/utils/ContentTypeHelper.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/utils/ContentTypeHelper.java
new file mode 100644
index 0000000..1e80666
--- /dev/null
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/utils/ContentTypeHelper.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.server.core.serializer.utils;
+
+import org.apache.olingo.commons.api.format.ContentType;
+
+public class ContentTypeHelper {
+ public static boolean isODataMetadataNone(final ContentType contentType) {
+ return contentType.isCompatible(ContentType.APPLICATION_JSON)
+ && ContentType.VALUE_ODATA_METADATA_NONE.equals(contentType.getParameter(ContentType.PARAMETER_ODATA_METADATA));
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/Parser.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/Parser.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/Parser.java
index 69651b3..f764c53 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/Parser.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/parser/Parser.java
@@ -32,7 +32,6 @@ import org.antlr.v4.runtime.atn.PredictionMode;
import org.antlr.v4.runtime.misc.ParseCancellationException;
import org.apache.olingo.commons.api.ODataRuntimeException;
import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.server.api.uri.UriInfo;
import org.apache.olingo.server.api.uri.UriInfoKind;
import org.apache.olingo.server.api.uri.UriResource;
@@ -68,6 +67,9 @@ import org.apache.olingo.server.core.uri.queryoption.SkipTokenOptionImpl;
import org.apache.olingo.server.core.uri.queryoption.TopOptionImpl;
public class Parser {
+ private static final String ATOM = "atom";
+ private static final String JSON = "json";
+ private static final String XML = "xml";
int logLevel = 0;
private enum ParserEntryRules {
@@ -177,9 +179,9 @@ public class Parser {
FormatOptionImpl formatOption = new FormatOptionImpl();
formatOption.setName(option.name);
formatOption.setText(option.value);
- if (option.value.equalsIgnoreCase(Format.JSON.name())
- || option.value.equalsIgnoreCase(Format.XML.name())
- || option.value.equalsIgnoreCase(Format.ATOM.name())
+ if (option.value.equalsIgnoreCase(JSON)
+ || option.value.equalsIgnoreCase(XML)
+ || option.value.equalsIgnoreCase(ATOM)
|| isFormatSyntaxValid(option.value)) {
formatOption.setFormat(option.value);
} else {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalActionProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalActionProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalActionProcessor.java
index b6159ff..1e038b2 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalActionProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalActionProcessor.java
@@ -31,7 +31,6 @@ import org.apache.olingo.commons.api.edm.EdmEntitySet;
import org.apache.olingo.commons.api.edm.EdmEntityType;
import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.api.http.HttpHeader;
import org.apache.olingo.commons.api.http.HttpStatusCode;
import org.apache.olingo.server.api.ODataApplicationException;
@@ -94,7 +93,7 @@ public class TechnicalActionProcessor extends TechnicalProcessor
final EdmEntitySet edmEntitySet = getEdmEntitySet(uriInfo.asUriInfoResource());
final EdmEntityType type = (EdmEntityType) action.getReturnType().getType();
EntityCollectionSerializerOptions options = EntityCollectionSerializerOptions.with()
- .contextURL(responseFormat.getODataFormat() == Format.JSON_NO_METADATA ? null :
+ .contextURL(isODataMetadataNone(responseFormat) ? null :
getContextUrl(edmEntitySet, type, false)).build();
response.setContent(odata.createSerializer(requestFormat)
.entityCollection(serviceMetadata, type, collection, options).getContent());
@@ -131,7 +130,7 @@ public class TechnicalActionProcessor extends TechnicalProcessor
type,
entityResult.getEntity(),
EntitySerializerOptions.with()
- .contextURL(responseFormat.getODataFormat() == Format.JSON_NO_METADATA ? null :
+ .contextURL(isODataMetadataNone(responseFormat) ? null :
getContextUrl(edmEntitySet, type, true)).build())
.getContent());
response.setStatusCode((entityResult.isCreated() ? HttpStatusCode.CREATED : HttpStatusCode.OK)
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
index 32f76b1..f86646d 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
@@ -28,7 +28,6 @@ import org.apache.olingo.commons.api.data.EntityCollection;
import org.apache.olingo.commons.api.edm.EdmEntitySet;
import org.apache.olingo.commons.api.edm.EdmEntityType;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.api.http.HttpContentType;
import org.apache.olingo.commons.api.http.HttpHeader;
import org.apache.olingo.commons.api.http.HttpMethod;
@@ -451,7 +450,7 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
edmEntityType,
entityCollection,
EntityCollectionSerializerOptions.with()
- .contextURL(requestedFormat.getODataFormat() == Format.JSON_NO_METADATA ? null :
+ .contextURL(isODataMetadataNone(requestedFormat) ? null :
getContextUrl(edmEntitySet, edmEntityType, false, expand, select))
.count(countOption)
.expand(expand).select(select)
@@ -484,7 +483,7 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
edmEntityType,
entity,
EntitySerializerOptions.with()
- .contextURL(requestedFormat.getODataFormat() == Format.JSON_NO_METADATA ? null :
+ .contextURL(isODataMetadataNone(requestedFormat) ? null :
getContextUrl(edmEntitySet, edmEntityType, true, expand, select))
.expand(expand).select(select)
.build());
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalPrimitiveComplexProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalPrimitiveComplexProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalPrimitiveComplexProcessor.java
index 50e1c1b..7a31f84 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalPrimitiveComplexProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalPrimitiveComplexProcessor.java
@@ -38,7 +38,6 @@ import org.apache.olingo.commons.api.edm.EdmStructuredType;
import org.apache.olingo.commons.api.edm.EdmType;
import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.api.http.HttpHeader;
import org.apache.olingo.commons.api.http.HttpMethod;
import org.apache.olingo.commons.api.http.HttpStatusCode;
@@ -396,7 +395,7 @@ public class TechnicalPrimitiveComplexProcessor extends TechnicalProcessor
final RepresentationType representationType, final ContentType responseFormat,
final ExpandOption expand, final SelectOption select) throws ODataLibraryException {
ODataSerializer serializer = odata.createSerializer(responseFormat);
- final ContextURL contextURL = responseFormat.getODataFormat() == Format.JSON_NO_METADATA ? null :
+ final ContextURL contextURL = isODataMetadataNone(responseFormat) ? null :
getContextUrl(edmEntitySet, entity, path, type, representationType, expand, select);
SerializerResult result = null;
switch (representationType) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
index f3012d9..64327f3 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalProcessor.java
@@ -255,4 +255,9 @@ public abstract class TechnicalProcessor implements Processor {
HttpStatusCode.BAD_REQUEST.getStatusCode(), Locale.ROOT);
}
}
+
+ protected boolean isODataMetadataNone(final ContentType contentType) {
+ return contentType.isCompatible(ContentType.APPLICATION_JSON)
+ && ContentType.VALUE_ODATA_METADATA_NONE.equals(contentType.getParameter(ContentType.PARAMETER_ODATA_METADATA));
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/91d04271/samples/server/src/main/java/org/apache/olingo/server/sample/processor/CarsProcessor.java
----------------------------------------------------------------------
diff --git a/samples/server/src/main/java/org/apache/olingo/server/sample/processor/CarsProcessor.java b/samples/server/src/main/java/org/apache/olingo/server/sample/processor/CarsProcessor.java
index 013462c..0b1917f 100644
--- a/samples/server/src/main/java/org/apache/olingo/server/sample/processor/CarsProcessor.java
+++ b/samples/server/src/main/java/org/apache/olingo/server/sample/processor/CarsProcessor.java
@@ -34,7 +34,6 @@ import org.apache.olingo.commons.api.edm.EdmEntitySet;
import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
import org.apache.olingo.commons.api.edm.EdmProperty;
import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.Format;
import org.apache.olingo.commons.api.http.HttpContentType;
import org.apache.olingo.commons.api.http.HttpHeader;
import org.apache.olingo.commons.api.http.HttpStatusCode;
@@ -109,7 +108,7 @@ public class CarsProcessor implements EntityCollectionProcessor, EntityProcessor
final SelectOption select = uriInfo.getSelectOption();
InputStream serializedContent = serializer.entityCollection(edm, edmEntitySet.getEntityType(), entitySet,
EntityCollectionSerializerOptions.with()
- .contextURL(requestedContentType.getODataFormat() == Format.JSON_NO_METADATA ? null :
+ .contextURL(isODataMetadataNone(requestedContentType) ? null :
getContextUrl(edmEntitySet, false, expand, select, null))
.count(uriInfo.getCountOption())
.expand(expand).select(select)
@@ -146,7 +145,7 @@ public class CarsProcessor implements EntityCollectionProcessor, EntityProcessor
final SelectOption select = uriInfo.getSelectOption();
InputStream serializedContent = serializer.entity(edm, edmEntitySet.getEntityType(), entity,
EntitySerializerOptions.with()
- .contextURL(requestedContentType.getODataFormat() == Format.JSON_NO_METADATA ? null :
+ .contextURL(isODataMetadataNone(requestedContentType) ? null :
getContextUrl(edmEntitySet, true, expand, select, null))
.expand(expand).select(select)
.build()).getContent();
@@ -253,7 +252,7 @@ public class CarsProcessor implements EntityCollectionProcessor, EntityProcessor
response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode());
} else {
ODataSerializer serializer = odata.createSerializer(contentType);
- final ContextURL contextURL = contentType.getODataFormat() == Format.JSON_NO_METADATA ? null :
+ final ContextURL contextURL = isODataMetadataNone(contentType) ? null :
getContextUrl(edmEntitySet, true, null, null, edmProperty.getName());
InputStream serializerContent = complex ?
serializer.complex(edm, (EdmComplexType) edmProperty.getType(), property,
@@ -365,4 +364,9 @@ public class CarsProcessor implements EntityCollectionProcessor, EntityProcessor
throw new ODataApplicationException("Entity update is not supported yet.",
HttpStatusCode.NOT_IMPLEMENTED.getStatusCode(), Locale.ENGLISH);
}
+
+ public static boolean isODataMetadataNone(final ContentType contentType) {
+ return contentType.isCompatible(ContentType.APPLICATION_JSON)
+ && ContentType.VALUE_ODATA_METADATA_NONE.equals(contentType.getParameter(ContentType.PARAMETER_ODATA_METADATA));
+ }
}
\ No newline at end of file