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/04/04 07:26:24 UTC
[20/51] [abbrv] git commit: [OLINGO-205,
OLINGO-175] provided JSON integration tests + refactoring and fixes
[OLINGO-205, OLINGO-175] provided JSON integration tests + refactoring and fixes
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/c73772f0
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/c73772f0
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/c73772f0
Branch: refs/heads/olingo-206-validator
Commit: c73772f041d048e0a862d95361526a801b4cb712
Parents: de591bb
Author: fmartelli <fa...@gmail.com>
Authored: Mon Mar 31 17:16:44 2014 +0200
Committer: fmartelli <fa...@gmail.com>
Committed: Mon Mar 31 17:16:44 2014 +0200
----------------------------------------------------------------------
.../org/apache/olingo/fit/AbstractServices.java | 36 +-
.../java/org/apache/olingo/fit/V4NorthWind.java | 5 +-
.../org/apache/olingo/fit/V4NorthWindExt.java | 5 +-
.../olingo/fit/utils/AbstractJSONUtilities.java | 78 +--
.../olingo/fit/utils/AbstractUtilities.java | 52 +-
.../olingo/fit/utils/AbstractXMLUtilities.java | 149 +++---
.../org/apache/olingo/fit/utils/Commons.java | 27 +-
.../apache/olingo/fit/utils/ConstantKey.java | 67 +++
.../org/apache/olingo/fit/utils/Constants.java | 167 +++---
.../apache/olingo/fit/utils/ODataVersion.java | 2 +-
.../fit/utils/XHTTPMethodInterceptor.java | 5 +-
.../olingo/fit/utils/v3/XMLUtilities.java | 7 +-
.../olingo/fit/utils/v4/XMLUtilities.java | 3 +-
.../olingo/client/api/data/ServiceDocument.java | 15 -
.../retrieve/ODataPropertyRequestImpl.java | 2 +-
.../core/data/AbstractServiceDocument.java | 33 +-
.../data/JSONServiceDocumentDeserializer.java | 35 +-
.../data/XMLServiceDocumentDeserializer.java | 33 +-
.../core/data/v3/JSONServiceDocumentImpl.java | 32 --
.../core/data/v3/XMLServiceDocumentImpl.java | 18 -
.../core/data/v4/AbstractServiceDocument.java | 40 --
.../core/data/v4/JSONServiceDocumentImpl.java | 15 -
.../core/data/v4/XMLServiceDocumentImpl.java | 1 -
.../client/core/op/AbstractODataBinder.java | 22 +-
.../client/core/op/impl/v4/ODataBinderImpl.java | 12 +-
.../client/core/it/v3/AsyncTestITCase.java | 1 -
.../it/v3/NavigationLinkCreateTestITCase.java | 534 -------------------
.../client/core/it/v3/PropertyTestITCase.java | 4 +-
.../core/it/v4/EntityRetrieveTestITCase.java | 20 +-
.../client/core/it/v4/EntitySetTestITCase.java | 8 +-
.../core/it/v4/ServiceDocumentTestITCase.java | 8 +-
.../client/core/v4/ServiceDocumentTest.java | 14 +-
.../olingo/client/core/v4/serviceDocument.json | 1 +
.../api/domain/ODataServiceDocument.java | 20 -
.../core/data/AbstractJsonDeserializer.java | 3 +-
.../core/data/JSONEntryDeserializer.java | 35 +-
.../commons/core/data/JSONFeedDeserializer.java | 28 +-
.../olingo/commons/core/data/JSONFeedImpl.java | 10 +-
.../core/data/JSONODataErrorDeserializer.java | 6 +-
.../core/data/JSONPropertyDeserializer.java | 30 +-
.../primitivetype/EdmGeographyMultiPoint.java | 1 -
.../primitivetype/EdmGeometryCollection.java | 1 -
.../core/op/AbstractODataDeserializer.java | 16 +-
43 files changed, 558 insertions(+), 1043 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java b/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
index 237d0ae..13c6c49 100644
--- a/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
+++ b/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
@@ -24,8 +24,6 @@ import org.apache.olingo.fit.utils.AbstractJSONUtilities;
import org.apache.olingo.fit.utils.ODataVersion;
import org.apache.olingo.fit.utils.FSManager;
-import static org.apache.olingo.fit.utils.Constants.*;
-
import org.apache.olingo.fit.methods.MERGE;
import org.apache.olingo.fit.methods.PATCH;
import org.apache.olingo.fit.utils.AbstractUtilities;
@@ -57,6 +55,7 @@ import javax.ws.rs.core.Response;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
+import org.apache.olingo.fit.utils.ConstantKey;
import org.apache.olingo.fit.utils.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -71,7 +70,6 @@ public abstract class AbstractServices {
private static final Set<ODataVersion> INITIALIZED = EnumSet.noneOf(ODataVersion.class);
protected abstract ODataVersion getVersion();
-
protected final AbstractXMLUtilities xml;
protected final AbstractJSONUtilities json;
@@ -107,7 +105,8 @@ public abstract class AbstractServices {
}
return xml.createResponse(
- FSManager.instance(getVersion()).readFile(SERVICES, acceptType), null, acceptType);
+ FSManager.instance(getVersion()).readFile(Constants.get(getVersion(), ConstantKey.SERVICES), acceptType),
+ null, acceptType);
} catch (Exception e) {
return xml.createFaultResponse(accept, e);
}
@@ -122,7 +121,7 @@ public abstract class AbstractServices {
@Path("/$metadata")
@Produces("application/xml")
public Response getMetadata() {
- return getMetadata(METADATA);
+ return getMetadata(Constants.get(getVersion(), ConstantKey.METADATA));
}
/**
@@ -134,7 +133,7 @@ public abstract class AbstractServices {
@Path("/large/$metadata")
@Produces("application/xml")
public Response getLargeMetadata() {
- return getMetadata("large" + StringUtils.capitalize(METADATA));
+ return getMetadata("large" + StringUtils.capitalize(Constants.get(getVersion(), ConstantKey.METADATA)));
}
protected Response getMetadata(final String filename) {
@@ -150,7 +149,7 @@ public abstract class AbstractServices {
// public Response getEntityReference(@QueryParam("$id") String id){
// return null;
// }
-
+
/**
* Retrieve entity reference sample.
*
@@ -176,7 +175,8 @@ public abstract class AbstractServices {
final String filename = Base64.encodeBase64String(path.getBytes("UTF-8"));
return utils.getValue().createResponse(
- FSManager.instance(getVersion()).readFile(Constants.REF + File.separatorChar + filename, utils.getKey()),
+ FSManager.instance(getVersion()).readFile(Constants.get(getVersion(), ConstantKey.REF)
+ + File.separatorChar + filename, utils.getKey()),
null,
utils.getKey());
} catch (Exception e) {
@@ -419,15 +419,20 @@ public abstract class AbstractServices {
builder.append(basePath);
if (StringUtils.isNotBlank(orderby)) {
- builder.append(ORDERBY).append(File.separatorChar).append(orderby).append(File.separatorChar);
+ builder.append(Constants.get(getVersion(), ConstantKey.ORDERBY)).append(File.separatorChar).
+ append(orderby).append(File.separatorChar);
}
if (StringUtils.isNotBlank(filter)) {
- builder.append(FILTER).append(File.separatorChar).append(filter.replaceAll("/", "."));
+ builder.append(Constants.get(getVersion(), ConstantKey.FILTER)).append(File.separatorChar).
+ append(filter.replaceAll("/", "."));
} else if (StringUtils.isNotBlank(skiptoken)) {
- builder.append(SKIP_TOKEN).append(File.separatorChar).append(skiptoken);
+ builder.append(Constants.get(getVersion(), ConstantKey.SKIP_TOKEN)).append(File.separatorChar).
+ append(skiptoken);
} else {
- builder.append(Commons.getLinkInfo().get(getVersion()).isSingleton(name) ? ENTITY : FEED);
+ builder.append(Commons.getLinkInfo().get(getVersion()).isSingleton(name)
+ ? Constants.get(getVersion(), ConstantKey.ENTITY)
+ : Constants.get(getVersion(), ConstantKey.FEED));
}
InputStream feed = FSManager.instance(getVersion()).readFile(builder.toString(), acceptType);
@@ -524,7 +529,8 @@ public abstract class AbstractServices {
if (keyAsSegment) {
entity = utils.getValue().addEditLink(
- entity, entitySetName, Constants.DEFAULT_SERVICE_URL + entitySetName + "/" + entityId);
+ entity, entitySetName,
+ Constants.get(getVersion(), ConstantKey.DEFAULT_SERVICE_URL) + entitySetName + "/" + entityId);
}
if (StringUtils.isNotBlank(select)) {
@@ -589,7 +595,7 @@ public abstract class AbstractServices {
final String basePath =
entitySetName + File.separatorChar + Commons.getEntityKey(entityId) + File.separatorChar;
- FSManager.instance(getVersion()).deleteFile(basePath + ENTITY);
+ FSManager.instance(getVersion()).deleteFile(basePath + Constants.get(getVersion(), ConstantKey.ENTITY));
return xml.createResponse(null, null, null, Response.Status.NO_CONTENT);
} catch (Exception e) {
@@ -1012,7 +1018,7 @@ public abstract class AbstractServices {
final String basePath = Commons.getEntityBasePath(entitySetName, entityId);
InputStream stream = FSManager.instance(getVersion()).readFile(
- basePath + ENTITY, acceptType == null || acceptType == Accept.TEXT
+ basePath + Constants.get(getVersion(), ConstantKey.ENTITY), acceptType == null || acceptType == Accept.TEXT
? Accept.XML : acceptType);
final AbstractUtilities utils = getUtilities(acceptType);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/fit/src/main/java/org/apache/olingo/fit/V4NorthWind.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/V4NorthWind.java b/fit/src/main/java/org/apache/olingo/fit/V4NorthWind.java
index 5ef82d7..b11d3e5 100644
--- a/fit/src/main/java/org/apache/olingo/fit/V4NorthWind.java
+++ b/fit/src/main/java/org/apache/olingo/fit/V4NorthWind.java
@@ -23,7 +23,8 @@ import org.apache.olingo.fit.utils.XHTTPMethodInterceptor;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import org.apache.cxf.interceptor.InInterceptors;
-import static org.apache.olingo.fit.utils.Constants.METADATA;
+import org.apache.olingo.fit.utils.ConstantKey;
+import org.apache.olingo.fit.utils.Constants;
@Path("/V40/NorthWind.svc")
@InInterceptors(classes = XHTTPMethodInterceptor.class)
@@ -40,7 +41,7 @@ public class V4NorthWind extends AbstractServices {
@Override
public Response getMetadata() {
- return getMetadata("northwind-" + METADATA);
+ return getMetadata("northwind-" + Constants.get(getVersion(), ConstantKey.METADATA));
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/fit/src/main/java/org/apache/olingo/fit/V4NorthWindExt.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/V4NorthWindExt.java b/fit/src/main/java/org/apache/olingo/fit/V4NorthWindExt.java
index a3d60a7..b5d4bda 100644
--- a/fit/src/main/java/org/apache/olingo/fit/V4NorthWindExt.java
+++ b/fit/src/main/java/org/apache/olingo/fit/V4NorthWindExt.java
@@ -23,7 +23,8 @@ import org.apache.olingo.fit.utils.XHTTPMethodInterceptor;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import org.apache.cxf.interceptor.InInterceptors;
-import static org.apache.olingo.fit.utils.Constants.METADATA;
+import org.apache.olingo.fit.utils.ConstantKey;
+import org.apache.olingo.fit.utils.Constants;
import org.apache.olingo.fit.utils.ResolvingReferencesInterceptor;
@Path("/V40/NorthWindExt.svc")
@@ -41,7 +42,7 @@ public class V4NorthWindExt extends AbstractServices {
@Override
public Response getMetadata() {
- return getMetadata("northwindExt-" + METADATA);
+ return getMetadata("northwindExt-" + Constants.get(getVersion(), ConstantKey.METADATA));
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/fit/src/main/java/org/apache/olingo/fit/utils/AbstractJSONUtilities.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractJSONUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractJSONUtilities.java
index c62d341..9fd9096 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractJSONUtilities.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractJSONUtilities.java
@@ -18,8 +18,6 @@
*/
package org.apache.olingo.fit.utils;
-import static org.apache.olingo.fit.utils.Constants.*;
-
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -61,7 +59,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
IOUtils.closeQuietly(is);
for (String link : links) {
- srcNode.set(link + JSON_NAVIGATION_SUFFIX,
+ srcNode.set(link + Constants.get(version, ConstantKey.JSON_NAVIGATION_SUFFIX),
new TextNode(Commons.getLinksURI(version, entitySetName, entitykey, link)));
}
@@ -81,10 +79,10 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
while (fieldIter.hasNext()) {
final String field = fieldIter.next();
- if (field.endsWith(JSON_NAVIGATION_BIND_SUFFIX)
- || field.endsWith(JSON_NAVIGATION_SUFFIX)
- || field.endsWith(JSON_MEDIA_SUFFIX)
- || field.endsWith(JSON_EDITLINK_NAME)) {
+ if (field.endsWith(Constants.get(version, ConstantKey.JSON_NAVIGATION_BIND_SUFFIX))
+ || field.endsWith(Constants.get(version, ConstantKey.JSON_NAVIGATION_SUFFIX))
+ || field.endsWith(Constants.get(version, ConstantKey.JSON_MEDIA_SUFFIX))
+ || field.endsWith(Constants.get(version, ConstantKey.JSON_EDITLINK_NAME))) {
if (field.indexOf('@') > 0) {
links.add(field.substring(0, field.indexOf('@')));
} else {
@@ -113,7 +111,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
while (fieldIter.hasNext()) {
final Map.Entry<String, JsonNode> field = fieldIter.next();
- if (field.getKey().endsWith(JSON_NAVIGATION_BIND_SUFFIX)) {
+ if (field.getKey().endsWith(Constants.get(version, ConstantKey.JSON_NAVIGATION_BIND_SUFFIX))) {
final String title = field.getKey().substring(0, field.getKey().indexOf('@'));
final List<String> hrefs = new ArrayList<String>();
if (field.getValue().isArray()) {
@@ -148,17 +146,17 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
if (links != null) {
for (String linkTitle : links.getLinkNames()) {
// normalize link
- srcNode.remove(linkTitle + JSON_NAVIGATION_BIND_SUFFIX);
+ srcNode.remove(linkTitle + Constants.get(version, ConstantKey.JSON_NAVIGATION_BIND_SUFFIX));
srcNode.set(
- linkTitle + JSON_NAVIGATION_SUFFIX,
+ linkTitle + Constants.get(version, ConstantKey.JSON_NAVIGATION_SUFFIX),
new TextNode(String.format("%s(%s)/%s", entitySetName, entityKey, linkTitle)));
}
for (String linkTitle : links.getInlineNames()) {
// normalize link if exist; declare a new one if missing
- srcNode.remove(linkTitle + JSON_NAVIGATION_BIND_SUFFIX);
+ srcNode.remove(linkTitle + Constants.get(version, ConstantKey.JSON_NAVIGATION_BIND_SUFFIX));
srcNode.set(
- linkTitle + JSON_NAVIGATION_SUFFIX,
+ linkTitle + Constants.get(version, ConstantKey.JSON_NAVIGATION_SUFFIX),
new TextNode(String.format("%s(%s)/%s", entitySetName, entityKey, linkTitle)));
// remove inline
@@ -170,8 +168,8 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
}
srcNode.set(
- JSON_EDITLINK_NAME,
- new TextNode(Constants.DEFAULT_SERVICE_URL + entitySetName + "(" + entityKey + ")"));
+ Constants.get(version, ConstantKey.JSON_EDITLINK_NAME), new TextNode(
+ Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL) + entitySetName + "(" + entityKey + ")"));
return IOUtils.toInputStream(srcNode.toString());
}
@@ -190,8 +188,9 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
final String entitySetName, final String entityId, final List<String> path, final String edmType)
throws Exception {
- final InputStream src =
- fsManager.readFile(Commons.getEntityBasePath(entitySetName, entityId) + ENTITY, Accept.JSON_FULLMETA);
+ final InputStream src = fsManager.readFile(
+ Commons.getEntityBasePath(entitySetName, entityId) + Constants.get(version, ConstantKey.ENTITY),
+ Accept.JSON_FULLMETA);
final ObjectMapper mapper = new ObjectMapper();
final JsonNode srcNode = mapper.readTree(src);
@@ -199,7 +198,9 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
final ObjectNode propertyNode = new ObjectNode(JsonNodeFactory.instance);
if (StringUtils.isNotBlank(edmType)) {
- propertyNode.put(JSON_ODATAMETADATA_NAME, ODATA_METADATA_PREFIX + edmType);
+ propertyNode.put(Constants.get(
+ version, ConstantKey.JSON_ODATAMETADATA_NAME),
+ Constants.get(version, ConstantKey.ODATA_METADATA_PREFIX) + edmType);
}
JsonNode jsonNode = getProperty(srcNode, path);
@@ -241,7 +242,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
final ObjectMapper mapper = new ObjectMapper();
final JsonNode srcNode = mapper.readTree(src);
- ((ObjectNode) srcNode).put(ODATA_COUNT_NAME, count);
+ ((ObjectNode) srcNode).put(Constants.get(version, ConstantKey.ODATA_COUNT_NAME), count);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
mapper.writeValue(bos, srcNode);
@@ -258,14 +259,14 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
final ObjectNode res;
- final JsonNode value = node.get(JSON_VALUE_NAME);
+ final JsonNode value = node.get(Constants.get(version, ConstantKey.JSON_VALUE_NAME));
if (value.isArray()) {
res = mapper.createObjectNode();
res.set("value", value);
- final JsonNode next = node.get(JSON_NEXTLINK_NAME);
+ final JsonNode next = node.get(Constants.get(version, ConstantKey.JSON_NEXTLINK_NAME));
if (next != null) {
- res.set(JSON_NEXTLINK_NAME, next);
+ res.set(Constants.get(version, ConstantKey.JSON_NEXTLINK_NAME), next);
}
} else {
res = (ObjectNode) value;
@@ -286,18 +287,18 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
final ObjectNode srcNode = (ObjectNode) mapper.readTree(src);
final Set<String> retain = new HashSet<String>();
- retain.add(JSON_ID_NAME);
- retain.add(JSON_TYPE_NAME);
- retain.add(JSON_EDITLINK_NAME);
- retain.add(JSON_NEXTLINK_NAME);
- retain.add(JSON_ODATAMETADATA_NAME);
- retain.add(JSON_VALUE_NAME);
+ retain.add(Constants.get(version, ConstantKey.JSON_ID_NAME));
+ retain.add(Constants.get(version, ConstantKey.JSON_TYPE_NAME));
+ retain.add(Constants.get(version, ConstantKey.JSON_EDITLINK_NAME));
+ retain.add(Constants.get(version, ConstantKey.JSON_NEXTLINK_NAME));
+ retain.add(Constants.get(version, ConstantKey.JSON_ODATAMETADATA_NAME));
+ retain.add(Constants.get(version, ConstantKey.JSON_VALUE_NAME));
for (String name : propertyNames) {
retain.add(name);
- retain.add(name + JSON_NAVIGATION_SUFFIX);
- retain.add(name + JSON_MEDIA_SUFFIX);
- retain.add(name + JSON_TYPE_SUFFIX);
+ retain.add(name + Constants.get(version, ConstantKey.JSON_NAVIGATION_SUFFIX));
+ retain.add(name + Constants.get(version, ConstantKey.JSON_MEDIA_SUFFIX));
+ retain.add(name + Constants.get(version, ConstantKey.JSON_TYPE_SUFFIX));
}
srcNode.retain(retain);
@@ -344,10 +345,11 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
bos.write("]".getBytes());
}
- node.set(JSON_VALUE_NAME, mapper.readTree(new ByteArrayInputStream(bos.toByteArray())));
+ node.set(Constants.get(version, ConstantKey.JSON_VALUE_NAME),
+ mapper.readTree(new ByteArrayInputStream(bos.toByteArray())));
if (StringUtils.isNotBlank(next)) {
- node.set(JSON_NEXTLINK_NAME, new TextNode(next));
+ node.set(Constants.get(version, ConstantKey.JSON_NEXTLINK_NAME), new TextNode(next));
}
return IOUtils.toInputStream(node.toString());
@@ -362,15 +364,15 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
final ObjectNode toBeChangedNode = (ObjectNode) mapper.readTree(toBeChanged);
final ObjectNode replacementNode = (ObjectNode) mapper.readTree(replacement);
- if (toBeChangedNode.get(linkName + JSON_NAVIGATION_SUFFIX) == null) {
+ if (toBeChangedNode.get(linkName + Constants.get(version, ConstantKey.JSON_NAVIGATION_SUFFIX)) == null) {
throw new NotFoundException();
}
- toBeChangedNode.set(linkName, replacementNode.get(JSON_VALUE_NAME));
+ toBeChangedNode.set(linkName, replacementNode.get(Constants.get(version, ConstantKey.JSON_VALUE_NAME)));
- final JsonNode next = replacementNode.get(linkName + JSON_NEXTLINK_NAME);
+ final JsonNode next = replacementNode.get(linkName + Constants.get(version, ConstantKey.JSON_NEXTLINK_NAME));
if (next != null) {
- toBeChangedNode.set(linkName + JSON_NEXTLINK_SUFFIX, next);
+ toBeChangedNode.set(linkName + Constants.get(version, ConstantKey.JSON_NEXTLINK_SUFFIX), next);
}
return IOUtils.toInputStream(toBeChangedNode.toString());
@@ -437,7 +439,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
}
}
- final JsonNode next = srcNode.get(JSON_NEXTLINK_NAME);
+ final JsonNode next = srcNode.get(Constants.get(version, ConstantKey.JSON_NEXTLINK_NAME));
return new SimpleEntry<String, List<String>>(next == null ? null : next.asText(), links);
}
@@ -449,7 +451,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
final ObjectNode srcNode = (ObjectNode) mapper.readTree(content);
IOUtils.closeQuietly(content);
- srcNode.set(JSON_EDITLINK_NAME, new TextNode(href));
+ srcNode.set(Constants.get(version, ConstantKey.JSON_EDITLINK_NAME), new TextNode(href));
return IOUtils.toInputStream(srcNode.toString());
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
index 7b74b62..5b23366 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
@@ -19,7 +19,6 @@
package org.apache.olingo.fit.utils;
import static org.apache.olingo.fit.utils.Commons.sequence;
-import static org.apache.olingo.fit.utils.Constants.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -134,7 +133,8 @@ public abstract class AbstractUtilities {
// 0. Get the path
// -----------------------------------------
final String path =
- entitySetName + File.separatorChar + Commons.getEntityKey(key) + File.separatorChar + ENTITY;
+ entitySetName + File.separatorChar + Commons.getEntityKey(key) + File.separatorChar
+ + Constants.get(version, ConstantKey.ENTITY);
// -----------------------------------------
// -----------------------------------------
@@ -229,7 +229,7 @@ public abstract class AbstractUtilities {
// -----------------------------------------
final FileObject fo = fsManager.putInMemory(
normalizedEntity,
- fsManager.getAbsolutePath(path + ENTITY, getDefaultFormat()));
+ fsManager.getAbsolutePath(path + Constants.get(version, ConstantKey.ENTITY), getDefaultFormat()));
// -----------------------------------------
// -----------------------------------------
@@ -282,7 +282,8 @@ public abstract class AbstractUtilities {
// -----------------------------------------
// 1. save the media entity value
// -----------------------------------------
- fsManager.putInMemory(is, fsManager.getAbsolutePath(path + MEDIA_CONTENT_FILENAME, null));
+ fsManager.putInMemory(is, fsManager.getAbsolutePath(path
+ + Constants.get(version, ConstantKey.MEDIA_CONTENT_FILENAME), null));
IOUtils.closeQuietly(is);
// -----------------------------------------
@@ -291,13 +292,13 @@ public abstract class AbstractUtilities {
// -----------------------------------------
final String entityURI = Commons.getEntityURI(entitySetName, entityKey);
String entity = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
- + "<entry xml:base=\"" + DEFAULT_SERVICE_URL + "\" "
+ + "<entry xml:base=\"" + Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL) + "\" "
+ "xmlns=\"http://www.w3.org/2005/Atom\" "
+ "xmlns:d=\"http://schemas.microsoft.com/ado/2007/08/dataservices\" "
+ "xmlns:m=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\" "
+ "xmlns:georss=\"http://www.georss.org/georss\" "
+ "xmlns:gml=\"http://www.opengis.net/gml\">"
- + "<id>" + DEFAULT_SERVICE_URL + entityURI + "</id>"
+ + "<id>" + Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL) + entityURI + "</id>"
+ "<category term=\"Microsoft.Test.OData.Services.AstoriaDefaultService." + entitySetName + "\" "
+ "scheme=\"http://schemas.microsoft.com/ado/2007/08/dataservices/scheme\" />"
+ "<link rel=\"edit\" title=\"Car\" href=\"" + entityURI + "\" />"
@@ -310,16 +311,18 @@ public abstract class AbstractUtilities {
+ "</entry>";
fsManager.putInMemory(
- IOUtils.toInputStream(entity), fsManager.getAbsolutePath(path + ENTITY, Accept.ATOM));
+ IOUtils.toInputStream(entity),
+ fsManager.getAbsolutePath(path + Constants.get(version, ConstantKey.ENTITY), Accept.ATOM));
// -----------------------------------------
// -----------------------------------------
// 3. save entity as json
// -----------------------------------------
entity = "{"
- + "\"odata.metadata\": \"" + DEFAULT_SERVICE_URL + "/$metadata#" + entitySetName + "/@Element\","
+ + "\"odata.metadata\": \"" + Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL)
+ + "/$metadata#" + entitySetName + "/@Element\","
+ "\"odata.type\": \"Microsoft.Test.OData.Services.AstoriaDefaultService." + entitySetName + "\","
- + "\"odata.id\": \"" + DEFAULT_SERVICE_URL + entityURI + "\","
+ + "\"odata.id\": \"" + Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL) + entityURI + "\","
+ "\"odata.editLink\": \"" + entityURI + "\","
+ "\"odata.mediaEditLink\": \"" + entityURI + "/$value\","
+ "\"odata.mediaReadLink\": \"" + entityURI + "/$value\","
@@ -328,7 +331,8 @@ public abstract class AbstractUtilities {
+ "\"Description\": null" + "}";
fsManager.putInMemory(
- IOUtils.toInputStream(entity), fsManager.getAbsolutePath(path + ENTITY, Accept.JSON_FULLMETA));
+ IOUtils.toInputStream(entity), fsManager.getAbsolutePath(path + Constants.get(version, ConstantKey.ENTITY),
+ Accept.JSON_FULLMETA));
// -----------------------------------------
return readEntity(entitySetName, entityKey, getDefaultFormat()).getValue();
@@ -376,7 +380,7 @@ public abstract class AbstractUtilities {
final InputStream entity, final String etag, final Accept accept, final Response.Status status) {
final Response.ResponseBuilder builder = Response.ok();
if (version == ODataVersion.v3) {
- builder.header(ODATA_SERVICE_VERSION, version.getVersion() + ";");
+ builder.header(Constants.get(version, ConstantKey.ODATA_SERVICE_VERSION), version.getVersion() + ";");
}
if (StringUtils.isNotBlank(etag)) {
@@ -426,7 +430,7 @@ public abstract class AbstractUtilities {
final Response.ResponseBuilder builder = Response.serverError();
if (version == ODataVersion.v3) {
- builder.header(ODATA_SERVICE_VERSION, version.getVersion() + ";");
+ builder.header(Constants.get(version, ConstantKey.ODATA_SERVICE_VERSION), version + ";");
}
final String ext;
@@ -612,7 +616,7 @@ public abstract class AbstractUtilities {
final String basePath =
entitySetName + File.separatorChar + Commons.getEntityKey(entityId) + File.separatorChar
- + LINKS_FILE_PATH + File.separatorChar;
+ + Constants.get(version, ConstantKey.LINKS_FILE_PATH) + File.separatorChar;
final LinkInfo linkInfo = new LinkInfo(fsManager.readFile(basePath + linkName, accept));
linkInfo.setEtag(Commons.getETag(basePath, version));
@@ -631,7 +635,8 @@ public abstract class AbstractUtilities {
final String entitySetName, final String entityId, final String name, final InputStream value)
throws IOException {
final FileObject fo = fsManager.putInMemory(value, fsManager.getAbsolutePath(
- Commons.getEntityBasePath(entitySetName, entityId) + (name == null ? MEDIA_CONTENT_FILENAME : name), null));
+ Commons.getEntityBasePath(entitySetName, entityId)
+ + (name == null ? Constants.get(version, ConstantKey.MEDIA_CONTENT_FILENAME) : name), null));
return fo.getContent().getInputStream();
}
@@ -644,7 +649,7 @@ public abstract class AbstractUtilities {
final String entitySetName, final String entityId, final String name) {
final String basePath = Commons.getEntityBasePath(entitySetName, entityId);
return new SimpleEntry<String, InputStream>(basePath, fsManager.readFile(basePath
- + (name == null ? MEDIA_CONTENT_FILENAME : name)));
+ + (name == null ? Constants.get(version, ConstantKey.MEDIA_CONTENT_FILENAME) : name)));
}
public Map.Entry<String, InputStream> readEntity(
@@ -654,7 +659,8 @@ public abstract class AbstractUtilities {
}
final String basePath = Commons.getEntityBasePath(entitySetName, entityId);
- return new SimpleEntry<String, InputStream>(basePath, fsManager.readFile(basePath + ENTITY, accept));
+ return new SimpleEntry<String, InputStream>(basePath,
+ fsManager.readFile(basePath + Constants.get(version, ConstantKey.ENTITY), accept));
}
public InputStream expandEntity(
@@ -719,15 +725,16 @@ public abstract class AbstractUtilities {
? Accept.XML : accept.getExtension().equals(Accept.JSON.getExtension()) ? Accept.JSON_FULLMETA : accept;
// read atom
- InputStream stream = fsManager.readFile(basePath + ENTITY, acceptType);
+ InputStream stream = fsManager.readFile(basePath + Constants.get(version, ConstantKey.ENTITY), acceptType);
// change atom
stream = replaceProperty(stream, changes, path, justValue);
// save atom
- fsManager.putInMemory(stream, fsManager.getAbsolutePath(basePath + ENTITY, acceptType));
+ fsManager.putInMemory(stream,
+ fsManager.getAbsolutePath(basePath + Constants.get(version, ConstantKey.ENTITY), acceptType));
- return fsManager.readFile(basePath + ENTITY, acceptType);
+ return fsManager.readFile(basePath + Constants.get(version, ConstantKey.ENTITY), acceptType);
}
public InputStream deleteProperty(
@@ -741,15 +748,16 @@ public abstract class AbstractUtilities {
? Accept.XML : accept.getExtension().equals(Accept.JSON.getExtension()) ? Accept.JSON_FULLMETA : accept;
// read atom
- InputStream stream = fsManager.readFile(basePath + ENTITY, acceptType);
+ InputStream stream = fsManager.readFile(basePath + Constants.get(version, ConstantKey.ENTITY), acceptType);
// change atom
stream = deleteProperty(stream, path);
// save atom
- fsManager.putInMemory(stream, fsManager.getAbsolutePath(basePath + ENTITY, acceptType));
+ fsManager.putInMemory(stream,
+ fsManager.getAbsolutePath(basePath + Constants.get(version, ConstantKey.ENTITY), acceptType));
- return fsManager.readFile(basePath + ENTITY, acceptType);
+ return fsManager.readFile(basePath + Constants.get(version, ConstantKey.ENTITY), acceptType);
}
public abstract InputStream readEntities(
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/fit/src/main/java/org/apache/olingo/fit/utils/AbstractXMLUtilities.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractXMLUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractXMLUtilities.java
index cef564a..e811388 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractXMLUtilities.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractXMLUtilities.java
@@ -18,8 +18,6 @@
*/
package org.apache.olingo.fit.utils;
-import static org.apache.olingo.fit.utils.Constants.*;
-
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -154,13 +152,16 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
attributes.add(eventFactory.createAttribute(new QName("title"), link));
attributes.add(eventFactory.createAttribute(new QName("href"),
Commons.getLinksURI(version, entitySetName, entitykey, link)));
- attributes.add(eventFactory.createAttribute(new QName("rel"), Constants.ATOM_LINK_REL + link));
+ attributes.add(eventFactory.createAttribute(new QName("rel"),
+ Constants.get(version, ConstantKey.ATOM_LINK_REL) + link));
attributes.add(eventFactory.createAttribute(new QName("type"),
- Commons.linkInfo.get(version).isFeed(entitySetName, link) ? Constants.ATOM_LINK_FEED
- : Constants.ATOM_LINK_ENTRY));
+ Commons.linkInfo.get(version).isFeed(entitySetName, link)
+ ? Constants.get(version, ConstantKey.ATOM_LINK_FEED)
+ : Constants.get(version, ConstantKey.ATOM_LINK_ENTRY)));
- writer.add(eventFactory.createStartElement(new QName(LINK), attributes.iterator(), null));
- writer.add(eventFactory.createEndElement(new QName(LINK), null));
+ writer.add(eventFactory.createStartElement(
+ new QName(Constants.get(version, ConstantKey.LINK)), attributes.iterator(), null));
+ writer.add(eventFactory.createEndElement(new QName(Constants.get(version, ConstantKey.LINK)), null));
}
writer.add(entry.getValue().getContentReader());
@@ -190,7 +191,8 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
while (true) {
final Map.Entry<Integer, XmlElement> linkInfo =
- extractElement(reader, null, Collections.<String>singletonList(LINK), startDepth, 2, 2);
+ extractElement(reader, null,
+ Collections.<String>singletonList(Constants.get(version, ConstantKey.LINK)), startDepth, 2, 2);
startDepth = linkInfo.getKey();
@@ -228,7 +230,8 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
while (true) {
// a. search for link with type attribute equals to "application/atom+xml;type=entry/feed"
final Map.Entry<Integer, XmlElement> linkInfo = extractElement(
- reader, null, Collections.<String>singletonList(LINK), filter, true, startDepth, 2, 2);
+ reader, null, Collections.<String>singletonList(Constants.get(version, ConstantKey.LINK)),
+ filter, true, startDepth, 2, 2);
final XmlElement link = linkInfo.getValue();
startDepth = linkInfo.getKey();
@@ -239,7 +242,8 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
try {
final XmlElement inlineElement =
- extractElement(link.getContentReader(), null, Collections.<String>singletonList(INLINE), 0, -1, -1).
+ extractElement(link.getContentReader(), null,
+ Collections.<String>singletonList(Constants.get(version, ConstantKey.INLINE)), 0, -1, -1).
getValue();
final XMLEventReader inlineReader = inlineElement.getContentReader();
@@ -307,7 +311,8 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
while (true) {
// a. search for link with type attribute equals to "application/atom+xml;type=entry/feed"
linkInfo = extractElement(
- reader, writer, Collections.<String>singletonList(LINK), filter, true,
+ reader, writer,
+ Collections.<String>singletonList(Constants.get(version, ConstantKey.LINK)), filter, true,
linkInfo == null ? 0 : linkInfo.getKey(), 2, 2);
final XmlElement link = linkInfo.getValue();
@@ -342,7 +347,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
final InputStream content = addEditLink(
new ByteArrayInputStream(tmpBos.toByteArray()),
entitySetName,
- Constants.DEFAULT_SERVICE_URL + entitySetName + "(" + entityKey + ")");
+ Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL) + entitySetName + "(" + entityKey + ")");
// -----------------------------------------
// -----------------------------------------
@@ -351,7 +356,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
return addAtomContent(
content,
entitySetName,
- Constants.DEFAULT_SERVICE_URL + entitySetName + "(" + entityKey + ")");
+ Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL) + entitySetName + "(" + entityKey + ")");
// -----------------------------------------
}
@@ -439,7 +444,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
try {
// check edit link existence
- extractElement(reader, writer, Collections.<String>singletonList(LINK),
+ extractElement(reader, writer, Collections.<String>singletonList(Constants.get(version, ConstantKey.LINK)),
Collections.<Map.Entry<String, String>>singletonList(
new AbstractMap.SimpleEntry<String, String>("rel", "edit")), false, 0, -1, -1);
@@ -518,7 +523,8 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
} else {
try {
final XmlElement entryElement =
- extractElement(reader, writer, Collections.<String>singletonList(PROPERTIES), 0, 2, 3).getValue();
+ extractElement(reader, writer, Collections.<String>singletonList(
+ Constants.get(version, ConstantKey.PROPERTIES)), 0, 2, 3).getValue();
addAtomElement(
IOUtils.toInputStream("<content type=\"application/xml\">"),
@@ -564,9 +570,11 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
public int countAllElements(final String entitySetName) throws Exception {
final String basePath = entitySetName + File.separatorChar;
- int count = countFeedElements(fsManager.readFile(basePath + FEED, Accept.XML), "entry");
+ int count = countFeedElements(fsManager.readFile(basePath + Constants.get(version, ConstantKey.FEED), Accept.XML),
+ "entry");
- final String skipTokenDirPath = fsManager.getAbsolutePath(basePath + SKIP_TOKEN, null);
+ final String skipTokenDirPath = fsManager.getAbsolutePath(basePath + Constants.get(version, ConstantKey.SKIP_TOKEN),
+ null);
try {
@@ -575,7 +583,8 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
for (FileObject file : files) {
count += countFeedElements(fsManager.readFile(
- basePath + SKIP_TOKEN + File.separatorChar + file.getName().getBaseName(), null), "entry");
+ basePath + Constants.get(version, ConstantKey.SKIP_TOKEN) + File.separatorChar
+ + file.getName().getBaseName(), null), "entry");
}
} catch (FileSystemException fse) {
LOG.debug("Resource path '{}' not found", skipTokenDirPath);
@@ -739,7 +748,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
final List<String> pathElements = new ArrayList<String>();
for (String element : path) {
- pathElements.add(ATOM_PROPERTY_PREFIX + element);
+ pathElements.add(Constants.get(version, ConstantKey.ATOM_PROPERTY_PREFIX) + element);
}
final XMLEventReader reader = getEventReader(is);
@@ -770,28 +779,30 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
while (reader.hasNext()) {
final XMLEvent event = reader.nextEvent();
if (event.getEventType() == XMLStreamConstants.START_ELEMENT
- && LINK.equals(event.asStartElement().getName().getLocalPart())
+ && Constants.get(version, ConstantKey.LINK).equals(event.asStartElement().getName().getLocalPart())
&& !fieldToBeSaved.contains(
event.asStartElement().getAttributeByName(new QName("title")).getValue())
&& !"edit".equals(event.asStartElement().getAttributeByName(new QName("rel")).getValue())) {
writeCurrent = false;
} else if (event.getEventType() == XMLStreamConstants.END_ELEMENT
- && LINK.equals(event.asEndElement().getName().getLocalPart())) {
+ && Constants.get(version, ConstantKey.LINK).equals(event.asEndElement().getName().getLocalPart())) {
writeNext = true;
} else if (event.getEventType() == XMLStreamConstants.START_ELEMENT
- && (PROPERTIES).equals(event.asStartElement().getName().getLocalPart())) {
+ && (Constants.get(version, ConstantKey.PROPERTIES)).equals(
+ event.asStartElement().getName().getLocalPart())) {
writeCurrent = true;
writeNext = false;
inProperties = true;
} else if (event.getEventType() == XMLStreamConstants.END_ELEMENT
- && (PROPERTIES).equals(event.asEndElement().getName().getLocalPart())) {
+ && (Constants.get(version, ConstantKey.PROPERTIES)).equals(
+ event.asEndElement().getName().getLocalPart())) {
writeCurrent = true;
} else if (inProperties) {
if (event.getEventType() == XMLStreamConstants.START_ELEMENT) {
final String elementName = event.asStartElement().getName().getLocalPart();
for (String propertyName : propertyNames) {
- if ((ATOM_PROPERTY_PREFIX + propertyName.trim()).equals(elementName)) {
+ if ((Constants.get(version, ConstantKey.ATOM_PROPERTY_PREFIX) + propertyName.trim()).equals(elementName)) {
writeCurrent = true;
found.remove(propertyName);
currentName = propertyName;
@@ -800,7 +811,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
} else if (event.getEventType() == XMLStreamConstants.END_ELEMENT
&& StringUtils.isNotBlank(currentName)
- && (ATOM_PROPERTY_PREFIX + currentName.trim()).equals(
+ && (Constants.get(version, ConstantKey.ATOM_PROPERTY_PREFIX) + currentName.trim()).equals(
event.asEndElement().getName().getLocalPart())) {
writeNext = false;
currentName = null;
@@ -846,13 +857,14 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
// build a feed
bos.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>".getBytes());
- bos.write(("<feed xml:base=\"" + DEFAULT_SERVICE_URL + "\" "
+ bos.write(("<feed xml:base=\"" + Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL) + "\" "
+ "xmlns=\"http://www.w3.org/2005/Atom\" "
+ "xmlns:d=\"http://schemas.microsoft.com/ado/2007/08/dataservices\" "
+ "xmlns:m=\"http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\">")
.getBytes());
- bos.write(("<id>" + DEFAULT_SERVICE_URL + "entityset(entityid)/" + linkName + "</id>").getBytes());
+ bos.write(("<id>" + Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL) + "entityset(entityid)/" + linkName
+ + "</id>").getBytes());
bos.write(("<title type=\"text\">" + linkName + "</title>").getBytes());
bos.write("<updated>2014-03-03T13:40:49Z</updated>".getBytes());
@@ -901,7 +913,8 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
XMLEventReader reader = getEventReader(new ByteArrayInputStream(bos.toByteArray()));
final Map.Entry<Integer, XmlElement> propertyElement =
- extractElement(reader, null, Collections.<String>singletonList(PROPERTIES), 0, 2, 3);
+ extractElement(reader, null,
+ Collections.<String>singletonList(Constants.get(version, ConstantKey.PROPERTIES)), 0, 2, 3);
reader.close();
reader = propertyElement.getValue().getContentReader();
@@ -924,9 +937,11 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
int pos = 0;
while (true) {
final Map.Entry<Integer, XmlElement> linkElement =
- extractElement(reader, null, Collections.<String>singletonList(LINK), pos, 2, 2);
+ extractElement(reader, null,
+ Collections.<String>singletonList(Constants.get(version, ConstantKey.LINK)), pos, 2, 2);
- res.put("[LINK]" + linkElement.getValue().getStart().getAttributeByName(new QName("title")).getValue(),
+ res.put("[Constants.get(version, ConstantKey.LINK)]"
+ + linkElement.getValue().getStart().getAttributeByName(new QName("title")).getValue(),
linkElement.getValue().toStream());
pos = linkElement.getKey();
@@ -952,7 +967,8 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
// add property changes
// ---------------------------------
Map.Entry<Integer, XmlElement> propertyElement =
- extractElement(reader, writer, Collections.<String>singletonList(PROPERTIES), 0, 2, 3);
+ extractElement(reader, writer,
+ Collections.<String>singletonList(Constants.get(version, ConstantKey.PROPERTIES)), 0, 2, 3);
writer.flush();
@@ -981,7 +997,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
}
for (Map.Entry<String, InputStream> remains : properties.entrySet()) {
- if (!remains.getKey().startsWith("[LINK]")) {
+ if (!remains.getKey().startsWith("[Constants.get(version, ConstantKey.LINK)]")) {
pwriter.append(IOUtils.toString(remains.getValue()));
IOUtils.closeQuietly(remains.getValue());
}
@@ -1009,7 +1025,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
// remove existent links
for (Map.Entry<String, InputStream> remains : properties.entrySet()) {
- if (remains.getKey().startsWith("[LINK]")) {
+ if (remains.getKey().startsWith("[Constants.get(version, ConstantKey.LINK)]")) {
reader = getEventReader(new ByteArrayInputStream(bos.toByteArray()));
bos.reset();
@@ -1018,7 +1034,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
try {
final String linkName = remains.getKey().substring(remains.getKey().indexOf("]") + 1);
- extractElement(reader, writer, Collections.<String>singletonList(LINK),
+ extractElement(reader, writer, Collections.<String>singletonList(Constants.get(version, ConstantKey.LINK)),
Collections.<Map.Entry<String, String>>singleton(new SimpleEntry<String, String>("title", linkName)),
false, 0, 2, 2);
@@ -1038,14 +1054,15 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
bos.reset();
writer = getEventWriter(bos);
- propertyElement = extractElement(reader, writer, Collections.<String>singletonList(CONTENT), 0, 2, 2);
+ propertyElement = extractElement(reader, writer,
+ Collections.<String>singletonList(Constants.get(version, ConstantKey.CONTENT)), 0, 2, 2);
writer.flush();
pbos.reset();
pwriter = new OutputStreamWriter(pbos);
for (Map.Entry<String, InputStream> remains : properties.entrySet()) {
- if (remains.getKey().startsWith("[LINK]")) {
+ if (remains.getKey().startsWith("[Constants.get(version, ConstantKey.LINK)]")) {
pwriter.append(IOUtils.toString(remains.getValue()));
IOUtils.closeQuietly(remains.getValue());
}
@@ -1084,7 +1101,8 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
try {
final XmlElement linkElement =
- extractElement(reader, writer, Collections.<String>singletonList(LINK),
+ extractElement(reader, writer,
+ Collections.<String>singletonList(Constants.get(version, ConstantKey.LINK)),
Collections.<Map.Entry<String, String>>singletonList(new SimpleEntry<String, String>("title", linkName)),
false, 0, -1, -1).getValue();
writer.add(linkElement.getStart());
@@ -1116,23 +1134,26 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
public String getEdmTypeFromAtom(final String entitySetName, final String entityId, final List<String> path)
throws Exception {
- InputStream src = fsManager.readFile(Commons.getEntityBasePath(entitySetName, entityId) + ENTITY, Accept.XML);
+ InputStream src = fsManager.readFile(Commons.getEntityBasePath(entitySetName, entityId)
+ + Constants.get(version, ConstantKey.ENTITY), Accept.XML);
final List<String> atomPathElements = new ArrayList<String>();
for (String element : path) {
- atomPathElements.add(ATOM_PROPERTY_PREFIX + element);
+ atomPathElements.add(Constants.get(version, ConstantKey.ATOM_PROPERTY_PREFIX) + element);
}
final Map.Entry<Integer, XmlElement> prop = extractElement(getEventReader(src), null, atomPathElements, 0, 3, 4);
IOUtils.closeQuietly(src);
- final Attribute type = prop.getValue().getStart().getAttributeByName(new QName(TYPE));
+
+ final Attribute type =
+ prop.getValue().getStart().getAttributeByName(new QName(Constants.get(version, ConstantKey.TYPE)));
final String edmType;
if (type == null) {
- edmType = Constants.ATOM_DEF_TYPE;
+ edmType = Constants.get(version, ConstantKey.ATOM_DEF_TYPE);
} else {
edmType = type.getValue();
}
@@ -1189,11 +1210,12 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
final List<String> pathElements = new ArrayList<String>();
for (String element : path) {
- pathElements.add(ATOM_PROPERTY_PREFIX + element);
+ pathElements.add(Constants.get(version, ConstantKey.ATOM_PROPERTY_PREFIX) + element);
}
final InputStream src =
- fsManager.readFile(Commons.getEntityBasePath(entitySetName, entityId) + ENTITY, Accept.XML);
+ fsManager.readFile(Commons.getEntityBasePath(entitySetName, entityId)
+ + Constants.get(version, ConstantKey.ENTITY), Accept.XML);
final XMLEventReader reader = getEventReader(src);
final XmlElement property = extractElement(reader, null, pathElements, 0, 3, 4).getValue();
@@ -1208,21 +1230,17 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
writer.add(eventFactory.createStartDocument("UTF-8", "1.0"));
writer.add(property.getStart());
- if (version == ODataVersion.v4) {
-
- if (property.getStart().getAttributeByName(new QName(ATOM_DATASERVICE_NS)) == null) {
- writer.add(eventFactory.createNamespace(ATOM_PROPERTY_PREFIX.substring(0, 1), V4_DATASERVICES_NS));
- }
- if (property.getStart().getAttributeByName(new QName(ATOM_METADATA_NS)) == null) {
- writer.add(eventFactory.createNamespace(ATOM_METADATA_PREFIX.substring(0, 1), V4_METADATA_NS));
- }
- } else {
- if (property.getStart().getAttributeByName(new QName(ATOM_DATASERVICE_NS)) == null) {
- writer.add(eventFactory.createNamespace(ATOM_PROPERTY_PREFIX.substring(0, 1), V3_DATASERVICES_NS));
- }
- if (property.getStart().getAttributeByName(new QName(ATOM_METADATA_NS)) == null) {
- writer.add(eventFactory.createNamespace(ATOM_METADATA_PREFIX.substring(0, 1), V3_METADATA_NS));
- }
+ if (property.getStart().getAttributeByName(new QName(
+ Constants.get(version, ConstantKey.ATOM_DATASERVICE_NS))) == null) {
+ writer.add(eventFactory.createNamespace(
+ Constants.get(version, ConstantKey.ATOM_PROPERTY_PREFIX).substring(0, 1),
+ Constants.get(version, ConstantKey.DATASERVICES_NS)));
+ }
+ if (property.getStart().getAttributeByName(new QName(
+ Constants.get(version, ConstantKey.ATOM_METADATA_NS))) == null) {
+ writer.add(eventFactory.createNamespace(
+ Constants.get(version, ConstantKey.ATOM_METADATA_PREFIX).substring(0, 1),
+ Constants.get(version, ConstantKey.METADATA_NS)));
}
writer.add(property.getContentReader());
@@ -1242,7 +1260,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
final List<String> pathElements = new ArrayList<String>();
for (String element : path) {
- pathElements.add(ATOM_PROPERTY_PREFIX + element);
+ pathElements.add(Constants.get(version, ConstantKey.ATOM_PROPERTY_PREFIX) + element);
}
final XMLEventReader reader = getEventReader(src);
@@ -1258,7 +1276,16 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
final XMLEventReader changesReader = new XMLEventReaderWrapper(replacement);
- writer.add(changesReader);
+ while (changesReader.hasNext()) {
+ final XMLEvent event = changesReader.nextEvent();
+ if (event.isStartElement() && event.asStartElement().getName().equals(element.getValue().getStart().getName())) {
+ writer.add(element.getValue().getStart());
+ writer.add(changesReader);
+ } else {
+ writer.add(event);
+ }
+ }
+
changesReader.close();
IOUtils.closeQuietly(replacement);
@@ -1283,7 +1310,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
final List<String> pathElements = new ArrayList<String>();
for (String element : path) {
- pathElements.add(ATOM_PROPERTY_PREFIX + element);
+ pathElements.add(Constants.get(version, ConstantKey.ATOM_PROPERTY_PREFIX) + element);
}
final XMLEventReader reader = getEventReader(src);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java b/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java
index 4cf992a..c0031f1 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java
@@ -18,8 +18,6 @@
*/
package org.apache.olingo.fit.utils;
-import static org.apache.olingo.fit.utils.Constants.*;
-
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -113,7 +111,8 @@ public abstract class Commons {
throws IOException {
try {
return FSManager.instance(version)
- .getAbsolutePath(basePath + LINKS_FILE_PATH + File.separatorChar + linkName, accept);
+ .getAbsolutePath(basePath + Constants.get(version, ConstantKey.LINKS_FILE_PATH)
+ + File.separatorChar + linkName, accept);
} catch (Exception e) {
throw new IOException(e);
}
@@ -147,7 +146,7 @@ public abstract class Commons {
if (URI.create(uri).isAbsolute()) {
builder.append(uri);
} else {
- builder.append(DEFAULT_SERVICE_URL).append(uri);
+ builder.append(Constants.get(ConstantKey.DEFAULT_SERVICE_URL)).append(uri);
}
builder.append("</uri>");
}
@@ -162,8 +161,8 @@ public abstract class Commons {
throws IOException {
final ObjectNode links = new ObjectNode(JsonNodeFactory.instance);
links.put(
- JSON_ODATAMETADATA_NAME,
- ODATA_METADATA_PREFIX + entitySetName + "/$links/" + link.getKey());
+ Constants.get(ConstantKey.JSON_ODATAMETADATA_NAME),
+ Constants.get(ConstantKey.ODATA_METADATA_PREFIX) + entitySetName + "/$links/" + link.getKey());
final ArrayNode uris = new ArrayNode(JsonNodeFactory.instance);
@@ -172,7 +171,7 @@ public abstract class Commons {
if (URI.create(uri).isAbsolute()) {
absoluteURI = uri;
} else {
- absoluteURI = DEFAULT_SERVICE_URL + uri;
+ absoluteURI = Constants.get(ConstantKey.DEFAULT_SERVICE_URL) + uri;
}
uris.add(new ObjectNode(JsonNodeFactory.instance).put("url", absoluteURI));
}
@@ -214,20 +213,20 @@ public abstract class Commons {
switch (target) {
case JSON_NOMETA:
// nometa + minimal
- toBeRemoved.add(JSON_ODATAMETADATA_NAME);
+ toBeRemoved.add(Constants.get(ConstantKey.JSON_ODATAMETADATA_NAME));
case JSON:
// minimal
- toBeRemoved.add(JSON_EDITLINK_NAME);
- toBeRemoved.add(JSON_ID_NAME);
- toBeRemoved.add(JSON_TYPE_NAME);
+ toBeRemoved.add(Constants.get(ConstantKey.JSON_EDITLINK_NAME));
+ toBeRemoved.add(Constants.get(ConstantKey.JSON_ID_NAME));
+ toBeRemoved.add(Constants.get(ConstantKey.JSON_TYPE_NAME));
final Iterator<Map.Entry<String, JsonNode>> fields = node.fields();
while (fields.hasNext()) {
final Map.Entry<String, JsonNode> field = fields.next();
- if (field.getKey().endsWith(JSON_MEDIA_SUFFIX)
- || field.getKey().endsWith(JSON_NAVIGATION_SUFFIX)
- || field.getKey().endsWith(JSON_TYPE_SUFFIX)) {
+ if (field.getKey().endsWith(Constants.get(ConstantKey.JSON_MEDIA_SUFFIX))
+ || field.getKey().endsWith(Constants.get(ConstantKey.JSON_NAVIGATION_SUFFIX))
+ || field.getKey().endsWith(Constants.get(ConstantKey.JSON_TYPE_SUFFIX))) {
toBeRemoved.add(field.getKey());
} else if (field.getValue().isObject()) {
toBeReplaced.put(field.getKey(), changeFormat((ObjectNode) field.getValue(), target));
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/fit/src/main/java/org/apache/olingo/fit/utils/ConstantKey.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/ConstantKey.java b/fit/src/main/java/org/apache/olingo/fit/utils/ConstantKey.java
new file mode 100644
index 0000000..3c46e94
--- /dev/null
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/ConstantKey.java
@@ -0,0 +1,67 @@
+/*
+ * 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.fit.utils;
+
+public enum ConstantKey {
+
+ ODATA_SERVICE_VERSION,
+ DEFAULT_SERVICE_URL,
+ ODATA_COUNT_NAME,
+ ODATA_METADATA_PREFIX,
+ ATOM_DEF_TYPE,
+ ATOM_PROPERTY_PREFIX,
+ ATOM_METADATA_PREFIX,
+ ATOM_METADATA_NS,
+ ATOM_DATASERVICE_NS,
+ ATOM_LINK_ENTRY,
+ ATOM_LINK_FEED,
+ ATOM_LINK_REL,
+ TYPE,
+ INLINE_LOCAL,
+ INLINE_FILE_PATH,
+ LINKS_FILE_PATH,
+ INLINE,
+ CONTENT,
+ PROPERTIES,
+ LINK,
+ DATASERVICES_NS,
+ METADATA_NS,
+ METADATA,
+ SERVICES,
+ FEED,
+ ENTITY,
+ REF,
+ MEDIA_CONTENT_FILENAME,
+ SKIP_TOKEN,
+ FILTER,
+ ORDERBY,
+ JSON_VALUE_NAME,
+ JSON_NEXTLINK_NAME,
+ JSON_NEXTLINK_SUFFIX,
+ JSON_ODATAMETADATA_NAME,
+ JSON_NAVIGATION_BIND_SUFFIX,
+ JSON_NAVIGATION_SUFFIX,
+ JSON_MEDIA_SUFFIX,
+ JSON_TYPE_NAME,
+ JSON_TYPE_SUFFIX,
+ JSON_ID_NAME,
+ JSON_EDITLINK_NAME,
+ XHTTP_HEADER_NAME;
+
+};
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java b/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java
index be522d9..ffd52bc 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java
@@ -18,96 +18,83 @@
*/
package org.apache.olingo.fit.utils;
-public class Constants {
-
- public final static String ODATA_SERVICE_VERSION = "DataServiceVersion";
-
- public final static String DEFAULT_SERVICE_URL = "http://localhost:9080/StaticService/V30/Static.svc/";
-
- public final static String ODATA_COUNT_NAME = "odata.count";
-
- public final static String ODATA_METADATA_PREFIX = DEFAULT_SERVICE_URL + "$metadata#";
-
- public final static String ATOM_DEF_TYPE = "Edm.String";
-
- public final static String ATOM_PROPERTY_PREFIX = "d:";
-
- public final static String ATOM_METADATA_PREFIX = "m:";
-
- public final static String ATOM_METADATA_NS = "xmlns:m";
-
- public final static String ATOM_DATASERVICE_NS = "xmlns:d";
-
- public final static String ATOM_LINK_ENTRY = "application/atom+xml;type=entry";
-
- public final static String ATOM_LINK_FEED = "application/atom+xml;type=feed";
-
- public final static String ATOM_LINK_REL = "http://schemas.microsoft.com/ado/2007/08/dataservices/related/";
-
- public final static String TYPE = ATOM_METADATA_PREFIX + "type";
-
- public final static String INLINE_LOCAL = "inline";
-
- public final static String INLINE_FILE_PATH = "inline";
-
- public final static String LINKS_FILE_PATH = "links";
-
- public final static String INLINE = ATOM_METADATA_PREFIX + INLINE_LOCAL;
-
- public final static String CONTENT = "content";
-
- public final static String PROPERTIES = ATOM_METADATA_PREFIX + "properties";
-
- public final static String LINK = "link";
-
- public final static String V3_DATASERVICES_NS = "http://schemas.microsoft.com/ado/2007/08/dataservices";
-
- public final static String V4_DATASERVICES_NS = "http://docs.oasis-open.org/odata/ns/dataservices";
+import java.util.EnumMap;
+import java.util.Map;
- public final static String V3_METADATA_NS = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
-
- public final static String V4_METADATA_NS = "http://docs.oasis-open.org/odata/ns/metadata";
-
- public final static String METADATA = "metadata";
-
- public final static String SERVICES = "services";
-
- public final static String FEED = "feed";
-
- public final static String ENTITY = "entity";
-
- public final static String REF = "references";
-
- public final static String MEDIA_CONTENT_FILENAME = "$value.bin";
-
- public final static String SKIP_TOKEN = "skiptoken";
-
- public final static String FILTER = "filter";
-
- public final static String ORDERBY = "orderby";
-
- public final static String JSON_VALUE_NAME = "value";
-
- public final static String JSON_NEXTLINK_NAME = "odata.nextLink";
-
- public final static String JSON_NEXTLINK_SUFFIX = "@" + JSON_NEXTLINK_NAME;
-
- public final static String JSON_ODATAMETADATA_NAME = "odata.metadata";
-
- public final static String JSON_NAVIGATION_BIND_SUFFIX = "@odata.bind";
-
- public final static String JSON_NAVIGATION_SUFFIX = "@odata.navigationLinkUrl";
-
- public final static String JSON_MEDIA_SUFFIX = "@odata.mediaEditLink";
-
- public final static String JSON_TYPE_NAME = "odata.type";
-
- public final static String JSON_TYPE_SUFFIX = "@" + JSON_TYPE_NAME;
-
- public final static String JSON_ID_NAME = "odata.id";
-
- public final static String JSON_EDITLINK_NAME = "odata.editLink";
-
- public final static String XHTTP_HEADER_NAME = "X-HTTP-METHOD";
+public class Constants {
+ private final static Map<ConstantKey, String> v4constants = new EnumMap<ConstantKey, String>(ConstantKey.class);
+
+ private final static Map<ConstantKey, String> constants = new EnumMap<ConstantKey, String>(ConstantKey.class);
+
+ static {
+
+ // -----------------------------
+ // V4 only
+ // -----------------------------
+ v4constants.put(ConstantKey.JSON_NAVIGATION_SUFFIX, "@odata.navigationLink");
+ v4constants.put(ConstantKey.DATASERVICES_NS, "http://docs.oasis-open.org/odata/ns/dataservices");
+ v4constants.put(ConstantKey.METADATA_NS, "http://docs.oasis-open.org/odata/ns/metadata");
+ v4constants.put(ConstantKey.ODATA_SERVICE_VERSION, "OData-Version");
+ v4constants.put(ConstantKey.DEFAULT_SERVICE_URL, "http://localhost:9080/StaticService/V40/Static.svc/");
+ v4constants.put(ConstantKey.ODATA_METADATA_PREFIX, "http://localhost:9080/StaticService/V40/Static.svc/$metadata#");
+ // -----------------------------
+
+ // -----------------------------
+ // V3 and defaults
+ // -----------------------------
+ constants.put(ConstantKey.ODATA_SERVICE_VERSION, "DataServiceVersion");
+ constants.put(ConstantKey.DEFAULT_SERVICE_URL, "http://localhost:9080/StaticService/V30/Static.svc/");
+ constants.put(ConstantKey.ODATA_COUNT_NAME, "odata.count");
+ constants.put(ConstantKey.ODATA_METADATA_PREFIX, "http://localhost:9080/StaticService/V30/Static.svc/$metadata#");
+ constants.put(ConstantKey.ATOM_DEF_TYPE, "Edm.String");
+ constants.put(ConstantKey.ATOM_PROPERTY_PREFIX, "d:");
+ constants.put(ConstantKey.ATOM_METADATA_PREFIX, "m:");
+ constants.put(ConstantKey.ATOM_METADATA_NS, "xmlns:m");
+ constants.put(ConstantKey.ATOM_DATASERVICE_NS, "xmlns:d");
+ constants.put(ConstantKey.ATOM_LINK_ENTRY, "application/atom+xml;type=entry");
+ constants.put(ConstantKey.ATOM_LINK_FEED, "application/atom+xml;type=feed");
+ constants.put(ConstantKey.ATOM_LINK_REL, "http://schemas.microsoft.com/ado/2007/08/dataservices/related/");
+ constants.put(ConstantKey.TYPE, "m:type");
+ constants.put(ConstantKey.INLINE_LOCAL, "inline");
+ constants.put(ConstantKey.INLINE_FILE_PATH, "inline");
+ constants.put(ConstantKey.LINKS_FILE_PATH, "links");
+ constants.put(ConstantKey.INLINE, "m:inline");
+ constants.put(ConstantKey.CONTENT, "content");
+ constants.put(ConstantKey.PROPERTIES, "m:properties");
+ constants.put(ConstantKey.LINK, "link");
+ constants.put(ConstantKey.METADATA_NS, "http://schemas.microsoft.com/ado/2007/08/dataservices/metadta");
+ constants.put(ConstantKey.DATASERVICES_NS, "http://schemas.microsoft.com/ado/2007/08/dataservices");
+ constants.put(ConstantKey.METADATA, "metadata");
+ constants.put(ConstantKey.SERVICES, "services");
+ constants.put(ConstantKey.FEED, "feed");
+ constants.put(ConstantKey.ENTITY, "entity");
+ constants.put(ConstantKey.REF, "references");
+ constants.put(ConstantKey.MEDIA_CONTENT_FILENAME, "$value.bin");
+ constants.put(ConstantKey.SKIP_TOKEN, "skiptoken");
+ constants.put(ConstantKey.FILTER, "filter");
+ constants.put(ConstantKey.ORDERBY, "orderby");
+ constants.put(ConstantKey.JSON_VALUE_NAME, "value");
+ constants.put(ConstantKey.JSON_NEXTLINK_NAME, "odata.nextLink");
+ constants.put(ConstantKey.JSON_NEXTLINK_SUFFIX, "@odata.nextLink");
+ constants.put(ConstantKey.JSON_ODATAMETADATA_NAME, "odata.metadata");
+ constants.put(ConstantKey.JSON_NAVIGATION_BIND_SUFFIX, "@odata.bind");
+ constants.put(ConstantKey.JSON_NAVIGATION_SUFFIX, "@odata.navigationLinkUrl");
+ constants.put(ConstantKey.JSON_MEDIA_SUFFIX, "@odata.mediaEditLink");
+ constants.put(ConstantKey.JSON_TYPE_NAME, "odata.type");
+ constants.put(ConstantKey.JSON_TYPE_SUFFIX, "@odata.type");
+ constants.put(ConstantKey.JSON_ID_NAME, "odata.id");
+ constants.put(ConstantKey.JSON_EDITLINK_NAME, "odata.editLink");
+ constants.put(ConstantKey.XHTTP_HEADER_NAME, "X-HTTP-METHOD");
+ // -----------------------------
+ }
+
+ public static String get(final ConstantKey key) {
+ return get(null, key);
+ }
+
+ public static String get(final ODataVersion version, final ConstantKey key) {
+ return (version == null || version == ODataVersion.v3 || !v4constants.containsKey(key)
+ ? constants : v4constants).get(key);
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/fit/src/main/java/org/apache/olingo/fit/utils/ODataVersion.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/ODataVersion.java b/fit/src/main/java/org/apache/olingo/fit/utils/ODataVersion.java
index 863bbd1..5b35d4d 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/ODataVersion.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/ODataVersion.java
@@ -32,4 +32,4 @@ public enum ODataVersion {
public String getVersion() {
return version;
}
-};
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/fit/src/main/java/org/apache/olingo/fit/utils/XHTTPMethodInterceptor.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/XHTTPMethodInterceptor.java b/fit/src/main/java/org/apache/olingo/fit/utils/XHTTPMethodInterceptor.java
index 46fbd27..bbcc489 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/XHTTPMethodInterceptor.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/XHTTPMethodInterceptor.java
@@ -36,8 +36,9 @@ public class XHTTPMethodInterceptor extends AbstractPhaseInterceptor<Message> {
@SuppressWarnings("unchecked")
final Map<String, List<String>> headers = (Map<String, List<String>>) message.get(Message.PROTOCOL_HEADERS);
- if (headers.containsKey(Constants.XHTTP_HEADER_NAME)) {
- message.put(Message.HTTP_REQUEST_METHOD, headers.get(Constants.XHTTP_HEADER_NAME).iterator().next());
+ if (headers.containsKey(Constants.get(ConstantKey.XHTTP_HEADER_NAME))) {
+ message.put(Message.HTTP_REQUEST_METHOD, headers.get(Constants.get(ConstantKey.XHTTP_HEADER_NAME))
+ .iterator().next());
}
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/fit/src/main/java/org/apache/olingo/fit/utils/v3/XMLUtilities.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/v3/XMLUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/v3/XMLUtilities.java
index c1a58bf..919cee6 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/v3/XMLUtilities.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/v3/XMLUtilities.java
@@ -32,6 +32,7 @@ import javax.xml.stream.events.StartElement;
import org.apache.commons.io.IOUtils;
import org.apache.olingo.fit.utils.Accept;
import org.apache.olingo.fit.utils.Commons;
+import org.apache.olingo.fit.utils.ConstantKey;
import org.apache.olingo.fit.utils.Constants;
import org.apache.olingo.fit.utils.MetadataLinkInfo;
import org.apache.olingo.fit.utils.ODataVersion;
@@ -49,7 +50,7 @@ public class XMLUtilities extends org.apache.olingo.fit.utils.AbstractXMLUtiliti
final MetadataLinkInfo metadataLinkInfo = new MetadataLinkInfo();
Commons.getLinkInfo().put(version, metadataLinkInfo);
- final InputStream metadata = fsManager.readFile(Constants.METADATA, Accept.XML);
+ final InputStream metadata = fsManager.readFile(Constants.get(version, ConstantKey.METADATA), Accept.XML);
final XMLEventReader reader = getEventReader(metadata);
try {
@@ -69,7 +70,7 @@ public class XMLUtilities extends org.apache.olingo.fit.utils.AbstractXMLUtiliti
private void retrieveLinks(final XmlElement entitySetElement, final MetadataLinkInfo metadataLinkInfo)
throws Exception {
- final InputStream metadata = fsManager.readFile(Constants.METADATA, Accept.XML);
+ final InputStream metadata = fsManager.readFile(Constants.get(version, ConstantKey.METADATA), Accept.XML);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
IOUtils.copy(metadata, bos);
@@ -120,7 +121,7 @@ public class XMLUtilities extends org.apache.olingo.fit.utils.AbstractXMLUtiliti
private Map.Entry<String, Boolean> getTargetInfo(final StartElement element, final String linkName)
throws Exception {
- final InputStream metadata = fsManager.readFile(Constants.METADATA, Accept.XML);
+ final InputStream metadata = fsManager.readFile(Constants.get(version, ConstantKey.METADATA), Accept.XML);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
IOUtils.copy(metadata, bos);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/fit/src/main/java/org/apache/olingo/fit/utils/v4/XMLUtilities.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/v4/XMLUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/v4/XMLUtilities.java
index 1cf8d38..77c46be 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/v4/XMLUtilities.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/v4/XMLUtilities.java
@@ -30,6 +30,7 @@ import javax.xml.stream.XMLEventReader;
import org.apache.commons.io.IOUtils;
import org.apache.olingo.fit.utils.Accept;
import org.apache.olingo.fit.utils.Commons;
+import org.apache.olingo.fit.utils.ConstantKey;
import org.apache.olingo.fit.utils.Constants;
import org.apache.olingo.fit.utils.MetadataLinkInfo;
import org.apache.olingo.fit.utils.ODataVersion;
@@ -47,7 +48,7 @@ public class XMLUtilities extends org.apache.olingo.fit.utils.AbstractXMLUtiliti
final MetadataLinkInfo metadataLinkInfo = new MetadataLinkInfo();
Commons.getLinkInfo().put(version, metadataLinkInfo);
- final InputStream metadata = fsManager.readFile(Constants.METADATA, Accept.XML);
+ final InputStream metadata = fsManager.readFile(Constants.get(version, ConstantKey.METADATA), Accept.XML);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
IOUtils.copy(metadata, bos);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/lib/client-api/src/main/java/org/apache/olingo/client/api/data/ServiceDocument.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/data/ServiceDocument.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/data/ServiceDocument.java
index d545567..a6deb49 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/data/ServiceDocument.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/data/ServiceDocument.java
@@ -38,20 +38,6 @@ public interface ServiceDocument {
URI getBaseURI();
/**
- * Returns metadata context.
- *
- * @return metadata context
- */
- String getMetadataContext();
-
- /**
- * Returns metadata ETag.
- *
- * @return metadata ETag
- */
- String getMetadataETag();
-
- /**
* Gets top level entity sets.
*
* @return top level entity sets.
@@ -134,5 +120,4 @@ public interface ServiceDocument {
* @return related service document with given title if found, otherwise null
*/
ServiceDocumentItem getRelatedServiceDocumentByTitle(String title);
-
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataPropertyRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataPropertyRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataPropertyRequestImpl.java
index 7878805..e8f5ae3 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataPropertyRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataPropertyRequestImpl.java
@@ -88,7 +88,7 @@ public class ODataPropertyRequestImpl<T extends CommonODataProperty>
try {
final Container<Property> container =
odataClient.getDeserializer().toProperty(
- res.getEntity().getContent(), ODataFormat.fromString(getContentType()));
+ res.getEntity().getContent(), ODataFormat.fromString(getContentType()));
property = (T) odataClient.getBinder().getODataProperty(extractFromContainer(container));
} catch (IOException e) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AbstractServiceDocument.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AbstractServiceDocument.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AbstractServiceDocument.java
index 57ba0ef..83b3a12 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AbstractServiceDocument.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AbstractServiceDocument.java
@@ -18,6 +18,7 @@
*/
package org.apache.olingo.client.core.data;
+import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -28,6 +29,7 @@ import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.apache.olingo.client.api.data.ServiceDocument;
import org.apache.olingo.client.api.data.ServiceDocumentItem;
+import org.apache.olingo.commons.api.Constants;
public abstract class AbstractServiceDocument implements ServiceDocument {
@@ -35,14 +37,35 @@ public abstract class AbstractServiceDocument implements ServiceDocument {
private final List<ServiceDocumentItem> entitySets = new ArrayList<ServiceDocumentItem>();
+ private String metadata;
+
@Override
- public String getMetadataContext() {
- return null;
+ public URI getBaseURI() {
+ URI baseURI = null;
+ if (metadata != null) {
+ final String metadataURI = getMetadata();
+ baseURI = URI.create(metadataURI.substring(0, metadataURI.indexOf(Constants.METADATA)));
+ }
+
+ return baseURI;
}
- @Override
- public String getMetadataETag() {
- return null;
+ /**
+ * Gets the metadata URI.
+ *
+ * @return the metadata URI
+ */
+ public String getMetadata() {
+ return metadata;
+ }
+
+ /**
+ * Sets the metadata URI.
+ *
+ * @param metadata metadata URI.
+ */
+ public void setMetadata(final String metadata) {
+ this.metadata = metadata;
}
@Override
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONServiceDocumentDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONServiceDocumentDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONServiceDocumentDeserializer.java
index 8594f90..f949e16 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONServiceDocumentDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONServiceDocumentDeserializer.java
@@ -25,17 +25,20 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.IOException;
+import java.net.URI;
import java.util.Iterator;
import org.apache.commons.lang3.StringUtils;
import org.apache.olingo.commons.api.Constants;
+import org.apache.olingo.commons.api.data.Container;
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
import org.apache.olingo.commons.core.data.ODataJacksonDeserializer;
-public class JSONServiceDocumentDeserializer extends ODataJacksonDeserializer<AbstractServiceDocument> {
+public class JSONServiceDocumentDeserializer extends ODataJacksonDeserializer<Container<AbstractServiceDocument>> {
@Override
- protected AbstractServiceDocument doDeserialize(final JsonParser parser, final DeserializationContext ctxt)
+ protected Container<AbstractServiceDocument> doDeserialize(
+ final JsonParser parser, final DeserializationContext ctxt)
throws IOException, JsonProcessingException {
final ObjectNode tree = (ObjectNode) parser.getCodec().readTree(parser);
@@ -44,19 +47,28 @@ public class JSONServiceDocumentDeserializer extends ODataJacksonDeserializer<Ab
? new org.apache.olingo.client.core.data.v3.JSONServiceDocumentImpl()
: new org.apache.olingo.client.core.data.v4.JSONServiceDocumentImpl();
- if (tree.hasNonNull(Constants.JSON_METADATA)
- && serviceDocument instanceof org.apache.olingo.client.core.data.v3.JSONServiceDocumentImpl) {
+ final String metadataETag;
+ final URI contextURL;
- ((org.apache.olingo.client.core.data.v3.JSONServiceDocumentImpl) serviceDocument).
- setMetadata(tree.get(Constants.JSON_METADATA).textValue());
+ if (tree.hasNonNull(Constants.JSON_METADATA_ETAG)) {
+ metadataETag = tree.get(Constants.JSON_METADATA_ETAG).textValue();
+ tree.remove(Constants.JSON_METADATA_ETAG);
+ } else {
+ metadataETag = null;
}
- if (tree.hasNonNull(Constants.JSON_CONTEXT)
- && serviceDocument instanceof org.apache.olingo.client.core.data.v4.JSONServiceDocumentImpl) {
- ((org.apache.olingo.client.core.data.v4.JSONServiceDocumentImpl) serviceDocument).
- setMetadataContext(tree.get(Constants.JSON_CONTEXT).textValue());
+ if (tree.hasNonNull(Constants.JSON_CONTEXT)) {
+ contextURL = URI.create(tree.get(Constants.JSON_CONTEXT).textValue());
+ tree.remove(Constants.JSON_CONTEXT);
+ } else if (tree.hasNonNull(Constants.JSON_METADATA)) {
+ contextURL = URI.create(tree.get(Constants.JSON_METADATA).textValue());
+ tree.remove(Constants.JSON_METADATA);
+ } else {
+ contextURL = null;
}
+ serviceDocument.setMetadata(contextURL == null ? null : contextURL.toASCIIString());
+
for (final Iterator<JsonNode> itor = tree.get(Constants.VALUE).elements(); itor.hasNext();) {
final JsonNode node = itor.next();
@@ -79,7 +91,6 @@ public class JSONServiceDocumentDeserializer extends ODataJacksonDeserializer<Ab
}
}
- return serviceDocument;
+ return new Container<AbstractServiceDocument>(contextURL, metadataETag, serviceDocument);
}
-
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/c73772f0/lib/client-core/src/main/java/org/apache/olingo/client/core/data/XMLServiceDocumentDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/XMLServiceDocumentDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/XMLServiceDocumentDeserializer.java
index ef62f13..1b18040 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/XMLServiceDocumentDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/XMLServiceDocumentDeserializer.java
@@ -29,9 +29,11 @@ import java.io.IOException;
import java.net.URI;
import org.apache.olingo.client.api.data.ServiceDocument;
+import org.apache.olingo.client.core.uri.URIUtils;
+import org.apache.olingo.commons.api.data.Container;
import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
-public class XMLServiceDocumentDeserializer extends ODataJacksonDeserializer<ServiceDocument> {
+public class XMLServiceDocumentDeserializer extends ODataJacksonDeserializer<Container<ServiceDocument>> {
private String getTitle(final JsonParser jp) throws IOException {
String title = jp.nextTextValue();
@@ -67,32 +69,28 @@ public class XMLServiceDocumentDeserializer extends ODataJacksonDeserializer<Ser
}
@Override
- protected ServiceDocument doDeserialize(final JsonParser jp, final DeserializationContext ctxt)
+ protected Container<ServiceDocument> doDeserialize(final JsonParser jp, final DeserializationContext ctxt)
throws IOException, JsonProcessingException {
final AbstractServiceDocument sdoc = ODataServiceVersion.V30 == version
? new org.apache.olingo.client.core.data.v3.XMLServiceDocumentImpl()
: new org.apache.olingo.client.core.data.v4.XMLServiceDocumentImpl();
+ URI contextURL = null;
+ String metadataETag = null;
+ String base = null;
+
for (; jp.getCurrentToken() != JsonToken.END_OBJECT
|| !"service".equals(((FromXmlParser) jp).getStaxReader().getLocalName()); jp.nextToken()) {
final JsonToken token = jp.getCurrentToken();
if (token == JsonToken.FIELD_NAME) {
if ("base".equals(jp.getCurrentName())) {
- if (sdoc instanceof org.apache.olingo.client.core.data.v3.XMLServiceDocumentImpl) {
- ((org.apache.olingo.client.core.data.v3.XMLServiceDocumentImpl) sdoc).
- setBaseURI(URI.create(jp.nextTextValue()));
- } else {
- ((org.apache.olingo.client.core.data.v4.XMLServiceDocumentImpl) sdoc).
- setBaseURI(URI.create(jp.nextTextValue()));
- }
+ base = jp.nextTextValue();
} else if ("context".equals(jp.getCurrentName())) {
- ((org.apache.olingo.client.core.data.v4.XMLServiceDocumentImpl) sdoc).
- setMetadataContext(jp.nextTextValue());
+ contextURL = URI.create(jp.nextTextValue());
} else if ("metadata-etag".equals(jp.getCurrentName())) {
- ((org.apache.olingo.client.core.data.v4.XMLServiceDocumentImpl) sdoc).
- setMetadataETag(jp.nextTextValue());
+ metadataETag = jp.nextTextValue();
} else if ("workspace".equals(jp.getCurrentName())) {
jp.nextToken();
jp.nextToken();
@@ -115,7 +113,12 @@ public class XMLServiceDocumentDeserializer extends ODataJacksonDeserializer<Ser
}
}
- return sdoc;
- }
+ sdoc.setMetadata((contextURL == null
+ ? URIUtils.getURI(base, "$metadata")
+ : URIUtils.getURI(base, contextURL.toASCIIString())).toASCIIString());
+ return new Container<ServiceDocument>(
+ contextURL == null ? null : URIUtils.getURI(sdoc.getBaseURI(), contextURL),
+ metadataETag, sdoc);
+ }
}