You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by il...@apache.org on 2014/05/07 17:44:32 UTC
[2/2] git commit: MetadataTestITCase for V4
MetadataTestITCase for V4
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/58ecb3f5
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/58ecb3f5
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/58ecb3f5
Branch: refs/heads/master
Commit: 58ecb3f5d9567ec38f0fd11e6d4865402032d229
Parents: 6b7be9d
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed May 7 17:44:22 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed May 7 17:44:22 2014 +0200
----------------------------------------------------------------------
.../commons/EntityTypeInvocationHandler.java | 16 +-
.../olingo/ext/proxy/utils/EngineUtils.java | 5 +-
.../org/apache/olingo/fit/AbstractServices.java | 2 +-
.../main/java/org/apache/olingo/fit/V4Demo.java | 157 +++++++++++++++++
.../$value.bin | 0
.../entity.full.json | 16 ++
.../entity.xml | 40 +++++
.../resources/V40/Advertisements/feed.full.json | 31 ++++
.../main/resources/V40/Advertisements/feed.xml | 65 +++++++
fit/src/main/resources/V40/demoMetadata.xml | 172 +++++++++++++++++++
.../main/webapp/WEB-INF/applicationContext.xml | 1 +
.../olingo/fit/v3/AbstractTestITCase.java | 2 +-
.../apache/olingo/fit/v3/AsyncTestITCase.java | 2 +-
.../olingo/fit/v3/MediaEntityTestITCase.java | 109 ++++++------
.../olingo/fit/v4/AbstractTestITCase.java | 3 +
.../olingo/fit/v4/MediaEntityTestITCase.java | 122 +++++++++++++
.../olingo/fit/v4/PropertyTestITCase.java | 29 ++--
.../olingo/client/api/CommonODataClient.java | 4 +-
.../streamed/CommonStreamedRequestFactory.java | 67 --------
.../streamed/StreamedRequestFactory.java | 67 ++++++++
.../streamed/v3/StreamedRequestFactory.java | 24 ---
.../streamed/v4/StreamedRequestFactory.java | 24 ---
.../olingo/client/api/v3/ODataClient.java | 4 -
.../olingo/client/api/v4/ODataClient.java | 4 -
.../request/retrieve/ODataMediaRequestImpl.java | 3 +-
.../AbstractStreamedRequestFactory.java | 77 ---------
.../streamed/StreamedRequestFactoryImpl.java | 77 +++++++++
.../streamed/v3/StreamedRequestFactoryImpl.java | 33 ----
.../streamed/v4/StreamedRequestFactoryImpl.java | 33 ----
.../client/core/op/AbstractODataBinder.java | 9 +-
.../olingo/client/core/v3/ODataClientImpl.java | 4 +-
.../olingo/client/core/v4/ODataClientImpl.java | 4 +-
.../olingo/client/core/v3/EntityTest.java | 2 +-
.../olingo/client/core/v4/EntityTest.java | 2 +-
.../apache/olingo/commons/api/data/Entity.java | 4 +-
.../commons/api/domain/CommonODataEntity.java | 10 +-
.../commons/core/data/AbstractEntity.java | 10 +-
.../commons/core/data/AtomDeserializer.java | 2 +-
.../commons/core/data/AtomSerializer.java | 4 +-
.../core/data/JSONEntityDeserializer.java | 4 +-
.../commons/core/data/JSONEntitySerializer.java | 20 ++-
.../core/domain/AbstractODataEntity.java | 22 +--
42 files changed, 888 insertions(+), 398 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityTypeInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityTypeInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityTypeInvocationHandler.java
index 389f791..d738b5b 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityTypeInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityTypeInvocationHandler.java
@@ -342,9 +342,9 @@ public class EntityTypeInvocationHandler<C extends CommonEdmEnabledODataClient<?
res = type == null
? EngineUtils.getValueFromProperty(
- client.getCachedEdm(), entity.getProperty(name))
+ client.getCachedEdm(), entity.getProperty(name))
: EngineUtils.getValueFromProperty(
- client.getCachedEdm(), entity.getProperty(name), type);
+ client.getCachedEdm(), entity.getProperty(name), type);
if (res != null) {
int checkpoint = propertyChanges.hashCode();
@@ -475,19 +475,17 @@ public class EntityTypeInvocationHandler<C extends CommonEdmEnabledODataClient<?
public InputStream getStream() {
- final String contentSource = entity.getMediaContentSource();
+ final URI contentSource = entity.getMediaContentSource();
if (this.stream == null
&& typeRef.getAnnotation(EntityType.class).hasStream()
- && StringUtils.isNotBlank(contentSource)) {
+ && contentSource != null) {
- final String comntentType =
+ final String contentType =
StringUtils.isBlank(entity.getMediaContentType()) ? "*/*" : entity.getMediaContentType();
- final URI contentSourceURI = URIUtils.getURI(containerHandler.getFactory().getServiceRoot(), contentSource);
-
- final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(contentSourceURI);
- retrieveReq.setFormat(ODataMediaFormat.fromFormat(comntentType));
+ final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(contentSource);
+ retrieveReq.setFormat(ODataMediaFormat.fromFormat(contentType));
this.stream = retrieveReq.execute().getBody();
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/EngineUtils.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/EngineUtils.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/EngineUtils.java
index d625c80..f3e2c62 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/EngineUtils.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/utils/EngineUtils.java
@@ -181,7 +181,8 @@ public final class EngineUtils {
} else {
oprop = ((org.apache.olingo.commons.api.domain.v4.ODataObjectFactory) client.getObjectFactory()).
newEnumProperty(name,
- ((org.apache.olingo.commons.api.domain.v4.ODataValue) getODataValue(client, type, obj)).asEnum());
+ ((org.apache.olingo.commons.api.domain.v4.ODataValue) getODataValue(client, type, obj)).
+ asEnum());
}
} else {
throw new UnsupportedOperationException("Usupported object type " + type.getFullQualifiedName());
@@ -412,7 +413,7 @@ public final class EngineUtils {
}
public static URI getEditMediaLink(final String name, final CommonODataEntity entity) {
- for (ODataLink editMediaLink : entity.getEditMediaLinks()) {
+ for (ODataLink editMediaLink : entity.getMediaEditLinks()) {
if (name.equalsIgnoreCase(editMediaLink.getName())) {
return editMediaLink.getLink();
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/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 f3be7ce..a7e37f9 100644
--- a/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
+++ b/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
@@ -582,7 +582,7 @@ public abstract class AbstractServices {
editLink.setTitle(entitySetName);
entry.setEditLink(editLink);
- entry.setMediaContentSource(editLink.getHref() + "/$value");
+ entry.setMediaContentSource(URI.create(editLink.getHref() + "/$value"));
container = new ResWrap<AtomEntityImpl>((URI) null, null, entry);
} else {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/fit/src/main/java/org/apache/olingo/fit/V4Demo.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/V4Demo.java b/fit/src/main/java/org/apache/olingo/fit/V4Demo.java
new file mode 100644
index 0000000..c00d14a
--- /dev/null
+++ b/fit/src/main/java/org/apache/olingo/fit/V4Demo.java
@@ -0,0 +1,157 @@
+/*
+ * 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;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DefaultValue;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.fit.metadata.Metadata;
+import org.apache.olingo.fit.utils.Accept;
+import org.apache.olingo.fit.utils.ConstantKey;
+import org.apache.olingo.fit.utils.Constants;
+import org.apache.olingo.fit.utils.FSManager;
+import org.springframework.stereotype.Service;
+
+@Service
+@Path("/V40/Demo.svc")
+public class V4Demo {
+
+ private final Metadata demoMetadata;
+
+ private final V4Services services;
+
+ public V4Demo() throws Exception {
+ this.demoMetadata = new Metadata(FSManager.instance(ODataServiceVersion.V40).
+ readFile("demo" + StringUtils.capitalize(Constants.get(ODataServiceVersion.V40, ConstantKey.METADATA)),
+ Accept.XML), ODataServiceVersion.V40);
+ this.services = new V4Services() {
+ @Override
+ protected Metadata getMetadataObj() {
+ return demoMetadata;
+ }
+ };
+ }
+
+ private Response replaceServiceName(final Response response) {
+ try {
+ final String content = IOUtils.toString((InputStream) response.getEntity(), Constants.ENCODING).
+ replaceAll("Static\\.svc", "Demo.svc");
+
+ final Response.ResponseBuilder builder = Response.status(response.getStatus());
+ for (String headerName : response.getHeaders().keySet()) {
+ for (Object headerValue : response.getHeaders().get(headerName)) {
+ builder.header(headerName, headerValue);
+ }
+ }
+
+ final InputStream toBeStreamedBack = IOUtils.toInputStream(content, Constants.ENCODING);
+ final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ IOUtils.copy(toBeStreamedBack, baos);
+ IOUtils.closeQuietly(toBeStreamedBack);
+
+ builder.header("Content-Length", baos.size());
+ builder.entity(new ByteArrayInputStream(baos.toByteArray()));
+
+ return builder.build();
+ } catch (Exception e) {
+ return response;
+ }
+ }
+
+ @GET
+ @Path("/$metadata")
+ @Produces(MediaType.APPLICATION_XML)
+ public Response getMetadata() {
+ return services.getMetadata(
+ "demo" + StringUtils.capitalize(Constants.get(ODataServiceVersion.V40, ConstantKey.METADATA)));
+ }
+
+ @GET
+ @Path("/{entitySetName}({entityId})")
+ public Response getEntity(
+ @Context UriInfo uriInfo,
+ @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
+ @PathParam("entitySetName") String entitySetName,
+ @PathParam("entityId") String entityId,
+ @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format,
+ @QueryParam("$expand") @DefaultValue(StringUtils.EMPTY) String expand,
+ @QueryParam("$select") @DefaultValue(StringUtils.EMPTY) String select) {
+
+ return replaceServiceName(services.getEntityInternal(uriInfo.getRequestUri().toASCIIString(),
+ accept, entitySetName, entityId, format, expand, select, false));
+ }
+
+ @GET
+ @Path("/{entitySetName}({entityId})/$value")
+ public Response getMediaEntity(
+ @Context UriInfo uriInfo,
+ @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
+ @PathParam("entitySetName") String entitySetName,
+ @PathParam("entityId") String entityId) {
+
+ return services.getMediaEntity(uriInfo, accept, entitySetName, entityId);
+ }
+
+ @POST
+ @Path("/{entitySetName}")
+ @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON})
+ @Consumes({MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_OCTET_STREAM})
+ public Response postNewEntity(
+ @Context UriInfo uriInfo,
+ @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
+ @HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) String contentType,
+ @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) String prefer,
+ @PathParam("entitySetName") String entitySetName,
+ final String entity) {
+
+ return replaceServiceName(services.postNewEntity(uriInfo, accept, contentType, prefer, entitySetName, entity));
+ }
+
+ @PUT
+ @Produces({MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON})
+ @Consumes({MediaType.WILDCARD, MediaType.APPLICATION_OCTET_STREAM})
+ @Path("/{entitySetName}({entityId})/$value")
+ public Response replaceMediaEntity(
+ @Context UriInfo uriInfo,
+ @HeaderParam("Prefer") @DefaultValue(StringUtils.EMPTY) String prefer,
+ @PathParam("entitySetName") String entitySetName,
+ @PathParam("entityId") String entityId,
+ @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format,
+ String value) {
+
+ return services.replaceMediaEntity(uriInfo, prefer, entitySetName, entityId, format, value);
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/fit/src/main/resources/V40/Advertisements/f89dee73-af9f-4cd4-b330-db93c25ff3c7/$value.bin
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Advertisements/f89dee73-af9f-4cd4-b330-db93c25ff3c7/$value.bin b/fit/src/main/resources/V40/Advertisements/f89dee73-af9f-4cd4-b330-db93c25ff3c7/$value.bin
new file mode 100644
index 0000000..e69de29
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/fit/src/main/resources/V40/Advertisements/f89dee73-af9f-4cd4-b330-db93c25ff3c7/entity.full.json
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Advertisements/f89dee73-af9f-4cd4-b330-db93c25ff3c7/entity.full.json b/fit/src/main/resources/V40/Advertisements/f89dee73-af9f-4cd4-b330-db93c25ff3c7/entity.full.json
new file mode 100644
index 0000000..4730781
--- /dev/null
+++ b/fit/src/main/resources/V40/Advertisements/f89dee73-af9f-4cd4-b330-db93c25ff3c7/entity.full.json
@@ -0,0 +1,16 @@
+{
+ "@odata.context": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Demo.svc/$metadata#Advertisements/$entity",
+ "@odata.type": "#ODataDemo.Advertisement",
+ "@odata.id": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Demo.svc/Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)",
+ "@odata.editLink": "Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)",
+ "@odata.mediaEditLink": "Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)/$value",
+ "@odata.mediaContentType": "*/*",
+ "@odata.mediaEtag": "\"8zOOKKvgOtptr4gt8IrnapX3jds=\"",
+ "ID@odata.type": "#Guid",
+ "ID": "f89dee73-af9f-4cd4-b330-db93c25ff3c7",
+ "Name": "Old School Lemonade Store, Retro Style",
+ "AirDate@odata.type": "#DateTimeOffset",
+ "AirDate": "2012-11-07T00:00:00Z",
+ "FeaturedProduct@odata.associationLink": "Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)/FeaturedProduct/$ref",
+ "FeaturedProduct@odata.navigationLink": "Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)/FeaturedProduct"
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/fit/src/main/resources/V40/Advertisements/f89dee73-af9f-4cd4-b330-db93c25ff3c7/entity.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Advertisements/f89dee73-af9f-4cd4-b330-db93c25ff3c7/entity.xml b/fit/src/main/resources/V40/Advertisements/f89dee73-af9f-4cd4-b330-db93c25ff3c7/entity.xml
new file mode 100644
index 0000000..72a8cc6
--- /dev/null
+++ b/fit/src/main/resources/V40/Advertisements/f89dee73-af9f-4cd4-b330-db93c25ff3c7/entity.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ 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.
+
+-->
+<entry xml:base="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Demo.svc/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://docs.oasis-open.org/odata/ns/data" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" m:context="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Demo.svc/$metadata#Advertisements/$entity">
+ <id>http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Demo.svc/Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)</id>
+ <category term="#ODataDemo.Advertisement" scheme="http://docs.oasis-open.org/odata/ns/scheme"/>
+ <link rel="edit" title="Advertisement" href="Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)"/>
+ <link rel="http://docs.oasis-open.org/odata/ns/relatedlinks/FeaturedProduct" type="application/xml" title="FeaturedProduct" href="Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)/FeaturedProduct/$ref"/>
+ <link rel="http://docs.oasis-open.org/odata/ns/related/FeaturedProduct" type="application/atom+xml;type=entry" title="FeaturedProduct" href="Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)/FeaturedProduct"/>
+ <title/>
+ <updated>2014-05-07T13:42:01Z</updated>
+ <author>
+ <name/>
+ </author>
+ <link rel="edit-media" title="Advertisement" href="Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)/$value" m:etag=""8zOOKKvgOtptr4gt8IrnapX3jds=""/>
+ <content type="*/*" src="Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)/$value"/>
+ <m:properties>
+ <d:ID m:type="Guid">f89dee73-af9f-4cd4-b330-db93c25ff3c7</d:ID>
+ <d:Name>Old School Lemonade Store, Retro Style</d:Name>
+ <d:AirDate m:type="DateTimeOffset">2012-11-07T00:00:00Z</d:AirDate>
+ </m:properties>
+</entry>
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/fit/src/main/resources/V40/Advertisements/feed.full.json
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Advertisements/feed.full.json b/fit/src/main/resources/V40/Advertisements/feed.full.json
new file mode 100644
index 0000000..3d0a90e
--- /dev/null
+++ b/fit/src/main/resources/V40/Advertisements/feed.full.json
@@ -0,0 +1,31 @@
+{
+ "@odata.context": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Demo.svc/$metadata#Advertisements",
+ "value": [{
+ "@odata.type": "#ODataDemo.Advertisement",
+ "@odata.id": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Demo.svc/Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)",
+ "@odata.editLink": "Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)",
+ "@odata.mediaEditLink": "Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)/$value",
+ "@odata.mediaContentType": "*/*",
+ "@odata.mediaEtag": "\"8zOOKKvgOtptr4gt8IrnapX3jds=\"",
+ "ID@odata.type": "#Guid",
+ "ID": "f89dee73-af9f-4cd4-b330-db93c25ff3c7",
+ "Name": "Old School Lemonade Store, Retro Style",
+ "AirDate@odata.type": "#DateTimeOffset",
+ "AirDate": "2012-11-07T00:00:00Z",
+ "FeaturedProduct@odata.associationLink": "Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)/FeaturedProduct/$ref",
+ "FeaturedProduct@odata.navigationLink": "Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)/FeaturedProduct"
+ }, {
+ "@odata.type": "#ODataDemo.Advertisement",
+ "@odata.id": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Demo.svc/Advertisements(db2d2186-1c29-4d1e-88ef-a127f521b9c6)",
+ "@odata.editLink": "Advertisements(db2d2186-1c29-4d1e-88ef-a127f521b9c6)",
+ "@odata.mediaEditLink": "Advertisements(db2d2186-1c29-4d1e-88ef-a127f521b9c6)/$value",
+ "@odata.mediaContentType": "*/*",
+ "ID@odata.type": "#Guid",
+ "ID": "db2d2186-1c29-4d1e-88ef-a127f521b9c6",
+ "Name": "Early morning start, need coffee",
+ "AirDate@odata.type": "#DateTimeOffset",
+ "AirDate": "2000-02-29T00:00:00Z",
+ "FeaturedProduct@odata.associationLink": "Advertisements(db2d2186-1c29-4d1e-88ef-a127f521b9c6)/FeaturedProduct/$ref",
+ "FeaturedProduct@odata.navigationLink": "Advertisements(db2d2186-1c29-4d1e-88ef-a127f521b9c6)/FeaturedProduct"
+ }]
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/fit/src/main/resources/V40/Advertisements/feed.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Advertisements/feed.xml b/fit/src/main/resources/V40/Advertisements/feed.xml
new file mode 100644
index 0000000..874ffe9
--- /dev/null
+++ b/fit/src/main/resources/V40/Advertisements/feed.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ 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.
+
+-->
+<feed xml:base="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Demo.svc/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://docs.oasis-open.org/odata/ns/data" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" m:context="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Demo.svc/$metadata#Advertisements">
+ <id>http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Demo.svc/Advertisements</id>
+ <title type="text">Advertisements</title>
+ <updated>2014-05-07T13:39:27Z</updated>
+ <link rel="self" title="Advertisements" href="Advertisements"/>
+ <entry>
+ <id>http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Demo.svc/Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)</id>
+ <category term="#ODataDemo.Advertisement" scheme="http://docs.oasis-open.org/odata/ns/scheme"/>
+ <link rel="edit" title="Advertisement" href="Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)"/>
+ <link rel="http://docs.oasis-open.org/odata/ns/relatedlinks/FeaturedProduct" type="application/xml" title="FeaturedProduct" href="Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)/FeaturedProduct/$ref"/>
+ <link rel="http://docs.oasis-open.org/odata/ns/related/FeaturedProduct" type="application/atom+xml;type=entry" title="FeaturedProduct" href="Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)/FeaturedProduct"/>
+ <title/>
+ <updated>2014-05-07T13:39:27Z</updated>
+ <author>
+ <name/>
+ </author>
+ <link rel="edit-media" title="Advertisement" href="Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)/$value" m:etag=""8zOOKKvgOtptr4gt8IrnapX3jds=""/>
+ <content type="*/*" src="Advertisements(f89dee73-af9f-4cd4-b330-db93c25ff3c7)/$value"/>
+ <m:properties>
+ <d:ID m:type="Guid">f89dee73-af9f-4cd4-b330-db93c25ff3c7</d:ID>
+ <d:Name>Old School Lemonade Store, Retro Style</d:Name>
+ <d:AirDate m:type="DateTimeOffset">2012-11-07T00:00:00Z</d:AirDate>
+ </m:properties>
+ </entry>
+ <entry>
+ <id>http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Demo.svc/Advertisements(db2d2186-1c29-4d1e-88ef-a127f521b9c6)</id>
+ <category term="#ODataDemo.Advertisement" scheme="http://docs.oasis-open.org/odata/ns/scheme"/>
+ <link rel="edit" title="Advertisement" href="Advertisements(db2d2186-1c29-4d1e-88ef-a127f521b9c6)"/>
+ <link rel="http://docs.oasis-open.org/odata/ns/relatedlinks/FeaturedProduct" type="application/xml" title="FeaturedProduct" href="Advertisements(db2d2186-1c29-4d1e-88ef-a127f521b9c6)/FeaturedProduct/$ref"/>
+ <link rel="http://docs.oasis-open.org/odata/ns/related/FeaturedProduct" type="application/atom+xml;type=entry" title="FeaturedProduct" href="Advertisements(db2d2186-1c29-4d1e-88ef-a127f521b9c6)/FeaturedProduct"/>
+ <title/>
+ <updated>2014-05-07T13:39:27Z</updated>
+ <author>
+ <name/>
+ </author>
+ <link rel="edit-media" title="Advertisement" href="Advertisements(db2d2186-1c29-4d1e-88ef-a127f521b9c6)/$value"/>
+ <content type="*/*" src="Advertisements(db2d2186-1c29-4d1e-88ef-a127f521b9c6)/$value"/>
+ <m:properties>
+ <d:ID m:type="Guid">db2d2186-1c29-4d1e-88ef-a127f521b9c6</d:ID>
+ <d:Name>Early morning start, need coffee</d:Name>
+ <d:AirDate m:type="DateTimeOffset">2000-02-29T00:00:00Z</d:AirDate>
+ </m:properties>
+ </entry>
+</feed>
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/fit/src/main/resources/V40/demoMetadata.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/demoMetadata.xml b/fit/src/main/resources/V40/demoMetadata.xml
new file mode 100644
index 0000000..22ecfe1
--- /dev/null
+++ b/fit/src/main/resources/V40/demoMetadata.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+ 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.
+
+-->
+<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
+ <edmx:DataServices>
+ <Schema Namespace="ODataDemo" xmlns="http://docs.oasis-open.org/odata/ns/edm">
+ <EntityType Name="Product">
+ <Key>
+ <PropertyRef Name="ID" />
+ </Key>
+ <Property Name="ID" Type="Edm.Int32" Nullable="false" />
+ <Property Name="Name" Type="Edm.String" />
+ <Property Name="Description" Type="Edm.String" />
+ <Property Name="ReleaseDate" Type="Edm.DateTimeOffset" Nullable="false" />
+ <Property Name="DiscontinuedDate" Type="Edm.DateTimeOffset" />
+ <Property Name="Rating" Type="Edm.Int16" Nullable="false" />
+ <Property Name="Price" Type="Edm.Double" Nullable="false" />
+ <NavigationProperty Name="Categories" Type="Collection(ODataDemo.Category)" Partner="Products" />
+ <NavigationProperty Name="Supplier" Type="ODataDemo.Supplier" Partner="Products" />
+ <NavigationProperty Name="ProductDetail" Type="ODataDemo.ProductDetail" Partner="Product" />
+ </EntityType>
+ <EntityType Name="FeaturedProduct" BaseType="ODataDemo.Product">
+ <NavigationProperty Name="Advertisement" Type="ODataDemo.Advertisement" Partner="FeaturedProduct" />
+ </EntityType>
+ <EntityType Name="ProductDetail">
+ <Key>
+ <PropertyRef Name="ProductID" />
+ </Key>
+ <Property Name="ProductID" Type="Edm.Int32" Nullable="false" />
+ <Property Name="Details" Type="Edm.String" />
+ <NavigationProperty Name="Product" Type="ODataDemo.Product" Partner="ProductDetail" />
+ </EntityType>
+ <EntityType Name="Category" OpenType="true">
+ <Key>
+ <PropertyRef Name="ID" />
+ </Key>
+ <Property Name="ID" Type="Edm.Int32" Nullable="false" />
+ <Property Name="Name" Type="Edm.String" />
+ <NavigationProperty Name="Products" Type="Collection(ODataDemo.Product)" Partner="Categories" />
+ </EntityType>
+ <EntityType Name="Supplier">
+ <Key>
+ <PropertyRef Name="ID" />
+ </Key>
+ <Property Name="ID" Type="Edm.Int32" Nullable="false" />
+ <Property Name="Name" Type="Edm.String" />
+ <Property Name="Address" Type="ODataDemo.Address" />
+ <Property Name="Location" Type="Edm.GeographyPoint" SRID="Variable" />
+ <Property Name="Concurrency" Type="Edm.Int32" ConcurrencyMode="Fixed" Nullable="false" />
+ <NavigationProperty Name="Products" Type="Collection(ODataDemo.Product)" Partner="Supplier" />
+ </EntityType>
+ <ComplexType Name="Address">
+ <Property Name="Street" Type="Edm.String" />
+ <Property Name="City" Type="Edm.String" />
+ <Property Name="State" Type="Edm.String" />
+ <Property Name="ZipCode" Type="Edm.String" />
+ <Property Name="Country" Type="Edm.String" />
+ </ComplexType>
+ <EntityType Name="Person">
+ <Key>
+ <PropertyRef Name="ID" />
+ </Key>
+ <Property Name="ID" Type="Edm.Int32" Nullable="false" />
+ <Property Name="Name" Type="Edm.String" />
+ <NavigationProperty Name="PersonDetail" Type="ODataDemo.PersonDetail" Partner="Person" />
+ </EntityType>
+ <EntityType Name="Customer" BaseType="ODataDemo.Person">
+ <Property Name="TotalExpense" Type="Edm.Decimal" Nullable="false" />
+ </EntityType>
+ <EntityType Name="Employee" BaseType="ODataDemo.Person">
+ <Property Name="EmployeeID" Type="Edm.Int64" Nullable="false" />
+ <Property Name="HireDate" Type="Edm.DateTimeOffset" Nullable="false" />
+ <Property Name="Salary" Type="Edm.Single" Nullable="false" />
+ </EntityType>
+ <EntityType Name="PersonDetail">
+ <Key>
+ <PropertyRef Name="PersonID" />
+ </Key>
+ <Property Name="PersonID" Type="Edm.Int32" Nullable="false" />
+ <Property Name="Age" Type="Edm.Byte" Nullable="false" />
+ <Property Name="Gender" Type="Edm.Boolean" Nullable="false" />
+ <Property Name="Phone" Type="Edm.String" />
+ <Property Name="Address" Type="ODataDemo.Address" />
+ <Property Name="Photo" Type="Edm.Stream" Nullable="false" />
+ <NavigationProperty Name="Person" Type="ODataDemo.Person" Partner="PersonDetail" />
+ </EntityType>
+ <EntityType Name="Advertisement" HasStream="true">
+ <Key>
+ <PropertyRef Name="ID" />
+ </Key>
+ <Property Name="ID" Type="Edm.Guid" Nullable="false" />
+ <Property Name="Name" Type="Edm.String" />
+ <Property Name="AirDate" Type="Edm.DateTimeOffset" Nullable="false" />
+ <NavigationProperty Name="FeaturedProduct" Type="ODataDemo.FeaturedProduct" Partner="Advertisement" />
+ </EntityType>
+ <Action Name="Discount" IsBound="true">
+ <Parameter Name="product" Type="ODataDemo.Product" />
+ <Parameter Name="discountPercentage" Type="Edm.Int32" Nullable="false" />
+ <ReturnType Type="Edm.Double" Nullable="false" />
+ </Action>
+ <Action Name="IncreaseSalaries">
+ <Parameter Name="percentage" Type="Edm.Int32" Nullable="false" />
+ </Action>
+ <EntityContainer Name="DemoService">
+ <EntitySet Name="Products" EntityType="ODataDemo.Product">
+ <NavigationPropertyBinding Path="ODataDemo.FeaturedProduct/Advertisement" Target="Advertisements" />
+ <NavigationPropertyBinding Path="Categories" Target="Categories" />
+ <NavigationPropertyBinding Path="Supplier" Target="Suppliers" />
+ <NavigationPropertyBinding Path="ProductDetail" Target="ProductDetails" />
+ </EntitySet>
+ <EntitySet Name="ProductDetails" EntityType="ODataDemo.ProductDetail">
+ <NavigationPropertyBinding Path="Product" Target="Products" />
+ </EntitySet>
+ <EntitySet Name="Categories" EntityType="ODataDemo.Category">
+ <NavigationPropertyBinding Path="Products" Target="Products" />
+ </EntitySet>
+ <EntitySet Name="Suppliers" EntityType="ODataDemo.Supplier">
+ <NavigationPropertyBinding Path="Products" Target="Products" />
+ </EntitySet>
+ <EntitySet Name="Persons" EntityType="ODataDemo.Person">
+ <NavigationPropertyBinding Path="PersonDetail" Target="PersonDetails" />
+ </EntitySet>
+ <EntitySet Name="PersonDetails" EntityType="ODataDemo.PersonDetail">
+ <NavigationPropertyBinding Path="Person" Target="Persons" />
+ </EntitySet>
+ <EntitySet Name="Advertisements" EntityType="ODataDemo.Advertisement">
+ <NavigationPropertyBinding Path="FeaturedProduct" Target="Products" />
+ </EntitySet>
+ <ActionImport Name="IncreaseSalaries" Action="ODataDemo.IncreaseSalaries" />
+ </EntityContainer>
+ <Annotations Target="ODataDemo.DemoService">
+ <Annotation Term="Org.OData.Display.V1.Description" String="This is a sample OData service with vocabularies" />
+ </Annotations>
+ <Annotations Target="ODataDemo.Product">
+ <Annotation Term="Org.OData.Display.V1.Description" String="All Products available in the online store" />
+ </Annotations>
+ <Annotations Target="ODataDemo.Product/Name">
+ <Annotation Term="Org.OData.Display.V1.DisplayName" String="Product Name" />
+ </Annotations>
+ <Annotations Target="ODataDemo.DemoService/Suppliers">
+ <Annotation Term="Org.OData.Publication.V1.PublisherName" String="Microsoft Corp." />
+ <Annotation Term="Org.OData.Publication.V1.PublisherId" String="MSFT" />
+ <Annotation Term="Org.OData.Publication.V1.Keywords" String="Inventory, Supplier, Advertisers, Sales, Finance" />
+ <Annotation Term="Org.OData.Publication.V1.AttributionUrl" String="http://www.odata.org/" />
+ <Annotation Term="Org.OData.Publication.V1.AttributionDescription" String="All rights reserved" />
+ <Annotation Term="Org.OData.Publication.V1.DocumentationUrl " String="http://www.odata.org/" />
+ <Annotation Term="Org.OData.Publication.V1.TermsOfUseUrl" String="All rights reserved" />
+ <Annotation Term="Org.OData.Publication.V1.PrivacyPolicyUrl" String="http://www.odata.org/" />
+ <Annotation Term="Org.OData.Publication.V1.LastModified" String="4/2/2013" />
+ <Annotation Term="Org.OData.Publication.V1.ImageUrl " String="http://www.odata.org/" />
+ </Annotations>
+ </Schema>
+ </edmx:DataServices>
+</edmx:Edmx>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/fit/src/main/webapp/WEB-INF/applicationContext.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/webapp/WEB-INF/applicationContext.xml b/fit/src/main/webapp/WEB-INF/applicationContext.xml
index c37b8d0..f228583 100644
--- a/fit/src/main/webapp/WEB-INF/applicationContext.xml
+++ b/fit/src/main/webapp/WEB-INF/applicationContext.xml
@@ -49,6 +49,7 @@
<bean class="org.apache.olingo.fit.V4NorthWindExt"/>
<bean class="org.apache.olingo.fit.V4OpenType"/>
<bean class="org.apache.olingo.fit.V4Vocabularies"/>
+ <bean class="org.apache.olingo.fit.V4Demo"/>
</jaxrs:serviceBeans>
<jaxrs:providers>
<bean class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/>
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/fit/src/test/java/org/apache/olingo/fit/v3/AbstractTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/AbstractTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/AbstractTestITCase.java
index ab81e7c..6ecc4f3 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/AbstractTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/AbstractTestITCase.java
@@ -375,7 +375,7 @@ public abstract class AbstractTestITCase extends AbstractBaseTestITCase {
// check defined links
checkLinks(original.getAssociationLinks(), actual.getAssociationLinks());
- checkLinks(original.getEditMediaLinks(), actual.getEditMediaLinks());
+ checkLinks(original.getMediaEditLinks(), actual.getMediaEditLinks());
checkLinks(original.getNavigationLinks(), actual.getNavigationLinks());
// check defined properties equality
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/fit/src/test/java/org/apache/olingo/fit/v3/AsyncTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/AsyncTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/AsyncTestITCase.java
index 68d8524..aa6f5e2 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/AsyncTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/AsyncTestITCase.java
@@ -70,7 +70,7 @@ public class AsyncTestITCase extends AbstractTestITCase {
final ODataEntity entity = entityRes.getBody();
entity.getAssociationLinks().clear();
entity.getNavigationLinks().clear();
- entity.getEditMediaLinks().clear();
+ entity.getMediaEditLinks().clear();
entity.getProperties().remove(entity.getProperty("Description"));
getClient().getBinder().add(entity,
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/fit/src/test/java/org/apache/olingo/fit/v3/MediaEntityTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/MediaEntityTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/MediaEntityTestITCase.java
index e0bf0f2..4907378 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/MediaEntityTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/MediaEntityTestITCase.java
@@ -18,6 +18,9 @@
*/
package org.apache.olingo.fit.v3;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
@@ -38,11 +41,6 @@ import org.apache.olingo.commons.api.domain.v3.ODataEntity;
import org.apache.olingo.commons.api.domain.v3.ODataProperty;
import org.apache.olingo.commons.api.format.ODataMediaFormat;
import org.apache.olingo.commons.api.format.ODataPubFormat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotNull;
-
import org.junit.Test;
public class MediaEntityTestITCase extends AbstractTestITCase {
@@ -84,56 +82,8 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
retrieveReq.execute();
}
- @Test
- public void updateMediaEntityAsAtom() throws Exception {
- updateMediaEntity(ODataPubFormat.ATOM, 14);
- }
-
- @Test
- public void updateMediaEntityAsJson() throws Exception {
- updateMediaEntity(ODataPubFormat.JSON, 15);
- }
-
- @Test
- public void createMediaEntityAsAtom() throws Exception {
- createMediaEntity(ODataPubFormat.ATOM, IOUtils.toInputStream("buffered stream sample"));
- }
-
- @Test
- public void createMediaEntityAsJson() throws Exception {
- createMediaEntity(ODataPubFormat.JSON, IOUtils.toInputStream("buffered stream sample"));
- }
-
- @Test
- public void issue137() throws Exception {
- createMediaEntity(ODataPubFormat.JSON, this.getClass().getResourceAsStream("/sample.png"));
- }
-
- @Test
- public void updateNamedStream() throws Exception {
- URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
- appendEntitySetSegment("Car").appendKeySegment(16).appendNavigationSegment("Photo");
-
- final String TO_BE_UPDATED = "buffered stream sample";
- final InputStream input = new ByteArrayInputStream(TO_BE_UPDATED.getBytes());
-
- final ODataStreamUpdateRequest updateReq =
- client.getStreamedRequestFactory().getStreamUpdateRequest(builder.build(), input);
-
- final StreamUpdateStreamManager streamManager = updateReq.execute();
- final ODataStreamUpdateResponse updateRes = streamManager.getResponse();
- updateRes.close();
- assertEquals(204, updateRes.getStatusCode());
-
- final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
-
- final ODataRetrieveResponse<InputStream> retrieveRes = retrieveReq.execute();
- assertEquals(200, retrieveRes.getStatusCode());
- assertEquals(TO_BE_UPDATED, IOUtils.toString(retrieveRes.getBody()));
- }
-
private void updateMediaEntity(final ODataPubFormat format, final int id) throws Exception {
- URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
+ final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
appendEntitySetSegment("Car").appendKeySegment(id).appendValueSegment();
final String TO_BE_UPDATED = "new buffered stream sample";
@@ -154,9 +104,18 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
assertEquals(TO_BE_UPDATED, IOUtils.toString(retrieveRes.getBody()));
}
+ @Test
+ public void updateMediaEntityAsAtom() throws Exception {
+ updateMediaEntity(ODataPubFormat.ATOM, 14);
+ }
+
+ @Test
+ public void updateMediaEntityAsJson() throws Exception {
+ updateMediaEntity(ODataPubFormat.JSON, 15);
+ }
+
private void createMediaEntity(final ODataPubFormat format, final InputStream input) throws Exception {
- final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
- appendEntitySetSegment("Car");
+ final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car");
final ODataMediaEntityCreateRequest<ODataEntity> createReq =
client.getStreamedRequestFactory().getMediaEntityCreateRequest(builder.build(), input);
@@ -186,4 +145,42 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
assertEquals(200, retrieveRes.getStatusCode());
assertNotNull(retrieveRes.getBody());
}
+
+ @Test
+ public void createMediaEntityAsAtom() throws Exception {
+ createMediaEntity(ODataPubFormat.ATOM, IOUtils.toInputStream("buffered stream sample"));
+ }
+
+ @Test
+ public void createMediaEntityAsJson() throws Exception {
+ createMediaEntity(ODataPubFormat.JSON, IOUtils.toInputStream("buffered stream sample"));
+ }
+
+ @Test
+ public void issue137() throws Exception {
+ createMediaEntity(ODataPubFormat.JSON, this.getClass().getResourceAsStream("/sample.png"));
+ }
+
+ @Test
+ public void updateNamedStream() throws Exception {
+ URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
+ appendEntitySetSegment("Car").appendKeySegment(16).appendNavigationSegment("Photo");
+
+ final String TO_BE_UPDATED = "buffered stream sample";
+ final InputStream input = new ByteArrayInputStream(TO_BE_UPDATED.getBytes());
+
+ final ODataStreamUpdateRequest updateReq =
+ client.getStreamedRequestFactory().getStreamUpdateRequest(builder.build(), input);
+
+ final StreamUpdateStreamManager streamManager = updateReq.execute();
+ final ODataStreamUpdateResponse updateRes = streamManager.getResponse();
+ updateRes.close();
+ assertEquals(204, updateRes.getStatusCode());
+
+ final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
+
+ final ODataRetrieveResponse<InputStream> retrieveRes = retrieveReq.execute();
+ assertEquals(200, retrieveRes.getStatusCode());
+ assertEquals(TO_BE_UPDATED, IOUtils.toString(retrieveRes.getBody()));
+ }
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
index 4916126..7fe0837 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
@@ -49,6 +49,8 @@ public abstract class AbstractTestITCase extends AbstractBaseTestITCase {
protected static String testStaticServiceRootURL;
+ protected static String testDemoServiceRootURL;
+
protected static String testVocabulariesServiceRootURL;
protected static String testNorthwindRootURL;
@@ -64,6 +66,7 @@ public abstract class AbstractTestITCase extends AbstractBaseTestITCase {
@BeforeClass
public static void setUpODataServiceRoot() throws IOException {
testStaticServiceRootURL = "http://localhost:9080/stub/StaticService/V40/Static.svc";
+ testDemoServiceRootURL = "http://localhost:9080/stub/StaticService/V40/Demo.svc";
testVocabulariesServiceRootURL = "http://localhost:9080/stub/StaticService/V40/Vocabularies.svc";
testNorthwindRootURL = "http://localhost:9080/stub/StaticService/V40/NorthWind.svc";
testKeyAsSegmentServiceRootURL = "http://localhost:9080/stub/StaticService/V40/KeyAsSegment.svc";
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/fit/src/test/java/org/apache/olingo/fit/v4/MediaEntityTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/MediaEntityTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/MediaEntityTestITCase.java
new file mode 100644
index 0000000..459b246
--- /dev/null
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/MediaEntityTestITCase.java
@@ -0,0 +1,122 @@
+/*
+ * 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.v4;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.util.UUID;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
+import org.apache.olingo.client.api.communication.request.retrieve.ODataMediaRequest;
+import org.apache.olingo.client.api.communication.request.streamed.MediaEntityUpdateStreamManager;
+import org.apache.olingo.client.api.communication.request.streamed.ODataMediaEntityUpdateRequest;
+import org.apache.olingo.client.api.communication.response.ODataMediaEntityUpdateResponse;
+import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
+import org.apache.olingo.client.api.uri.v4.URIBuilder;
+import org.apache.olingo.client.api.v4.ODataClient;
+import org.apache.olingo.client.core.ODataClientFactory;
+import org.apache.olingo.commons.api.domain.v4.ODataEntity;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.format.ODataPubFormat;
+import org.junit.Test;
+
+public class MediaEntityTestITCase extends AbstractTestITCase {
+
+ private void read(final ODataClient client, final ODataPubFormat format) throws IOException {
+ final URIBuilder builder = client.getURIBuilder(testDemoServiceRootURL).
+ appendEntitySetSegment("Advertisements").
+ appendKeySegment(UUID.fromString("f89dee73-af9f-4cd4-b330-db93c25ff3c7"));
+ final ODataEntityRequest<ODataEntity> entityReq =
+ client.getRetrieveRequestFactory().getEntityRequest(builder.build());
+
+ final ODataEntity entity = entityReq.execute().getBody();
+ assertNotNull(entity);
+ assertTrue(entity.isMediaEntity());
+ assertEquals(EdmPrimitiveTypeKind.DateTimeOffset.getFullQualifiedName().toString(),
+ entity.getProperty("AirDate").getValue().getTypeName());
+
+ final ODataMediaRequest streamReq = client.getRetrieveRequestFactory().
+ getMediaRequest(entity.getMediaContentSource());
+ final ODataRetrieveResponse<InputStream> streamRes = streamReq.execute();
+ assertEquals(200, streamRes.getStatusCode());
+
+ final byte[] actual = new byte[Integer.parseInt(streamRes.getHeader("Content-Length").iterator().next())];
+ IOUtils.read(streamRes.getBody(), actual, 0, actual.length);
+ }
+
+ @Test
+ public void readAsAtom() throws IOException {
+ read(client, ODataPubFormat.ATOM);
+ }
+
+ @Test
+ public void readAsJSON() throws IOException {
+ read(ODataClientFactory.getEdmEnabledV4(testDemoServiceRootURL), ODataPubFormat.JSON);
+ }
+
+ @Test
+ public void readAsJSONFull() throws IOException {
+ read(client, ODataPubFormat.JSON_FULL_METADATA);
+ }
+
+ private void update(final ODataClient client, final ODataPubFormat format)
+ throws IOException, EdmPrimitiveTypeException {
+
+ final URI uri = client.getURIBuilder(testDemoServiceRootURL).
+ appendEntitySetSegment("Advertisements").
+ appendKeySegment(UUID.fromString("f89dee73-af9f-4cd4-b330-db93c25ff3c7")).appendValueSegment().build();
+
+ final String random = RandomStringUtils.random(124);
+
+ // 1. update providing media content
+ final ODataMediaEntityUpdateRequest<ODataEntity> updateReq = client.getStreamedRequestFactory().
+ getMediaEntityUpdateRequest(uri, IOUtils.toInputStream(random));
+ updateReq.setFormat(format);
+
+ final MediaEntityUpdateStreamManager<ODataEntity> streamManager = updateReq.execute();
+ final ODataMediaEntityUpdateResponse<ODataEntity> createRes = streamManager.getResponse();
+ assertEquals(204, createRes.getStatusCode());
+
+ // 2. check that media content was effectively uploaded
+ final ODataMediaRequest streamReq = client.getRetrieveRequestFactory().getMediaRequest(uri);
+ final ODataRetrieveResponse<InputStream> streamRes = streamReq.execute();
+ assertEquals(200, streamRes.getStatusCode());
+
+ final byte[] actual = new byte[Integer.parseInt(streamRes.getHeader("Content-Length").iterator().next())];
+ IOUtils.read(streamRes.getBody(), actual, 0, actual.length);
+ assertEquals(random, new String(actual));
+ }
+
+ @Test
+ public void updateAsAtom() throws IOException, EdmPrimitiveTypeException {
+ update(client, ODataPubFormat.ATOM);
+ }
+
+ @Test
+ public void updateAsJSON() throws IOException, EdmPrimitiveTypeException {
+ update(client, ODataPubFormat.JSON);
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/fit/src/test/java/org/apache/olingo/fit/v4/PropertyTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/PropertyTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/PropertyTestITCase.java
index de7ea50..2c8046b 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/PropertyTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/PropertyTestITCase.java
@@ -18,12 +18,12 @@
*/
package org.apache.olingo.fit.v4;
-import java.io.IOException;
-import org.apache.olingo.client.api.communication.request.cud.ODataPropertyUpdateRequest;
-import org.apache.olingo.client.api.communication.request.cud.v4.UpdateType;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import java.io.IOException;
+import org.apache.olingo.client.api.communication.request.cud.ODataPropertyUpdateRequest;
+import org.apache.olingo.client.api.communication.request.cud.v4.UpdateType;
import org.apache.olingo.client.api.communication.request.retrieve.ODataPropertyRequest;
import org.apache.olingo.client.api.communication.response.ODataPropertyUpdateResponse;
import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
@@ -112,16 +112,6 @@ public class PropertyTestITCase extends AbstractTestITCase {
complex(edmClient, ODataFormat.JSON);
}
- @Test
- public void complexFromFullJSON() {
- complex(client, ODataFormat.JSON_FULL_METADATA);
- }
-
- @Test
- public void patchComplexPropertyAsJSON() throws IOException {
- updateComplexProperty(ODataFormat.JSON_FULL_METADATA, UpdateType.PATCH);
- }
-
private void updateComplexProperty(final ODataFormat format, final UpdateType type) throws IOException {
final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
appendEntitySetSegment("Customers").appendKeySegment(1).appendPropertySegment("HomeAddress");
@@ -135,7 +125,7 @@ public class PropertyTestITCase extends AbstractTestITCase {
ODataProperty homeAddress =
client.getObjectFactory().newComplexProperty("HomeAddress",
- client.getObjectFactory().newComplexValue(retrieveRes.getBody().getComplexValue().getTypeName()));
+ client.getObjectFactory().newComplexValue(retrieveRes.getBody().getComplexValue().getTypeName()));
homeAddress.getComplexValue().add(client.getObjectFactory().
newPrimitiveProperty("City", client.getObjectFactory().newPrimitiveValueBuilder().buildString("Pescara")));
@@ -161,4 +151,15 @@ public class PropertyTestITCase extends AbstractTestITCase {
homeAddress = retrieveRes.getBody();
assertEquals("Pescara", homeAddress.getComplexValue().get("City").getPrimitiveValue().toString());
}
+
+ @Test
+ public void complexFromFullJSON() {
+ complex(client, ODataFormat.JSON_FULL_METADATA);
+ }
+
+ @Test
+ public void patchComplexPropertyAsJSON() throws IOException {
+ updateComplexProperty(ODataFormat.JSON_FULL_METADATA, UpdateType.PATCH);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
index 759636d..1d9cdd3 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
@@ -25,7 +25,7 @@ import org.apache.olingo.client.api.communication.request.cud.CommonCUDRequestFa
import org.apache.olingo.client.api.communication.request.cud.CommonUpdateType;
import org.apache.olingo.client.api.communication.request.invoke.InvokeRequestFactory;
import org.apache.olingo.client.api.communication.request.retrieve.CommonRetrieveRequestFactory;
-import org.apache.olingo.client.api.communication.request.streamed.CommonStreamedRequestFactory;
+import org.apache.olingo.client.api.communication.request.streamed.StreamedRequestFactory;
import org.apache.olingo.client.api.op.ClientODataDeserializer;
import org.apache.olingo.commons.api.domain.CommonODataObjectFactory;
import org.apache.olingo.client.api.op.CommonODataBinder;
@@ -71,7 +71,7 @@ public interface CommonODataClient<UT extends CommonUpdateType> {
CommonCUDRequestFactory<UT> getCUDRequestFactory();
- CommonStreamedRequestFactory getStreamedRequestFactory();
+ StreamedRequestFactory getStreamedRequestFactory();
InvokeRequestFactory getInvokeRequestFactory();
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/CommonStreamedRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/CommonStreamedRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/CommonStreamedRequestFactory.java
deleted file mode 100644
index ec91b9b..0000000
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/CommonStreamedRequestFactory.java
+++ /dev/null
@@ -1,67 +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.client.api.communication.request.streamed;
-
-import java.io.InputStream;
-import java.io.Serializable;
-import java.net.URI;
-import org.apache.olingo.commons.api.domain.CommonODataEntity;
-
-/**
- * OData request factory class.
- */
-public interface CommonStreamedRequestFactory extends Serializable {
-
- /**
- * Gets a media entity create request object instance.
- * <br/>
- * Use this kind of request to create a new media entity.
- *
- * @param <E> concrete ODataEntity implementation
- * @param targetURI entity set URI.
- * @param media entity blob to be created.
- * @return new ODataMediaEntityCreateRequest instance.
- */
- <E extends CommonODataEntity> ODataMediaEntityCreateRequest<E> getMediaEntityCreateRequest(
- URI targetURI, InputStream media);
-
- /**
- * Gets a stream update request object instance.
- * <br/>
- * Use this kind of request to update a named stream property.
- *
- * @param targetURI target URI.
- * @param stream stream to be updated.
- * @return new ODataStreamUpdateRequest instance.
- */
- ODataStreamUpdateRequest getStreamUpdateRequest(URI targetURI, InputStream stream);
-
- /**
- * Gets a media entity update request object instance.
- * <br/>
- * Use this kind of request to update a media entity.
- *
- * @param <E> concrete ODataEntity implementation
- * @param editURI media entity edit link URI.
- * @param media entity blob to be updated.
- * @return new ODataMediaEntityUpdateRequest instance.
- */
- <E extends CommonODataEntity> ODataMediaEntityUpdateRequest<E> getMediaEntityUpdateRequest(
- URI editURI, InputStream media);
-}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/StreamedRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/StreamedRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/StreamedRequestFactory.java
new file mode 100644
index 0000000..b70642f
--- /dev/null
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/StreamedRequestFactory.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.client.api.communication.request.streamed;
+
+import java.io.InputStream;
+import java.io.Serializable;
+import java.net.URI;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
+
+/**
+ * OData request factory class.
+ */
+public interface StreamedRequestFactory extends Serializable {
+
+ /**
+ * Gets a media entity create request object instance.
+ * <br/>
+ * Use this kind of request to create a new media entity.
+ *
+ * @param <E> concrete ODataEntity implementation
+ * @param targetURI entity set URI.
+ * @param media entity blob to be created.
+ * @return new ODataMediaEntityCreateRequest instance.
+ */
+ <E extends CommonODataEntity> ODataMediaEntityCreateRequest<E> getMediaEntityCreateRequest(
+ URI targetURI, InputStream media);
+
+ /**
+ * Gets a stream update request object instance.
+ * <br/>
+ * Use this kind of request to update a named stream property.
+ *
+ * @param targetURI target URI.
+ * @param stream stream to be updated.
+ * @return new ODataStreamUpdateRequest instance.
+ */
+ ODataStreamUpdateRequest getStreamUpdateRequest(URI targetURI, InputStream stream);
+
+ /**
+ * Gets a media entity update request object instance.
+ * <br/>
+ * Use this kind of request to update a media entity.
+ *
+ * @param <E> concrete ODataEntity implementation
+ * @param editURI media entity edit link URI.
+ * @param media entity blob to be updated.
+ * @return new ODataMediaEntityUpdateRequest instance.
+ */
+ <E extends CommonODataEntity> ODataMediaEntityUpdateRequest<E> getMediaEntityUpdateRequest(
+ URI editURI, InputStream media);
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/v3/StreamedRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/v3/StreamedRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/v3/StreamedRequestFactory.java
deleted file mode 100644
index db3ff84..0000000
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/v3/StreamedRequestFactory.java
+++ /dev/null
@@ -1,24 +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.client.api.communication.request.streamed.v3;
-
-import org.apache.olingo.client.api.communication.request.streamed.CommonStreamedRequestFactory;
-
-public interface StreamedRequestFactory extends CommonStreamedRequestFactory {
-}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/v4/StreamedRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/v4/StreamedRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/v4/StreamedRequestFactory.java
deleted file mode 100644
index 7319e33..0000000
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/v4/StreamedRequestFactory.java
+++ /dev/null
@@ -1,24 +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.client.api.communication.request.streamed.v4;
-
-import org.apache.olingo.client.api.communication.request.streamed.CommonStreamedRequestFactory;
-
-public interface StreamedRequestFactory extends CommonStreamedRequestFactory {
-}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
index 576d648..bca42cc 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
@@ -23,7 +23,6 @@ import org.apache.olingo.client.api.communication.request.batch.v3.BatchRequestF
import org.apache.olingo.client.api.communication.request.cud.v3.CUDRequestFactory;
import org.apache.olingo.client.api.communication.request.cud.v3.UpdateType;
import org.apache.olingo.client.api.communication.request.retrieve.v3.RetrieveRequestFactory;
-import org.apache.olingo.client.api.communication.request.streamed.v3.StreamedRequestFactory;
import org.apache.olingo.client.api.op.v3.ODataBinder;
import org.apache.olingo.client.api.op.v3.ODataDeserializer;
import org.apache.olingo.client.api.op.v3.ODataReader;
@@ -61,8 +60,5 @@ public interface ODataClient extends CommonODataClient<UpdateType> {
CUDRequestFactory getCUDRequestFactory();
@Override
- StreamedRequestFactory getStreamedRequestFactory();
-
- @Override
BatchRequestFactory getBatchRequestFactory();
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
index 171f51f..411e1fc 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
@@ -23,7 +23,6 @@ import org.apache.olingo.client.api.communication.request.batch.v4.BatchRequestF
import org.apache.olingo.client.api.communication.request.cud.v4.CUDRequestFactory;
import org.apache.olingo.client.api.communication.request.cud.v4.UpdateType;
import org.apache.olingo.client.api.communication.request.retrieve.v4.RetrieveRequestFactory;
-import org.apache.olingo.client.api.communication.request.streamed.v4.StreamedRequestFactory;
import org.apache.olingo.client.api.communication.request.v4.AsyncRequestFactory;
import org.apache.olingo.client.api.op.v4.ODataBinder;
import org.apache.olingo.client.api.op.v4.ODataDeserializer;
@@ -64,8 +63,5 @@ public interface ODataClient extends CommonODataClient<UpdateType> {
CUDRequestFactory getCUDRequestFactory();
@Override
- StreamedRequestFactory getStreamedRequestFactory();
-
- @Override
BatchRequestFactory getBatchRequestFactory();
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataMediaRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataMediaRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataMediaRequestImpl.java
index 8159281..527ab2f 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataMediaRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataMediaRequestImpl.java
@@ -42,7 +42,7 @@ public class ODataMediaRequestImpl extends AbstractODataRetrieveRequest<InputStr
* @param odataClient client instance getting this request
* @param query query to be executed.
*/
- ODataMediaRequestImpl(final CommonODataClient odataClient, final URI query) {
+ ODataMediaRequestImpl(final CommonODataClient<?> odataClient, final URI query) {
super(odataClient, ODataMediaFormat.class, query);
setAccept(ODataMediaFormat.APPLICATION_OCTET_STREAM.toString());
@@ -75,6 +75,7 @@ public class ODataMediaRequestImpl extends AbstractODataRetrieveRequest<InputStr
* Just to create response templates to be initialized from batch.
*/
private ODataMediaResponseImpl() {
+ super();
}
/**
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractStreamedRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractStreamedRequestFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractStreamedRequestFactory.java
deleted file mode 100644
index cf15fcb..0000000
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractStreamedRequestFactory.java
+++ /dev/null
@@ -1,77 +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.client.core.communication.request.streamed;
-
-import java.io.InputStream;
-import java.net.URI;
-import org.apache.olingo.client.api.CommonODataClient;
-import org.apache.olingo.client.api.communication.request.streamed.ODataMediaEntityCreateRequest;
-import org.apache.olingo.client.api.communication.request.streamed.ODataMediaEntityUpdateRequest;
-import org.apache.olingo.client.api.communication.request.streamed.ODataStreamUpdateRequest;
-import org.apache.olingo.client.api.communication.request.streamed.CommonStreamedRequestFactory;
-import org.apache.olingo.client.api.http.HttpMethod;
-import org.apache.olingo.commons.api.domain.CommonODataEntity;
-
-public abstract class AbstractStreamedRequestFactory implements CommonStreamedRequestFactory {
-
- private static final long serialVersionUID = -2438839640443961168L;
-
- protected final CommonODataClient<?> client;
-
- protected AbstractStreamedRequestFactory(final CommonODataClient<?> client) {
- this.client = client;
- }
-
- @Override
- public <E extends CommonODataEntity> ODataMediaEntityCreateRequest<E> getMediaEntityCreateRequest(
- final URI targetURI, final InputStream media) {
-
- return new ODataMediaEntityCreateRequestImpl<E>(client, targetURI, media);
- }
-
- @Override
- public ODataStreamUpdateRequest getStreamUpdateRequest(final URI targetURI, final InputStream stream) {
- final ODataStreamUpdateRequest req;
-
- if (client.getConfiguration().isUseXHTTPMethod()) {
- req = new ODataStreamUpdateRequestImpl(client, HttpMethod.POST, targetURI, stream);
- req.setXHTTPMethod(HttpMethod.PUT.name());
- } else {
- req = new ODataStreamUpdateRequestImpl(client, HttpMethod.PUT, targetURI, stream);
- }
-
- return req;
- }
-
- @Override
- public <E extends CommonODataEntity> ODataMediaEntityUpdateRequest<E> getMediaEntityUpdateRequest(
- final URI editURI, final InputStream media) {
-
- final ODataMediaEntityUpdateRequest<E> req;
-
- if (client.getConfiguration().isUseXHTTPMethod()) {
- req = new ODataMediaEntityUpdateRequestImpl<E>(client, HttpMethod.POST, editURI, media);
- req.setXHTTPMethod(HttpMethod.PUT.name());
- } else {
- req = new ODataMediaEntityUpdateRequestImpl<E>(client, HttpMethod.PUT, editURI, media);
- }
-
- return req;
- }
-}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/StreamedRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/StreamedRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/StreamedRequestFactoryImpl.java
new file mode 100644
index 0000000..a7f1b56
--- /dev/null
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/StreamedRequestFactoryImpl.java
@@ -0,0 +1,77 @@
+/*
+ * 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.client.core.communication.request.streamed;
+
+import java.io.InputStream;
+import java.net.URI;
+import org.apache.olingo.client.api.CommonODataClient;
+import org.apache.olingo.client.api.communication.request.streamed.ODataMediaEntityCreateRequest;
+import org.apache.olingo.client.api.communication.request.streamed.ODataMediaEntityUpdateRequest;
+import org.apache.olingo.client.api.communication.request.streamed.ODataStreamUpdateRequest;
+import org.apache.olingo.client.api.communication.request.streamed.StreamedRequestFactory;
+import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
+
+public class StreamedRequestFactoryImpl implements StreamedRequestFactory {
+
+ private static final long serialVersionUID = -2438839640443961168L;
+
+ protected final CommonODataClient<?> client;
+
+ public StreamedRequestFactoryImpl(final CommonODataClient<?> client) {
+ this.client = client;
+ }
+
+ @Override
+ public <E extends CommonODataEntity> ODataMediaEntityCreateRequest<E> getMediaEntityCreateRequest(
+ final URI targetURI, final InputStream media) {
+
+ return new ODataMediaEntityCreateRequestImpl<E>(client, targetURI, media);
+ }
+
+ @Override
+ public ODataStreamUpdateRequest getStreamUpdateRequest(final URI targetURI, final InputStream stream) {
+ final ODataStreamUpdateRequest req;
+
+ if (client.getConfiguration().isUseXHTTPMethod()) {
+ req = new ODataStreamUpdateRequestImpl(client, HttpMethod.POST, targetURI, stream);
+ req.setXHTTPMethod(HttpMethod.PUT.name());
+ } else {
+ req = new ODataStreamUpdateRequestImpl(client, HttpMethod.PUT, targetURI, stream);
+ }
+
+ return req;
+ }
+
+ @Override
+ public <E extends CommonODataEntity> ODataMediaEntityUpdateRequest<E> getMediaEntityUpdateRequest(
+ final URI editURI, final InputStream media) {
+
+ final ODataMediaEntityUpdateRequest<E> req;
+
+ if (client.getConfiguration().isUseXHTTPMethod()) {
+ req = new ODataMediaEntityUpdateRequestImpl<E>(client, HttpMethod.POST, editURI, media);
+ req.setXHTTPMethod(HttpMethod.PUT.name());
+ } else {
+ req = new ODataMediaEntityUpdateRequestImpl<E>(client, HttpMethod.PUT, editURI, media);
+ }
+
+ return req;
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/v3/StreamedRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/v3/StreamedRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/v3/StreamedRequestFactoryImpl.java
deleted file mode 100644
index 77446ce..0000000
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/v3/StreamedRequestFactoryImpl.java
+++ /dev/null
@@ -1,33 +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.client.core.communication.request.streamed.v3;
-
-import org.apache.olingo.client.api.v3.ODataClient;
-import org.apache.olingo.client.api.communication.request.streamed.v3.StreamedRequestFactory;
-import org.apache.olingo.client.core.communication.request.streamed.AbstractStreamedRequestFactory;
-
-public class StreamedRequestFactoryImpl extends AbstractStreamedRequestFactory
- implements StreamedRequestFactory {
-
- private static final long serialVersionUID = 2255688283995758441L;
-
- public StreamedRequestFactoryImpl(final ODataClient client) {
- super(client);
- }
-}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/v4/StreamedRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/v4/StreamedRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/v4/StreamedRequestFactoryImpl.java
deleted file mode 100644
index 608c0ef..0000000
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/v4/StreamedRequestFactoryImpl.java
+++ /dev/null
@@ -1,33 +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.client.core.communication.request.streamed.v4;
-
-import org.apache.olingo.client.api.v4.ODataClient;
-import org.apache.olingo.client.api.communication.request.streamed.v4.StreamedRequestFactory;
-import org.apache.olingo.client.core.communication.request.streamed.AbstractStreamedRequestFactory;
-
-public class StreamedRequestFactoryImpl extends AbstractStreamedRequestFactory
- implements StreamedRequestFactory {
-
- private static final long serialVersionUID = 960862845654673053L;
-
- public StreamedRequestFactoryImpl(final ODataClient client) {
- super(client);
- }
-}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/58ecb3f5/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java
index 397ae95..4566eb6 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java
@@ -179,7 +179,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
// -------------------------------------------------------------
// Append edit-media links
// -------------------------------------------------------------
- for (ODataLink link : odataEntity.getEditMediaLinks()) {
+ for (ODataLink link : odataEntity.getMediaEditLinks()) {
LOG.debug("Append edit-media link\n{}", link);
entity.getMediaEditLinks().add(getLink(link,
ResourceFactory.formatForEntityClass(reference) == ODataPubFormat.ATOM));
@@ -417,9 +417,8 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
odataNavigationLinks(edmType, resource.getPayload(), entity, resource.getMetadataETag(), base);
for (Link link : resource.getPayload().getMediaEditLinks()) {
- entity.addLink(new ODataLink.Builder().setVersion(client.getServiceVersion()).
- setURI(URIUtils.getURI(base, link.getHref())).
- setType(ODataLinkType.MEDIA_EDIT).setTitle(link.getTitle()).build());
+ entity.addLink(client.getObjectFactory().
+ newMediaEditLink(link.getTitle(), URIUtils.getURI(base, link.getHref())));
}
for (ODataOperation operation : resource.getPayload().getOperations()) {
@@ -429,7 +428,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
if (resource.getPayload().isMediaEntity()) {
entity.setMediaEntity(true);
- entity.setMediaContentSource(resource.getPayload().getMediaContentSource());
+ entity.setMediaContentSource(URIUtils.getURI(base, resource.getPayload().getMediaContentSource()));
entity.setMediaContentType(resource.getPayload().getMediaContentType());
entity.setMediaETag(resource.getPayload().getMediaETag());
}