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

[1/2] git commit: Small domain object enhancement

Repository: olingo-odata4
Updated Branches:
  refs/heads/master 7104c65f8 -> 9f96234e6


Small domain object enhancement


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

Branch: refs/heads/master
Commit: 0612eab441bf4e14de77b1437ee4a1ac7b2ff304
Parents: 7104c65
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Apr 9 15:56:22 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Apr 9 15:56:22 2014 +0200

----------------------------------------------------------------------
 .../invoke/AbstractODataInvokeRequest.java      |  3 +-
 .../client/core/op/AbstractODataBinder.java     | 14 +++--
 .../client/core/it/v3/AbstractTestITCase.java   | 26 ++++----
 .../core/it/v3/EntityCreateTestITCase.java      | 26 ++++----
 .../core/it/v3/EntityRetrieveTestITCase.java    |  2 +-
 .../core/it/v3/EntityUpdateTestITCase.java      | 12 ++--
 .../client/core/it/v3/ErrorTestITCase.java      |  3 +-
 .../client/core/it/v3/InvokeTestITCase.java     |  8 +--
 .../client/core/it/v3/OpenTypeTestITCase.java   |  3 +-
 .../it/v4/BoundOperationInvokeTestITCase.java   | 41 ++++++++-----
 .../core/it/v4/EntityCreateTestITCase.java      |  4 +-
 .../core/it/v4/EntityRetrieveTestITCase.java    |  2 +-
 .../it/v4/OperationImportInvokeTestITCase.java  |  2 +-
 .../olingo/client/core/v3/EntityTest.java       |  2 +-
 .../olingo/client/core/v4/EntityTest.java       |  2 +-
 .../commons/api/domain/CommonODataEntity.java   |  9 ++-
 .../api/domain/CommonODataObjectFactory.java    |  9 +--
 .../api/domain/v3/ODataObjectFactory.java       |  5 +-
 .../api/domain/v4/ODataObjectFactory.java       |  5 +-
 .../commons/api/edm/EdmOperationImport.java     |  5 ++
 .../commons/api/edm/FullQualifiedName.java      | 14 ++---
 .../commons/core/data/AtomDeserializer.java     |  1 +
 .../core/data/JSONEntryDeserializer.java        |  1 +
 .../core/domain/AbstractODataEntity.java        | 13 +++-
 .../commons/core/domain/v3/ODataEntityImpl.java |  5 +-
 .../core/domain/v3/ODataObjectFactoryImpl.java  |  9 +--
 .../commons/core/domain/v4/ODataEntityImpl.java |  5 +-
 .../core/domain/v4/ODataObjectFactoryImpl.java  |  9 +--
 .../core/edm/AbstractEdmOperationImport.java    | 64 +++++++++++---------
 29 files changed, 179 insertions(+), 125 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java
