You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by sk...@apache.org on 2014/04/04 07:26:19 UTC

[15/51] [abbrv] git commit: [OLINGO-200] V4 ODataValue full reachable via API

[OLINGO-200] V4 ODataValue full reachable via API


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

Branch: refs/heads/olingo-206-validator
Commit: dc2922c956fd4570353130ae1407cab4fd4846f0
Parents: 117cf6f
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Mar 31 10:59:35 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Mar 31 10:59:35 2014 +0200

----------------------------------------------------------------------
 .../request/cud/CommonCUDRequestFactory.java    |   3 +-
 .../request/cud/ODataEntityCreateRequest.java   |   8 +-
 .../request/retrieve/ODataEntitySetRequest.java |   8 +-
 .../retrieve/v3/RetrieveRequestFactory.java     |   5 +-
 .../retrieve/v4/RetrieveRequestFactory.java     |   1 -
 .../response/ODataEntityCreateResponse.java     |   7 +-
 .../api/domain/ODataEntitySetIterator.java      |   3 +
 .../olingo/client/api/op/v3/ODataReader.java    |  13 +
 .../olingo/client/api/op/v4/ODataReader.java    |  14 +
 .../request/cud/AbstractCUDRequestFactory.java  |   6 +-
 .../cud/ODataEntityCreateRequestImpl.java       |  25 +-
 .../cud/ODataValueUpdateRequestImpl.java        |   4 +-
 .../retrieve/ODataEntitySetRequestImpl.java     |  15 +-
 .../request/retrieve/ODataValueRequestImpl.java |   4 +-
 .../client/core/op/AbstractODataBinder.java     |  29 +-
 .../client/core/op/AbstractODataReader.java     |  16 -
 .../client/core/op/impl/v3/ODataBinderImpl.java |  22 +
 .../client/core/op/impl/v3/ODataReaderImpl.java |  23 +
 .../client/core/op/impl/v4/ODataBinderImpl.java |  25 +-
 .../client/core/op/impl/v4/ODataReaderImpl.java |  25 +
 .../core/it/AbstractMetadataTestITCase.java     |   3 +-
 .../client/core/it/AbstractTestITCase.java      | 562 -------------------
 .../client/core/it/v3/AbstractTestITCase.java   | 530 ++++++++++++++++-
 .../core/it/v3/EntityCreateTestITCase.java      |  98 ++--
 .../core/it/v3/EntityUpdateTestITCase.java      |  21 +-
 .../core/it/v3/KeyAsSegmentTestITCase.java      |  13 +-
 .../it/v3/NavigationLinkCreateTestITCase.java   |  89 +--
 .../client/core/it/v3/OpenTypeTestITCase.java   |  28 +-
 .../client/core/it/v3/PropertyTestITCase.java   |  14 +-
 .../client/core/it/v4/AbstractTestITCase.java   |   3 +-
 .../core/it/v4/EntityRetrieveTestITCase.java    |  18 +-
 .../client/core/it/v4/EntitySetTestITCase.java  |   4 -
 .../core/it/v4/PropertyValueTestITCase.java     |  22 +-
 .../olingo/client/core/v3/PropertyTest.java     |  37 +-
 .../olingo/client/core/v4/EntityTest.java       |  16 +-
 .../commons/api/domain/AbstractODataValue.java  |  12 +-
 .../api/domain/CommonODataObjectFactory.java    |   8 +-
 .../commons/api/domain/CommonODataProperty.java |  14 -
 .../api/domain/ODataCollectionValue.java        |   6 +-
 .../commons/api/domain/ODataComplexValue.java   |   8 +-
 .../olingo/commons/api/domain/ODataValue.java   |   6 +-
 .../api/domain/v3/ODataObjectFactory.java       |  12 +-
 .../commons/api/domain/v3/ODataProperty.java    |  16 +
 .../api/domain/v4/ODataObjectFactory.java       |  12 +-
 .../commons/api/domain/v4/ODataProperty.java    |  16 +
 .../domain/AbstractODataCollectionValue.java    |  93 +++
 .../core/domain/AbstractODataComplexValue.java  |  93 +++
 .../core/domain/AbstractODataObjectFactory.java |  18 -
 .../domain/AbstractODataPrimitiveValue.java     | 179 ++++++
 .../core/domain/AbstractODataProperty.java      |  22 -
 .../core/domain/ODataCollectionValueImpl.java   |  90 ---
 .../core/domain/ODataComplexValueImpl.java      |  89 ---
 .../core/domain/ODataPrimitiveValueImpl.java    | 180 ------
 .../domain/v3/ODataCollectionValueImpl.java     |  32 ++
 .../core/domain/v3/ODataComplexValueImpl.java   |  32 ++
 .../core/domain/v3/ODataObjectFactoryImpl.java  |  25 +-
 .../core/domain/v3/ODataPrimitiveValueImpl.java |  44 ++
 .../core/domain/v3/ODataPropertyImpl.java       |  12 +
 .../domain/v4/ODataCollectionValueImpl.java     |  42 ++
 .../core/domain/v4/ODataComplexValueImpl.java   |  44 ++
 .../core/domain/v4/ODataObjectFactoryImpl.java  |  25 +-
 .../core/domain/v4/ODataPrimitiveValueImpl.java |  56 ++
 .../core/domain/v4/ODataPropertyImpl.java       |  13 +
 pom.xml                                         |   5 +
 64 files changed, 1645 insertions(+), 1273 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/cud/CommonCUDRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/cud/CommonCUDRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/cud/CommonCUDRequestFactory.java
