You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by fm...@apache.org on 2014/05/20 16:55:55 UTC

git commit: api review in order to avoid to append value segment explicitely in case of media entity retrieve and property value retrieve

Repository: olingo-odata4
Updated Branches:
  refs/heads/master a12b2b115 -> 859a7e893


api review in order to avoid to append value segment explicitely in case of media entity retrieve and property value retrieve


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/859a7e89
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/859a7e89
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/859a7e89

Branch: refs/heads/master
Commit: 859a7e893ce9554eef3539152dad5b9048657b0e
Parents: a12b2b1
Author: fmartelli <fa...@gmail.com>
Authored: Tue May 20 16:55:41 2014 +0200
Committer: fmartelli <fa...@gmail.com>
Committed: Tue May 20 16:55:41 2014 +0200

----------------------------------------------------------------------
 .../proxy/commons/EntityInvocationHandler.java  |  2 +-
 .../apache/olingo/fit/v3/AsyncTestITCase.java   |  5 +-
 .../olingo/fit/v3/MediaEntityTestITCase.java    | 26 ++++-----
 .../olingo/fit/v3/PropertyTestITCase.java       |  7 +--
 .../olingo/fit/v3/PropertyValueTestITCase.java  | 32 +++++------
 .../olingo/fit/v4/MediaEntityTestITCase.java    |  7 ++-
 .../olingo/fit/v4/PropertyValueTestITCase.java  | 47 +++++++--------
 .../retrieve/CommonRetrieveRequestFactory.java  | 17 ++++++
 .../request/cud/AbstractCUDRequestFactory.java  |  9 +--
 .../AbstractRetrieveRequestFactory.java         | 11 ++++
 .../request/retrieve/ODataValueRequestImpl.java |  2 +-
 .../apache/olingo/client/core/uri/URIUtils.java | 60 +++++++++++++-------
 12 files changed, 129 insertions(+), 96 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/859a7e89/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityInvocationHandler.java
index 924d155..5be9bb8 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntityInvocationHandler.java
@@ -322,7 +322,7 @@ public class EntityInvocationHandler extends AbstractStructuredInvocationHandler
       final String contentType =
               StringUtils.isBlank(getEntity().getMediaContentType()) ? "*/*" : getEntity().getMediaContentType();
 
-      final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(contentSource);
+      final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaEntityRequest(contentSource);
       retrieveReq.setFormat(ODataMediaFormat.fromFormat(contentType));
 
       this.stream = retrieveReq.execute().getBody();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/859a7e89/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 ac43372..e9ac0e3 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