index 7018baf..92e2e6e 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractODataInvokeRequest.java
@@ -24,7 +24,6 @@ import java.net.URI;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpPost;
@@ -115,7 +114,7 @@ public abstract class AbstractODataInvokeRequest<T extends ODataInvokeResult>
   protected InputStream getPayload() {
     if (!this.parameters.isEmpty() && this.method == HttpMethod.POST) {
       // Additional, non-binding parameters MUST be sent as JSON
-      final CommonODataEntity tmp = odataClient.getObjectFactory().newEntity(StringUtils.EMPTY);
+      final CommonODataEntity tmp = odataClient.getObjectFactory().newEntity(null);
       for (Map.Entry<String, ODataValue> param : parameters.entrySet()) {
         CommonODataProperty property = null;
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/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 d927136..b1524d5 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
@@ -49,6 +49,7 @@ import org.apache.olingo.commons.api.domain.ODataLinked;
 import org.apache.olingo.commons.api.domain.ODataServiceDocument;
 import org.apache.olingo.commons.api.domain.ODataValue;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.geo.Geospatial;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.apache.olingo.commons.core.data.CollectionValueImpl;
@@ -138,7 +139,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
   public Entry getEntry(final CommonODataEntity entity, final Class<? extends Entry> reference) {
     final Entry entry = ResourceFactory.newEntry(reference);
 
-    entry.setType(entity.getName());
+    entry.setType(entity.getTypeName() == null ? null : entity.getTypeName().toString());
 
     // -------------------------------------------------------------
     // Add edit and self link
@@ -146,7 +147,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
     final URI editLink = entity.getEditLink();
     if (editLink != null) {
       final LinkImpl entryEditLink = new LinkImpl();
-      entryEditLink.setTitle(entity.getName());
+      entryEditLink.setTitle(entry.getType());
       entryEditLink.setHref(editLink.toASCIIString());
       entryEditLink.setRel(Constants.EDIT_LINK_REL);
       entry.setEditLink(entryEditLink);
@@ -154,7 +155,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
 
     if (entity.isReadOnly()) {
       final LinkImpl entrySelfLink = new LinkImpl();
-      entrySelfLink.setTitle(entity.getName());
+      entrySelfLink.setTitle(entry.getType());
       entrySelfLink.setHref(entity.getLink().toASCIIString());
       entrySelfLink.setRel(Constants.SELF_LINK_REL);
       entry.setSelfLink(entrySelfLink);
@@ -319,9 +320,12 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
 
     final URI base = defaultBaseURI == null ? resource.getBaseURI() : defaultBaseURI;
 
+    final FullQualifiedName entityTypeName = resource.getType() == null
+            ? null
+            : new FullQualifiedName(resource.getType());
     final CommonODataEntity entity = resource.getSelfLink() == null
-            ? client.getObjectFactory().newEntity(resource.getType())
-            : client.getObjectFactory().newEntity(resource.getType(),
+            ? client.getObjectFactory().newEntity(entityTypeName)
+            : client.getObjectFactory().newEntity(entityTypeName,
                     URIUtils.getURI(base, resource.getSelfLink().getHref()));
 
     if (StringUtils.isNotBlank(resource.getETag())) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
index 0ca15c1..0ee9576 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
@@ -18,6 +18,13 @@
  */
 package org.apache.olingo.client.core.it.v3;
 
+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.io.IOException;
 import java.io.InputStream;
 import java.io.StringWriter;
@@ -59,16 +66,10 @@ import org.apache.olingo.commons.api.domain.ODataLink;
 import org.apache.olingo.commons.api.domain.ODataValue;
 import org.apache.olingo.commons.api.domain.v3.ODataEntity;
 import org.apache.olingo.commons.api.domain.v3.ODataProperty;
-import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.apache.olingo.commons.core.data.AtomEntryImpl;
 import org.apache.olingo.commons.core.data.JSONEntryImpl;
-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 org.junit.BeforeClass;
 import org.slf4j.Logger;
@@ -81,7 +82,8 @@ public abstract class AbstractTestITCase {
    */
   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 FullQualifiedName TEST_PRODUCT_TYPE =
+          new FullQualifiedName("Microsoft.Test.OData.Services.AstoriaDefaultService.Product");
 
   protected static ODataClient client;
 
@@ -232,8 +234,8 @@ public abstract class AbstractTestITCase {
   }
 
   protected ODataEntity getSampleCustomerInfo(final int id, final String sampleinfo) {
-    final ODataEntity entity = getClient().getObjectFactory().newEntity(
-            "Microsoft.Test.OData.Services.AstoriaDefaultService.CustomerInfo");
+    final ODataEntity entity = getClient().getObjectFactory().newEntity(new FullQualifiedName(
+            "Microsoft.Test.OData.Services.AstoriaDefaultService.CustomerInfo"));
     entity.setMediaEntity(true);
 
     getClient().getBinder().add(entity,
@@ -246,8 +248,8 @@ public abstract class AbstractTestITCase {
   protected ODataEntity getSampleCustomerProfile(
           final int id, final String sampleName, final boolean withInlineInfo) {
 
-    final ODataEntity entity =
-            getClient().getObjectFactory().newEntity("Microsoft.Test.OData.Services.AstoriaDefaultService.Customer");
+    final ODataEntity entity = getClient().getObjectFactory().
+            newEntity(new FullQualifiedName("Microsoft.Test.OData.Services.AstoriaDefaultService.Customer"));
 
     // add name attribute
     getClient().getBinder().add(entity,

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java
index ef1ac85..93fbd5a 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java
@@ -18,6 +18,11 @@
  */
 package org.apache.olingo.client.core.it.v3;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import java.net.URI;
 import java.util.Collections;
 import java.util.HashSet;
@@ -43,11 +48,8 @@ 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.edm.EdmPrimitiveTypeException;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
 
 import org.junit.Ignore;
 import org.junit.Test;
@@ -286,8 +288,8 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     keys.add(-101);
 
     for (Integer key : keys) {
-      final ODataEntity order =
-              client.getObjectFactory().newEntity("Microsoft.Test.OData.Services.AstoriaDefaultService.Order");
+      final ODataEntity order = client.getObjectFactory().
+              newEntity(new FullQualifiedName("Microsoft.Test.OData.Services.AstoriaDefaultService.Order"));
 
       getClient().getBinder().add(order,
               client.getObjectFactory().newPrimitiveProperty("OrderId",
@@ -385,8 +387,8 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     ODataEntity customer = (ODataEntity) getSampleCustomerProfile(id, sampleName, false);
     customer = (ODataEntity) createEntity(getServiceRoot(), format, customer, "Customer");
 
-    ODataEntity order = client.getObjectFactory().newEntity(
-            "Microsoft.Test.OData.Services.AstoriaDefaultService.Order");
+    ODataEntity order = client.getObjectFactory().newEntity(new FullQualifiedName(
+            "Microsoft.Test.OData.Services.AstoriaDefaultService.Order"));
     getClient().getBinder().add(order,
             client.getObjectFactory().newPrimitiveProperty("CustomerId",
                     client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(id)));
@@ -399,8 +401,8 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
 
     order = (ODataEntity) createEntity(getServiceRoot(), format, order, "Order");
 
-    ODataEntity changes = client.getObjectFactory().newEntity(
-            "Microsoft.Test.OData.Services.AstoriaDefaultService.Customer");
+    ODataEntity changes = client.getObjectFactory().newEntity(new FullQualifiedName(
+            "Microsoft.Test.OData.Services.AstoriaDefaultService.Customer"));
     changes.setEditLink(customer.getEditLink());
     changes.addLink(client.getObjectFactory().newEntitySetNavigationLink(
             "Orders", URIUtils.getURI(getServiceRoot(), order.getEditLink().toASCIIString())));
@@ -444,8 +446,8 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   }
 
   private void multiKey(final ODataPubFormat format) {
-    final ODataEntity message = client.getObjectFactory().newEntity(
-            "Microsoft.Test.OData.Services.AstoriaDefaultService.Message");
+    final ODataEntity message = client.getObjectFactory().newEntity(new FullQualifiedName(
+            "Microsoft.Test.OData.Services.AstoriaDefaultService.Message"));
 
     getClient().getBinder().add(message,
             client.getObjectFactory().newPrimitiveProperty("MessageId",

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
index 1b43c47..7c3bb1d 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
@@ -63,7 +63,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
     final ODataEntity entity = res.getBody();
 
     assertNotNull(entity);
-    assertEquals("Microsoft.Test.OData.Services.AstoriaDefaultService.Customer", entity.getName());
+    assertEquals("Microsoft.Test.OData.Services.AstoriaDefaultService.Customer", entity.getTypeName().toString());
     assertEquals(getServiceRoot() + "/Customer(-10)", entity.getEditLink().toASCIIString());
 
     assertEquals(5, entity.getNavigationLinks().size());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityUpdateTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityUpdateTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityUpdateTestITCase.java
index 2ad2816..9b47c5f 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityUpdateTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityUpdateTestITCase.java
@@ -18,6 +18,10 @@
  */
 package org.apache.olingo.client.core.it.v3;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
 import java.net.URI;
 import java.util.LinkedHashMap;
 import org.apache.olingo.client.api.communication.ODataClientErrorException;
@@ -29,10 +33,8 @@ import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRe
 import org.apache.olingo.client.api.communication.response.ODataEntityUpdateResponse;
 import org.apache.olingo.commons.api.domain.v3.ODataEntity;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
 
 import org.junit.Test;
 
@@ -119,8 +121,8 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
     final URI uri = client.getURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Customer").appendKeySegment(-10).build();
 
-    final ODataEntity patch =
-            client.getObjectFactory().newEntity("Microsoft.Test.OData.Services.AstoriaDefaultService.Customer");
+    final ODataEntity patch = client.getObjectFactory().
+            newEntity(new FullQualifiedName("Microsoft.Test.OData.Services.AstoriaDefaultService.Customer"));
     patch.setEditLink(uri);
 
     // ---------------------------------------

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ErrorTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ErrorTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ErrorTestITCase.java
index 17e6c1d..ced5338 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ErrorTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ErrorTestITCase.java
@@ -46,6 +46,7 @@ import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.api.edm.EdmFunctionImport;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.junit.Test;
 
@@ -85,7 +86,7 @@ public class ErrorTestITCase extends AbstractTestITCase {
 
       @Override
       public CommonODataEntity getBody() {
-        return odataClient.getObjectFactory().newEntity("Invalid");
+        return odataClient.getObjectFactory().newEntity(new FullQualifiedName("Invalid.Invalid"));
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/InvokeTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/InvokeTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/InvokeTestITCase.java
index 70daa25..e3daf11 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/InvokeTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/InvokeTestITCase.java
@@ -185,8 +185,8 @@ public class InvokeTestITCase extends AbstractTestITCase {
   }
 
   private ODataEntity createEmployee(final ODataPubFormat format) {
-    final ODataEntity employee = getClient().getObjectFactory().newEntity(
-            "Microsoft.Test.OData.Services.AstoriaDefaultService.Employee");
+    final ODataEntity employee = getClient().getObjectFactory().newEntity(new FullQualifiedName(
+            "Microsoft.Test.OData.Services.AstoriaDefaultService.Employee"));
 
     employee.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("PersonId",
             getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(1244)));
@@ -238,11 +238,9 @@ public class InvokeTestITCase extends AbstractTestITCase {
     assertNotNull(edm);
 
     final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer();
-    final EdmTypeInfo createdTypeInfo =
-            new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(created.getName()).build();
     final EdmAction action = edm.getBoundAction(
             new FullQualifiedName(container.getNamespace(), operation.getTitle()),
-            createdTypeInfo.getFullQualifiedName(), createdTypeInfo.isCollection());
+            created.getTypeName(), false);
 
     final ODataInvokeRequest<ODataNoContent> req = getClient().getInvokeRequestFactory().
             getInvokeRequest(operation.getTarget(), action);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/OpenTypeTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/OpenTypeTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/OpenTypeTestITCase.java
index d5e24ef..51f4238 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/OpenTypeTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/OpenTypeTestITCase.java
@@ -94,7 +94,8 @@ public class OpenTypeTestITCase extends AbstractTestITCase {
   private void cud(final ODataPubFormat format) {
     final UUID guid = UUID.randomUUID();
 
-    ODataEntity row = client.getObjectFactory().newEntity("Microsoft.Test.OData.Services.OpenTypesService.Row");
+    ODataEntity row = client.getObjectFactory().newEntity(
+            new FullQualifiedName("Microsoft.Test.OData.Services.OpenTypesService.Row"));
     getClient().getBinder().add(row,
             client.getObjectFactory().newPrimitiveProperty("Id",
                     client.getObjectFactory().newPrimitiveValueBuilder().

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BoundOperationInvokeTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BoundOperationInvokeTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BoundOperationInvokeTestITCase.java
index b381da8..d46ee3e 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BoundOperationInvokeTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BoundOperationInvokeTestITCase.java
@@ -18,8 +18,8 @@
  */
 package org.apache.olingo.client.core.it.v4;
 
-import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
@@ -102,7 +102,8 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     assertNotNull(boundOp);
 
     EdmFunction func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false, null);
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
+            false, null);
     assertNotNull(func);
 
     final ODataInvokeRequest<ODataProperty> getEmployeesCountReq =
@@ -124,7 +125,8 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     assertNotNull(boundOp);
 
     func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false, null);
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
+            false, null);
     assertNotNull(func);
 
     final ODataPrimitiveValue count = getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(1);
@@ -152,8 +154,8 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     assertNotNull(boundOp);
 
     func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false,
-            null);
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
+            false, null);
     assertNotNull(func);
 
     final ODataInvokeRequest<ODataEntity> getRelatedProductReq =
@@ -163,7 +165,8 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     try {
       final ODataEntity getRelatedProductRes = getRelatedProductReq.execute().getBody();
       assertNotNull(getRelatedProductRes);
-      assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.Product", getRelatedProductRes.getName());
+      assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.Product",
+              getRelatedProductRes.getTypeName().toString());
       assertEquals(6, getRelatedProductRes.getProperty("ProductID").getPrimitiveValue().toCastValue(Integer.class), 0);
     } catch (Exception e) {
       // ignore
@@ -181,7 +184,8 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     assertNotNull(boundOp);
 
     func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false, null);
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
+            false, null);
     assertNotNull(func);
 
     final ODataInvokeRequest<ODataEntity> getDefaultPIReq =
@@ -189,7 +193,8 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     getDefaultPIReq.setFormat(format);
     final ODataEntity getDefaultPIRes = getDefaultPIReq.execute().getBody();
     assertNotNull(getDefaultPIRes);
-    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument", getDefaultPIRes.getName());
+    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument",
+            getDefaultPIRes.getTypeName().toString());
     assertEquals(101901,
             getDefaultPIRes.getProperty("PaymentInstrumentID").getPrimitiveValue().toCastValue(Integer.class), 0);
 
@@ -198,7 +203,8 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     assertNotNull(boundOp);
 
     func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false, null);
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
+            false, null);
     assertNotNull(func);
 
     final ODataInvokeRequest<ODataProperty> getAccountInfoReq =
@@ -223,7 +229,8 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     assertNotNull(boundOp);
 
     func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false, null);
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
+            false, null);
     assertNotNull(func);
 
     final ODataPrimitiveValue bonusRate = getClient().getObjectFactory().newPrimitiveValueBuilder().buildDouble(1.1);
@@ -264,7 +271,8 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     assertNotNull(boundOp);
 
     EdmAction act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false);
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
+            false);
     assertNotNull(act);
 
     final ODataPrimitiveValue increaseValue = getClient().getObjectFactory().newPrimitiveValueBuilder().
@@ -289,7 +297,8 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     assertNotNull(boundOp);
 
     act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false);
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
+            false);
     assertNotNull(act);
 
     final ODataEnumValue accessRight = getClient().getObjectFactory().
@@ -314,7 +323,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     assertNotNull(boundOp);
 
     act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()),
-            edm.getEntityType(new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().
+            edm.getEntityType(new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().
                     getFullQualifiedName()).getBaseType().getFullQualifiedName(), false);
     assertNotNull(act);
 
@@ -353,7 +362,8 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     assertNotNull(boundOp);
 
     act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false);
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
+            false);
     assertNotNull(act);
 
     final ODataPrimitiveValue newDate = getClient().getObjectFactory().newPrimitiveValueBuilder().
@@ -364,7 +374,8 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     getDefaultPIReq.setFormat(format);
     final ODataEntity getDefaultPIRes = getDefaultPIReq.execute().getBody();
     assertNotNull(getDefaultPIRes);
-    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument", getDefaultPIRes.getName());
+    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument",
+            getDefaultPIRes.getTypeName().toString());
     assertEquals(101901,
             getDefaultPIRes.getProperty("PaymentInstrumentID").getPrimitiveValue().toCastValue(Integer.class), 0);
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
index 9098d49..3de27e8 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
@@ -27,6 +27,7 @@ import org.apache.olingo.commons.api.domain.v4.ODataEntity;
 import org.apache.olingo.commons.api.domain.v4.ODataProperty;
 import org.apache.olingo.commons.api.domain.v4.ODataValue;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.apache.olingo.commons.core.domain.v4.ODataEntityImpl;
 import org.junit.Test;
@@ -34,7 +35,8 @@ import org.junit.Test;
 public class EntityCreateTestITCase extends AbstractTestITCase {
 
   private void createOrder(final ODataPubFormat format, final int id) {
-    final ODataEntity order = new ODataEntityImpl("Microsoft.Test.OData.Services.ODataWCFService.Order");
+    final ODataEntity order = new ODataEntityImpl(
+            new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Order"));
 
     final ODataProperty orderId = getClient().getObjectFactory().newPrimitiveProperty("OrderID",
             getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(id));

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityRetrieveTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityRetrieveTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityRetrieveTestITCase.java
index 94e316f..d55313f 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityRetrieveTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityRetrieveTestITCase.java
@@ -67,7 +67,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
     final CommonODataEntity entity = res.getBody();
 
     assertNotNull(entity);
-    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.Customer", entity.getName());
+    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.Customer", entity.getTypeName().toString());
     assertEquals(getServiceRoot() + "/Customers(PersonID=1)", entity.getEditLink().toASCIIString());
 
     assertEquals(3, entity.getNavigationLinks().size());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java
index 9bd2c35..d65e7f9 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java
@@ -113,7 +113,7 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
     person2Req.setFormat(format);
     final ODataEntity person2 = person2Req.execute().getBody();
     assertNotNull(person2);
-    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.Customer", person2.getName());
+    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.Customer", person2.getTypeName().toString());
     assertEquals(1, person2.getProperty("PersonID").getPrimitiveValue().toCastValue(Integer.class), 0);
 
     // GetPerson

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntityTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntityTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntityTest.java
index 99b9423..631a45d 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntityTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/EntityTest.java
@@ -49,7 +49,7 @@ public class EntityTest extends AbstractTest {
             getClient().getDeserializer().toEntry(input, format).getObject());
     assertNotNull(entity);
 
-    assertEquals("Microsoft.Test.OData.Services.AstoriaDefaultService.Customer", entity.getName());
+    assertEquals("Microsoft.Test.OData.Services.AstoriaDefaultService.Customer", entity.getTypeName().toString());
     assertTrue(entity.getEditLink().toASCIIString().endsWith("/Customer(-10)"));
     assertEquals(5, entity.getNavigationLinks().size());
     assertEquals(2, entity.getEditMediaLinks().size());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
index 8717c3c..3db8436 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
@@ -53,7 +53,7 @@ public class EntityTest extends AbstractTest {
             getClient().getDeserializer().toEntry(input, format).getObject());
     assertNotNull(entity);
 
-    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.Customer", entity.getName());
+    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.Customer", entity.getTypeName().toString());
 
     final ODataProperty birthday = entity.getProperty("Birthday");
     assertTrue(birthday.hasPrimitiveValue());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataEntity.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataEntity.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataEntity.java
index 7827c68..bfae953 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataEntity.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataEntity.java
@@ -20,14 +20,21 @@ package org.apache.olingo.commons.api.domain;
 
 import java.net.URI;
 import java.util.List;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 
 /**
  * OData entity.
  */
 public interface CommonODataEntity extends ODataLinked, ODataInvokeResult {
 
-  String getName();
+  /**
+   * @return the type name of this entity.
+   */
+  FullQualifiedName getTypeName();
 
+  /**
+   * @return self link.
+   */
   URI getLink();
 
   /**

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataObjectFactory.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataObjectFactory.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataObjectFactory.java
index 434906e..b3945bf 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataObjectFactory.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataObjectFactory.java
@@ -19,6 +19,7 @@
 package org.apache.olingo.commons.api.domain;
 
 import java.net.URI;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 
 /**
  * Entry point for generating OData domain objects.
@@ -43,19 +44,19 @@ public interface CommonODataObjectFactory {
   /**
    * Instantiates a new entity.
    *
-   * @param name OData entity name.
+   * @param typeName OData entity type name.
    * @return entity.
    */
-  CommonODataEntity newEntity(String name);
+  CommonODataEntity newEntity(FullQualifiedName typeName);
 
   /**
    * Instantiates a new entity.
    *
-   * @param name OData entity name.
+   * @param typeName OData entity type name.
    * @param link self link.
    * @return entity.
    */
-  CommonODataEntity newEntity(String name, URI link);
+  CommonODataEntity newEntity(FullQualifiedName typeName, URI link);
 
   /**
    * Instantiates a new in-line entity set.

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v3/ODataObjectFactory.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v3/ODataObjectFactory.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v3/ODataObjectFactory.java
index 31f5ba1..28b4c9e 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v3/ODataObjectFactory.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v3/ODataObjectFactory.java
@@ -25,6 +25,7 @@ import org.apache.olingo.commons.api.domain.ODataCollectionValue;
 import org.apache.olingo.commons.api.domain.ODataComplexValue;
 import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
 import org.apache.olingo.commons.api.domain.ODataValue;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 
 public interface ODataObjectFactory extends CommonODataObjectFactory {
 
@@ -35,10 +36,10 @@ public interface ODataObjectFactory extends CommonODataObjectFactory {
   ODataEntitySet newEntitySet(URI next);
 
   @Override
-  ODataEntity newEntity(String name);
+  ODataEntity newEntity(FullQualifiedName typeName);
 
   @Override
-  ODataEntity newEntity(String name, URI link);
+  ODataEntity newEntity(FullQualifiedName typeName, URI link);
 
   @Override
   ODataComplexValue<ODataProperty> newComplexValue(String typeName);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataObjectFactory.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataObjectFactory.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataObjectFactory.java
index b493392..6d0d11d 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataObjectFactory.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v4/ODataObjectFactory.java
@@ -24,6 +24,7 @@ import org.apache.olingo.commons.api.domain.CommonODataProperty;
 import org.apache.olingo.commons.api.domain.ODataCollectionValue;
 import org.apache.olingo.commons.api.domain.ODataComplexValue;
 import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 
 public interface ODataObjectFactory extends CommonODataObjectFactory {
 
@@ -34,10 +35,10 @@ public interface ODataObjectFactory extends CommonODataObjectFactory {
   ODataEntitySet newEntitySet(URI next);
 
   @Override
-  ODataEntity newEntity(String name);
+  ODataEntity newEntity(FullQualifiedName typeName);
 
   @Override
-  ODataEntity newEntity(String name, URI link);
+  ODataEntity newEntity(FullQualifiedName typeName, URI link);
 
   ODataEnumValue newEnumValue(String typeName, String value);
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmOperationImport.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmOperationImport.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmOperationImport.java
index 84f2859..ec0648d 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmOperationImport.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmOperationImport.java
@@ -24,6 +24,11 @@ package org.apache.olingo.commons.api.edm;
 public interface EdmOperationImport extends EdmNamed {
 
   /**
+   * @return {@link FullQualifiedName} of this OperationImport
+   */
+  FullQualifiedName getFullQualifiedName();
+  
+  /**
    * @return {@link EdmEntitySet} of this OperationImport
    */
   EdmEntitySet getReturnedEntitySet();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/FullQualifiedName.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/FullQualifiedName.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/FullQualifiedName.java
index 4035b44..f9a9508 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/FullQualifiedName.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/FullQualifiedName.java
@@ -18,6 +18,9 @@
  */
 package org.apache.olingo.commons.api.edm;
 
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+
 /**
  * A full qualified name of any element in the EDM consists of a name and a namespace.
  */
@@ -77,19 +80,12 @@ public class FullQualifiedName {
 
   @Override
   public int hashCode() {
-    return toString().hashCode();
+    return HashCodeBuilder.reflectionHashCode(this);
   }
 
   @Override
   public boolean equals(final Object obj) {
-    if (this == obj) {
-      return true;
-    }
-    if ((obj == null) || !(obj instanceof FullQualifiedName)) {
-      return false;
-    }
-    final FullQualifiedName other = (FullQualifiedName) obj;
-    return namespace.equals(other.getNamespace()) && name.equals(other.getName());
+    return EqualsBuilder.reflectionEquals(this, obj);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
index 1ead6cb..71c658c 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
@@ -36,6 +36,7 @@ import org.apache.olingo.commons.api.data.Value;
 import org.apache.olingo.commons.api.domain.ODataOperation;
 import org.apache.olingo.commons.api.domain.ODataPropertyType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 import org.apache.olingo.commons.api.format.ContentType;
 import org.apache.olingo.commons.core.data.v3.XMLLinkCollectionImpl;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
index 2c8399d..f2b0177 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
@@ -35,6 +35,7 @@ import org.apache.olingo.commons.api.data.Container;
 import org.apache.olingo.commons.api.data.Link;
 import org.apache.olingo.commons.api.domain.ODataLinkType;
 import org.apache.olingo.commons.api.domain.ODataOperation;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 
 /**

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataEntity.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataEntity.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataEntity.java
index 06b525c..253b1a1 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataEntity.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataEntity.java
@@ -27,6 +27,7 @@ import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.domain.ODataLink;
 import org.apache.olingo.commons.api.domain.ODataOperation;
 import org.apache.olingo.commons.api.domain.CommonODataProperty;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 
 /**
  * OData entity.
@@ -35,6 +36,8 @@ public abstract class AbstractODataEntity extends AbstractODataPayload implement
 
   private static final long serialVersionUID = 8360640095932811034L;
 
+  private final FullQualifiedName typeName;
+
   /**
    * ETag.
    */
@@ -85,8 +88,14 @@ public abstract class AbstractODataEntity extends AbstractODataPayload implement
    */
   private final List<ODataOperation> operations = new ArrayList<ODataOperation>();
 
-  public AbstractODataEntity(final String name) {
-    super(name);
+  public AbstractODataEntity(final FullQualifiedName typeName) {
+    super(typeName == null? null: typeName.toString());
+    this.typeName = typeName;
+  }
+
+  @Override
+  public FullQualifiedName getTypeName() {
+    return this.typeName;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataEntityImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataEntityImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataEntityImpl.java
index 8a41e7a..b167999 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataEntityImpl.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataEntityImpl.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.List;
 import org.apache.olingo.commons.api.domain.v3.ODataEntity;
 import org.apache.olingo.commons.api.domain.v3.ODataProperty;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.core.domain.AbstractODataEntity;
 
 public class ODataEntityImpl extends AbstractODataEntity implements ODataEntity {
@@ -30,8 +31,8 @@ public class ODataEntityImpl extends AbstractODataEntity implements ODataEntity
 
   private final List<ODataProperty> properties = new ArrayList<ODataProperty>();
 
-  public ODataEntityImpl(final String name) {
-    super(name);
+  public ODataEntityImpl(final FullQualifiedName typeName) {
+    super(typeName);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataObjectFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataObjectFactoryImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataObjectFactoryImpl.java
index 18f9e13..1f41c59 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataObjectFactoryImpl.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataObjectFactoryImpl.java
@@ -28,6 +28,7 @@ import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
 import org.apache.olingo.commons.api.domain.v3.ODataObjectFactory;
 import org.apache.olingo.commons.api.domain.v3.ODataEntity;
 import org.apache.olingo.commons.api.domain.v3.ODataProperty;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 import org.apache.olingo.commons.core.domain.AbstractODataObjectFactory;
 
@@ -48,13 +49,13 @@ public class ODataObjectFactoryImpl extends AbstractODataObjectFactory implement
   }
 
   @Override
-  public ODataEntity newEntity(final String name) {
-    return new ODataEntityImpl(name);
+  public ODataEntity newEntity(final FullQualifiedName typeName) {
+    return new ODataEntityImpl(typeName);
   }
 
   @Override
-  public ODataEntity newEntity(final String name, final URI link) {
-    final ODataEntityImpl result = new ODataEntityImpl(name);
+  public ODataEntity newEntity(final FullQualifiedName typeName, final URI link) {
+    final ODataEntityImpl result = new ODataEntityImpl(typeName);
     result.setLink(link);
     return result;
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataEntityImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataEntityImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataEntityImpl.java
index b5ac799..0f81a4e 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataEntityImpl.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataEntityImpl.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.List;
 import org.apache.olingo.commons.api.domain.v4.ODataEntity;
 import org.apache.olingo.commons.api.domain.v4.ODataProperty;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.core.domain.AbstractODataEntity;
 
 public class ODataEntityImpl extends AbstractODataEntity implements ODataEntity {
@@ -35,8 +36,8 @@ public class ODataEntityImpl extends AbstractODataEntity implements ODataEntity
 
   private final List<ODataProperty> properties = new ArrayList<ODataProperty>();
 
-  public ODataEntityImpl(final String name) {
-    super(name);
+  public ODataEntityImpl(final FullQualifiedName typeName) {
+    super(typeName);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataObjectFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataObjectFactoryImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataObjectFactoryImpl.java
index ddb0a53..fdef28e 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataObjectFactoryImpl.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v4/ODataObjectFactoryImpl.java
@@ -30,6 +30,7 @@ import org.apache.olingo.commons.api.domain.v4.ODataEnumValue;
 import org.apache.olingo.commons.api.domain.v4.ODataLinkedComplexValue;
 import org.apache.olingo.commons.api.domain.v4.ODataProperty;
 import org.apache.olingo.commons.api.domain.v4.ODataValue;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 import org.apache.olingo.commons.core.domain.AbstractODataObjectFactory;
 
@@ -50,13 +51,13 @@ public class ODataObjectFactoryImpl extends AbstractODataObjectFactory implement
   }
 
   @Override
-  public ODataEntity newEntity(final String name) {
-    return new ODataEntityImpl(name);
+  public ODataEntity newEntity(final FullQualifiedName typeName) {
+    return new ODataEntityImpl(typeName);
   }
 
   @Override
-  public ODataEntity newEntity(final String name, final URI link) {
-    final ODataEntityImpl result = new ODataEntityImpl(name);
+  public ODataEntity newEntity(final FullQualifiedName typeName, final URI link) {
+    final ODataEntityImpl result = new ODataEntityImpl(typeName);
     result.setLink(link);
     return result;
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/0612eab4/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmOperationImport.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmOperationImport.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmOperationImport.java
index fe81533..364232e 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmOperationImport.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmOperationImport.java
@@ -23,44 +23,50 @@ import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.api.edm.EdmEntitySet;
 import org.apache.olingo.commons.api.edm.EdmException;
 import org.apache.olingo.commons.api.edm.EdmOperationImport;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.Target;
 
 public abstract class AbstractEdmOperationImport extends EdmNamedImpl implements EdmOperationImport {
 
-    protected final EdmEntityContainer container;
+  protected final EdmEntityContainer container;
 
-    private final Target entitySet;
+  private final Target entitySet;
 
-    private EdmEntitySet returnedEntitySet;
+  private EdmEntitySet returnedEntitySet;
 
-    public AbstractEdmOperationImport(
-            final Edm edm,
-            final EdmEntityContainer container,
-            final String name,
-            final Target entitySet) {
+  public AbstractEdmOperationImport(
+          final Edm edm,
+          final EdmEntityContainer container,
+          final String name,
+          final Target entitySet) {
 
-        super(edm, name);
-        this.container = container;
-        this.entitySet = entitySet;
-    }
+    super(edm, name);
+    this.container = container;
+    this.entitySet = entitySet;
+  }
 
-    @Override
-    public EdmEntitySet getReturnedEntitySet() {
-        if (entitySet != null && returnedEntitySet == null) {
-            EdmEntityContainer entityContainer = edm.getEntityContainer(entitySet.getEntityContainer());
-            if (entityContainer == null) {
-                throw new EdmException("Can´t find entity container with name: " + entitySet.getEntityContainer());
-            }
-            returnedEntitySet = entityContainer.getEntitySet(entitySet.getTargetName());
-            if (returnedEntitySet == null) {
-                throw new EdmException("Can´t find entity set with name: " + entitySet.getTargetName());
-            }
-        }
-        return returnedEntitySet;
-    }
+  @Override
+  public FullQualifiedName getFullQualifiedName() {
+    return new FullQualifiedName(this.container.getNamespace(), getName());
+  }
 
-    @Override
-    public EdmEntityContainer getEntityContainer() {
-        return container;
+  @Override
+  public EdmEntitySet getReturnedEntitySet() {
+    if (entitySet != null && returnedEntitySet == null) {
+      EdmEntityContainer entityContainer = edm.getEntityContainer(entitySet.getEntityContainer());
+      if (entityContainer == null) {
+        throw new EdmException("Can´t find entity container with name: " + entitySet.getEntityContainer());
+      }
+      returnedEntitySet = entityContainer.getEntitySet(entitySet.getTargetName());
+      if (returnedEntitySet == null) {
+        throw new EdmException("Can´t find entity set with name: " + entitySet.getTargetName());
+      }
     }
+    return returnedEntitySet;
+  }
+
+  @Override
+  public EdmEntityContainer getEntityContainer() {
+    return container;
+  }
 }


[2/2] git commit: Uniforming the type expression (de)serialization

Posted by il...@apache.org.
Uniforming the type expression (de)serialization


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

Branch: refs/heads/master
Commit: 9f96234e69918d04440a927cc732917044e81027
Parents: 0612eab
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Apr 9 17:03:50 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Apr 9 17:03:50 2014 +0200

----------------------------------------------------------------------
 .../it/v4/BoundOperationInvokeTestITCase.java   | 45 ++++++--------------
 .../core/it/v4/EntityRetrieveTestITCase.java    |  2 +-
 .../it/v4/OperationImportInvokeTestITCase.java  |  2 +-
 .../olingo/client/core/v4/EntityTest.java       |  2 +-
 .../commons/core/data/AtomDeserializer.java     |  5 +--
 .../commons/core/data/AtomSerializer.java       | 20 +++------
 .../core/data/JSONEntryDeserializer.java        |  8 ++--
 .../commons/core/data/JSONEntrySerializer.java  |  4 +-
 .../core/data/JSONPropertyDeserializer.java     |  6 ++-
 .../olingo/commons/core/edm/EdmTypeInfo.java    | 44 ++++++++++++++++++-
 10 files changed, 77 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9f96234e/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BoundOperationInvokeTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BoundOperationInvokeTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BoundOperationInvokeTestITCase.java
index d46ee3e..6bb9307 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BoundOperationInvokeTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BoundOperationInvokeTestITCase.java
@@ -50,7 +50,6 @@ import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
 import org.junit.Assume;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -101,8 +100,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     ODataOperation boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetEmployeesCount");
     assertNotNull(boundOp);
 
-    EdmFunction func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
+    EdmFunction func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(),
             false, null);
     assertNotNull(func);
 
@@ -124,9 +122,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails");
     assertNotNull(boundOp);
 
-    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
-            false, null);
+    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false, null);
     assertNotNull(func);
 
     final ODataPrimitiveValue count = getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(1);
@@ -153,9 +149,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetRelatedProduct");
     assertNotNull(boundOp);
 
-    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
-            false, null);
+    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false, null);
     assertNotNull(func);
 
     final ODataInvokeRequest<ODataEntity> getRelatedProductReq =
@@ -165,7 +159,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     try {
       final ODataEntity getRelatedProductRes = getRelatedProductReq.execute().getBody();
       assertNotNull(getRelatedProductRes);
-      assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.Product",
+      assertEquals("Microsoft.Test.OData.Services.ODataWCFService.Product",
               getRelatedProductRes.getTypeName().toString());
       assertEquals(6, getRelatedProductRes.getProperty("ProductID").getPrimitiveValue().toCastValue(Integer.class), 0);
     } catch (Exception e) {
@@ -183,9 +177,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetDefaultPI");
     assertNotNull(boundOp);
 
-    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
-            false, null);
+    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false, null);
     assertNotNull(func);
 
     final ODataInvokeRequest<ODataEntity> getDefaultPIReq =
@@ -193,7 +185,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     getDefaultPIReq.setFormat(format);
     final ODataEntity getDefaultPIRes = getDefaultPIReq.execute().getBody();
     assertNotNull(getDefaultPIRes);
-    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument",
+    assertEquals("Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument",
             getDefaultPIRes.getTypeName().toString());
     assertEquals(101901,
             getDefaultPIRes.getProperty("PaymentInstrumentID").getPrimitiveValue().toCastValue(Integer.class), 0);
@@ -202,9 +194,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetAccountInfo");
     assertNotNull(boundOp);
 
-    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
-            false, null);
+    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false, null);
     assertNotNull(func);
 
     final ODataInvokeRequest<ODataProperty> getAccountInfoReq =
@@ -228,9 +218,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount");
     assertNotNull(boundOp);
 
-    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
-            false, null);
+    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false, null);
     assertNotNull(func);
 
     final ODataPrimitiveValue bonusRate = getClient().getObjectFactory().newPrimitiveValueBuilder().buildDouble(1.1);
@@ -270,9 +258,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     ODataOperation boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.IncreaseRevenue");
     assertNotNull(boundOp);
 
-    EdmAction act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
-            false);
+    EdmAction act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false);
     assertNotNull(act);
 
     final ODataPrimitiveValue increaseValue = getClient().getObjectFactory().newPrimitiveValueBuilder().
@@ -296,9 +282,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight");
     assertNotNull(boundOp);
 
-    act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
-            false);
+    act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false);
     assertNotNull(act);
 
     final ODataEnumValue accessRight = getClient().getObjectFactory().
@@ -323,8 +307,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     assertNotNull(boundOp);
 
     act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()),
-            edm.getEntityType(new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().
-                    getFullQualifiedName()).getBaseType().getFullQualifiedName(), false);
+            edm.getEntityType(entity.getTypeName()).getBaseType().getFullQualifiedName(), false);
     assertNotNull(act);
 
     final ODataCollectionValue<org.apache.olingo.commons.api.domain.v4.ODataValue> addresses =
@@ -361,9 +344,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.RefreshDefaultPI");
     assertNotNull(boundOp);
 
-    act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()),
-            new EdmTypeInfo.Builder().setTypeExpression(entity.getTypeName().toString()).build().getFullQualifiedName(),
-            false);
+    act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false);
     assertNotNull(act);
 
     final ODataPrimitiveValue newDate = getClient().getObjectFactory().newPrimitiveValueBuilder().
@@ -374,7 +355,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     getDefaultPIReq.setFormat(format);
     final ODataEntity getDefaultPIRes = getDefaultPIReq.execute().getBody();
     assertNotNull(getDefaultPIRes);
-    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument",
+    assertEquals("Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument",
             getDefaultPIRes.getTypeName().toString());
     assertEquals(101901,
             getDefaultPIRes.getProperty("PaymentInstrumentID").getPrimitiveValue().toCastValue(Integer.class), 0);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9f96234e/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityRetrieveTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityRetrieveTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityRetrieveTestITCase.java
index d55313f..4923015 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityRetrieveTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityRetrieveTestITCase.java
@@ -67,7 +67,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
     final CommonODataEntity entity = res.getBody();
 
     assertNotNull(entity);
-    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.Customer", entity.getTypeName().toString());
+    assertEquals("Microsoft.Test.OData.Services.ODataWCFService.Customer", entity.getTypeName().toString());
     assertEquals(getServiceRoot() + "/Customers(PersonID=1)", entity.getEditLink().toASCIIString());
 
     assertEquals(3, entity.getNavigationLinks().size());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9f96234e/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java
index d65e7f9..989c152 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java
@@ -113,7 +113,7 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
     person2Req.setFormat(format);
     final ODataEntity person2 = person2Req.execute().getBody();
     assertNotNull(person2);
-    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.Customer", person2.getTypeName().toString());
+    assertEquals("Microsoft.Test.OData.Services.ODataWCFService.Customer", person2.getTypeName().toString());
     assertEquals(1, person2.getProperty("PersonID").getPrimitiveValue().toCastValue(Integer.class), 0);
 
     // GetPerson

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9f96234e/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
index 3db8436..5707985 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
@@ -53,7 +53,7 @@ public class EntityTest extends AbstractTest {
             getClient().getDeserializer().toEntry(input, format).getObject());
     assertNotNull(entity);
 
-    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.Customer", entity.getTypeName().toString());
+    assertEquals("Microsoft.Test.OData.Services.ODataWCFService.Customer", entity.getTypeName().toString());
 
     final ODataProperty birthday = entity.getProperty("Birthday");
     assertTrue(birthday.hasPrimitiveValue());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9f96234e/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
index 71c658c..850611b 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
@@ -36,7 +36,6 @@ import org.apache.olingo.commons.api.data.Value;
 import org.apache.olingo.commons.api.domain.ODataOperation;
 import org.apache.olingo.commons.api.domain.ODataPropertyType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
-import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 import org.apache.olingo.commons.api.format.ContentType;
 import org.apache.olingo.commons.core.data.v3.XMLLinkCollectionImpl;
@@ -247,7 +246,7 @@ public class AtomDeserializer extends AbstractAtomDealer {
               : new EdmTypeInfo.Builder().setTypeExpression(typeAttrValue).build();
 
       if (typeInfo != null) {
-        property.setType(typeInfo.getTypeExpression());
+        property.setType(typeInfo.internal());
       }
 
       final ODataPropertyType propType = typeInfo == null
@@ -452,7 +451,7 @@ public class AtomDeserializer extends AbstractAtomDealer {
           } else if (Constants.QNAME_ATOM_ELEM_CATEGORY.equals(event.asStartElement().getName())) {
             final Attribute term = event.asStartElement().getAttributeByName(QName.valueOf(Constants.ATOM_ATTR_TERM));
             if (term != null) {
-              entry.setType(term.getValue());
+              entry.setType(new EdmTypeInfo.Builder().setTypeExpression(term.getValue()).build().internal());
             }
           } else if (Constants.QNAME_ATOM_ELEM_LINK.equals(event.asStartElement().getName())) {
             final LinkImpl link = new LinkImpl();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9f96234e/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomSerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomSerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomSerializer.java
index d0e8587..aef5950 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomSerializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomSerializer.java
@@ -94,21 +94,10 @@ public class AtomSerializer extends AbstractAtomDealer {
     }
 
     if (StringUtils.isNotBlank(property.getType())) {
-      String type = property.getType();
-      if (version.compareTo(ODataServiceVersion.V40) >= 0) {
-        final EdmTypeInfo typeInfo = new EdmTypeInfo.Builder().setTypeExpression(property.getType()).build();
-        if (typeInfo.isPrimitiveType()) {
-          if (typeInfo.isCollection()) {
-            type = "#Collection(" + typeInfo.getFullQualifiedName().getName() + ")";
-          } else {
-            type = typeInfo.getFullQualifiedName().getName();
-          }
-        } else {
-          type = "#" + property.getType();
-        }
-      }
+      final EdmTypeInfo typeInfo = new EdmTypeInfo.Builder().setTypeExpression(property.getType()).build();
       writer.writeAttribute(Constants.PREFIX_METADATA, version.getNamespaceMap().get(ODataServiceVersion.NS_METADATA),
-              Constants.ATTR_TYPE, type);
+              Constants.ATTR_TYPE,
+              new EdmTypeInfo.Builder().setTypeExpression(property.getType()).build().external(version));
     }
 
     if (property.getValue().isNull()) {
@@ -223,7 +212,8 @@ public class AtomSerializer extends AbstractAtomDealer {
 
     writer.writeStartElement(Constants.ATOM_ELEM_CATEGORY);
     writer.writeAttribute(Constants.ATOM_ATTR_SCHEME, version.getNamespaceMap().get(ODataServiceVersion.NS_SCHEME));
-    writer.writeAttribute(Constants.ATOM_ATTR_TERM, entry.getType());
+    writer.writeAttribute(Constants.ATOM_ATTR_TERM,
+            new EdmTypeInfo.Builder().setTypeExpression(entry.getType()).build().external(version));
     writer.writeEndElement();
 
     if (entry instanceof AbstractODataObject) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9f96234e/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
index f2b0177..9fddf28 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
@@ -35,8 +35,8 @@ import org.apache.olingo.commons.api.data.Container;
 import org.apache.olingo.commons.api.data.Link;
 import org.apache.olingo.commons.api.domain.ODataLinkType;
 import org.apache.olingo.commons.api.domain.ODataOperation;
-import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.commons.core.edm.EdmTypeInfo;
 
 /**
  * Reads JSON string into an entry.
@@ -87,7 +87,7 @@ public class JSONEntryDeserializer extends AbstractJsonDeserializer<JSONEntryImp
     }
 
     if (tree.hasNonNull(jsonType)) {
-      entry.setType(tree.get(jsonType).textValue());
+      entry.setType(new EdmTypeInfo.Builder().setTypeExpression(tree.get(jsonType).textValue()).build().internal());
       tree.remove(jsonType);
     }
 
@@ -183,7 +183,9 @@ public class JSONEntryDeserializer extends AbstractJsonDeserializer<JSONEntryImp
       } else {
         final JSONPropertyImpl property = new JSONPropertyImpl();
         property.setName(field.getKey());
-        property.setType(type);
+        property.setType(type == null
+                ? null
+                : new EdmTypeInfo.Builder().setTypeExpression(type).build().internal());
         type = null;
 
         value(property, field.getValue(), parser.getCodec());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9f96234e/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntrySerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntrySerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntrySerializer.java
index b7139d3..626ed14 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntrySerializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntrySerializer.java
@@ -27,6 +27,7 @@ import org.apache.olingo.commons.api.data.Entry;
 import org.apache.olingo.commons.api.data.Link;
 import org.apache.olingo.commons.api.data.Property;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.commons.core.edm.EdmTypeInfo;
 
 /**
  * Writes out JSON string from an entry.
@@ -40,7 +41,8 @@ public class JSONEntrySerializer extends AbstractJsonSerializer<JSONEntryImpl> {
     jgen.writeStartObject();
 
     if (StringUtils.isNotBlank(entry.getType())) {
-      jgen.writeStringField(version.getJSONMap().get(ODataServiceVersion.JSON_TYPE), entry.getType());
+      jgen.writeStringField(version.getJSONMap().get(ODataServiceVersion.JSON_TYPE),
+              new EdmTypeInfo.Builder().setTypeExpression(entry.getType()).build().external(version));
     }
 
     if (entry.getId() != null) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9f96234e/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONPropertyDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONPropertyDeserializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONPropertyDeserializer.java
index d640a60..6d8f0e2 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONPropertyDeserializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONPropertyDeserializer.java
@@ -27,6 +27,7 @@ import java.net.URI;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.olingo.commons.api.Constants;
 import org.apache.olingo.commons.api.data.Container;
+import org.apache.olingo.commons.core.edm.EdmTypeInfo;
 
 /**
  * Parse JSON string into <tt>JSONPropertyImpl</tt>.
@@ -58,14 +59,15 @@ public class JSONPropertyDeserializer extends AbstractJsonDeserializer<JSONPrope
       tree.remove(Constants.JSON_CONTEXT);
     } else if (tree.hasNonNull(Constants.JSON_METADATA)) {
       contextURL = URI.create(tree.get(Constants.JSON_METADATA).textValue());
-      property.setType(StringUtils.substringAfterLast(contextURL.toASCIIString(), "#"));
+      property.setType(new EdmTypeInfo.Builder().
+              setTypeExpression(StringUtils.substringAfterLast(contextURL.toASCIIString(), "#")).build().internal());
       tree.remove(Constants.JSON_METADATA);
     } else {
       contextURL = null;
     }
 
     if (tree.has(jsonType)) {
-      property.setType(tree.get(jsonType).asText());
+      property.setType(new EdmTypeInfo.Builder().setTypeExpression(tree.get(jsonType).textValue()).build().internal());
     }
 
     if (tree.has(Constants.JSON_NULL) && tree.get(Constants.JSON_NULL).asBoolean()) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9f96234e/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmTypeInfo.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmTypeInfo.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmTypeInfo.java
index 97b01b3..37d52dd 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmTypeInfo.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmTypeInfo.java
@@ -26,6 +26,7 @@ import org.apache.olingo.commons.api.edm.EdmEnumType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -137,8 +138,47 @@ public class EdmTypeInfo {
     }
   }
 
-  public String getTypeExpression() {
-    return typeExpression;
+  public String internal() {
+    final StringBuilder deserialize = new StringBuilder();
+
+    if (isCollection()) {
+      deserialize.append("Collection(");
+    }
+
+    deserialize.append(getFullQualifiedName().toString());
+
+    if (isCollection()) {
+      deserialize.append(")");
+    }
+
+    return deserialize.toString();
+  }
+
+  public String external(final ODataServiceVersion version) {
+    final StringBuilder serialize = new StringBuilder();
+
+    if (isCollection()) {
+      if (version.compareTo(ODataServiceVersion.V40) >= 0) {
+        serialize.append('#');
+      }
+      serialize.append("Collection(");
+    }
+
+    if (isPrimitiveType() && version.compareTo(ODataServiceVersion.V40) >= 0) {
+      serialize.append(getFullQualifiedName().getName());
+    } else {
+      serialize.append(getFullQualifiedName().toString());
+    }
+
+    if (isCollection()) {
+      serialize.append(")");
+    }
+
+    if (version.compareTo(ODataServiceVersion.V40) >= 0 && !isPrimitiveType() && !isCollection()) {
+      serialize.insert(0, '#');
+    }
+
+    return serialize.toString();
   }
 
   public boolean isCollection() {