index f05eb1a..b6c74dd 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/cud/CommonCUDRequestFactory.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/cud/CommonCUDRequestFactory.java
@@ -35,11 +35,12 @@ public interface CommonCUDRequestFactory extends Serializable {
    * <br/>
    * Use this kind of request to create a new entity.
    *
+   * @param <E> concrete ODataEntity implementation
    * @param targetURI entity set URI.
    * @param entity entity to be created.
    * @return new ODataEntityCreateRequest instance.
    */
-  ODataEntityCreateRequest getEntityCreateRequest(URI targetURI, CommonODataEntity entity);
+  <E extends CommonODataEntity> ODataEntityCreateRequest<E> getEntityCreateRequest(URI targetURI, E entity);
 
   /**
    * Gets an update request object instance.

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/cud/ODataEntityCreateRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/cud/ODataEntityCreateRequest.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/cud/ODataEntityCreateRequest.java
index 02f41e7..73471b9 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/cud/ODataEntityCreateRequest.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/cud/ODataEntityCreateRequest.java
@@ -20,10 +20,14 @@ package org.apache.olingo.client.api.communication.request.cud;
 
 import org.apache.olingo.client.api.communication.request.ODataBasicRequest;
 import org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 
 /**
- * This class implements an OData create request.
+ * This interface describes an OData create request.
+ *
+ * @param <E> concrete ODataEntity implementation
  */
-public interface ODataEntityCreateRequest extends ODataBasicRequest<ODataEntityCreateResponse, ODataPubFormat>{
+public interface ODataEntityCreateRequest<E extends CommonODataEntity>
+        extends ODataBasicRequest<ODataEntityCreateResponse<E>, ODataPubFormat> {
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataEntitySetRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataEntitySetRequest.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataEntitySetRequest.java
index 865596c..c7e1964 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataEntitySetRequest.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataEntitySetRequest.java
@@ -22,8 +22,10 @@ import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 
 /**
- * This class implements an OData EntitySet query request.
+ * This interface describes an OData EntitySet query request.
+ *
+ * @param <ES> concrete ODataEntitySet implementation
  */
-public interface ODataEntitySetRequest<T extends CommonODataEntitySet>
-        extends ODataRetrieveRequest<T, ODataPubFormat> {
+public interface ODataEntitySetRequest<ES extends CommonODataEntitySet>
+        extends ODataRetrieveRequest<ES, ODataPubFormat> {
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v3/RetrieveRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v3/RetrieveRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v3/RetrieveRequestFactory.java
index 0d133cb..5adc932 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v3/RetrieveRequestFactory.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v3/RetrieveRequestFactory.java
@@ -28,21 +28,18 @@ import org.apache.olingo.commons.api.domain.v3.ODataEntity;
 import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
 import org.apache.olingo.commons.api.domain.v3.ODataProperty;
 
+@SuppressWarnings("unchecked")
 public interface RetrieveRequestFactory extends CommonRetrieveRequestFactory {
 
-  @SuppressWarnings("unchecked")
   @Override
   ODataEntitySetRequest<ODataEntitySet> getEntitySetRequest(URI uri);
 
-  @SuppressWarnings("unchecked")
   @Override
   ODataEntitySetIteratorRequest<ODataEntitySet, ODataEntity> getEntitySetIteratorRequest(URI uri);
 
-  @SuppressWarnings("unchecked")
   @Override
   ODataEntityRequest<ODataEntity> getEntityRequest(URI uri);
 
-  @SuppressWarnings("unchecked")
   @Override
   ODataPropertyRequest<ODataProperty> getPropertyRequest(URI uri);
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v4/RetrieveRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v4/RetrieveRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v4/RetrieveRequestFactory.java
index 63f3515..ab8dade 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v4/RetrieveRequestFactory.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v4/RetrieveRequestFactory.java
@@ -34,7 +34,6 @@ public interface RetrieveRequestFactory extends CommonRetrieveRequestFactory {
   @Override
   ODataEntitySetRequest<ODataEntitySet> getEntitySetRequest(URI uri);
 
-  @SuppressWarnings("unchecked")
   @Override
   ODataEntitySetIteratorRequest<ODataEntitySet, ODataEntity> getEntitySetIteratorRequest(URI uri);
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataEntityCreateResponse.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataEntityCreateResponse.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataEntityCreateResponse.java
index 0407422..678b894 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataEntityCreateResponse.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataEntityCreateResponse.java
@@ -21,16 +21,17 @@ package org.apache.olingo.client.api.communication.response;
 import org.apache.olingo.commons.api.domain.CommonODataEntity;
 
 /**
- * This class implements the response to an OData entity create request.
+ * This interface describes the response to an OData entity create request.
  *
+ * @param <E> concrete ODataEntity implementation
  * @see org.apache.olingo.client.core.communication.request.cud.ODataEntityCreateRequest
  */
-public interface ODataEntityCreateResponse extends ODataResponse {
+public interface ODataEntityCreateResponse<E extends CommonODataEntity> extends ODataResponse {
 
   /**
    * Gets created object.
    *
    * @return created object.
    */
-  CommonODataEntity getBody();
+  E getBody();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ODataEntitySetIterator.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ODataEntitySetIterator.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ODataEntitySetIterator.java
index dd77a44..107816f 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ODataEntitySetIterator.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ODataEntitySetIterator.java
@@ -41,6 +41,9 @@ import org.slf4j.LoggerFactory;
  * OData entity set iterator class.
  * <br/>
  * <b>Please don't forget to call the <tt>close()>/<tt> method when not needed any more.</b>
+ *
+ * @param <E> concrete ODataEntity implementation
+ * @param <ES> concrete ODataEntitySet implementation
  */
 public class ODataEntitySetIterator<ES extends CommonODataEntitySet, E extends CommonODataEntity>
         implements Iterator<E> {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v3/ODataReader.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v3/ODataReader.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v3/ODataReader.java
index 7049617..2e72ce4 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v3/ODataReader.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v3/ODataReader.java
@@ -22,9 +22,22 @@ import java.io.InputStream;
 import org.apache.olingo.client.api.domain.v3.ODataLinkCollection;
 import org.apache.olingo.commons.api.format.ODataFormat;
 import org.apache.olingo.client.api.op.CommonODataReader;
+import org.apache.olingo.commons.api.domain.v3.ODataEntity;
+import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.v3.ODataProperty;
+import org.apache.olingo.commons.api.format.ODataPubFormat;
 
 public interface ODataReader extends CommonODataReader {
 
+  @Override
+  ODataEntitySet readEntitySet(InputStream input, ODataPubFormat format);
+
+  @Override
+  ODataEntity readEntity(InputStream input, ODataPubFormat format);
+
+  @Override
+  ODataProperty readProperty(InputStream input, ODataFormat format);
+
   /**
    * Parses a $links request response.
    *

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v4/ODataReader.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v4/ODataReader.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v4/ODataReader.java
index 25d989d..c976c05 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v4/ODataReader.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v4/ODataReader.java
@@ -18,8 +18,22 @@
  */
 package org.apache.olingo.client.api.op.v4;
 
+import java.io.InputStream;
 import org.apache.olingo.client.api.op.CommonODataReader;
+import org.apache.olingo.commons.api.domain.v4.ODataEntity;
+import org.apache.olingo.commons.api.domain.v4.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.v4.ODataProperty;
+import org.apache.olingo.commons.api.format.ODataFormat;
+import org.apache.olingo.commons.api.format.ODataPubFormat;
 
 public interface ODataReader extends CommonODataReader {
 
+  @Override
+  ODataEntitySet readEntitySet(InputStream input, ODataPubFormat format);
+
+  @Override
+  ODataEntity readEntity(InputStream input, ODataPubFormat format);
+
+  @Override
+  ODataProperty readProperty(InputStream input, ODataFormat format);
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/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 ae55269..16eecad 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
@@ -46,8 +46,10 @@ public abstract class AbstractCUDRequestFactory implements CommonCUDRequestFacto
   }
 
   @Override
-  public ODataEntityCreateRequest getEntityCreateRequest(final URI targetURI, final CommonODataEntity entity) {
-    return new ODataEntityCreateRequestImpl(client, targetURI, entity);
+  public <E extends CommonODataEntity> ODataEntityCreateRequest<E> getEntityCreateRequest(
+          final URI targetURI, final E entity) {
+
+    return new ODataEntityCreateRequestImpl<E>(client, targetURI, entity);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataEntityCreateRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataEntityCreateRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataEntityCreateRequestImpl.java
index f8bff7e..18485ae 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataEntityCreateRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataEntityCreateRequestImpl.java
@@ -39,14 +39,17 @@ import org.apache.olingo.commons.api.data.Entry;
 
 /**
  * This class implements an OData create request.
+ *
+ * @param <E> concrete ODataEntity implementation
  */
-public class ODataEntityCreateRequestImpl extends AbstractODataBasicRequest<ODataEntityCreateResponse, ODataPubFormat>
-        implements ODataEntityCreateRequest, ODataBatchableRequest {
+public class ODataEntityCreateRequestImpl<E extends CommonODataEntity>
+        extends AbstractODataBasicRequest<ODataEntityCreateResponse<E>, ODataPubFormat>
+        implements ODataEntityCreateRequest<E>, ODataBatchableRequest {
 
   /**
    * Entity to be created.
    */
-  private final CommonODataEntity entity;
+  private final E entity;
 
   /**
    * Constructor.
@@ -55,9 +58,7 @@ public class ODataEntityCreateRequestImpl extends AbstractODataBasicRequest<ODat
    * @param targetURI entity set URI.
    * @param entity entity to be created.
    */
-  ODataEntityCreateRequestImpl(final CommonODataClient odataClient, final URI targetURI,
-          final CommonODataEntity entity) {
-
+  ODataEntityCreateRequestImpl(final CommonODataClient odataClient, final URI targetURI, final E entity) {
     super(odataClient, ODataPubFormat.class, HttpMethod.POST, targetURI);
     this.entity = entity;
   }
@@ -74,7 +75,7 @@ public class ODataEntityCreateRequestImpl extends AbstractODataBasicRequest<ODat
    * {@inheritDoc }
    */
   @Override
-  public ODataEntityCreateResponse execute() {
+  public ODataEntityCreateResponse<E> execute() {
     final InputStream input = getPayload();
     ((HttpPost) request).setEntity(URIUtils.buildInputStreamEntity(odataClient, input));
 
@@ -88,9 +89,9 @@ public class ODataEntityCreateRequestImpl extends AbstractODataBasicRequest<ODat
   /**
    * Response class about an ODataEntityCreateRequest.
    */
-  private class ODataEntityCreateResponseImpl extends AbstractODataResponse implements ODataEntityCreateResponse {
+  private class ODataEntityCreateResponseImpl extends AbstractODataResponse implements ODataEntityCreateResponse<E> {
 
-    private CommonODataEntity entity = null;
+    private E entity = null;
 
     /**
      * Constructor.
@@ -98,6 +99,7 @@ public class ODataEntityCreateRequestImpl extends AbstractODataBasicRequest<ODat
      * Just to create response templates to be initialized from batch.
      */
     private ODataEntityCreateResponseImpl() {
+      super();
     }
 
     /**
@@ -114,13 +116,14 @@ public class ODataEntityCreateRequestImpl extends AbstractODataBasicRequest<ODat
      * {@inheritDoc }
      */
     @Override
-    public CommonODataEntity getBody() {
+    @SuppressWarnings("unchecked")
+    public E getBody() {
       if (entity == null) {
         try {
           final Container<Entry> container = odataClient.getDeserializer().toEntry(getRawResponse(),
                   ODataPubFormat.fromString(getAccept()));
 
-          entity = odataClient.getBinder().getODataEntity(extractFromContainer(container));
+          entity = (E) odataClient.getBinder().getODataEntity(extractFromContainer(container));
         } finally {
           this.close();
         }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataValueUpdateRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataValueUpdateRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataValueUpdateRequestImpl.java
index 5876f49..660f1e3 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataValueUpdateRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataValueUpdateRequestImpl.java
@@ -35,7 +35,6 @@ import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.client.core.uri.URIUtils;
 import org.apache.olingo.client.core.communication.request.AbstractODataBasicRequest;
 import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
-import org.apache.olingo.commons.core.domain.ODataPrimitiveValueImpl;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 
 /**
@@ -101,6 +100,7 @@ public class ODataValueUpdateRequestImpl extends AbstractODataBasicRequest<OData
      * Just to create response templates to be initialized from batch.
      */
     private ODataValueUpdateResponseImpl() {
+      super();
     }
 
     /**
@@ -122,7 +122,7 @@ public class ODataValueUpdateRequestImpl extends AbstractODataBasicRequest<OData
         final ODataValueFormat format = ODataValueFormat.fromString(getAccept());
 
         try {
-          value = new ODataPrimitiveValueImpl.BuilderImpl(odataClient.getServiceVersion()).
+          value = odataClient.getObjectFactory().newPrimitiveValueBuilder().
                   setType(format == ODataValueFormat.TEXT
                           ? EdmPrimitiveTypeKind.String : EdmPrimitiveTypeKind.Stream).
                   setText(IOUtils.toString(getRawResponse())).

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataEntitySetRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataEntitySetRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataEntitySetRequestImpl.java
index 86fa45c..fb571e9 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataEntitySetRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataEntitySetRequestImpl.java
@@ -31,11 +31,13 @@ import org.apache.olingo.commons.api.format.ODataPubFormat;
 
 /**
  * This class implements an OData EntitySet query request.
+ *
+ * @param <ES> concrete ODataEntitySet implementation
  */
-public class ODataEntitySetRequestImpl<T extends CommonODataEntitySet>
-        extends AbstractODataRetrieveRequest<T, ODataPubFormat> implements ODataEntitySetRequest<T> {
+public class ODataEntitySetRequestImpl<ES extends CommonODataEntitySet>
+        extends AbstractODataRetrieveRequest<ES, ODataPubFormat> implements ODataEntitySetRequest<ES> {
 
-  private T entitySet = null;
+  private ES entitySet = null;
 
   /**
    * Private constructor.
@@ -51,7 +53,7 @@ public class ODataEntitySetRequestImpl<T extends CommonODataEntitySet>
    * {@inheritDoc }
    */
   @Override
-  public ODataRetrieveResponse<T> execute() {
+  public ODataRetrieveResponse<ES> execute() {
     final HttpResponse res = doExecute();
     return new ODataEntitySetResponseImpl(httpClient, res);
   }
@@ -67,6 +69,7 @@ public class ODataEntitySetRequestImpl<T extends CommonODataEntitySet>
      * Just to create response templates to be initialized from batch.
      */
     private ODataEntitySetResponseImpl() {
+      super();
     }
 
     /**
@@ -84,13 +87,13 @@ public class ODataEntitySetRequestImpl<T extends CommonODataEntitySet>
      */
     @Override
     @SuppressWarnings("unchecked")
-    public T getBody() {
+    public ES getBody() {
       if (entitySet == null) {
         try {
           final Container<Feed> container =
                   odataClient.getDeserializer().toFeed(getRawResponse(), ODataPubFormat.fromString(getContentType()));
 
-          entitySet = (T) odataClient.getBinder().getODataEntitySet(extractFromContainer(container));
+          entitySet = (ES) odataClient.getBinder().getODataEntitySet(extractFromContainer(container));
         } finally {
           this.close();
         }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/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 2d7feed..cd8ca18 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
@@ -28,7 +28,6 @@ import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse
 import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
 import org.apache.olingo.commons.api.format.ODataValueFormat;
 import org.apache.olingo.client.api.http.HttpClientException;
-import org.apache.olingo.commons.core.domain.ODataPrimitiveValueImpl;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 
 /**
@@ -69,6 +68,7 @@ public class ODataValueRequestImpl extends AbstractODataRetrieveRequest<ODataPri
      * Just to create response templates to be initialized from batch.
      */
     private ODataValueResponseImpl() {
+      super();
     }
 
     /**
@@ -90,7 +90,7 @@ public class ODataValueRequestImpl extends AbstractODataRetrieveRequest<ODataPri
         final ODataValueFormat format = ODataValueFormat.fromString(getContentType());
 
         try {
-          value = new ODataPrimitiveValueImpl.BuilderImpl(odataClient.getServiceVersion()).
+          value = odataClient.getObjectFactory().newPrimitiveValueBuilder().
                   setType(format == ODataValueFormat.TEXT
                           ? EdmPrimitiveTypeKind.String : EdmPrimitiveTypeKind.Stream).
                   setText(IOUtils.toString(getRawResponse())).

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/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 13a49fb..faed745 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
@@ -209,27 +209,6 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
     return linkResource;
   }
 
-  @Override
-  public Property getProperty(final CommonODataProperty property, final Class<? extends Entry> reference,
-          final boolean setType) {
-
-    final Property propertyResource = ResourceFactory.newProperty(reference);
-    propertyResource.setName(property.getName());
-    propertyResource.setValue(getValue(property.getValue(), reference, setType));
-
-    if (setType) {
-      if (property.hasPrimitiveValue()) {
-        propertyResource.setType(property.getPrimitiveValue().getType().toString());
-      } else if (property.hasComplexValue()) {
-        propertyResource.setType(property.getComplexValue().getTypeName());
-      } else if (property.hasCollectionValue()) {
-        propertyResource.setType(property.getCollectionValue().getTypeName());
-      }
-    }
-
-    return propertyResource;
-  }
-
   protected Value getValue(final ODataValue value, final Class<? extends Entry> reference, final boolean setType) {
     Value valueResource = null;
 
@@ -240,17 +219,17 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
               ? new GeospatialValueImpl((Geospatial) value.asPrimitive().toValue())
               : new PrimitiveValueImpl(value.asPrimitive().toString());
     } else if (value.isComplex()) {
-      final ODataComplexValue _value = value.asComplex();
+      final ODataComplexValue<? extends CommonODataProperty> _value = value.asComplex();
       valueResource = new ComplexValueImpl();
 
-      for (final Iterator<CommonODataProperty> itor = _value.iterator(); itor.hasNext();) {
+      for (final Iterator<? extends CommonODataProperty> itor = _value.iterator(); itor.hasNext();) {
         valueResource.asComplex().get().add(getProperty(itor.next(), reference, setType));
       }
     } else if (value.isCollection()) {
-      final ODataCollectionValue _value = value.asCollection();
+      final ODataCollectionValue<? extends ODataValue> _value = value.asCollection();
       valueResource = new CollectionValueImpl();
 
-      for (final Iterator<ODataValue> itor = _value.iterator(); itor.hasNext();) {
+      for (final Iterator<? extends ODataValue> itor = _value.iterator(); itor.hasNext();) {
         valueResource.asCollection().get().add(getValue(itor.next(), reference, setType));
       }
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataReader.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataReader.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataReader.java
index 4ff36f9..b7d29f7 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataReader.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataReader.java
@@ -78,22 +78,6 @@ public abstract class AbstractODataReader implements CommonODataReader {
   }
 
   @Override
-  public CommonODataEntitySet readEntitySet(final InputStream input, final ODataPubFormat format) {
-    return client.getBinder().getODataEntitySet(client.getDeserializer().toFeed(input, format).getObject());
-  }
-
-  @Override
-  public CommonODataEntity readEntity(final InputStream input, final ODataPubFormat format) {
-    return client.getBinder().getODataEntity(client.getDeserializer().toEntry(input, format).getObject());
-  }
-
-  @Override
-  public CommonODataProperty readProperty(final InputStream input, final ODataFormat format) {
-    final Property property = client.getDeserializer().toProperty(input, format).getObject();
-    return client.getBinder().getODataProperty(property);
-  }
-
-  @Override
   public ODataError readError(final InputStream inputStream, final boolean isXML) {
     return client.getDeserializer().toError(inputStream, isXML);
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataBinderImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataBinderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataBinderImpl.java
index 28887dc..50deadd 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataBinderImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataBinderImpl.java
@@ -34,6 +34,7 @@ import org.apache.olingo.commons.api.domain.v3.ODataEntity;
 import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
 import org.apache.olingo.commons.api.domain.v3.ODataProperty;
 import org.apache.olingo.commons.core.domain.v3.ODataPropertyImpl;
+import org.apache.olingo.commons.core.op.ResourceFactory;
 
 public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder {
 
@@ -54,6 +55,27 @@ public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder
   }
 
   @Override
+  public Property getProperty(final CommonODataProperty property, final Class<? extends Entry> reference,
+          final boolean setType) {
+
+    final Property propertyResource = ResourceFactory.newProperty(reference);
+    propertyResource.setName(property.getName());
+    propertyResource.setValue(getValue(property.getValue(), reference, setType));
+
+    if (setType) {
+      if (property.hasPrimitiveValue()) {
+        propertyResource.setType(property.getPrimitiveValue().getTypeName());
+      } else if (property.hasComplexValue()) {
+        propertyResource.setType(((ODataProperty) property).getComplexValue().getTypeName());
+      } else if (property.hasCollectionValue()) {
+        propertyResource.setType(((ODataProperty) property).getCollectionValue().getTypeName());
+      }
+    }
+
+    return propertyResource;
+  }
+
+  @Override
   public ODataEntitySet getODataEntitySet(final Feed resource) {
     return (ODataEntitySet) super.getODataEntitySet(resource);
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataReaderImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataReaderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataReaderImpl.java
index b9cf6de..8663e79 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataReaderImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataReaderImpl.java
@@ -26,7 +26,12 @@ import org.apache.olingo.client.api.op.v3.ODataReader;
 import org.apache.olingo.client.api.v3.ODataClient;
 import org.apache.olingo.client.core.op.AbstractODataReader;
 import org.apache.olingo.commons.api.data.Container;
+import org.apache.olingo.commons.api.data.Property;
 import org.apache.olingo.commons.api.data.v3.LinkCollection;
+import org.apache.olingo.commons.api.domain.v3.ODataEntity;
+import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.v3.ODataProperty;
+import org.apache.olingo.commons.api.format.ODataPubFormat;
 
 public class ODataReaderImpl extends AbstractODataReader implements ODataReader {
 
@@ -37,6 +42,24 @@ public class ODataReaderImpl extends AbstractODataReader implements ODataReader
   }
 
   @Override
+  public ODataEntitySet readEntitySet(final InputStream input, final ODataPubFormat format) {
+    return ((ODataClient) client).getBinder().
+            getODataEntitySet(client.getDeserializer().toFeed(input, format).getObject());
+  }
+
+  @Override
+  public ODataEntity readEntity(final InputStream input, final ODataPubFormat format) {
+    return ((ODataClient) client).getBinder().
+            getODataEntity(client.getDeserializer().toEntry(input, format).getObject());
+  }
+
+  @Override
+  public ODataProperty readProperty(final InputStream input, final ODataFormat format) {
+    final Property property = client.getDeserializer().toProperty(input, format).getObject();
+    return ((ODataClient) client).getBinder().getODataProperty(property);
+  }
+
+  @Override
   public ODataLinkCollection readLinks(final InputStream input, final ODataFormat format) {
     return ((ODataClient) client).getBinder().getLinkCollection(
             ((ODataClient) client).getDeserializer().toLinkCollection(input, format).getObject());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java
index e85b34e..4f4a484 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java
@@ -21,11 +21,10 @@ package org.apache.olingo.client.core.op.impl.v4;
 import java.net.URI;
 import org.apache.olingo.client.api.data.ServiceDocument;
 import org.apache.olingo.client.api.data.ServiceDocumentItem;
-import org.apache.olingo.commons.api.domain.ODataServiceDocument;
 import org.apache.olingo.client.api.op.v4.ODataBinder;
-import org.apache.olingo.client.core.uri.URIUtils;
 import org.apache.olingo.client.api.v4.ODataClient;
 import org.apache.olingo.client.core.op.AbstractODataBinder;
+import org.apache.olingo.client.core.uri.URIUtils;
 import org.apache.olingo.commons.api.data.Entry;
 import org.apache.olingo.commons.api.data.Feed;
 import org.apache.olingo.commons.api.data.Property;
@@ -33,6 +32,7 @@ import org.apache.olingo.commons.api.data.Value;
 import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
 import org.apache.olingo.commons.api.domain.CommonODataProperty;
+import org.apache.olingo.commons.api.domain.ODataServiceDocument;
 import org.apache.olingo.commons.api.domain.ODataValue;
 import org.apache.olingo.commons.api.domain.v4.ODataEntity;
 import org.apache.olingo.commons.api.domain.v4.ODataEntitySet;
@@ -40,6 +40,7 @@ import org.apache.olingo.commons.api.domain.v4.ODataProperty;
 import org.apache.olingo.commons.core.data.EnumValueImpl;
 import org.apache.olingo.commons.core.domain.v4.ODataPropertyImpl;
 import org.apache.olingo.commons.core.edm.EdmTypeInfo;
+import org.apache.olingo.commons.core.op.ResourceFactory;
 
 public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder {
 
@@ -93,10 +94,24 @@ public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder
   public Property getProperty(final CommonODataProperty property, final Class<? extends Entry> reference,
           final boolean setType) {
 
-    final Property propertyResource = super.getProperty(property, reference, setType);
-    if (property instanceof ODataProperty && ((ODataProperty) property).hasEnumValue() && setType) {
-      propertyResource.setType(((ODataProperty) property).getEnumValue().getTypeName());
+    final ODataProperty _property = (ODataProperty) property;
+
+    final Property propertyResource = ResourceFactory.newProperty(reference);
+    propertyResource.setName(_property.getName());
+    propertyResource.setValue(getValue(_property.getValue(), reference, setType));
+
+    if (setType) {
+      if (_property.hasPrimitiveValue()) {
+        propertyResource.setType(_property.getPrimitiveValue().getTypeName());
+      } else if (_property.hasEnumValue()) {
+        propertyResource.setType(_property.getEnumValue().getTypeName());
+      } else if (_property.hasComplexValue()) {
+        propertyResource.setType(_property.getComplexValue().getTypeName());
+      } else if (_property.hasCollectionValue()) {
+        propertyResource.setType(_property.getCollectionValue().getTypeName());
+      }
     }
+
     return propertyResource;
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataReaderImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataReaderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataReaderImpl.java
index 9340963..41f1e3b 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataReaderImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataReaderImpl.java
@@ -18,9 +18,16 @@
  */
 package org.apache.olingo.client.core.op.impl.v4;
 
+import java.io.InputStream;
 import org.apache.olingo.client.api.op.v4.ODataReader;
 import org.apache.olingo.client.api.v4.ODataClient;
 import org.apache.olingo.client.core.op.AbstractODataReader;
+import org.apache.olingo.commons.api.data.Property;
+import org.apache.olingo.commons.api.domain.v4.ODataEntity;
+import org.apache.olingo.commons.api.domain.v4.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.v4.ODataProperty;
+import org.apache.olingo.commons.api.format.ODataFormat;
+import org.apache.olingo.commons.api.format.ODataPubFormat;
 
 public class ODataReaderImpl extends AbstractODataReader implements ODataReader {
 
@@ -29,4 +36,22 @@ public class ODataReaderImpl extends AbstractODataReader implements ODataReader
   public ODataReaderImpl(final ODataClient client) {
     super(client);
   }
+
+  @Override
+  public ODataEntitySet readEntitySet(final InputStream input, final ODataPubFormat format) {
+    return ((ODataClient) client).getBinder().
+            getODataEntitySet(client.getDeserializer().toFeed(input, format).getObject());
+  }
+
+  @Override
+  public ODataEntity readEntity(final InputStream input, final ODataPubFormat format) {
+    return ((ODataClient) client).getBinder().
+            getODataEntity(client.getDeserializer().toEntry(input, format).getObject());
+  }
+
+  @Override
+  public ODataProperty readProperty(final InputStream input, final ODataFormat format) {
+    final Property property = client.getDeserializer().toProperty(input, format).getObject();
+    return ((ODataClient) client).getBinder().getODataProperty(property);
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-core/src/test/java/org/apache/olingo/client/core/it/AbstractMetadataTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/AbstractMetadataTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/AbstractMetadataTestITCase.java
index 11b9104..4f65421 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/AbstractMetadataTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/AbstractMetadataTestITCase.java
@@ -20,9 +20,8 @@ package org.apache.olingo.client.core.it;
 
 import org.apache.olingo.client.api.CommonODataClient;
 
-public abstract class AbstractMetadataTestITCase extends AbstractTestITCase {
+public abstract class AbstractMetadataTestITCase {
 
-  @Override
   protected abstract CommonODataClient getClient();
 
   protected String getTestServiceRoot() {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dc2922c9/lib/client-core/src/test/java/org/apache/olingo/client/core/it/AbstractTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/AbstractTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/AbstractTestITCase.java
deleted file mode 100644
index 0a3b53d..0000000
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/AbstractTestITCase.java
+++ /dev/null
@@ -1,562 +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.it;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
-import java.net.URI;
-import java.util.HashSet;
-import java.util.Locale;
-import java.util.Set;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.olingo.client.api.CommonODataClient;
-import org.apache.olingo.client.api.communication.ODataClientErrorException;
-import org.apache.olingo.client.api.communication.request.cud.ODataDeleteRequest;
-import org.apache.olingo.client.api.communication.request.cud.ODataEntityCreateRequest;
-import org.apache.olingo.client.api.communication.request.cud.ODataEntityUpdateRequest;
-import org.apache.olingo.client.api.communication.request.cud.UpdateType;
-import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
-import org.apache.olingo.client.api.communication.response.ODataDeleteResponse;
-import org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse;
-import org.apache.olingo.client.api.communication.response.ODataEntityUpdateResponse;
-import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
-import org.apache.olingo.commons.api.data.Entry;
-import org.apache.olingo.commons.api.data.Feed;
-import org.apache.olingo.commons.api.domain.ODataCollectionValue;
-import org.apache.olingo.commons.api.domain.ODataComplexValue;
-import org.apache.olingo.commons.api.domain.CommonODataEntity;
-import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
-import org.apache.olingo.commons.api.domain.ODataInlineEntity;
-import org.apache.olingo.commons.api.domain.ODataInlineEntitySet;
-import org.apache.olingo.commons.api.domain.ODataLink;
-import org.apache.olingo.commons.api.domain.CommonODataProperty;
-import org.apache.olingo.commons.api.domain.ODataValue;
-import org.apache.olingo.commons.api.format.ODataPubFormat;
-import org.apache.olingo.client.api.http.HttpMethod;
-import org.apache.olingo.client.api.uri.CommonURIBuilder;
-import org.apache.olingo.client.core.uri.URIUtils;
-import org.apache.olingo.commons.core.data.AtomEntryImpl;
-import org.apache.olingo.commons.core.data.JSONEntryImpl;
-import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
-import org.junit.BeforeClass;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public abstract class AbstractTestITCase {
-
-  /**
-   * Logger.
-   */
-  protected static final Logger LOG = LoggerFactory.getLogger(AbstractTestITCase.class);
-
-  protected static final String TEST_PRODUCT_TYPE = "Microsoft.Test.OData.Services.AstoriaDefaultService.Product";
-
-  protected static final String servicesODataServiceRootURL =
-          "http://services.odata.org/V3/(S(csquyjnoaywmz5xcdbfhlc1p))/OData/OData.svc/";
-
-  /**
-   * This is needed for correct number handling (Double, for example).
-   */
-  @BeforeClass
-  public static void setEnglishLocale() {
-    Locale.setDefault(Locale.ENGLISH);
-  }
-
-  protected abstract CommonODataClient getClient();
-
-  protected void checkLinks(final Collection<ODataLink> original, final Collection<ODataLink> actual) {
-    assertTrue(original.size() <= actual.size());
-
-    for (ODataLink originalLink : original) {
-      ODataLink foundOriginal = null;
-      ODataLink foundActual = null;
-
-      for (ODataLink actualLink : actual) {
-
-        if (actualLink.getType() == originalLink.getType()
-                && (originalLink.getLink() == null
-                || actualLink.getLink().toASCIIString().endsWith(originalLink.getLink().toASCIIString()))
-                && actualLink.getName().equals(originalLink.getName())) {
-
-          foundOriginal = originalLink;
-          foundActual = actualLink;
-        }
-      }
-
-      assertNotNull(foundOriginal);
-      assertNotNull(foundActual);
-
-      if (foundOriginal instanceof ODataInlineEntity && foundActual instanceof ODataInlineEntity) {
-        final CommonODataEntity originalInline = ((ODataInlineEntity) foundOriginal).getEntity();
-        assertNotNull(originalInline);
-
-        final CommonODataEntity actualInline = ((ODataInlineEntity) foundActual).getEntity();
-        assertNotNull(actualInline);
-
-        checkProperties(originalInline.getProperties(), actualInline.getProperties());
-      }
-    }
-  }
-
-  protected void checkProperties(final Collection<? extends CommonODataProperty> original,
-          final Collection<? extends CommonODataProperty> actual) {
-
-    assertTrue(original.size() <= actual.size());
-
-    // re-organize actual properties into a Map<String, ODataProperty>
-    final Map<String, CommonODataProperty> actualProps = new HashMap<String, CommonODataProperty>(actual.size());
-
-    for (CommonODataProperty prop : actual) {
-      assertFalse(actualProps.containsKey(prop.getName()));
-      actualProps.put(prop.getName(), prop);
-    }
-
-    assertTrue(actual.size() <= actualProps.size());
-
-    for (CommonODataProperty prop : original) {
-      assertNotNull(prop);
-      if (actualProps.containsKey(prop.getName())) {
-        final CommonODataProperty actualProp = actualProps.get(prop.getName());
-        assertNotNull(actualProp);
-
-        if (prop.getValue() != null && actualProp.getValue() != null) {
-          checkPropertyValue(prop.getName(), prop.getValue(), actualProp.getValue());
-        }
-      } else {
-        // nothing ... maybe :FC_KeepInContent="false"
-        // ..... no assert can be done ....
-      }
-    }
-  }
-
-  protected void checkPropertyValue(final String propertyName,
-          final ODataValue original, final ODataValue actual) {
-
-    assertNotNull("Null original value for " + propertyName, original);
-    assertNotNull("Null actual value for " + propertyName, actual);
-
-    assertEquals("Type mismatch for '" + propertyName + "': "
-            + original.getClass().getSimpleName() + "-" + actual.getClass().getSimpleName(),
-            original.getClass().getSimpleName(), actual.getClass().getSimpleName());
-
-    if (original.isComplex()) {
-      final List<CommonODataProperty> originalFileds = new ArrayList<CommonODataProperty>();
-      for (CommonODataProperty prop : original.asComplex()) {
-        originalFileds.add(prop);
-      }
-
-      final List<CommonODataProperty> actualFileds = new ArrayList<CommonODataProperty>();
-      for (CommonODataProperty prop : (ODataComplexValue) actual) {
-        actualFileds.add(prop);
-      }
-
-      checkProperties(originalFileds, actualFileds);
-    } else if (original.isCollection()) {
-      assertTrue(original.asCollection().size() <= actual.asCollection().size());
-
-      boolean found = original.asCollection().isEmpty();
-
-      for (ODataValue originalValue : original.asCollection()) {
-        for (ODataValue actualValue : actual.asCollection()) {
-          try {
-            checkPropertyValue(propertyName, originalValue, actualValue);
-            found = true;
-          } catch (AssertionError ignore) {
-            // ignore
-          }
-        }
-      }
-
-      assertTrue("Found " + actual + " but expected " + original, found);
-    } else {
-      assertTrue("Primitive value for '" + propertyName + "' type mismatch: " + original.asPrimitive().
-              getTypeKind() + "-" + actual.asPrimitive().getTypeKind(),
-              original.asPrimitive().getTypeKind().equals(actual.asPrimitive().getTypeKind()));
-
-      assertEquals("Primitive value for '" + propertyName + "' mismatch: " + original.asPrimitive().toString()
-              + "-" + actual.asPrimitive().toString(),
-              original.asPrimitive().toString(), actual.asPrimitive().toString());
-    }
-  }
-
-  protected CommonODataEntity getSampleCustomerInfo(final int id, final String sampleinfo) {
-    final CommonODataEntity entity = getClient().getObjectFactory().newEntity(
-            "Microsoft.Test.OData.Services.AstoriaDefaultService.CustomerInfo");
-    entity.setMediaEntity(true);
-
-    getClient().getBinder().add(entity,
-            getClient().getObjectFactory().newPrimitiveProperty("Information",
-                    getClient().getObjectFactory().newPrimitiveValueBuilder().setText(sampleinfo).
-                    setType(EdmPrimitiveTypeKind.String).build()));
-
-    return entity;
-  }
-
-  protected CommonODataEntity getSampleCustomerProfile(
-          final int id, final String sampleName, final boolean withInlineInfo) {
-
-    final CommonODataEntity entity =
-            getClient().getObjectFactory().newEntity("Microsoft.Test.OData.Services.AstoriaDefaultService.Customer");
-
-    // add name attribute
-    getClient().getBinder().add(entity,
-            getClient().getObjectFactory().newPrimitiveProperty("Name",
-                    getClient().getObjectFactory().newPrimitiveValueBuilder().setText(sampleName).
-                    setType(EdmPrimitiveTypeKind.String).build()));
-
-    // add key attribute
-    getClient().getBinder().add(entity,
-            getClient().getObjectFactory().newPrimitiveProperty("CustomerId",
-                    getClient().getObjectFactory().newPrimitiveValueBuilder().setText(String.valueOf(id)).
-                    setType(EdmPrimitiveTypeKind.Int32).build()));
-
-    // add BackupContactInfo attribute (collection)
-    final ODataCollectionValue backupContactInfoValue = getClient().getObjectFactory().newCollectionValue(
-            "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails)");
-    getClient().getBinder().add(entity,
-            getClient().getObjectFactory().newCollectionProperty("BackupContactInfo", backupContactInfoValue));
-
-    // add BackupContactInfo.ContactDetails attribute (complex)
-    final ODataComplexValue contactDetails = getClient().getObjectFactory().newComplexValue(
-            "Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails");
-    backupContactInfoValue.add(contactDetails);
-
-    // add BackupContactInfo.ContactDetails.AlternativeNames attribute (collection)
-    final ODataCollectionValue altNamesValue = getClient().getObjectFactory().
-            newCollectionValue("Collection(Edm.String)");
-    altNamesValue.add(getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setText("myname").setType(EdmPrimitiveTypeKind.String).build());
-    contactDetails.add(getClient().getObjectFactory().newCollectionProperty("AlternativeNames", altNamesValue));
-
-    // add BackupContactInfo.ContactDetails.EmailBag attribute (collection)
-    final ODataCollectionValue emailBagValue = getClient().getObjectFactory().
-            newCollectionValue("Collection(Edm.String)");
-    emailBagValue.add(getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setText("myname@mydomain.com").setType(EdmPrimitiveTypeKind.String).build());
-    contactDetails.add(getClient().getObjectFactory().newCollectionProperty("EmailBag", emailBagValue));
-
-    // add BackupContactInfo.ContactDetails.ContactAlias attribute (complex)
-    final ODataComplexValue contactAliasValue = getClient().getObjectFactory().newComplexValue(
-            "Microsoft.Test.OData.Services.AstoriaDefaultService.Aliases");
-    contactDetails.add(getClient().getObjectFactory().newComplexProperty("ContactAlias", contactAliasValue));
-
-    // add BackupContactInfo.ContactDetails.ContactAlias.AlternativeNames attribute (collection)
-    final ODataCollectionValue aliasAltNamesValue = getClient().getObjectFactory().
-            newCollectionValue("Collection(Edm.String)");
-    aliasAltNamesValue.add(getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setText("myAlternativeName").setType(EdmPrimitiveTypeKind.String).build());
-    contactAliasValue.add(getClient().getObjectFactory().newCollectionProperty("AlternativeNames", aliasAltNamesValue));
-
-    if (withInlineInfo) {
-      final ODataInlineEntity inlineInfo = getClient().getObjectFactory().newInlineEntity(
-              "Info",
-              URI.create("Customer(" + id + ")/Info"),
-              getSampleCustomerInfo(id, sampleName + "_Info"));
-      inlineInfo.getEntity().setMediaEntity(true);
-      entity.addLink(inlineInfo);
-    }
-
-    return entity;
-  }
-
-  protected void debugEntry(final Entry entry, final String message) {
-    if (LOG.isDebugEnabled()) {
-      final StringWriter writer = new StringWriter();
-      getClient().getSerializer().entry(entry, writer);
-      writer.flush();
-      LOG.debug(message + "\n{}", writer.toString());
-    }
-  }
-
-  protected void debugFeed(final Feed feed, final String message) {
-    if (LOG.isDebugEnabled()) {
-      final StringWriter writer = new StringWriter();
-      getClient().getSerializer().feed(feed, writer);
-      writer.flush();
-      LOG.debug(message + "\n{}", writer.toString());
-    }
-  }
-
-  protected void debugODataProperty(final CommonODataProperty property, final String message) {
-    LOG.debug(message + "\n{}", property.toString());
-  }
-
-  protected void debugODataValue(final ODataValue value, final String message) {
-    LOG.debug(message + "\n{}", value.toString());
-  }
-
-  protected void debugODataEntity(final CommonODataEntity entity, final String message) {
-    if (LOG.isDebugEnabled()) {
-      StringWriter writer = new StringWriter();
-      getClient().getSerializer().entry(getClient().getBinder().getEntry(entity, AtomEntryImpl.class), writer);
-      writer.flush();
-      LOG.debug(message + " (Atom)\n{}", writer.toString());
-
-      writer = new StringWriter();
-      getClient().getSerializer().entry(getClient().getBinder().getEntry(entity, JSONEntryImpl.class), writer);
-      writer.flush();
-      LOG.debug(message + " (JSON)\n{}", writer.toString());
-    }
-  }
-
-  protected void debugInputStream(final InputStream input, final String message) {
-    if (LOG.isDebugEnabled()) {
-      try {
-        LOG.debug(message + "\n{}", IOUtils.toString(input));
-      } catch (IOException e) {
-        LOG.error("Error writing stream", e);
-      } finally {
-        IOUtils.closeQuietly(input);
-      }
-    }
-  }
-
-  protected String getETag(final URI uri) {
-    final ODataRetrieveResponse<CommonODataEntity> res = getClient().getRetrieveRequestFactory().
-            getEntityRequest(uri).execute();
-    try {
-      return res.getEtag();
-    } finally {
-      res.close();
-    }
-  }
-
-  protected CommonODataEntity read(final ODataPubFormat format, final URI editLink) {
-    final ODataEntityRequest<CommonODataEntity> req = getClient().getRetrieveRequestFactory().
-            getEntityRequest(editLink);
-    req.setFormat(format);
-
-    final ODataRetrieveResponse<CommonODataEntity> res = req.execute();
-    final CommonODataEntity entity = res.getBody();
-
-    assertNotNull(entity);
-
-    if (ODataPubFormat.JSON_FULL_METADATA == format || ODataPubFormat.ATOM == format) {
-      assertEquals(req.getURI(), entity.getEditLink());
-    }
-
-    return entity;
-  }
-
-  protected CommonODataEntity createEntity(
-          final String serviceRootURL,
-          final ODataPubFormat format,
-          final CommonODataEntity original,
-          final String entitySetName) {
-
-    final CommonURIBuilder<?> uriBuilder = getClient().getURIBuilder(serviceRootURL).
-            appendEntitySetSegment(entitySetName);
-
-    debugODataEntity(original, "About to create");
-
-    final ODataEntityCreateRequest createReq =
-            getClient().getCUDRequestFactory().getEntityCreateRequest(uriBuilder.build(), original);
-    createReq.setFormat(format);
-
-    final ODataEntityCreateResponse createRes = createReq.execute();
-    assertEquals(201, createRes.getStatusCode());
-    assertEquals("Created", createRes.getStatusMessage());
-
-    final CommonODataEntity created = createRes.getBody();
-    assertNotNull(created);
-
-    debugODataEntity(created, "Just created");
-
-    return created;
-  }
-
-  protected CommonODataEntity compareEntities(final String serviceRootURL,
-          final ODataPubFormat format,
-          final CommonODataEntity original,
-          final int actualObjectId,
-          final Collection<String> expands) {
-
-    final CommonURIBuilder<?> uriBuilder = getClient().getURIBuilder(serviceRootURL).
-            appendEntitySetSegment("Customer").appendKeySegment(actualObjectId);
-
-    // search expanded
-    if (expands != null) {
-      for (String expand : expands) {
-        uriBuilder.expand(expand);
-      }
-    }
-
-    final ODataEntityRequest<CommonODataEntity> req = getClient().getRetrieveRequestFactory().
-            getEntityRequest(uriBuilder.build());
-    req.setFormat(format);
-
-    final ODataRetrieveResponse<CommonODataEntity> res = req.execute();
-    assertEquals(200, res.getStatusCode());
-
-    final CommonODataEntity actual = res.getBody();
-    assertNotNull(actual);
-
-    // check defined links
-    checkLinks(original.getAssociationLinks(), actual.getAssociationLinks());
-    checkLinks(original.getEditMediaLinks(), actual.getEditMediaLinks());
-    checkLinks(original.getNavigationLinks(), actual.getNavigationLinks());
-
-    // check defined properties equality
-    checkProperties(original.getProperties(), actual.getProperties());
-
-    return actual;
-  }
-
-  protected void cleanAfterCreate(
-          final ODataPubFormat format,
-          final CommonODataEntity created,
-          final boolean includeInline,
-          final String baseUri) {
-
-    final Set<URI> toBeDeleted = new HashSet<URI>();
-    toBeDeleted.add(created.getEditLink());
-
-    if (includeInline) {
-      for (ODataLink link : created.getNavigationLinks()) {
-        if (link instanceof ODataInlineEntity) {
-          final CommonODataEntity inline = ((ODataInlineEntity) link).getEntity();
-          if (inline.getEditLink() != null) {
-            toBeDeleted.add(URIUtils.getURI(baseUri, inline.getEditLink().toASCIIString()));
-          }
-        }
-
-        if (link instanceof ODataInlineEntitySet) {
-          final CommonODataEntitySet inline = ((ODataInlineEntitySet) link).getEntitySet();
-          for (CommonODataEntity entity : inline.getEntities()) {
-            if (entity.getEditLink() != null) {
-              toBeDeleted.add(URIUtils.getURI(baseUri, entity.getEditLink().toASCIIString()));
-            }
-          }
-        }
-      }
-    }
-
-    assertFalse(toBeDeleted.isEmpty());
-
-    for (URI link : toBeDeleted) {
-      final ODataDeleteRequest deleteReq = getClient().getCUDRequestFactory().getDeleteRequest(link);
-      final ODataDeleteResponse deleteRes = deleteReq.execute();
-
-      assertEquals(204, deleteRes.getStatusCode());
-      assertEquals("No Content", deleteRes.getStatusMessage());
-
-      deleteRes.close();
-
-      final ODataEntityRequest<CommonODataEntity> retrieveReq = getClient().getRetrieveRequestFactory().
-              getEntityRequest(link);
-      // bug that needs to be fixed on the SampleService - cannot get entity not found with header
-      // Accept: application/json;odata=minimalmetadata
-      retrieveReq.setFormat(format == ODataPubFormat.JSON_FULL_METADATA ? ODataPubFormat.JSON : format);
-
-      Exception exception = null;
-      try {
-        retrieveReq.execute();
-        fail();
-      } catch (ODataClientErrorException e) {
-        exception = e;
-        assertEquals(404, e.getStatusLine().getStatusCode());
-      }
-      assertNotNull(exception);
-    }
-  }
-
-  protected void updateEntityDescription(
-          final ODataPubFormat format, final CommonODataEntity changes, final UpdateType type) {
-
-    updateEntityDescription(format, changes, type, null);
-  }
-
-  protected void updateEntityDescription(
-          final ODataPubFormat format, final CommonODataEntity changes, final UpdateType type, final String etag) {
-
-    updateEntityStringProperty("Description", format, changes, type, etag);
-  }
-
-  protected void updateEntityStringProperty(final String propertyName,
-          final ODataPubFormat format, final CommonODataEntity changes, final UpdateType type, final String etag) {
-
-    final URI editLink = changes.getEditLink();
-
-    final String newm = "New " + propertyName + "(" + System.currentTimeMillis() + ")";
-
-    CommonODataProperty propertyValue = changes.getProperty(propertyName);
-
-    final String oldm;
-    if (propertyValue == null) {
-      oldm = null;
-    } else {
-      oldm = propertyValue.getValue().toString();
-      changes.getProperties().remove(propertyValue);
-    }
-
-    assertNotEquals(newm, oldm);
-
-    getClient().getBinder().add(changes,
-            getClient().getObjectFactory().newPrimitiveProperty(propertyName,
-                    getClient().getObjectFactory().newPrimitiveValueBuilder().setText(newm).build()));
-
-    update(type, changes, format, etag);
-
-    final CommonODataEntity actual = read(format, editLink);
-
-    propertyValue = null;
-
-    for (CommonODataProperty prop : actual.getProperties()) {
-      if (prop.getName().equals(propertyName)) {
-        propertyValue = prop;
-      }
-    }
-
-    assertNotNull(propertyValue);
-    assertEquals(newm, propertyValue.getValue().toString());
-  }
-
-  protected void update(
-          final UpdateType type, final CommonODataEntity changes, final ODataPubFormat format, final String etag) {
-    final ODataEntityUpdateRequest req = getClient().getCUDRequestFactory().getEntityUpdateRequest(type, changes);
-
-    if (getClient().getConfiguration().isUseXHTTPMethod()) {
-      assertEquals(HttpMethod.POST, req.getMethod());
-    } else {
-      assertEquals(type.getMethod(), req.getMethod());
-    }
-    req.setFormat(format);
-
-    if (StringUtils.isNotBlank(etag)) {
-      req.setIfMatch(etag); // Product include ETag header into the response .....
-    }
-
-    final ODataEntityUpdateResponse res = req.execute();
-    assertEquals(204, res.getStatusCode());
-  }
-}