@@ -119,10 +119,9 @@ public class AsyncTestITCase extends AbstractTestITCase {
             ? created.getProperties().get(0).getPrimitiveValue().toCastValue(Integer.class)
             : created.getProperties().get(1).getPrimitiveValue().toCastValue(Integer.class);
 
-    builder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("Car").appendKeySegment(id).appendValueSegment();
+    builder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car").appendKeySegment(id);
 
-    final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
+    final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaEntityRequest(builder.build());
 
     final ODataRetrieveResponse<InputStream> retrieveRes = retrieveReq.execute();
     assertEquals(200, retrieveRes.getStatusCode());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/859a7e89/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 cc88cf1..5ae7e9e 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
@@ -48,9 +48,9 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
   @Test
   public void read() throws Exception {
     final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("Car").appendKeySegment(12).appendValueSegment();
+            appendEntitySetSegment("Car").appendKeySegment(12);
 
-    final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
+    final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaEntityRequest(builder.build());
     retrieveReq.setFormat(ODataMediaFormat.WILDCARD);
 
     final ODataRetrieveResponse<InputStream> retrieveRes = retrieveReq.execute();
@@ -62,10 +62,10 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
 
   @Test(expected = ODataClientErrorException.class)
   public void readWithXmlError() throws Exception {
-    final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("Car").appendKeySegment(12).appendValueSegment();
+    final URIBuilder builder =
+            client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car").appendKeySegment(12);
 
-    final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
+    final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaEntityRequest(builder.build());
     retrieveReq.setFormat(ODataMediaFormat.APPLICATION_XML);
 
     retrieveReq.execute();
@@ -73,18 +73,18 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
 
   @Test(expected = ODataClientErrorException.class)
   public void readWithJsonError() throws Exception {
-    final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("Car").appendKeySegment(12).appendValueSegment();
+    final URIBuilder builder =
+            client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car").appendKeySegment(12);
 
-    final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
+    final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaEntityRequest(builder.build());
     retrieveReq.setFormat(ODataMediaFormat.APPLICATION_JSON);
 
     retrieveReq.execute();
   }
 
   private void updateMediaEntity(final ODataPubFormat format, final int id) throws Exception {
-    final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("Car").appendKeySegment(id).appendValueSegment();
+    final URIBuilder builder =
+            client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car").appendKeySegment(id);
 
     final String TO_BE_UPDATED = "new buffered stream sample";
     final InputStream input = IOUtils.toInputStream(TO_BE_UPDATED);
@@ -97,7 +97,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
     final ODataMediaEntityUpdateResponse<ODataEntity> updateRes = streamManager.getResponse();
     assertEquals(204, updateRes.getStatusCode());
 
-    final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
+    final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaEntityRequest(builder.build());
 
     final ODataRetrieveResponse<InputStream> retrieveRes = retrieveReq.execute();
     assertEquals(200, retrieveRes.getStatusCode());
@@ -137,9 +137,9 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
     }
     assertNotNull(id);
 
-    builder.appendKeySegment(id).appendValueSegment();
+    builder.appendKeySegment(id);
 
-    final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
+    final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaEntityRequest(builder.build());
 
     final ODataRetrieveResponse<InputStream> retrieveRes = retrieveReq.execute();
     assertEquals(200, retrieveRes.getStatusCode());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/859a7e89/fit/src/test/java/org/apache/olingo/fit/v3/PropertyTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/PropertyTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/PropertyTestITCase.java
index c46efc0..c9c1c00 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/PropertyTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/PropertyTestITCase.java
@@ -166,10 +166,9 @@ public class PropertyTestITCase extends AbstractTestITCase {
             appendEntitySetSegment("Customer").appendKeySegment(-9).
             appendPropertySegment("PrimaryContactInfo").
             appendPropertySegment("HomePhone").
-            appendPropertySegment("PhoneNumber").
-            appendValueSegment();
+            appendPropertySegment("PhoneNumber");
 
-    ODataValueRequest retrieveReq = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+    ODataValueRequest retrieveReq = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     retrieveReq.setFormat(format);
 
     ODataRetrieveResponse<ODataPrimitiveValue> retrieveRes = retrieveReq.execute();
@@ -192,7 +191,7 @@ public class PropertyTestITCase extends AbstractTestITCase {
     final ODataValueUpdateResponse updateRes = updateReq.execute();
     assertEquals(204, updateRes.getStatusCode());
 
-    retrieveReq = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+    retrieveReq = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     retrieveReq.setFormat(format);
 
     retrieveRes = retrieveReq.execute();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/859a7e89/fit/src/test/java/org/apache/olingo/fit/v3/PropertyValueTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/PropertyValueTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/PropertyValueTestITCase.java
index cffcec5..4914eb5 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/PropertyValueTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/PropertyValueTestITCase.java
@@ -35,9 +35,8 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
   @Test
   public void retrieveIntPropertyValueTest() {
     CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("Product").appendKeySegment(-10).appendPropertySegment("ProductId").
-            appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+            appendEntitySetSegment("Product").appendKeySegment(-10).appendPropertySegment("ProductId");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
     final ODataValue value = req.execute().getBody();
     assertNotNull(value);
@@ -47,9 +46,8 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
   @Test
   public void retrieveBooleanPropertyValueTest() {
     CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("Product").appendKeySegment(-10).appendPropertySegment("ProductId").
-            appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+            appendEntitySetSegment("Product").appendKeySegment(-10).appendPropertySegment("ProductId");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
     final ODataValue value = req.execute().getBody();
     assertNotNull(value);
@@ -59,9 +57,8 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
   @Test
   public void retrieveStringPropertyValueTest() {
     CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("Product").appendKeySegment(-6).appendPropertySegment("Description").
-            appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+            appendEntitySetSegment("Product").appendKeySegment(-6).appendPropertySegment("Description");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
     final ODataValue value = req.execute().getBody();
     assertNotNull(value);
@@ -72,8 +69,8 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
   public void retrieveDatePropertyValueTest() {
     CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Product").appendKeySegment(-7).appendPropertySegment(
-                    "NestedComplexConcurrency/ModifiedDate").appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+                    "NestedComplexConcurrency/ModifiedDate");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
     final ODataValue value = req.execute().getBody();
     assertNotNull(value);
@@ -83,9 +80,8 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
   @Test
   public void retrieveDecimalPropertyValueTest() {
     CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("Product").appendKeySegment(-6).appendPropertySegment("Dimensions/Height").
-            appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+            appendEntitySetSegment("Product").appendKeySegment(-6).appendPropertySegment("Dimensions/Height");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
     final ODataValue value = req.execute().getBody();
     assertNotNull(value);
@@ -141,8 +137,8 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
   public void retrieveCollectionPropertyValueTest() {
     CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Product").appendKeySegment(-7).appendPropertySegment(
-                    "ComplexConcurrency/QueriedDateTime").appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+                    "ComplexConcurrency/QueriedDateTime");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
     final ODataValue value = req.execute().getBody();
     if (value.isPrimitive()) {
@@ -155,8 +151,8 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
   public void retrieveNullPropertyValueTest() {
     CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Product").appendKeySegment(-10).appendPropertySegment(
-                    "ComplexConcurrency/Token").appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+                    "ComplexConcurrency/Token");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     try {
       req.execute().getBody();
     } catch (ODataClientErrorException e) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/859a7e89/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
index d9f3935..ecd8c52 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/MediaEntityTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/MediaEntityTestITCase.java
@@ -62,6 +62,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
             appendKeySegment(UUID.fromString("f89dee73-af9f-4cd4-b330-db93c25ff3c7"));
     final ODataEntityRequest<ODataEntity> entityReq =
             client.getRetrieveRequestFactory().getEntityRequest(builder.build());
+    entityReq.setFormat(format);
 
     final ODataEntity entity = entityReq.execute().getBody();
     assertNotNull(entity);
@@ -124,7 +125,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
     assertEquals(204, updateRes.getStatusCode());
 
     final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().
-            getMediaRequest(client.getURIBuilder(createdLocation.toASCIIString()).appendValueSegment().build());
+            getMediaEntityRequest(client.getURIBuilder(createdLocation.toASCIIString()).build());
     final ODataRetrieveResponse<InputStream> retrieveRes = retrieveReq.execute();
     assertEquals(200, retrieveRes.getStatusCode());
 
@@ -146,7 +147,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
   private void update(final ODataPubFormat format) throws IOException, EdmPrimitiveTypeException {
     final URI uri = client.getURIBuilder(testDemoServiceRootURL).
             appendEntitySetSegment("Advertisements").
-            appendKeySegment(UUID.fromString("f89dee73-af9f-4cd4-b330-db93c25ff3c7")).appendValueSegment().build();
+            appendKeySegment(UUID.fromString("f89dee73-af9f-4cd4-b330-db93c25ff3c7")).build();
 
     final String random = RandomStringUtils.random(124);
 
@@ -160,7 +161,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
     assertEquals(204, createRes.getStatusCode());
 
     // 2. check that media content was effectively uploaded
-    final ODataMediaRequest streamReq = client.getRetrieveRequestFactory().getMediaRequest(uri);
+    final ODataMediaRequest streamReq = client.getRetrieveRequestFactory().getMediaEntityRequest(uri);
     final ODataRetrieveResponse<InputStream> streamRes = streamReq.execute();
     assertEquals(200, streamRes.getStatusCode());
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/859a7e89/fit/src/test/java/org/apache/olingo/fit/v4/PropertyValueTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/PropertyValueTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/PropertyValueTestITCase.java
index 5f76153..01834a4 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/PropertyValueTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/PropertyValueTestITCase.java
@@ -42,9 +42,8 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
   @Test
   public void retrieveIntPropertyValueTest() throws EdmPrimitiveTypeException {
     final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("PersonID").
-            appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("PersonID");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
     assertEquals("5", req.execute().getBody().toString());
   }
@@ -52,9 +51,8 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
   @Test
   public void retrieveBooleanPropertyValueTest() throws EdmPrimitiveTypeException {
     final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("IsRegistered").
-            appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("IsRegistered");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
     assertEquals("true", req.execute().getBody().toString());
   }
@@ -62,9 +60,8 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
   @Test
   public void retrieveStringPropertyValueTest() throws EdmPrimitiveTypeException {
     final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("FirstName").
-            appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("FirstName");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
     assertEquals("Peter", req.execute().getBody().toString());
   }
@@ -72,9 +69,8 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
   @Test
   public void retrieveDatePropertyValueTest() {
     final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("Orders").appendKeySegment(8).appendPropertySegment("OrderDate").
-            appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+            appendEntitySetSegment("Orders").appendKeySegment(8).appendPropertySegment("OrderDate");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
     final ODataPrimitiveValue property = req.execute().getBody();
     assertEquals("2011-03-04T16:03:57Z", property.toString());
@@ -83,9 +79,8 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
   @Test
   public void retrieveDecimalPropertyValueTest() throws EdmPrimitiveTypeException {
     final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("Height").
-            appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("Height");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
     final ODataPrimitiveValue property = req.execute().getBody();
     assertEquals("179", property.toString());
@@ -94,9 +89,8 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
   @Test
   public void retrieveBinaryPropertyValueTest() throws IOException {
     final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("PDC").
-            appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("PDC");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
     final ODataPrimitiveValue property = req.execute().getBody();
     assertEquals("fi653p3+MklA/LdoBlhWgnMTUUEo8tEgtbMXnF0a3CUNL9BZxXpSRiD9ebTnmNR0zWPjJ"
@@ -106,9 +100,8 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
   @Test(expected = ODataClientErrorException.class)
   public void retrieveBinaryPropertyValueTestWithAtom() throws IOException {
     final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("PDC").
-            appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("PDC");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setAccept(ODataPubFormat.ATOM.toString(ODataServiceVersion.V40));
     req.execute().getBody();
   }
@@ -116,9 +109,8 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
   @Test(expected = ODataClientErrorException.class)
   public void retrieveBinaryPropertyValueTestWithXML() throws IOException {
     final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("PDC").
-            appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("PDC");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setAccept(ODataFormat.XML.toString(client.getServiceVersion()));
     req.execute().getBody();
   }
@@ -132,16 +124,15 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
     req.setFormat(ODataFormat.XML);
     final ODataProperty property = req.execute().getBody();
     // cast to workaround JDK 6 bug, fixed in JDK 7
-    assertTrue(((ODataValuable)property).getValue().isCollection());
+    assertTrue(((ODataValuable) property).getValue().isCollection());
     assertEquals("555-555-5555", property.getCollectionValue().iterator().next().asPrimitive().toString());
   }
 
   @Test
   public void retrieveNullPropertyValueTest() {
     final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("HomeAddress").
-            appendValueSegment();
-    final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
+            appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("HomeAddress");
+    final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
     final ODataPrimitiveValue property = req.execute().getBody();
     assertTrue(StringUtils.isBlank(property.toString()));

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/859a7e89/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/CommonRetrieveRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/CommonRetrieveRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/CommonRetrieveRequestFactory.java
index 69e53e7..0c99298 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/CommonRetrieveRequestFactory.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/CommonRetrieveRequestFactory.java
@@ -99,6 +99,15 @@ public interface CommonRetrieveRequestFactory extends Serializable {
    * @return new {@link ODataPropertyRequest} instance.
    */
   <T extends CommonODataProperty> ODataPropertyRequest<T> getPropertyRequest(URI uri);
+  
+  /**
+   * Gets a uri request returning a single OData entity property value.
+   *
+   * @param <T> concrete ODataProperty implementation.
+   * @param uri request URI.
+   * @return new {@link ODataValueRequest} instance.
+   */
+  ODataValueRequest getPropertyValueRequest(URI uri);
 
   /**
    * Gets a uri request returning a single OData entity property value.
@@ -115,6 +124,14 @@ public interface CommonRetrieveRequestFactory extends Serializable {
    * @return new {@link ODataMediaRequest} instance.
    */
   ODataMediaRequest getMediaRequest(URI uri);
+  
+  /**
+   * Gets a uri request returning a media entity.
+   *
+   * @param uri request URI.
+   * @return new {@link ODataMediaRequest} instance.
+   */
+  ODataMediaRequest getMediaEntityRequest(URI uri);
 
   /**
    * Implements a raw request request without specifying any return type.

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/859a7e89/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/AbstractCUDRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/AbstractCUDRequestFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/AbstractCUDRequestFactory.java
index 43de94e..1a7e5b1 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/AbstractCUDRequestFactory.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/AbstractCUDRequestFactory.java
@@ -35,6 +35,7 @@ import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.client.core.communication.request.streamed.ODataMediaEntityCreateRequestImpl;
 import org.apache.olingo.client.core.communication.request.streamed.ODataMediaEntityUpdateRequestImpl;
 import org.apache.olingo.client.core.communication.request.streamed.ODataStreamUpdateRequestImpl;
+import org.apache.olingo.client.core.uri.URIUtils;
 import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.domain.CommonODataProperty;
 import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
@@ -99,10 +100,10 @@ public abstract class AbstractCUDRequestFactory<UT extends CommonUpdateType> imp
     final ODataValueUpdateRequest req;
 
     if (client.getConfiguration().isUseXHTTPMethod()) {
-      req = new ODataValueUpdateRequestImpl(client, HttpMethod.POST, targetURI, value);
+      req = new ODataValueUpdateRequestImpl(client, HttpMethod.POST, URIUtils.addValueSegment(targetURI), value);
       req.setXHTTPMethod(type.getMethod().name());
     } else {
-      req = new ODataValueUpdateRequestImpl(client, type.getMethod(), targetURI, value);
+      req = new ODataValueUpdateRequestImpl(client, type.getMethod(), URIUtils.addValueSegment(targetURI), value);
     }
 
     return req;
@@ -210,10 +211,10 @@ public abstract class AbstractCUDRequestFactory<UT extends CommonUpdateType> imp
     final ODataMediaEntityUpdateRequest<E> req;
 
     if (client.getConfiguration().isUseXHTTPMethod()) {
-      req = new ODataMediaEntityUpdateRequestImpl<E>(client, HttpMethod.POST, editURI, media);
+      req = new ODataMediaEntityUpdateRequestImpl<E>(client, HttpMethod.POST, URIUtils.addValueSegment(editURI), media);
       req.setXHTTPMethod(HttpMethod.PUT.name());
     } else {
-      req = new ODataMediaEntityUpdateRequestImpl<E>(client, HttpMethod.PUT, editURI, media);
+      req = new ODataMediaEntityUpdateRequestImpl<E>(client, HttpMethod.PUT, URIUtils.addValueSegment(editURI), media);
     }
 
     return req;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/859a7e89/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractRetrieveRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractRetrieveRequestFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractRetrieveRequestFactory.java
index b5ba1a9..abf2a8c 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractRetrieveRequestFactory.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractRetrieveRequestFactory.java
@@ -27,6 +27,7 @@ import org.apache.olingo.client.api.communication.request.retrieve.ODataRawReque
 import org.apache.olingo.client.api.communication.request.retrieve.ODataServiceDocumentRequest;
 import org.apache.olingo.client.api.communication.request.retrieve.ODataValueRequest;
 import org.apache.olingo.client.api.communication.request.retrieve.CommonRetrieveRequestFactory;
+import org.apache.olingo.client.core.uri.URIUtils;
 
 public abstract class AbstractRetrieveRequestFactory implements CommonRetrieveRequestFactory {
 
@@ -44,11 +45,21 @@ public abstract class AbstractRetrieveRequestFactory implements CommonRetrieveRe
   }
 
   @Override
+  public ODataValueRequest getPropertyValueRequest(final URI uri) {
+    return getValueRequest(URIUtils.addValueSegment(uri));
+  }
+
+  @Override
   public ODataMediaRequest getMediaRequest(final URI uri) {
     return new ODataMediaRequestImpl(client, uri);
   }
 
   @Override
+  public ODataMediaRequest getMediaEntityRequest(final URI uri) {
+    return getMediaRequest(URIUtils.addValueSegment(uri));
+  }
+
+  @Override
   public ODataRawRequest getRawRequest(final URI uri) {
     return new ODataRawRequestImpl(client, uri);
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/859a7e89/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataValueRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataValueRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataValueRequestImpl.java
index 460b695..7bc9fdf 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataValueRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataValueRequestImpl.java
@@ -42,7 +42,7 @@ public class ODataValueRequestImpl extends AbstractODataRetrieveRequest<ODataPri
    * @param odataClient client instance getting this request
    * @param query query to be executed.
    */
-  ODataValueRequestImpl(final CommonODataClient odataClient, final URI query) {
+  ODataValueRequestImpl(final CommonODataClient<?> odataClient, final URI query) {
     super(odataClient, ODataValueFormat.class, query);
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/859a7e89/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
index 017041b..4ecced4 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
@@ -23,6 +23,7 @@ import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.net.URLEncoder;
 import java.sql.Timestamp;
 import java.util.Calendar;
@@ -39,11 +40,13 @@ import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpEntity;
+import org.apache.http.client.utils.URIBuilder;
 import org.apache.http.entity.AbstractHttpEntity;
 import org.apache.http.entity.ByteArrayEntity;
 import org.apache.http.entity.InputStreamEntity;
 import org.apache.olingo.client.api.CommonODataClient;
 import org.apache.olingo.client.api.http.HttpClientFactory;
+import org.apache.olingo.client.api.uri.SegmentType;
 import org.apache.olingo.client.core.http.BasicAuthHttpClientFactory;
 import org.apache.olingo.client.core.http.ProxyWrapperHttpClientFactory;
 import org.apache.olingo.commons.api.Constants;
@@ -230,12 +233,12 @@ public final class URIUtils {
     return version.compareTo(ODataServiceVersion.V40) < 0
             ? prefix(version, EdmPrimitiveTypeKind.DateTime)
             + URLEncoder.encode(EdmDateTime.getInstance().
-                    valueToString(timestamp, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
-                    Constants.UTF8)
+            valueToString(timestamp, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
+            Constants.UTF8)
             + suffix(version, EdmPrimitiveTypeKind.DateTime)
             : URLEncoder.encode(EdmDateTimeOffset.getInstance().
-                    valueToString(timestamp, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
-                    Constants.UTF8);
+            valueToString(timestamp, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
+            Constants.UTF8);
   }
 
   private static String calendar(final ODataServiceVersion version, final Calendar calendar)
@@ -246,8 +249,8 @@ public final class URIUtils {
       if (version.compareTo(ODataServiceVersion.V40) < 0) {
         result = prefix(version, EdmPrimitiveTypeKind.DateTime)
                 + URLEncoder.encode(EdmDateTime.getInstance().
-                        valueToString(calendar, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
-                        Constants.UTF8)
+                valueToString(calendar, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
+                Constants.UTF8)
                 + suffix(version, EdmPrimitiveTypeKind.DateTime);
       } else {
         if (calendar.get(Calendar.YEAR) == 0 && calendar.get(Calendar.MONTH) == 0
@@ -265,8 +268,8 @@ public final class URIUtils {
     } else {
       result = prefix(version, EdmPrimitiveTypeKind.DateTimeOffset)
               + URLEncoder.encode(EdmDateTimeOffset.getInstance().
-                      valueToString(calendar, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
-                      Constants.UTF8)
+              valueToString(calendar, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
+              Constants.UTF8)
               + suffix(version, EdmPrimitiveTypeKind.DateTimeOffset);
     }
 
@@ -278,11 +281,11 @@ public final class URIUtils {
 
     return version.compareTo(ODataServiceVersion.V40) < 0
             ? EdmTime.getInstance().toUriLiteral(URLEncoder.encode(EdmTime.getInstance().
-                            valueToString(duration, null, null,
-                                    Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null), Constants.UTF8))
+            valueToString(duration, null, null,
+            Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null), Constants.UTF8))
             : EdmDuration.getInstance().toUriLiteral(URLEncoder.encode(EdmDuration.getInstance().
-                            valueToString(duration, null, null,
-                                    Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null), Constants.UTF8));
+            valueToString(duration, null, null,
+            Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null), Constants.UTF8));
   }
 
   private static String quoteString(final String string, final boolean singleQuoteEscape)
@@ -360,24 +363,24 @@ public final class URIUtils {
                 ? duration(version, (Duration) obj)
                 : (obj instanceof BigDecimal)
                 ? EdmDecimal.getInstance().valueToString(obj, null, null,
-                        Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
+                Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
                 + suffix(version, EdmPrimitiveTypeKind.Decimal)
                 : (obj instanceof Double)
                 ? EdmDouble.getInstance().valueToString(obj, null, null,
-                        Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
+                Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
                 + suffix(version, EdmPrimitiveTypeKind.Double)
                 : (obj instanceof Float)
                 ? EdmSingle.getInstance().valueToString(obj, null, null,
-                        Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
+                Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
                 + suffix(version, EdmPrimitiveTypeKind.Single)
                 : (obj instanceof Long)
                 ? EdmInt64.getInstance().valueToString(obj, null, null,
-                        Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
+                Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null)
                 + suffix(version, EdmPrimitiveTypeKind.Int64)
                 : (obj instanceof Geospatial)
                 ? URLEncoder.encode(EdmPrimitiveTypeFactory.getInstance(((Geospatial) obj).getEdmPrimitiveTypeKind()).
-                        valueToString(obj, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
-                        Constants.UTF8)
+                valueToString(obj, null, null, Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null),
+                Constants.UTF8)
                 : (obj instanceof String)
                 ? quoteString((String) obj, singleQuoteEscape)
                 : obj.toString();
@@ -407,18 +410,18 @@ public final class URIUtils {
 
   public static HttpEntity buildInputStreamEntity(final CommonODataClient<?> client, final InputStream input) {
     HttpEntity entity;
-    
+
     // --------------------------
     // Check just required by batch requests since their ansynchronous entity specification mechanism
     // --------------------------
     boolean contentAvailable;
     try {
-      contentAvailable = input.available()>0;
+      contentAvailable = input.available() > 0;
     } catch (IOException ex) {
       contentAvailable = false;
     }
     // --------------------------
-    
+
     boolean repeatableRequired = shouldUseRepeatableHttpBodyEntry(client);
     if (!contentAvailable || !repeatableRequired) {
       entity = new InputStreamEntity(input, -1);
@@ -437,4 +440,19 @@ public final class URIUtils {
     ((AbstractHttpEntity) entity).setChunked(client.getConfiguration().isUseChuncked());
     return entity;
   }
+
+  public static URI addValueSegment(final URI uri) {
+    final URI res;
+    if (uri.getPath().endsWith(SegmentType.VALUE.getValue())) {
+      res = uri;
+    } else {
+      try {
+        res = new URIBuilder(uri).setPath(uri.getPath() + "/" + SegmentType.VALUE.getValue()).build();
+      } catch (URISyntaxException e) {
+        throw new IllegalArgumentException(e);
+      }
+    }
+
+    return res;
+  }
 }