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/03/10 10:49:53 UTC

[1/6] git commit: Enhancing EdmTypeInfo capabilities

Repository: incubator-olingo-odata4
Updated Branches:
  refs/heads/master 897db8ef1 -> f70d3f0bd


Enhancing EdmTypeInfo capabilities


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

Branch: refs/heads/master
Commit: 848976bbbc9b69f29805ed508e8004ac36976e52
Parents: 7da681a
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Mar 10 09:29:36 2014 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Mar 10 09:29:36 2014 +0100

----------------------------------------------------------------------
 .../odata4/client/api/utils/EdmTypeInfo.java    |  81 ---------
 .../client/core/edm/EdmActionImportImpl.java    |   5 +-
 .../odata4/client/core/edm/EdmClientImpl.java   |  13 +-
 .../client/core/edm/EdmComplexTypeImpl.java     |   3 +-
 .../client/core/edm/EdmEntityContainerImpl.java |  20 +--
 .../client/core/edm/EdmEntityTypeImpl.java      |   4 +-
 .../client/core/edm/EdmFunctionImportImpl.java  |   6 +-
 .../core/edm/EdmNavigationPropertyImpl.java     |   3 +-
 .../client/core/edm/EdmParameterImpl.java       |   3 +-
 .../odata4/client/core/edm/EdmPropertyImpl.java |   3 +-
 .../client/core/edm/EdmReturnTypeImpl.java      |   3 +-
 .../odata4/client/core/edm/EdmTypeInfo.java     | 174 +++++++++++++++++++
 .../core/edm/v3/EdmActionImportProxy.java       |   6 +-
 .../core/edm/v3/EdmFunctionImportProxy.java     |   7 +-
 .../commons/api/edm/EdmPrimitiveType.java       |   4 +-
 .../core/edm/primitivetype/EdmDuration.java     |   3 +-
 16 files changed, 212 insertions(+), 126 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/utils/EdmTypeInfo.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/utils/EdmTypeInfo.java b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/utils/EdmTypeInfo.java
deleted file mode 100644
index 33dd468..0000000
--- a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/utils/EdmTypeInfo.java
+++ /dev/null
@@ -1,81 +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.odata4.client.api.utils;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
-
-public class EdmTypeInfo {
-
-  private final String typeExpression;
-
-  private final boolean collection;
-
-  private final FullQualifiedName fullQualifiedName;
-
-  public EdmTypeInfo(final String typeExpression, final String defaultNamespace) {
-    this(typeExpression.indexOf('.') == -1
-            ? defaultNamespace + "." + typeExpression
-            : typeExpression);
-  }
-
-  public EdmTypeInfo(final String typeExpression) {
-    this.typeExpression = typeExpression;
-
-    String baseType;
-    final int collStartIdx = typeExpression.indexOf("Collection(");
-    final int collEndIdx = typeExpression.lastIndexOf(')');
-    if (collStartIdx == -1) {
-      baseType = typeExpression;
-      this.collection = false;
-    } else {
-      if (collEndIdx == -1) {
-        throw new IllegalArgumentException("Malformed type: " + typeExpression);
-      }
-
-      this.collection = true;
-      baseType = typeExpression.substring(collStartIdx + 11, collEndIdx);
-    }
-
-    final int lastDotIdx = baseType.lastIndexOf('.');
-    if (lastDotIdx == -1) {
-      throw new IllegalArgumentException("Cannot find namespace or alias in " + typeExpression);
-    }
-    final String namespace = baseType.substring(0, lastDotIdx);
-    final String typeName = baseType.substring(lastDotIdx + 1);
-    if (StringUtils.isBlank(typeName)) {
-      throw new IllegalArgumentException("Null or empty type name in " + typeExpression);
-    }
-
-    this.fullQualifiedName = new FullQualifiedName(namespace, typeName);
-  }
-
-  public String getTypeExpression() {
-    return typeExpression;
-  }
-
-  public boolean isCollection() {
-    return collection;
-  }
-
-  public FullQualifiedName getFullQualifiedName() {
-    return fullQualifiedName;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmActionImportImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmActionImportImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmActionImportImpl.java
index 1af0f47..0bc3b5e 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmActionImportImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmActionImportImpl.java
@@ -19,7 +19,6 @@
 package org.apache.olingo.odata4.client.core.edm;
 
 import org.apache.olingo.odata4.client.api.edm.xml.v4.ActionImport;
-import org.apache.olingo.odata4.client.api.utils.EdmTypeInfo;
 import org.apache.olingo.odata4.commons.api.edm.Edm;
 import org.apache.olingo.odata4.commons.api.edm.EdmAction;
 import org.apache.olingo.odata4.commons.api.edm.EdmActionImport;
@@ -38,8 +37,8 @@ public class EdmActionImportImpl extends EdmOperationImportImpl implements EdmAc
 
   @Override
   public EdmAction getAction() {
-    return edm.getAction(
-            new EdmTypeInfo(actionImport.getAction(), container.getNamespace()).getFullQualifiedName(), null, null);
+    return edm.getAction(new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(actionImport.getAction()).
+            setDefaultNamespace(container.getNamespace()).build().getFullQualifiedName(), null, null);
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmClientImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmClientImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmClientImpl.java
index 905a310..9ebb0c5 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmClientImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmClientImpl.java
@@ -36,7 +36,6 @@ import org.apache.olingo.odata4.client.api.edm.xml.XMLMetadata;
 import org.apache.olingo.odata4.client.api.edm.xml.ComplexType;
 import org.apache.olingo.odata4.client.api.edm.xml.EntityType;
 import org.apache.olingo.odata4.client.api.edm.xml.v4.TypeDefinition;
-import org.apache.olingo.odata4.client.api.utils.EdmTypeInfo;
 import org.apache.olingo.odata4.client.api.UnsupportedInV3Exception;
 import org.apache.olingo.odata4.client.api.edm.xml.EntityContainer;
 import org.apache.olingo.odata4.client.api.edm.xml.v3.FunctionImport;
@@ -260,7 +259,8 @@ public class EdmClientImpl extends AbstractEdmImpl {
       for (final Iterator<Action> itor = actions.iterator(); itor.hasNext() && !found;) {
         final Action action = itor.next();
         if (action.isBound()) {
-          final EdmTypeInfo boundParam = new EdmTypeInfo(action.getParameters().get(0).getType());
+          final EdmTypeInfo boundParam = new EdmTypeInfo.Builder().setEdm(this).
+                  setTypeExpression(action.getParameters().get(0).getType()).build();
           if (bindingParameterTypeName.equals(boundParam.getFullQualifiedName())
                   && isBindingParameterCollection.booleanValue() == boundParam.isCollection()) {
 
@@ -278,7 +278,8 @@ public class EdmClientImpl extends AbstractEdmImpl {
         for (final Iterator<FunctionImport> itor = functionImports.iterator(); itor.hasNext() && !found;) {
           final FunctionImport functionImport = itor.next();
           if (!V3FunctionImportUtils.canProxyFunction(functionImport) && functionImport.isBindable()) {
-            final EdmTypeInfo boundParam = new EdmTypeInfo(functionImport.getParameters().get(0).getType());
+            final EdmTypeInfo boundParam = new EdmTypeInfo.Builder().setEdm(this).
+                    setTypeExpression(functionImport.getParameters().get(0).getType()).build();
             if (bindingParameterTypeName.equals(boundParam.getFullQualifiedName())
                     && isBindingParameterCollection.booleanValue() == boundParam.isCollection()) {
 
@@ -308,7 +309,8 @@ public class EdmClientImpl extends AbstractEdmImpl {
       for (final Iterator<Function> itor = functions.iterator(); itor.hasNext() && !found;) {
         final Function function = itor.next();
         if (function.isBound()) {
-          final EdmTypeInfo boundParam = new EdmTypeInfo(function.getParameters().get(0).getType());
+          final EdmTypeInfo boundParam = new EdmTypeInfo.Builder().setEdm(this).
+                  setTypeExpression(function.getParameters().get(0).getType()).build();
           if (bindingParameterTypeName.equals(boundParam.getFullQualifiedName())
                   && isBindingParameterCollection.booleanValue() == boundParam.isCollection()) {
 
@@ -332,7 +334,8 @@ public class EdmClientImpl extends AbstractEdmImpl {
         for (final Iterator<FunctionImport> itor = functionImports.iterator(); itor.hasNext() && !found;) {
           final FunctionImport functionImport = itor.next();
           if (!V3FunctionImportUtils.canProxyFunction(functionImport) && functionImport.isBindable()) {
-            final EdmTypeInfo boundParam = new EdmTypeInfo(functionImport.getParameters().get(0).getType());
+            final EdmTypeInfo boundParam = new EdmTypeInfo.Builder().setEdm(this).
+                    setTypeExpression(functionImport.getParameters().get(0).getType()).build();
             if (bindingParameterTypeName.equals(boundParam.getFullQualifiedName())
                     && isBindingParameterCollection.booleanValue() == boundParam.isCollection()) {
 

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmComplexTypeImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmComplexTypeImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmComplexTypeImpl.java
index b10bf79..66de10c 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmComplexTypeImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmComplexTypeImpl.java
@@ -20,7 +20,6 @@ package org.apache.olingo.odata4.client.core.edm;
 
 import java.util.Map;
 import org.apache.olingo.odata4.client.api.edm.xml.ComplexType;
-import org.apache.olingo.odata4.client.api.utils.EdmTypeInfo;
 import org.apache.olingo.odata4.commons.api.edm.Edm;
 import org.apache.olingo.odata4.commons.api.edm.EdmNavigationProperty;
 import org.apache.olingo.odata4.commons.api.edm.EdmProperty;
@@ -39,7 +38,7 @@ public class EdmComplexTypeImpl extends AbstractEdmComplexType {
     if (complexType instanceof org.apache.olingo.odata4.client.api.edm.xml.v4.ComplexType) {
       final String baseType = ((org.apache.olingo.odata4.client.api.edm.xml.v4.ComplexType) complexType).getBaseType();
       baseTypeName = baseType == null
-              ? null : new EdmTypeInfo(baseType).getFullQualifiedName();
+              ? null : new EdmTypeInfo.Builder().setTypeExpression(baseType).build().getFullQualifiedName();
     }
     final EdmComplexTypeImpl instance = new EdmComplexTypeImpl(edm, fqn, baseTypeName, complexType);
     instance.baseType = instance.buildBaseType(baseTypeName);

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntityContainerImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntityContainerImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntityContainerImpl.java
index 9cde1b1..b6f5c1b 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntityContainerImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntityContainerImpl.java
@@ -22,7 +22,6 @@ import org.apache.olingo.odata4.client.api.edm.xml.v4.ActionImport;
 import org.apache.olingo.odata4.client.api.edm.xml.EntitySet;
 import org.apache.olingo.odata4.client.api.edm.xml.CommonFunctionImport;
 import org.apache.olingo.odata4.client.api.edm.xml.v4.Singleton;
-import org.apache.olingo.odata4.client.api.utils.EdmTypeInfo;
 import org.apache.olingo.odata4.client.api.UnsupportedInV3Exception;
 import org.apache.olingo.odata4.client.api.edm.xml.EntityContainer;
 import org.apache.olingo.odata4.client.api.edm.xml.XMLMetadata;
@@ -65,9 +64,9 @@ public class EdmEntityContainerImpl extends AbstractEdmEntityContainer {
     if (singleton == null) {
       throw new EdmException("Singleton named '" + singletonName + "' not found in " + entityContainerName);
     }
-    return new EdmSingletonImpl(edm, this, singletonName,
-            new EdmTypeInfo(singleton.getEntityType(), entityContainerName.getNamespace()).getFullQualifiedName(),
-            singleton);
+    return new EdmSingletonImpl(edm, this, singletonName, new EdmTypeInfo.Builder().
+            setTypeExpression(singleton.getEntityType()).setDefaultNamespace(entityContainerName.getNamespace()).
+            build().getFullQualifiedName(), singleton);
   }
 
   @Override
@@ -77,22 +76,21 @@ public class EdmEntityContainerImpl extends AbstractEdmEntityContainer {
       throw new EdmException("EntitySet named '" + entitySetName + "' not found in " + entityContainerName);
     }
 
+    final FullQualifiedName entityType = new EdmTypeInfo.Builder().setTypeExpression(entitySet.getEntityType()).
+            setDefaultNamespace(entityContainerName.getNamespace()).build().getFullQualifiedName();
     if (entitySet instanceof org.apache.olingo.odata4.client.api.edm.xml.v4.EntitySet) {
-      return new EdmEntitySetImpl(edm, this, entitySetName,
-              new EdmTypeInfo(entitySet.getEntityType(), entityContainerName.getNamespace()).getFullQualifiedName(),
+      return new EdmEntitySetImpl(edm, this, entitySetName, entityType,
               (org.apache.olingo.odata4.client.api.edm.xml.v4.EntitySet) entitySet);
     } else {
-      return new EdmEntitySetProxy(edm, this, entitySetName,
-              new EdmTypeInfo(entitySet.getEntityType(), entityContainerName.getNamespace()).getFullQualifiedName(),
-              xmlMetadata);
+      return new EdmEntitySetProxy(edm, this, entitySetName, entityType, xmlMetadata);
     }
   }
 
   @Override
   protected EdmActionImport createActionImport(final String actionImportName) {
     if (xmlEntityContainer instanceof org.apache.olingo.odata4.client.api.edm.xml.v4.EntityContainer) {
-      final ActionImport actionImport
-              = ((org.apache.olingo.odata4.client.api.edm.xml.v4.EntityContainer) xmlEntityContainer).
+      final ActionImport actionImport =
+              ((org.apache.olingo.odata4.client.api.edm.xml.v4.EntityContainer) xmlEntityContainer).
               getActionImport(actionImportName);
       if (actionImport == null) {
         throw new EdmException("ActionImport named '" + actionImportName + "' not found in " + entityContainerName);

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntityTypeImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntityTypeImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntityTypeImpl.java
index f94807d..4e94e7f 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntityTypeImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEntityTypeImpl.java
@@ -23,7 +23,6 @@ import java.util.List;
 import java.util.Map;
 import org.apache.olingo.odata4.client.api.edm.xml.PropertyRef;
 import org.apache.olingo.odata4.client.api.edm.xml.EntityType;
-import org.apache.olingo.odata4.client.api.utils.EdmTypeInfo;
 import org.apache.olingo.odata4.commons.api.edm.Edm;
 import org.apache.olingo.odata4.commons.api.edm.EdmEntityType;
 import org.apache.olingo.odata4.commons.api.edm.EdmKeyPropertyRef;
@@ -39,7 +38,8 @@ public class EdmEntityTypeImpl extends AbstractEdmEntityType {
 
   public static EdmEntityTypeImpl getInstance(final Edm edm, final FullQualifiedName fqn, final EntityType entityType) {
     final FullQualifiedName baseTypeName = entityType.getBaseType() == null
-            ? null : new EdmTypeInfo(entityType.getBaseType()).getFullQualifiedName();
+            ? null
+            : new EdmTypeInfo.Builder().setTypeExpression(entityType.getBaseType()).build().getFullQualifiedName();
     final EdmEntityTypeImpl instance = new EdmEntityTypeImpl(edm, fqn, baseTypeName, entityType);
     instance.baseType = instance.buildBaseType(baseTypeName);
 

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmFunctionImportImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmFunctionImportImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmFunctionImportImpl.java
index 8a7ef6d..3a7822d 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmFunctionImportImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmFunctionImportImpl.java
@@ -20,7 +20,6 @@ package org.apache.olingo.odata4.client.core.edm;
 
 import java.util.List;
 import org.apache.olingo.odata4.client.api.edm.xml.v4.FunctionImport;
-import org.apache.olingo.odata4.client.api.utils.EdmTypeInfo;
 import org.apache.olingo.odata4.commons.api.edm.Edm;
 import org.apache.olingo.odata4.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.odata4.commons.api.edm.EdmFunction;
@@ -39,9 +38,8 @@ public class EdmFunctionImportImpl extends EdmOperationImportImpl implements Edm
 
   @Override
   public EdmFunction getFunction(final List<String> parameterNames) {
-    return edm.getFunction(
-            new EdmTypeInfo(functionImport.getFunction(), container.getNamespace()).getFullQualifiedName(),
-            null, null, parameterNames);
+    return edm.getFunction(new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(functionImport.getFunction()).
+            setDefaultNamespace(container.getNamespace()).build().getFullQualifiedName(), null, null, parameterNames);
   }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmNavigationPropertyImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmNavigationPropertyImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmNavigationPropertyImpl.java
index 9d79914..aed747f 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmNavigationPropertyImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmNavigationPropertyImpl.java
@@ -21,7 +21,6 @@ package org.apache.olingo.odata4.client.core.edm;
 import java.util.List;
 import org.apache.olingo.odata4.client.api.edm.xml.v4.NavigationProperty;
 import org.apache.olingo.odata4.client.api.edm.xml.v4.ReferentialConstraint;
-import org.apache.olingo.odata4.client.api.utils.EdmTypeInfo;
 import org.apache.olingo.odata4.commons.api.edm.Edm;
 import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.odata4.commons.core.edm.AbstractEdmNavigationProperty;
@@ -35,7 +34,7 @@ public class EdmNavigationPropertyImpl extends AbstractEdmNavigationProperty {
   public EdmNavigationPropertyImpl(final Edm edm, final NavigationProperty navigationProperty) {
     super(edm, navigationProperty.getName());
     this.navigationProperty = navigationProperty;
-    this.edmTypeInfo = new EdmTypeInfo(navigationProperty.getType());
+    this.edmTypeInfo = new EdmTypeInfo.Builder().setTypeExpression(navigationProperty.getType()).build();
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmParameterImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmParameterImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmParameterImpl.java
index 9b3beb4..c1187c9 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmParameterImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmParameterImpl.java
@@ -19,7 +19,6 @@
 package org.apache.olingo.odata4.client.core.edm;
 
 import org.apache.olingo.odata4.client.api.edm.xml.CommonParameter;
-import org.apache.olingo.odata4.client.api.utils.EdmTypeInfo;
 import org.apache.olingo.odata4.commons.api.edm.Edm;
 import org.apache.olingo.odata4.commons.api.edm.EdmMapping;
 import org.apache.olingo.odata4.commons.core.edm.AbstractEdmParameter;
@@ -31,7 +30,7 @@ public class EdmParameterImpl extends AbstractEdmParameter {
   private final EdmTypeInfo parameterInfo;
 
   public static EdmParameterImpl getInstance(final Edm edm, final CommonParameter parameter) {
-    final EdmTypeInfo paramTypeInfo = new EdmTypeInfo(parameter.getType());
+    final EdmTypeInfo paramTypeInfo = new EdmTypeInfo.Builder().setTypeExpression(parameter.getType()).build();
     return new EdmParameterImpl(edm, parameter, paramTypeInfo);
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmPropertyImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmPropertyImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmPropertyImpl.java
index 20ffb2c..ad8869e 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmPropertyImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmPropertyImpl.java
@@ -19,7 +19,6 @@
 package org.apache.olingo.odata4.client.core.edm;
 
 import org.apache.olingo.odata4.client.api.edm.xml.CommonProperty;
-import org.apache.olingo.odata4.client.api.utils.EdmTypeInfo;
 import org.apache.olingo.odata4.commons.api.edm.Edm;
 import org.apache.olingo.odata4.commons.api.edm.EdmMapping;
 import org.apache.olingo.odata4.commons.api.edm.EdmProperty;
@@ -35,7 +34,7 @@ public class EdmPropertyImpl extends AbstractEdmProperty implements EdmProperty
   public EdmPropertyImpl(final Edm edm, final CommonProperty property) {
     super(edm, property.getName());
     this.property = property;
-    this.edmTypeInfo = new EdmTypeInfo(property.getType());
+    this.edmTypeInfo = new EdmTypeInfo.Builder().setTypeExpression(property.getType()).build();
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmReturnTypeImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmReturnTypeImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmReturnTypeImpl.java
index c17b996..4ab71a2 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmReturnTypeImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmReturnTypeImpl.java
@@ -19,7 +19,6 @@
 package org.apache.olingo.odata4.client.core.edm;
 
 import org.apache.olingo.odata4.client.api.edm.xml.v4.ReturnType;
-import org.apache.olingo.odata4.client.api.utils.EdmTypeInfo;
 import org.apache.olingo.odata4.commons.api.edm.Edm;
 import org.apache.olingo.odata4.commons.core.edm.AbstractEdmReturnType;
 
@@ -30,7 +29,7 @@ public class EdmReturnTypeImpl extends AbstractEdmReturnType {
   private final EdmTypeInfo returnTypeInfo;
 
   public static EdmReturnTypeImpl getInstance(final Edm edm, final ReturnType returnType) {
-    final EdmTypeInfo returnTypeInfo = new EdmTypeInfo(returnType.getType());
+    final EdmTypeInfo returnTypeInfo = new EdmTypeInfo.Builder().setTypeExpression(returnType.getType()).build();
     return new EdmReturnTypeImpl(edm, returnType, returnTypeInfo);
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmTypeInfo.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmTypeInfo.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmTypeInfo.java
new file mode 100644
index 0000000..1df8a4a
--- /dev/null
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmTypeInfo.java
@@ -0,0 +1,174 @@
+/*
+ * 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.odata4.client.core.edm;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.olingo.odata4.commons.api.edm.Edm;
+import org.apache.olingo.odata4.commons.api.edm.EdmComplexType;
+import org.apache.olingo.odata4.commons.api.edm.EdmEntityType;
+import org.apache.olingo.odata4.commons.api.edm.EdmEnumType;
+import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveType;
+import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.odata4.commons.core.edm.primitivetype.EdmPrimitiveTypeKind;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class EdmTypeInfo {
+
+  private static final Logger LOG = LoggerFactory.getLogger(EdmTypeInfo.class);
+
+  public static class Builder {
+
+    private String typeExpression;
+
+    private String defaultNamespace;
+
+    private Edm edm;
+
+    public Builder setTypeExpression(final String typeExpression) {
+      this.typeExpression = typeExpression;
+      return this;
+    }
+
+    public Builder setDefaultNamespace(final String defaultNamespace) {
+      this.defaultNamespace = defaultNamespace;
+      return this;
+    }
+
+    public Builder setEdm(final Edm edm) {
+      this.edm = edm;
+      return this;
+    }
+
+    public EdmTypeInfo build() {
+      return new EdmTypeInfo(edm, typeExpression.indexOf('.') == -1
+              ? defaultNamespace + "." + typeExpression
+              : typeExpression);
+    }
+  }
+
+  private final Edm edm;
+
+  private final String typeExpression;
+
+  private final boolean collection;
+
+  private final FullQualifiedName fullQualifiedName;
+
+  private EdmPrimitiveType primitiveType;
+
+  private EdmEnumType enumType;
+
+  private EdmComplexType complexType;
+
+  private EdmEntityType entityType;
+
+  private EdmTypeInfo(final Edm edm, final String typeExpression) {
+    this.edm = edm;
+    this.typeExpression = typeExpression;
+
+    String baseType;
+    final int collStartIdx = typeExpression.indexOf("Collection(");
+    final int collEndIdx = typeExpression.lastIndexOf(')');
+    if (collStartIdx == -1) {
+      baseType = typeExpression;
+      this.collection = false;
+    } else {
+      if (collEndIdx == -1) {
+        throw new IllegalArgumentException("Malformed type: " + typeExpression);
+      }
+
+      this.collection = true;
+      baseType = typeExpression.substring(collStartIdx + 11, collEndIdx);
+    }
+
+    final int lastDotIdx = baseType.lastIndexOf('.');
+    if (lastDotIdx == -1) {
+      throw new IllegalArgumentException("Cannot find namespace or alias in " + typeExpression);
+    }
+    final String namespace = baseType.substring(0, lastDotIdx);
+    final String typeName = baseType.substring(lastDotIdx + 1);
+    if (StringUtils.isBlank(typeName)) {
+      throw new IllegalArgumentException("Null or empty type name in " + typeExpression);
+    }
+
+    this.fullQualifiedName = new FullQualifiedName(namespace, typeName);
+
+    try {
+      this.primitiveType = EdmPrimitiveTypeKind.valueOf(this.fullQualifiedName.getName()).
+              getEdmPrimitiveTypeInstance();
+    } catch (IllegalArgumentException e) {
+      LOG.debug("{} does not appear to refer to an Edm primitive type", this.fullQualifiedName);
+    }
+    if (this.primitiveType == null && this.edm != null) {
+      this.enumType = this.edm.getEnumType(this.fullQualifiedName);
+      if (this.enumType == null) {
+        this.complexType = this.edm.getComplexType(this.fullQualifiedName);
+        if (this.complexType == null) {
+          this.entityType = this.edm.getEntityType(this.fullQualifiedName);
+        }
+      }
+    }
+  }
+
+  public String getTypeExpression() {
+    return typeExpression;
+  }
+
+  public boolean isCollection() {
+    return collection;
+  }
+
+  public FullQualifiedName getFullQualifiedName() {
+    return fullQualifiedName;
+  }
+
+  public boolean isPrimitiveType() {
+    return this.primitiveType != null;
+  }
+
+  public EdmPrimitiveType getPrimitiveType() {
+    return primitiveType;
+  }
+
+  public boolean isEnumType() {
+    return this.enumType != null;
+  }
+
+  public EdmEnumType getEnumType() {
+    return enumType;
+  }
+
+  public boolean isComplexType() {
+    return this.complexType != null;
+  }
+
+  public EdmComplexType getComplexType() {
+    return complexType;
+  }
+
+  public boolean isEntityType() {
+    return this.entityType != null;
+  }
+
+  public EdmEntityType getEntityType() {
+    return entityType;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmActionImportProxy.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmActionImportProxy.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmActionImportProxy.java
index ddf1b7c..d8c5634 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmActionImportProxy.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmActionImportProxy.java
@@ -19,7 +19,7 @@
 package org.apache.olingo.odata4.client.core.edm.v3;
 
 import org.apache.olingo.odata4.client.api.edm.xml.v3.FunctionImport;
-import org.apache.olingo.odata4.client.api.utils.EdmTypeInfo;
+import org.apache.olingo.odata4.client.core.edm.EdmTypeInfo;
 import org.apache.olingo.odata4.client.core.edm.EdmOperationImportImpl;
 import org.apache.olingo.odata4.commons.api.edm.Edm;
 import org.apache.olingo.odata4.commons.api.edm.EdmAction;
@@ -39,7 +39,7 @@ public class EdmActionImportProxy extends EdmOperationImportImpl implements EdmA
 
   @Override
   public EdmAction getAction() {
-    return edm.getAction(
-            new EdmTypeInfo(functionImport.getName(), container.getNamespace()).getFullQualifiedName(), null, null);
+    return edm.getAction(new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(functionImport.getName()).
+            setDefaultNamespace(container.getNamespace()).build().getFullQualifiedName(), null, null);
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmFunctionImportProxy.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmFunctionImportProxy.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmFunctionImportProxy.java
index 345dd6d..0279b17 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmFunctionImportProxy.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/v3/EdmFunctionImportProxy.java
@@ -20,7 +20,7 @@ package org.apache.olingo.odata4.client.core.edm.v3;
 
 import java.util.List;
 import org.apache.olingo.odata4.client.api.edm.xml.v3.FunctionImport;
-import org.apache.olingo.odata4.client.api.utils.EdmTypeInfo;
+import org.apache.olingo.odata4.client.core.edm.EdmTypeInfo;
 import org.apache.olingo.odata4.client.core.edm.EdmOperationImportImpl;
 import org.apache.olingo.odata4.commons.api.edm.Edm;
 import org.apache.olingo.odata4.commons.api.edm.EdmEntityContainer;
@@ -40,8 +40,7 @@ public class EdmFunctionImportProxy extends EdmOperationImportImpl implements Ed
 
   @Override
   public EdmFunction getFunction(final List<String> parameterNames) {
-    return edm.getFunction(
-            new EdmTypeInfo(functionImport.getName(), container.getNamespace()).getFullQualifiedName(),
-            null, null, parameterNames);
+    return edm.getFunction(new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(functionImport.getName()).
+            setDefaultNamespace(container.getNamespace()).build().getFullQualifiedName(), null, null, parameterNames);
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmPrimitiveType.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmPrimitiveType.java b/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmPrimitiveType.java
index 5771157..d8ae441 100644
--- a/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmPrimitiveType.java
+++ b/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/EdmPrimitiveType.java
@@ -68,9 +68,9 @@ package org.apache.olingo.odata4.commons.api.edm;
  */
 public interface EdmPrimitiveType extends EdmType {
 
-  static final String EDM_NAMESPACE = "Edm";
+  String EDM_NAMESPACE = "Edm";
 
-  static final String SYSTEM_NAMESPACE = "System";
+  String SYSTEM_NAMESPACE = "System";
 
   /**
    * Checks type compatibility.

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/848976bb/odata4-lib/odata4-commons-core/src/main/java/org/apache/olingo/odata4/commons/core/edm/primitivetype/EdmDuration.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-commons-core/src/main/java/org/apache/olingo/odata4/commons/core/edm/primitivetype/EdmDuration.java b/odata4-lib/odata4-commons-core/src/main/java/org/apache/olingo/odata4/commons/core/edm/primitivetype/EdmDuration.java
index 538c74d..5fe5554 100644
--- a/odata4-lib/odata4-commons-core/src/main/java/org/apache/olingo/odata4/commons/core/edm/primitivetype/EdmDuration.java
+++ b/odata4-lib/odata4-commons-core/src/main/java/org/apache/olingo/odata4/commons/core/edm/primitivetype/EdmDuration.java
@@ -51,6 +51,7 @@ public final class EdmDuration extends SingletonPrimitiveType {
   protected <T> T internalValueOfString(final String value,
           final Boolean isNullable, final Integer maxLength, final Integer precision,
           final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
+
     final Matcher matcher = PATTERN.matcher(value);
     if (!matcher.matches()
         || matcher.group(1) == null && matcher.group(2) == null && matcher.group(3) == null
@@ -68,7 +69,7 @@ public final class EdmDuration extends SingletonPrimitiveType {
             add(matcher.group(4) == null ? BigDecimal.ZERO : new BigDecimal(matcher.group(4)));
 
     if (result.scale() <= (precision == null ? 0 : precision)) {
-      result = value.startsWith("-") ? result.negate() : result;
+      result = value.charAt(0) == '-' ? result.negate() : result;
     } else {
       throw new EdmPrimitiveTypeException(
               "EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(literal, facets)");


[5/6] Merge from master

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/ConcurrencyMode.java
----------------------------------------------------------------------
diff --cc lib/client-api/src/main/java/org/apache/olingo/client/api/edm/ConcurrencyMode.java
index 0000000,0000000..90a8f7b
new file mode 100644
--- /dev/null
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/ConcurrencyMode.java
@@@ -1,0 -1,0 +1,26 @@@
++/*
++ * 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.odata4.client.api.edm;
++
++public enum ConcurrencyMode {
++
++  None,
++  Fixed
++
++}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/StoreGeneratedPattern.java
----------------------------------------------------------------------
diff --cc lib/client-api/src/main/java/org/apache/olingo/client/api/edm/StoreGeneratedPattern.java
index 0000000,0000000..c081bdf
new file mode 100644
--- /dev/null
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/StoreGeneratedPattern.java
@@@ -1,0 -1,0 +1,27 @@@
++/*
++ * 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.odata4.client.api.edm;
++
++public enum StoreGeneratedPattern {
++
++  None,
++  Identity,
++  Computed
++
++}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/CommonProperty.java
----------------------------------------------------------------------
diff --cc lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/CommonProperty.java
index 0000000,28688ab..b11de10
mode 000000,100644..100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/CommonProperty.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/CommonProperty.java
@@@ -1,0 -1,49 +1,39 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one
+  * or more contributor license agreements.  See the NOTICE file
+  * distributed with this work for additional information
+  * regarding copyright ownership.  The ASF licenses this file
+  * to you under the Apache License, Version 2.0 (the
+  * "License"); you may not use this file except in compliance
+  * with the License.  You may obtain a copy of the License at
+  *
+  *   http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing,
+  * software distributed under the License is distributed on an
+  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  * KIND, either express or implied.  See the License for the
+  * specific language governing permissions and limitations
+  * under the License.
+  */
+ package org.apache.olingo.client.api.edm.xml;
+ 
 -import org.apache.olingo.commons.api.edm.constants.ConcurrencyMode;
 -import org.apache.olingo.commons.api.edm.constants.StoreGeneratedPattern;
 -
+ public interface CommonProperty extends Named {
+ 
+   String getType();
+ 
+   boolean isNullable();
+ 
+   String getDefaultValue();
+ 
+   Integer getMaxLength();
+ 
 -  boolean isFixedLength();
 -
+   Integer getPrecision();
+ 
+   Integer getScale();
+ 
+   boolean isUnicode();
+ 
 -  String getCollation();
 -
+   String getSrid();
+ 
 -  ConcurrencyMode getConcurrencyMode();
 -
 -  StoreGeneratedPattern getStoreGeneratedPattern();
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v3/Property.java
----------------------------------------------------------------------
diff --cc lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v3/Property.java
index 0000000,c254f9a..6536a21
mode 000000,100644..100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v3/Property.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/edm/xml/v3/Property.java
@@@ -1,0 -1,38 +1,48 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one
+  * or more contributor license agreements.  See the NOTICE file
+  * distributed with this work for additional information
+  * regarding copyright ownership.  The ASF licenses this file
+  * to you under the Apache License, Version 2.0 (the
+  * "License"); you may not use this file except in compliance
+  * with the License.  You may obtain a copy of the License at
+  *
+  *   http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing,
+  * software distributed under the License is distributed on an
+  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  * KIND, either express or implied.  See the License for the
+  * specific language governing permissions and limitations
+  * under the License.
+  */
+ package org.apache.olingo.client.api.edm.xml.v3;
+ 
+ import org.apache.olingo.client.api.edm.xml.CommonProperty;
+ import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
++import org.apache.olingo.odata4.client.api.edm.ConcurrencyMode;
++import org.apache.olingo.odata4.client.api.edm.StoreGeneratedPattern;
+ 
+ public interface Property extends CommonProperty {
+ 
++  String getCollation();
++
++  boolean isFixedLength();
++
++  ConcurrencyMode getConcurrencyMode();
++
++  StoreGeneratedPattern getStoreGeneratedPattern();
++
+   String getFcSourcePath();
+ 
+   String getFcTargetPath();
+ 
+   EdmContentKind getFcContentKind();
+ 
+   String getFcNSPrefix();
+ 
+   String getFcNSURI();
+ 
+   boolean isFcKeepInContent();
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
index 0000000,ad1fb68..3827418
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
@@@ -1,0 -1,45 +1,45 @@@
+ /*
+  * 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.edm;
+ 
+ import org.apache.olingo.client.api.edm.xml.v4.ActionImport;
 -import org.apache.olingo.client.api.utils.EdmTypeInfo;
++import org.apache.olingo.client.core.edm.EdmTypeInfo;
+ import org.apache.olingo.commons.api.edm.Edm;
+ import org.apache.olingo.commons.api.edm.EdmAction;
+ import org.apache.olingo.commons.api.edm.EdmActionImport;
+ import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+ 
+ public class EdmActionImportImpl extends EdmOperationImportImpl implements EdmActionImport {
+ 
+   private final ActionImport actionImport;
+ 
+   public EdmActionImportImpl(final Edm edm, final EdmEntityContainer container, final String name,
+           final ActionImport actionImport) {
+ 
+     super(edm, container, name, actionImport.getEntitySet());
+     this.actionImport = actionImport;
+   }
+ 
+   @Override
+   public EdmAction getAction() {
 -    return edm.getAction(
 -            new EdmTypeInfo(actionImport.getAction(), container.getNamespace()).getFullQualifiedName(), null, null);
++    return edm.getAction(new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(actionImport.getAction()).
++            setDefaultNamespace(container.getNamespace()).build().getFullQualifiedName(), null, null);
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
index 0000000,332e673..bcc89dc
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
@@@ -1,0 -1,371 +1,374 @@@
+ /*
+  * 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.edm;
+ 
+ import java.util.HashMap;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
+ 
+ import org.apache.commons.lang3.StringUtils;
+ import org.apache.commons.lang3.builder.EqualsBuilder;
+ import org.apache.commons.lang3.builder.HashCodeBuilder;
+ import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
+ import org.apache.commons.lang3.builder.ToStringStyle;
+ import org.apache.olingo.client.api.UnsupportedInV3Exception;
+ import org.apache.olingo.client.api.edm.xml.CommonParameter;
+ import org.apache.olingo.client.api.edm.xml.ComplexType;
+ import org.apache.olingo.client.api.edm.xml.EntityContainer;
+ import org.apache.olingo.client.api.edm.xml.EntityType;
+ import org.apache.olingo.client.api.edm.xml.EnumType;
+ import org.apache.olingo.client.api.edm.xml.Schema;
+ import org.apache.olingo.client.api.edm.xml.XMLMetadata;
+ import org.apache.olingo.client.api.edm.xml.v3.FunctionImport;
+ import org.apache.olingo.client.api.edm.xml.v4.Action;
+ import org.apache.olingo.client.api.edm.xml.v4.Function;
+ import org.apache.olingo.client.api.edm.xml.v4.TypeDefinition;
 -import org.apache.olingo.client.api.utils.EdmTypeInfo;
+ import org.apache.olingo.client.core.edm.v3.EdmActionProxy;
+ import org.apache.olingo.client.core.edm.v3.EdmFunctionProxy;
+ import org.apache.olingo.client.core.edm.v3.V3FunctionImportUtils;
+ import org.apache.olingo.commons.api.edm.EdmAction;
+ import org.apache.olingo.commons.api.edm.EdmComplexType;
+ import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+ import org.apache.olingo.commons.api.edm.EdmEntityType;
+ import org.apache.olingo.commons.api.edm.EdmEnumType;
+ import org.apache.olingo.commons.api.edm.EdmFunction;
+ import org.apache.olingo.commons.api.edm.EdmServiceMetadata;
+ import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
+ import org.apache.olingo.commons.api.edm.FullQualifiedName;
+ import org.apache.olingo.commons.core.edm.AbstractEdmImpl;
+ 
+ public class EdmClientImpl extends AbstractEdmImpl {
+ 
+   private final XMLMetadata xmlMetadata;
+ 
+   private final EdmServiceMetadata serviceMetadata;
+ 
+   public EdmClientImpl(final XMLMetadata xmlMetadata) {
+     this.xmlMetadata = xmlMetadata;
+     this.serviceMetadata = AbstractEdmServiceMetadataImpl.getInstance(xmlMetadata);
+   }
+ 
+   public XMLMetadata getXMLMetadata() {
+     return xmlMetadata;
+   }
+ 
+   @Override
+   protected EdmServiceMetadata createServiceMetadata() {
+     return serviceMetadata;
+   }
+ 
+   @Override
+   protected Map<String, String> createAliasToNamespaceInfo() {
+     final Map<String, String> aliasToNamespace = new HashMap<String, String>();
+ 
+     for (Schema schema : xmlMetadata.getSchemas()) {
+       aliasToNamespace.put(null, schema.getNamespace());
+       if (StringUtils.isNotBlank(schema.getAlias())) {
+         aliasToNamespace.put(schema.getAlias(), schema.getNamespace());
+       }
+     }
+ 
+     return aliasToNamespace;
+   }
+ 
+   @Override
+   protected EdmEntityContainer createEntityContainer(final FullQualifiedName containerName) {
+     EdmEntityContainer result = null;
+ 
+     final Schema schema = xmlMetadata.getSchema(containerName.getNamespace());
+     if (schema != null) {
+       final EntityContainer xmlEntityContainer = schema.getDefaultEntityContainer();
+       if (xmlEntityContainer != null) {
+         result = new EdmEntityContainerImpl(this, containerName, xmlEntityContainer, xmlMetadata);
+       }
+     }
+ 
+     return result;
+   }
+ 
+   @Override
+   protected EdmEnumType createEnumType(final FullQualifiedName enumName) {
+     EdmEnumType result = null;
+ 
+     final Schema schema = xmlMetadata.getSchema(enumName.getNamespace());
+     if (schema != null) {
+       final EnumType xmlEnumType = schema.getEnumType(enumName.getName());
+       if (xmlEnumType != null) {
+         result = new EdmEnumTypeImpl(this, enumName, xmlEnumType);
+       }
+     }
+ 
+     return result;
+   }
+ 
+   @Override
+   protected EdmTypeDefinition createTypeDefinition(final FullQualifiedName typeDefinitionName) {
+     EdmTypeDefinition result = null;
+ 
+     final Schema schema = xmlMetadata.getSchema(typeDefinitionName.getNamespace());
+     if (schema instanceof org.apache.olingo.client.api.edm.xml.v4.Schema) {
+       final TypeDefinition xmlTypeDefinition = ((org.apache.olingo.client.api.edm.xml.v4.Schema) schema).
+               getTypeDefinition(typeDefinitionName.getName());
+       if (xmlTypeDefinition != null) {
+         result = new EdmTypeDefinitionImpl(this, typeDefinitionName, xmlTypeDefinition);
+       }
+     } else {
+       throw new UnsupportedInV3Exception();
+     }
+ 
+     return result;
+   }
+ 
+   @Override
+   protected EdmEntityType createEntityType(final FullQualifiedName entityTypeName) {
+     EdmEntityType result = null;
+ 
+     final Schema schema = xmlMetadata.getSchema(entityTypeName.getNamespace());
+     final EntityType xmlEntityType = schema.getEntityType(entityTypeName.getName());
+     if (xmlEntityType != null) {
+       result = EdmEntityTypeImpl.getInstance(this, entityTypeName, xmlEntityType);
+     }
+ 
+     return result;
+   }
+ 
+   @Override
+   protected EdmComplexType createComplexType(final FullQualifiedName complexTypeName) {
+     EdmComplexType result = null;
+ 
+     final Schema schema = xmlMetadata.getSchema(complexTypeName.getNamespace());
+     final ComplexType xmlComplexType = schema.getComplexType(complexTypeName.getName());
+     if (xmlComplexType != null) {
+       result = EdmComplexTypeImpl.getInstance(this, complexTypeName, xmlComplexType);
+     }
+ 
+     return result;
+   }
+ 
+   @Override
+   protected EdmAction createUnboundAction(final FullQualifiedName actionName) {
+     EdmAction result = null;
+ 
+     final Schema schema = xmlMetadata.getSchema(actionName.getNamespace());
+     if (schema instanceof org.apache.olingo.client.api.edm.xml.v4.Schema) {
+       final List<Action> actions = ((org.apache.olingo.client.api.edm.xml.v4.Schema) schema).
+               getActions(actionName.getName());
+       boolean found = false;
+       for (final Iterator<Action> itor = actions.iterator(); itor.hasNext() && !found;) {
+         final Action action = itor.next();
+         if (!action.isBound()) {
+           found = true;
+           result = EdmActionImpl.getInstance(this, actionName, action);
+         }
+       }
+     } else {
+       for (EntityContainer entityContainer : schema.getEntityContainers()) {
+         @SuppressWarnings("unchecked")
+         final List<FunctionImport> functionImports = (List<FunctionImport>) entityContainer.
+                 getFunctionImports(actionName.getName());
+         boolean found = false;
+         for (final Iterator<FunctionImport> itor = functionImports.iterator(); itor.hasNext() && !found;) {
+           final FunctionImport functionImport = itor.next();
+           if (!V3FunctionImportUtils.canProxyFunction(functionImport) && !functionImport.isBindable()) {
+             found = functionImport.getParameters().isEmpty();
+             result = EdmActionProxy.getInstance(this, actionName, functionImport);
+           }
+         }
+       }
+     }
+ 
+     return result;
+   }
+ 
+   @Override
+   protected EdmFunction createUnboundFunction(final FullQualifiedName functionName, final List<String> parameterNames) {
+     EdmFunction result = null;
+ 
+     final Schema schema = xmlMetadata.getSchema(functionName.getNamespace());
+     if (schema instanceof org.apache.olingo.client.api.edm.xml.v4.Schema) {
+       final List<Function> functions = ((org.apache.olingo.client.api.edm.xml.v4.Schema) schema).
+               getFunctions(functionName.getName());
+       boolean found = false;
+       for (final Iterator<Function> itor = functions.iterator(); itor.hasNext() && !found;) {
+         final Function function = itor.next();
+         if (!function.isBound()) {
+           final Set<String> functionParamNames = new HashSet<String>();
+           for (CommonParameter param : function.getParameters()) {
+             functionParamNames.add(param.getName());
+           }
+           found = parameterNames == null
+                   ? functionParamNames.isEmpty()
+                   : functionParamNames.containsAll(parameterNames);
+           result = EdmFunctionImpl.getInstance(this, functionName, function);
+         }
+       }
+     } else {
+       for (EntityContainer entityContainer : schema.getEntityContainers()) {
+         @SuppressWarnings("unchecked")
+         final List<FunctionImport> functionImports = (List<FunctionImport>) entityContainer.
+                 getFunctionImports(functionName.getName());
+         boolean found = false;
+         for (final Iterator<FunctionImport> itor = functionImports.iterator(); itor.hasNext() && !found;) {
+           final FunctionImport functionImport = itor.next();
+           if (V3FunctionImportUtils.canProxyFunction(functionImport) && !functionImport.isBindable()) {
+             final Set<String> functionParamNames = new HashSet<String>();
+             for (CommonParameter param : functionImport.getParameters()) {
+               functionParamNames.add(param.getName());
+             }
+             found = parameterNames == null
+                     ? functionParamNames.isEmpty()
+                     : functionParamNames.containsAll(parameterNames);
+             result = EdmFunctionProxy.getInstance(this, functionName, functionImport);
+           }
+         }
+       }
+     }
+ 
+     return result;
+   }
+ 
+   @Override
+   protected EdmAction createBoundAction(final FullQualifiedName actionName,
+           final FullQualifiedName bindingParameterTypeName, final Boolean isBindingParameterCollection) {
+ 
+     EdmAction result = null;
+ 
+     final Schema schema = xmlMetadata.getSchema(actionName.getNamespace());
+     if (schema instanceof org.apache.olingo.client.api.edm.xml.v4.Schema) {
+       final List<Action> actions = ((org.apache.olingo.client.api.edm.xml.v4.Schema) schema).
+               getActions(actionName.getName());
+       boolean found = false;
+       for (final Iterator<Action> itor = actions.iterator(); itor.hasNext() && !found;) {
+         final Action action = itor.next();
+         if (action.isBound()) {
 -          final EdmTypeInfo boundParam = new EdmTypeInfo(action.getParameters().get(0).getType());
++          final EdmTypeInfo boundParam = new EdmTypeInfo.Builder().setEdm(this).
++                  setTypeExpression(action.getParameters().get(0).getType()).build();
+           if (bindingParameterTypeName.equals(boundParam.getFullQualifiedName())
+                   && isBindingParameterCollection.booleanValue() == boundParam.isCollection()) {
+ 
+             found = true;
+             result = EdmActionImpl.getInstance(this, actionName, action);
+           }
+         }
+       }
+     } else {
+       for (EntityContainer entityContainer : schema.getEntityContainers()) {
+         @SuppressWarnings("unchecked")
+         final List<FunctionImport> functionImports = (List<FunctionImport>) entityContainer.
+                 getFunctionImports(actionName.getName());
+         boolean found = false;
+         for (final Iterator<FunctionImport> itor = functionImports.iterator(); itor.hasNext() && !found;) {
+           final FunctionImport functionImport = itor.next();
+           if (!V3FunctionImportUtils.canProxyFunction(functionImport) && functionImport.isBindable()) {
 -            final EdmTypeInfo boundParam = new EdmTypeInfo(functionImport.getParameters().get(0).getType());
++            final EdmTypeInfo boundParam = new EdmTypeInfo.Builder().setEdm(this).
++                    setTypeExpression(functionImport.getParameters().get(0).getType()).build();
+             if (bindingParameterTypeName.equals(boundParam.getFullQualifiedName())
+                     && isBindingParameterCollection.booleanValue() == boundParam.isCollection()) {
+ 
+               found = true;
+               result = EdmActionProxy.getInstance(this, actionName, functionImport);
+             }
+           }
+         }
+       }
+     }
+ 
+     return result;
+   }
+ 
+   @Override
+   protected EdmFunction createBoundFunction(final FullQualifiedName functionName,
+           final FullQualifiedName bindingParameterTypeName, final Boolean isBindingParameterCollection,
+           final List<String> parameterNames) {
+ 
+     EdmFunction result = null;
+ 
+     final Schema schema = xmlMetadata.getSchema(functionName.getNamespace());
+     if (schema instanceof org.apache.olingo.client.api.edm.xml.v4.Schema) {
+       final List<Function> functions = ((org.apache.olingo.client.api.edm.xml.v4.Schema) schema).
+               getFunctions(functionName.getName());
+       boolean found = false;
+       for (final Iterator<Function> itor = functions.iterator(); itor.hasNext() && !found;) {
+         final Function function = itor.next();
+         if (function.isBound()) {
 -          final EdmTypeInfo boundParam = new EdmTypeInfo(function.getParameters().get(0).getType());
++          final EdmTypeInfo boundParam = new EdmTypeInfo.Builder().setEdm(this).
++                  setTypeExpression(function.getParameters().get(0).getType()).build();
+           if (bindingParameterTypeName.equals(boundParam.getFullQualifiedName())
+                   && isBindingParameterCollection.booleanValue() == boundParam.isCollection()) {
+ 
+             final Set<String> functionParamNames = new HashSet<String>();
+             for (CommonParameter param : function.getParameters()) {
+               functionParamNames.add(param.getName());
+             }
+             found = parameterNames == null
+                     ? functionParamNames.isEmpty()
+                     : functionParamNames.containsAll(parameterNames);
+             result = EdmFunctionImpl.getInstance(this, functionName, function);
+           }
+         }
+       }
+     } else {
+       for (EntityContainer entityContainer : schema.getEntityContainers()) {
+         @SuppressWarnings("unchecked")
+         final List<FunctionImport> functionImports = (List<FunctionImport>) entityContainer.
+                 getFunctionImports(functionName.getName());
+         boolean found = false;
+         for (final Iterator<FunctionImport> itor = functionImports.iterator(); itor.hasNext() && !found;) {
+           final FunctionImport functionImport = itor.next();
+           if (!V3FunctionImportUtils.canProxyFunction(functionImport) && functionImport.isBindable()) {
 -            final EdmTypeInfo boundParam = new EdmTypeInfo(functionImport.getParameters().get(0).getType());
++            final EdmTypeInfo boundParam = new EdmTypeInfo.Builder().setEdm(this).
++                    setTypeExpression(functionImport.getParameters().get(0).getType()).build();
+             if (bindingParameterTypeName.equals(boundParam.getFullQualifiedName())
+                     && isBindingParameterCollection.booleanValue() == boundParam.isCollection()) {
+ 
+               final Set<String> functionParamNames = new HashSet<String>();
+               for (CommonParameter param : functionImport.getParameters()) {
+                 functionParamNames.add(param.getName());
+               }
+               found = parameterNames == null
+                       ? functionParamNames.isEmpty()
+                       : functionParamNames.containsAll(parameterNames);
+               result = EdmFunctionProxy.getInstance(this, functionName, functionImport);
+             }
+           }
+         }
+       }
+     }
+ 
+     return result;
+   }
+ 
+   @Override
+   public boolean equals(final Object obj) {
+     return EqualsBuilder.reflectionEquals(this, obj);
+   }
+ 
+   @Override
+   public int hashCode() {
+     return HashCodeBuilder.reflectionHashCode(this);
+   }
+ 
+   @Override
+   public String toString() {
+     return ReflectionToStringBuilder.toString(this, ToStringStyle.MULTI_LINE_STYLE);
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmComplexTypeImpl.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmComplexTypeImpl.java
index 0000000,7f126f9..43f5357
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmComplexTypeImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmComplexTypeImpl.java
@@@ -1,0 -1,68 +1,66 @@@
+ /*
+  * 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.edm;
+ 
+ import java.util.Map;
 -
+ import org.apache.olingo.client.api.edm.xml.ComplexType;
 -import org.apache.olingo.client.api.utils.EdmTypeInfo;
+ import org.apache.olingo.commons.api.edm.Edm;
+ import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
+ import org.apache.olingo.commons.api.edm.EdmProperty;
+ import org.apache.olingo.commons.api.edm.FullQualifiedName;
+ import org.apache.olingo.commons.core.edm.AbstractEdmComplexType;
+ import org.apache.olingo.commons.core.edm.EdmStructuredTypeHelper;
+ 
+ public class EdmComplexTypeImpl extends AbstractEdmComplexType {
+ 
+   private final EdmStructuredTypeHelper helper;
+ 
+   public static EdmComplexTypeImpl getInstance(final Edm edm, final FullQualifiedName fqn,
+           final ComplexType complexType) {
+ 
+     FullQualifiedName baseTypeName = null;
+     if (complexType instanceof org.apache.olingo.client.api.edm.xml.v4.ComplexType) {
+       final String baseType = ((org.apache.olingo.client.api.edm.xml.v4.ComplexType) complexType).getBaseType();
+       baseTypeName = baseType == null
 -              ? null : new EdmTypeInfo(baseType).getFullQualifiedName();
++              ? null : new EdmTypeInfo.Builder().setTypeExpression(baseType).build().getFullQualifiedName();
+     }
+     final EdmComplexTypeImpl instance = new EdmComplexTypeImpl(edm, fqn, baseTypeName, complexType);
+     instance.baseType = instance.buildBaseType(baseTypeName);
+ 
+     return instance;
+   }
+ 
+   private EdmComplexTypeImpl(final Edm edm, final FullQualifiedName fqn, final FullQualifiedName baseTypeName,
+           final ComplexType complexType) {
+ 
+     super(edm, fqn, baseTypeName);
+     this.helper = new EdmStructuredTypeHelperImpl(edm, complexType);
+   }
+ 
+   @Override
+   protected Map<String, EdmProperty> getProperties() {
+     return helper.getProperties();
+   }
+ 
+   @Override
+   protected Map<String, EdmNavigationProperty> getNavigationProperties() {
+     return helper.getNavigationProperties();
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityContainerImpl.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityContainerImpl.java
index 0000000,fdbbed2..871bfb2
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityContainerImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityContainerImpl.java
@@@ -1,0 -1,125 +1,123 @@@
+ /*
+  * 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.edm;
+ 
+ import org.apache.olingo.client.api.UnsupportedInV3Exception;
+ import org.apache.olingo.client.api.edm.xml.CommonFunctionImport;
+ import org.apache.olingo.client.api.edm.xml.EntityContainer;
+ import org.apache.olingo.client.api.edm.xml.EntitySet;
+ import org.apache.olingo.client.api.edm.xml.XMLMetadata;
+ import org.apache.olingo.client.api.edm.xml.v3.FunctionImport;
+ import org.apache.olingo.client.api.edm.xml.v4.ActionImport;
+ import org.apache.olingo.client.api.edm.xml.v4.Singleton;
 -import org.apache.olingo.client.api.utils.EdmTypeInfo;
+ import org.apache.olingo.client.core.edm.v3.EdmActionImportProxy;
+ import org.apache.olingo.client.core.edm.v3.EdmEntitySetProxy;
+ import org.apache.olingo.client.core.edm.v3.EdmFunctionImportProxy;
+ import org.apache.olingo.commons.api.edm.Edm;
+ import org.apache.olingo.commons.api.edm.EdmActionImport;
+ import org.apache.olingo.commons.api.edm.EdmEntitySet;
+ import org.apache.olingo.commons.api.edm.EdmException;
+ import org.apache.olingo.commons.api.edm.EdmFunctionImport;
+ import org.apache.olingo.commons.api.edm.EdmSingleton;
+ import org.apache.olingo.commons.api.edm.FullQualifiedName;
+ import org.apache.olingo.commons.core.edm.AbstractEdmEntityContainer;
+ 
+ public class EdmEntityContainerImpl extends AbstractEdmEntityContainer {
+ 
+   private final EntityContainer xmlEntityContainer;
+ 
+   private final XMLMetadata xmlMetadata;
+ 
+   public EdmEntityContainerImpl(final Edm edm, final FullQualifiedName entityContainerName,
+           final EntityContainer xmlEntityContainer, final XMLMetadata xmlMetadata) {
+ 
+     super(edm, entityContainerName);
+ 
+     this.xmlEntityContainer = xmlEntityContainer;
+     this.xmlMetadata = xmlMetadata;
+   }
+ 
+   @Override
+   protected EdmSingleton createSingleton(final String singletonName) {
+     if (!(xmlEntityContainer instanceof org.apache.olingo.client.api.edm.xml.v4.EntityContainer)) {
+       throw new UnsupportedInV3Exception();
+     }
+ 
+     final Singleton singleton = ((org.apache.olingo.client.api.edm.xml.v4.EntityContainer) xmlEntityContainer).
+             getSingleton(singletonName);
+     if (singleton == null) {
+       throw new EdmException("Singleton named '" + singletonName + "' not found in " + entityContainerName);
+     }
 -    return new EdmSingletonImpl(edm, this, singletonName,
 -            new EdmTypeInfo(singleton.getEntityType(), entityContainerName.getNamespace()).getFullQualifiedName(),
 -            singleton);
++    return new EdmSingletonImpl(edm, this, singletonName, new EdmTypeInfo.Builder().
++            setTypeExpression(singleton.getEntityType()).setDefaultNamespace(entityContainerName.getNamespace()).
++            build().getFullQualifiedName(), singleton);
+   }
+ 
+   @Override
+   protected EdmEntitySet createEntitySet(final String entitySetName) {
+     final EntitySet entitySet = xmlEntityContainer.getEntitySet(entitySetName);
+     if (entitySet == null) {
+       throw new EdmException("EntitySet named '" + entitySetName + "' not found in " + entityContainerName);
+     }
+ 
++    final FullQualifiedName entityType = new EdmTypeInfo.Builder().setTypeExpression(entitySet.getEntityType()).
++            setDefaultNamespace(entityContainerName.getNamespace()).build().getFullQualifiedName();
+     if (entitySet instanceof org.apache.olingo.client.api.edm.xml.v4.EntitySet) {
 -      return new EdmEntitySetImpl(edm, this, entitySetName,
 -              new EdmTypeInfo(entitySet.getEntityType(), entityContainerName.getNamespace()).getFullQualifiedName(),
++      return new EdmEntitySetImpl(edm, this, entitySetName, entityType,
+               (org.apache.olingo.client.api.edm.xml.v4.EntitySet) entitySet);
+     } else {
 -      return new EdmEntitySetProxy(edm, this, entitySetName,
 -              new EdmTypeInfo(entitySet.getEntityType(), entityContainerName.getNamespace()).getFullQualifiedName(),
 -              xmlMetadata);
++      return new EdmEntitySetProxy(edm, this, entitySetName, entityType, xmlMetadata);
+     }
+   }
+ 
+   @Override
+   protected EdmActionImport createActionImport(final String actionImportName) {
+     if (xmlEntityContainer instanceof org.apache.olingo.client.api.edm.xml.v4.EntityContainer) {
 -      final ActionImport actionImport
 -              = ((org.apache.olingo.client.api.edm.xml.v4.EntityContainer) xmlEntityContainer).
++      final ActionImport actionImport =
++              ((org.apache.olingo.client.api.edm.xml.v4.EntityContainer) xmlEntityContainer).
+               getActionImport(actionImportName);
+       if (actionImport == null) {
+         throw new EdmException("ActionImport named '" + actionImportName + "' not found in " + entityContainerName);
+       }
+       return new EdmActionImportImpl(edm, this, actionImportName, actionImport);
+     } else {
+       final FunctionImport functionImport = (FunctionImport) xmlEntityContainer.getFunctionImport(actionImportName);
+       if (functionImport == null) {
+         throw new EdmException("FunctionImport named '" + actionImportName + "' not found in " + entityContainerName);
+       }
+       return new EdmActionImportProxy(edm, this, actionImportName, functionImport);
+     }
+   }
+ 
+   @Override
+   protected EdmFunctionImport createFunctionImport(final String functionImportName) {
+     final CommonFunctionImport functionImport = xmlEntityContainer.getFunctionImport(functionImportName);
+     if (functionImport == null) {
+       throw new EdmException("FunctionImport named '" + functionImportName + "' not found in " + entityContainerName);
+     }
+ 
+     if (functionImport instanceof org.apache.olingo.client.api.edm.xml.v4.FunctionImport) {
+       return new EdmFunctionImportImpl(edm, this, functionImportName,
+               (org.apache.olingo.client.api.edm.xml.v4.FunctionImport) functionImport);
+     } else {
+       return new EdmFunctionImportProxy(edm, this, functionImportName,
+               (org.apache.olingo.client.api.edm.xml.v3.FunctionImport) functionImport);
+     }
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityTypeImpl.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityTypeImpl.java
index 0000000,218c5cb..914ad1c
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityTypeImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEntityTypeImpl.java
@@@ -1,0 -1,80 +1,80 @@@
+ /*
+  * 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.edm;
+ 
+ import java.util.ArrayList;
+ import java.util.List;
+ import java.util.Map;
+ 
+ import org.apache.olingo.client.api.edm.xml.EntityType;
+ import org.apache.olingo.client.api.edm.xml.PropertyRef;
 -import org.apache.olingo.client.api.utils.EdmTypeInfo;
+ import org.apache.olingo.commons.api.edm.Edm;
+ import org.apache.olingo.commons.api.edm.EdmEntityType;
+ import org.apache.olingo.commons.api.edm.EdmKeyPropertyRef;
+ import org.apache.olingo.commons.api.edm.EdmNavigationProperty;
+ import org.apache.olingo.commons.api.edm.EdmProperty;
+ import org.apache.olingo.commons.api.edm.FullQualifiedName;
+ import org.apache.olingo.commons.core.edm.AbstractEdmEntityType;
+ import org.apache.olingo.commons.core.edm.EdmStructuredTypeHelper;
+ 
+ public class EdmEntityTypeImpl extends AbstractEdmEntityType {
+ 
+   private final EdmStructuredTypeHelper helper;
+ 
+   public static EdmEntityTypeImpl getInstance(final Edm edm, final FullQualifiedName fqn, final EntityType entityType) {
+     final FullQualifiedName baseTypeName = entityType.getBaseType() == null
 -            ? null : new EdmTypeInfo(entityType.getBaseType()).getFullQualifiedName();
++            ? null
++            : new EdmTypeInfo.Builder().setTypeExpression(entityType.getBaseType()).build().getFullQualifiedName();
+     final EdmEntityTypeImpl instance = new EdmEntityTypeImpl(edm, fqn, baseTypeName, entityType);
+     instance.baseType = instance.buildBaseType(baseTypeName);
+ 
+     if (instance.baseType == null) {
+       instance.entityBaseType = null;
+ 
+       final List<EdmKeyPropertyRef> edmKey = new ArrayList<EdmKeyPropertyRef>(
+               entityType.getKey().getPropertyRefs().size());
+       for (PropertyRef ref : entityType.getKey().getPropertyRefs()) {
+         edmKey.add(new EdmKeyPropertyRefImpl(instance, ref));
+       }
+       instance.setEdmKeyPropertyRef(edmKey);
+     } else {
+       instance.entityBaseType = (EdmEntityType) instance.baseType;
+     }
+ 
+     return instance;
+   }
+ 
+   private EdmEntityTypeImpl(final Edm edm, final FullQualifiedName fqn, final FullQualifiedName baseTypeName,
+           final EntityType entityType) {
+ 
+     super(edm, fqn, baseTypeName, entityType.isHasStream());
+     this.helper = new EdmStructuredTypeHelperImpl(edm, entityType);
+   }
+ 
+   @Override
+   protected Map<String, EdmProperty> getProperties() {
+     return helper.getProperties();
+   }
+ 
+   @Override
+   protected Map<String, EdmNavigationProperty> getNavigationProperties() {
+     return helper.getNavigationProperties();
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEnumTypeImpl.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEnumTypeImpl.java
index 0000000,3260802..10a1b2e
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEnumTypeImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmEnumTypeImpl.java
@@@ -1,0 -1,84 +1,96 @@@
+ /*
+  * 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.edm;
+ 
+ import org.apache.olingo.client.api.edm.xml.EnumType;
+ import org.apache.olingo.client.api.edm.xml.Member;
+ import org.apache.olingo.commons.api.edm.Edm;
+ import org.apache.olingo.commons.api.edm.EdmEnumType;
+ import org.apache.olingo.commons.api.edm.EdmMember;
+ import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
+ import org.apache.olingo.commons.api.edm.FullQualifiedName;
+ import org.apache.olingo.commons.core.edm.AbstractEdmEnumType;
+ import org.apache.olingo.commons.core.edm.EdmMemberImpl;
+ import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeKind;
+ 
+ import java.util.ArrayList;
+ import java.util.Collection;
+ import java.util.Collections;
+ import java.util.LinkedHashMap;
+ import java.util.List;
+ import java.util.Map;
++import org.apache.commons.lang3.ArrayUtils;
++import org.apache.olingo.commons.api.edm.EdmException;
+ 
+ public class EdmEnumTypeImpl extends AbstractEdmEnumType implements EdmEnumType {
+ 
++  private static final EdmPrimitiveTypeKind[] VALID_UNDERLYING_TYPES = new EdmPrimitiveTypeKind[] {
++    EdmPrimitiveTypeKind.Byte,
++    EdmPrimitiveTypeKind.SByte,
++    EdmPrimitiveTypeKind.Int16,
++    EdmPrimitiveTypeKind.Int32,
++    EdmPrimitiveTypeKind.Int64
++  };
++
+   private final EdmPrimitiveType underlyingType;
+ 
+   private final List<String> memberNames;
+ 
+   private final Map<String, EdmMember> members;
+ 
+   public EdmEnumTypeImpl(final Edm edm, final FullQualifiedName fqn, final EnumType xmlEnumType) {
+     super(edm, fqn, xmlEnumType.isFlags());
+ 
+     if (xmlEnumType.getUnderlyingType() == null) {
+       this.underlyingType = EdmPrimitiveTypeKind.Int32.getEdmPrimitiveTypeInstance();
+     } else {
 -      this.underlyingType = EdmPrimitiveTypeKind.fromString(
 -              xmlEnumType.getUnderlyingType()).getEdmPrimitiveTypeInstance();
 -      // TODO: Should we validate that the underlying type is of byte, sbyte, in16, int32 or int64?
++      this.underlyingType = EdmPrimitiveTypeKind.valueOfFQN(xmlEnumType.getUnderlyingType()).
++              getEdmPrimitiveTypeInstance();
++      if (!ArrayUtils.contains(VALID_UNDERLYING_TYPES, this.underlyingType.getKind())) {
++        throw new EdmException("Not allowed as underlying type: " + this.underlyingType.getKind());
++      }
+     }
+ 
+     final List<? extends Member> xmlMembers = xmlEnumType.getMembers();
+     final List<String> _memberNames = new ArrayList<String>();
+     final Map<String, EdmMember> _members = new LinkedHashMap<String, EdmMember>(xmlMembers.size());
+     for (Member xmlMember : xmlMembers) {
+       _memberNames.add(xmlMember.getName());
+       _members.put(xmlMember.getName(), new EdmMemberImpl(edm, xmlMember.getName(), xmlMember.getValue()));
+     }
+     this.memberNames = Collections.unmodifiableList(_memberNames);
+     this.members = Collections.unmodifiableMap(_members);
+   }
+ 
+   @Override
+   public EdmPrimitiveType getUnderlyingType() {
+     return underlyingType;
+   }
+ 
+   @Override
+   public List<String> getMemberNames() {
+     return memberNames;
+   }
+ 
+   @Override
+   protected Collection<? extends EdmMember> getMembers() {
+     return members.values();
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java
index 0000000,d3004cb..ced5ae4
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmFunctionImportImpl.java
@@@ -1,0 -1,48 +1,46 @@@
+ /*
+  * 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.edm;
+ 
+ import java.util.List;
+ 
+ import org.apache.olingo.client.api.edm.xml.v4.FunctionImport;
 -import org.apache.olingo.client.api.utils.EdmTypeInfo;
+ import org.apache.olingo.commons.api.edm.Edm;
+ import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+ import org.apache.olingo.commons.api.edm.EdmFunction;
+ import org.apache.olingo.commons.api.edm.EdmFunctionImport;
+ 
+ public class EdmFunctionImportImpl extends EdmOperationImportImpl implements EdmFunctionImport {
+ 
+   private final FunctionImport functionImport;
+ 
+   public EdmFunctionImportImpl(final Edm edm, final EdmEntityContainer container, final String name,
+           final FunctionImport functionImport) {
+ 
+     super(edm, container, name, functionImport.getEntitySet());
+     this.functionImport = functionImport;
+   }
+ 
+   @Override
+   public EdmFunction getFunction(final List<String> parameterNames) {
 -    return edm.getFunction(
 -            new EdmTypeInfo(functionImport.getFunction(), container.getNamespace()).getFullQualifiedName(),
 -            null, null, parameterNames);
++    return edm.getFunction(new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(functionImport.getFunction()).
++            setDefaultNamespace(container.getNamespace()).build().getFullQualifiedName(), null, null, parameterNames);
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmNavigationPropertyImpl.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmNavigationPropertyImpl.java
index 0000000,cab0297..19df620
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmNavigationPropertyImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmNavigationPropertyImpl.java
@@@ -1,0 -1,75 +1,74 @@@
+ /*
+  * 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.edm;
+ 
+ import java.util.List;
+ 
+ import org.apache.olingo.client.api.edm.xml.v4.NavigationProperty;
+ import org.apache.olingo.client.api.edm.xml.v4.ReferentialConstraint;
 -import org.apache.olingo.client.api.utils.EdmTypeInfo;
+ import org.apache.olingo.commons.api.edm.Edm;
+ import org.apache.olingo.commons.api.edm.FullQualifiedName;
+ import org.apache.olingo.commons.core.edm.AbstractEdmNavigationProperty;
+ 
+ public class EdmNavigationPropertyImpl extends AbstractEdmNavigationProperty {
+ 
+   private final NavigationProperty navigationProperty;
+ 
+   private final EdmTypeInfo edmTypeInfo;
+ 
+   public EdmNavigationPropertyImpl(final Edm edm, final NavigationProperty navigationProperty) {
+     super(edm, navigationProperty.getName());
+     this.navigationProperty = navigationProperty;
 -    this.edmTypeInfo = new EdmTypeInfo(navigationProperty.getType());
++    this.edmTypeInfo = new EdmTypeInfo.Builder().setTypeExpression(navigationProperty.getType()).build();
+   }
+ 
+   @Override
+   protected FullQualifiedName getTypeFQN() {
+     return edmTypeInfo.getFullQualifiedName();
+   }
+ 
+   @Override
+   protected String internatGetPartner() {
+     return navigationProperty.getPartner();
+   }
+ 
+   @Override
+   public boolean isCollection() {
+     return edmTypeInfo.isCollection();
+   }
+ 
+   @Override
+   public Boolean isNullable() {
+     return navigationProperty.isNullable();
+   }
+ 
+   @Override
+   public String getReferencingPropertyName(final String referencedPropertyName) {
+     final List<? extends ReferentialConstraint> referentialConstraints = navigationProperty.getReferentialConstraints();
+     if (referentialConstraints != null) {
+       for (ReferentialConstraint constraint : referentialConstraints) {
+         if (constraint.getReferencedProperty().equals(referencedPropertyName)) {
+           return constraint.getProperty();
+         }
+       }
+     }
+     return null;
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmParameterImpl.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmParameterImpl.java
index 0000000,33dfad3..e912ecb
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmParameterImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmParameterImpl.java
@@@ -1,0 -1,74 +1,73 @@@
+ /*
+  * 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.edm;
+ 
+ import org.apache.olingo.client.api.edm.xml.CommonParameter;
 -import org.apache.olingo.client.api.utils.EdmTypeInfo;
+ import org.apache.olingo.commons.api.edm.Edm;
+ import org.apache.olingo.commons.api.edm.EdmMapping;
+ import org.apache.olingo.commons.core.edm.AbstractEdmParameter;
+ 
+ public class EdmParameterImpl extends AbstractEdmParameter {
+ 
+   private final CommonParameter parameter;
+ 
+   private final EdmTypeInfo parameterInfo;
+ 
+   public static EdmParameterImpl getInstance(final Edm edm, final CommonParameter parameter) {
 -    final EdmTypeInfo paramTypeInfo = new EdmTypeInfo(parameter.getType());
++    final EdmTypeInfo paramTypeInfo = new EdmTypeInfo.Builder().setTypeExpression(parameter.getType()).build();
+     return new EdmParameterImpl(edm, parameter, paramTypeInfo);
+   }
+ 
+   private EdmParameterImpl(final Edm edm, final CommonParameter parameter, final EdmTypeInfo parameterInfo) {
+     super(edm, parameter.getName(), parameterInfo.getFullQualifiedName());
+     this.parameter = parameter;
+     this.parameterInfo = parameterInfo;
+   }
+ 
+   @Override
+   public boolean isCollection() {
+     return parameterInfo.isCollection();
+   }
+ 
+   @Override
+   public EdmMapping getMapping() {
+     throw new UnsupportedOperationException("Not supported in client code.");
+   }
+ 
+   @Override
+   public Boolean isNullable() {
+     return parameter.isNullable();
+   }
+ 
+   @Override
+   public Integer getMaxLength() {
+     return parameter.getMaxLength();
+   }
+ 
+   @Override
+   public Integer getPrecision() {
+     return parameter.getPrecision();
+   }
+ 
+   @Override
+   public Integer getScale() {
+     return parameter.getScale();
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmPropertyImpl.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmPropertyImpl.java
index 0000000,399b344..8e3eba6
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmPropertyImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmPropertyImpl.java
@@@ -1,0 -1,91 +1,90 @@@
+ /*
+  * 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.edm;
+ 
+ import org.apache.olingo.client.api.edm.xml.CommonProperty;
 -import org.apache.olingo.client.api.utils.EdmTypeInfo;
+ import org.apache.olingo.commons.api.edm.Edm;
+ import org.apache.olingo.commons.api.edm.EdmMapping;
+ import org.apache.olingo.commons.api.edm.EdmProperty;
+ import org.apache.olingo.commons.api.edm.FullQualifiedName;
+ import org.apache.olingo.commons.core.edm.AbstractEdmProperty;
+ 
+ public class EdmPropertyImpl extends AbstractEdmProperty implements EdmProperty {
+ 
+   private final CommonProperty property;
+ 
+   private final EdmTypeInfo edmTypeInfo;
+ 
+   public EdmPropertyImpl(final Edm edm, final CommonProperty property) {
+     super(edm, property.getName());
+     this.property = property;
 -    this.edmTypeInfo = new EdmTypeInfo(property.getType());
++    this.edmTypeInfo = new EdmTypeInfo.Builder().setTypeExpression(property.getType()).build();
+   }
+ 
+   @Override
+   protected FullQualifiedName getTypeFQN() {
+     return edmTypeInfo.getFullQualifiedName();
+   }
+ 
+   @Override
+   public boolean isCollection() {
+     return edmTypeInfo.isCollection();
+   }
+ 
+   @Override
+   public EdmMapping getMapping() {
+     throw new UnsupportedOperationException("Not supported in client code.");
+   }
+ 
+   @Override
+   public String getMimeType() {
+     throw new UnsupportedOperationException("Not supported in client code.");
+   }
+ 
+   @Override
+   public Boolean isNullable() {
+     return property.isNullable();
+   }
+ 
+   @Override
+   public Integer getMaxLength() {
+     return property.getMaxLength();
+   }
+ 
+   @Override
+   public Integer getPrecision() {
+     return property.getPrecision();
+   }
+ 
+   @Override
+   public Integer getScale() {
+     return property.getScale();
+   }
+ 
+   @Override
+   public Boolean isUnicode() {
+     return property.isUnicode();
+   }
+ 
+   @Override
+   public String getDefaultValue() {
+     return property.getDefaultValue();
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReturnTypeImpl.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReturnTypeImpl.java
index 0000000,72d6626..b559c71
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReturnTypeImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmReturnTypeImpl.java
@@@ -1,0 -1,68 +1,67 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one
+  * or more contributor license agreements.  See the NOTICE file
+  * distributed with this work for additional information
+  * regarding copyright ownership.  The ASF licenses this file
+  * to you under the Apache License, Version 2.0 (the
+  * "License"); you may not use this file except in compliance
+  * with the License.  You may obtain a copy of the License at
+  *
+  *   http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing,
+  * software distributed under the License is distributed on an
+  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  * KIND, either express or implied.  See the License for the
+  * specific language governing permissions and limitations
+  * under the License.
+  */
+ package org.apache.olingo.client.core.edm;
+ 
+ import org.apache.olingo.client.api.edm.xml.v4.ReturnType;
 -import org.apache.olingo.client.api.utils.EdmTypeInfo;
+ import org.apache.olingo.commons.api.edm.Edm;
+ import org.apache.olingo.commons.core.edm.AbstractEdmReturnType;
+ 
+ public class EdmReturnTypeImpl extends AbstractEdmReturnType {
+ 
+   private final ReturnType returnType;
+ 
+   private final EdmTypeInfo returnTypeInfo;
+ 
+   public static EdmReturnTypeImpl getInstance(final Edm edm, final ReturnType returnType) {
 -    final EdmTypeInfo returnTypeInfo = new EdmTypeInfo(returnType.getType());
++    final EdmTypeInfo returnTypeInfo = new EdmTypeInfo.Builder().setTypeExpression(returnType.getType()).build();
+     return new EdmReturnTypeImpl(edm, returnType, returnTypeInfo);
+   }
+ 
+   private EdmReturnTypeImpl(final Edm edm, final ReturnType returnType, final EdmTypeInfo returnTypeInfo) {
+     super(edm, returnTypeInfo.getFullQualifiedName());
+     this.returnType = returnType;
+     this.returnTypeInfo = returnTypeInfo;
+   }
+ 
+   @Override
+   public Boolean isNullable() {
+     return returnType.isNullable();
+   }
+ 
+   @Override
+   public Integer getMaxLength() {
+     return returnType.getMaxLength();
+   }
+ 
+   @Override
+   public Integer getPrecision() {
+     return returnType.getPrecision();
+   }
+ 
+   @Override
+   public Integer getScale() {
+     return returnType.getScale();
+   }
+ 
+   @Override
+   public boolean isCollection() {
+     return returnTypeInfo.isCollection();
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeDefinitionImpl.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeDefinitionImpl.java
index 0000000,afe6512..cf2ad47
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeDefinitionImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeDefinitionImpl.java
@@@ -1,0 -1,74 +1,73 @@@
+ /* 
+  * 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.edm;
+ 
+ import org.apache.olingo.client.api.edm.xml.v4.TypeDefinition;
+ import org.apache.olingo.commons.api.edm.Edm;
+ import org.apache.olingo.commons.api.edm.EdmException;
+ import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
+ import org.apache.olingo.commons.api.edm.EdmTypeDefinition;
+ import org.apache.olingo.commons.api.edm.FullQualifiedName;
+ import org.apache.olingo.commons.core.edm.AbstractEdmTypeDefinition;
+ import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeKind;
+ 
+ public class EdmTypeDefinitionImpl extends AbstractEdmTypeDefinition implements EdmTypeDefinition {
+ 
+   private TypeDefinition typeDefinition;
+ 
+   private EdmPrimitiveType edmPrimitiveTypeInstance;
+ 
+   public EdmTypeDefinitionImpl(final Edm edm, final FullQualifiedName typeDefinitionName,
+           final TypeDefinition typeDefinition) {
+ 
+     super(edm, typeDefinitionName);
+     this.typeDefinition = typeDefinition;
 -    // TODO: Should we check for edmNamespace in the underlying type name?
+     try {
 -      edmPrimitiveTypeInstance = EdmPrimitiveTypeKind.fromString(
 -              typeDefinition.getUnderlyingType()).getEdmPrimitiveTypeInstance();
++      edmPrimitiveTypeInstance = EdmPrimitiveTypeKind.valueOfFQN(typeDefinition.getUnderlyingType()).
++              getEdmPrimitiveTypeInstance();
+     } catch (IllegalArgumentException e) {
+       throw new EdmException("Invalid underlying type: " + typeDefinition.getUnderlyingType(), e);
+     }
+   }
+ 
+   @Override
+   public EdmPrimitiveType getUnderlyingType() {
+     return edmPrimitiveTypeInstance;
+   }
+ 
+   @Override
+   public Integer getMaxLength() {
+     return typeDefinition.getMaxLength();
+   }
+ 
+   @Override
+   public Integer getPrecision() {
+     return typeDefinition.getPrecision();
+   }
+ 
+   @Override
+   public Integer getScale() {
+     return typeDefinition.getScale();
+   }
+ 
+   @Override
+   public Boolean isUnicode() {
+     return typeDefinition.isUnicode();
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeInfo.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeInfo.java
index 0000000,0000000..b8e930f
new file mode 100644
--- /dev/null
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeInfo.java
@@@ -1,0 -1,0 +1,174 @@@
++/*
++ * 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.edm;
++
++import org.apache.commons.lang3.StringUtils;
++import org.apache.olingo.commons.api.edm.Edm;
++import org.apache.olingo.commons.api.edm.EdmComplexType;
++import org.apache.olingo.commons.api.edm.EdmEntityType;
++import org.apache.olingo.commons.api.edm.EdmEnumType;
++import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
++import org.apache.olingo.commons.api.edm.FullQualifiedName;
++import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeKind;
++import org.slf4j.Logger;
++import org.slf4j.LoggerFactory;
++
++public class EdmTypeInfo {
++
++  private static final Logger LOG = LoggerFactory.getLogger(EdmTypeInfo.class);
++
++  public static class Builder {
++
++    private String typeExpression;
++
++    private String defaultNamespace;
++
++    private Edm edm;
++
++    public Builder setTypeExpression(final String typeExpression) {
++      this.typeExpression = typeExpression;
++      return this;
++    }
++
++    public Builder setDefaultNamespace(final String defaultNamespace) {
++      this.defaultNamespace = defaultNamespace;
++      return this;
++    }
++
++    public Builder setEdm(final Edm edm) {
++      this.edm = edm;
++      return this;
++    }
++
++    public EdmTypeInfo build() {
++      return new EdmTypeInfo(edm, typeExpression.indexOf('.') == -1
++              ? defaultNamespace + "." + typeExpression
++              : typeExpression);
++    }
++  }
++
++  private final Edm edm;
++
++  private final String typeExpression;
++
++  private final boolean collection;
++
++  private final FullQualifiedName fullQualifiedName;
++
++  private EdmPrimitiveType primitiveType;
++
++  private EdmEnumType enumType;
++
++  private EdmComplexType complexType;
++
++  private EdmEntityType entityType;
++
++  private EdmTypeInfo(final Edm edm, final String typeExpression) {
++    this.edm = edm;
++    this.typeExpression = typeExpression;
++
++    String baseType;
++    final int collStartIdx = typeExpression.indexOf("Collection(");
++    final int collEndIdx = typeExpression.lastIndexOf(')');
++    if (collStartIdx == -1) {
++      baseType = typeExpression;
++      this.collection = false;
++    } else {
++      if (collEndIdx == -1) {
++        throw new IllegalArgumentException("Malformed type: " + typeExpression);
++      }
++
++      this.collection = true;
++      baseType = typeExpression.substring(collStartIdx + 11, collEndIdx);
++    }
++
++    final int lastDotIdx = baseType.lastIndexOf('.');
++    if (lastDotIdx == -1) {
++      throw new IllegalArgumentException("Cannot find namespace or alias in " + typeExpression);
++    }
++    final String namespace = baseType.substring(0, lastDotIdx);
++    final String typeName = baseType.substring(lastDotIdx + 1);
++    if (StringUtils.isBlank(typeName)) {
++      throw new IllegalArgumentException("Null or empty type name in " + typeExpression);
++    }
++
++    this.fullQualifiedName = new FullQualifiedName(namespace, typeName);
++
++    try {
++      this.primitiveType = EdmPrimitiveTypeKind.valueOf(this.fullQualifiedName.getName()).
++              getEdmPrimitiveTypeInstance();
++    } catch (IllegalArgumentException e) {
++      LOG.debug("{} does not appear to refer to an Edm primitive type", this.fullQualifiedName);
++    }
++    if (this.primitiveType == null && this.edm != null) {
++      this.enumType = this.edm.getEnumType(this.fullQualifiedName);
++      if (this.enumType == null) {
++        this.complexType = this.edm.getComplexType(this.fullQualifiedName);
++        if (this.complexType == null) {
++          this.entityType = this.edm.getEntityType(this.fullQualifiedName);
++        }
++      }
++    }
++  }
++
++  public String getTypeExpression() {
++    return typeExpression;
++  }
++
++  public boolean isCollection() {
++    return collection;
++  }
++
++  public FullQualifiedName getFullQualifiedName() {
++    return fullQualifiedName;
++  }
++
++  public boolean isPrimitiveType() {
++    return this.primitiveType != null;
++  }
++
++  public EdmPrimitiveType getPrimitiveType() {
++    return primitiveType;
++  }
++
++  public boolean isEnumType() {
++    return this.enumType != null;
++  }
++
++  public EdmEnumType getEnumType() {
++    return enumType;
++  }
++
++  public boolean isComplexType() {
++    return this.complexType != null;
++  }
++
++  public EdmComplexType getComplexType() {
++    return complexType;
++  }
++
++  public boolean isEntityType() {
++    return this.entityType != null;
++  }
++
++  public EdmEntityType getEntityType() {
++    return entityType;
++  }
++
++}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmActionImportProxy.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmActionImportProxy.java
index 0000000,576623e..32429c0
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmActionImportProxy.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmActionImportProxy.java
@@@ -1,0 -1,45 +1,45 @@@
+ /*
+  * 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.edm.v3;
+ 
+ import org.apache.olingo.client.api.edm.xml.v3.FunctionImport;
 -import org.apache.olingo.client.api.utils.EdmTypeInfo;
+ import org.apache.olingo.client.core.edm.EdmOperationImportImpl;
++import org.apache.olingo.client.core.edm.EdmTypeInfo;
+ import org.apache.olingo.commons.api.edm.Edm;
+ import org.apache.olingo.commons.api.edm.EdmAction;
+ import org.apache.olingo.commons.api.edm.EdmActionImport;
+ import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+ 
+ public class EdmActionImportProxy extends EdmOperationImportImpl implements EdmActionImport {
+ 
+   private final FunctionImport functionImport;
+ 
+   public EdmActionImportProxy(final Edm edm, final EdmEntityContainer container, final String name,
+           final FunctionImport functionImport) {
+ 
+     super(edm, container, name, functionImport.getEntitySet());
+     this.functionImport = functionImport;
+   }
+ 
+   @Override
+   public EdmAction getAction() {
 -    return edm.getAction(
 -            new EdmTypeInfo(functionImport.getName(), container.getNamespace()).getFullQualifiedName(), null, null);
++    return edm.getAction(new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(functionImport.getName()).
++            setDefaultNamespace(container.getNamespace()).build().getFullQualifiedName(), null, null);
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmFunctionImportProxy.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmFunctionImportProxy.java
index 0000000,c7d1de2..9076a52
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmFunctionImportProxy.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/v3/EdmFunctionImportProxy.java
@@@ -1,0 -1,48 +1,47 @@@
+ /*
+  * 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.edm.v3;
+ 
+ import java.util.List;
+ 
+ import org.apache.olingo.client.api.edm.xml.v3.FunctionImport;
 -import org.apache.olingo.client.api.utils.EdmTypeInfo;
+ import org.apache.olingo.client.core.edm.EdmOperationImportImpl;
++import org.apache.olingo.client.core.edm.EdmTypeInfo;
+ import org.apache.olingo.commons.api.edm.Edm;
+ import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+ import org.apache.olingo.commons.api.edm.EdmFunction;
+ import org.apache.olingo.commons.api.edm.EdmFunctionImport;
+ 
+ public class EdmFunctionImportProxy extends EdmOperationImportImpl implements EdmFunctionImport {
+ 
+   private final FunctionImport functionImport;
+ 
+   public EdmFunctionImportProxy(final Edm edm, final EdmEntityContainer container, final String name,
+           final FunctionImport functionImport) {
+ 
+     super(edm, container, name, functionImport.getEntitySet());
+     this.functionImport = functionImport;
+   }
+ 
+   @Override
+   public EdmFunction getFunction(final List<String> parameterNames) {
 -    return edm.getFunction(
 -            new EdmTypeInfo(functionImport.getName(), container.getNamespace()).getFullQualifiedName(),
 -            null, null, parameterNames);
++    return edm.getFunction(new EdmTypeInfo.Builder().setEdm(edm).setTypeExpression(functionImport.getName()).
++            setDefaultNamespace(container.getNamespace()).build().getFullQualifiedName(), null, null, parameterNames);
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractProperty.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractProperty.java
index 0000000,198e50f..8d4da80
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractProperty.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/AbstractProperty.java
@@@ -1,0 -1,174 +1,128 @@@
+ /*
+  * 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.edm.xml;
+ 
+ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+ 
+ import org.apache.olingo.client.api.edm.xml.CommonProperty;
 -import org.apache.olingo.commons.api.edm.constants.ConcurrencyMode;
 -import org.apache.olingo.commons.api.edm.constants.StoreGeneratedPattern;
+ 
+ @JsonDeserialize(using = PropertyDeserializer.class)
+ public abstract class AbstractProperty extends AbstractEdmItem implements CommonProperty {
+ 
+   private static final long serialVersionUID = -6004492361142315153L;
+ 
+   private String name;
+ 
+   private String type;
+ 
+   private boolean nullable = true;
+ 
+   private String defaultValue;
+ 
+   private Integer maxLength;
+ 
 -  private boolean fixedLength;
 -
+   private Integer precision;
+ 
+   private Integer scale;
+ 
+   private boolean unicode = true;
+ 
 -  private String collation;
 -
+   private String srid;
+ 
 -  private ConcurrencyMode concurrencyMode;
 -
 -  private StoreGeneratedPattern storeGeneratedPattern = StoreGeneratedPattern.None;
 -
+   @Override
+   public String getName() {
+     return name;
+   }
+ 
+   public void setName(final String name) {
+     this.name = name;
+   }
+ 
+   @Override
+   public String getType() {
+     return type;
+   }
+ 
+   public void setType(final String type) {
+     this.type = type;
+   }
+ 
+   @Override
+   public boolean isNullable() {
+     return nullable;
+   }
+ 
+   public void setNullable(final boolean nullable) {
+     this.nullable = nullable;
+   }
+ 
+   @Override
+   public String getDefaultValue() {
+     return defaultValue;
+   }
+ 
+   public void setDefaultValue(final String defaultValue) {
+     this.defaultValue = defaultValue;
+   }
+ 
+   @Override
+   public Integer getMaxLength() {
+     return maxLength;
+   }
+ 
+   public void setMaxLength(final Integer maxLength) {
+     this.maxLength = maxLength;
+   }
+ 
+   @Override
 -  public boolean isFixedLength() {
 -    return fixedLength;
 -  }
 -
 -  public void setFixedLength(final boolean fixedLength) {
 -    this.fixedLength = fixedLength;
 -  }
 -
 -  @Override
+   public Integer getPrecision() {
+     return precision;
+   }
+ 
+   public void setPrecision(final Integer precision) {
+     this.precision = precision;
+   }
+ 
+   @Override
+   public Integer getScale() {
+     return scale;
+   }
+ 
+   public void setScale(final Integer scale) {
+     this.scale = scale;
+   }
+ 
+   @Override
+   public boolean isUnicode() {
+     return unicode;
+   }
+ 
+   public void setUnicode(final boolean unicode) {
+     this.unicode = unicode;
+   }
+ 
+   @Override
 -  public String getCollation() {
 -    return collation;
 -  }
 -
 -  public void setCollation(final String collation) {
 -    this.collation = collation;
 -  }
 -
 -  @Override
+   public String getSrid() {
+     return srid;
+   }
+ 
+   public void setSrid(final String srid) {
+     this.srid = srid;
+   }
 -
 -  @Override
 -  public ConcurrencyMode getConcurrencyMode() {
 -    return concurrencyMode;
 -  }
 -
 -  public void setConcurrencyMode(final ConcurrencyMode concurrencyMode) {
 -    this.concurrencyMode = concurrencyMode;
 -  }
 -
 -  @Override
 -  public StoreGeneratedPattern getStoreGeneratedPattern() {
 -    return storeGeneratedPattern;
 -  }
 -
 -  public void setStoreGeneratedPattern(final StoreGeneratedPattern storeGeneratedPattern) {
 -    this.storeGeneratedPattern = storeGeneratedPattern;
 -  }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ParameterDeserializer.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ParameterDeserializer.java
index 0000000,db5b6c1..2587bce
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ParameterDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/ParameterDeserializer.java
@@@ -1,0 -1,71 +1,72 @@@
+ /*
+  * 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.edm.xml;
+ 
+ import com.fasterxml.jackson.core.JsonParser;
+ import com.fasterxml.jackson.core.JsonProcessingException;
+ import com.fasterxml.jackson.core.JsonToken;
+ import com.fasterxml.jackson.databind.DeserializationContext;
+ 
+ import java.io.IOException;
+ 
+ import org.apache.commons.lang3.BooleanUtils;
+ import org.apache.olingo.client.api.edm.xml.v3.ParameterMode;
+ import org.apache.olingo.client.core.op.impl.AbstractEdmDeserializer;
+ import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+ 
+ public class ParameterDeserializer extends AbstractEdmDeserializer<AbstractParameter> {
+ 
+   @Override
+   protected AbstractParameter doDeserialize(final JsonParser jp, final DeserializationContext ctxt)
+           throws IOException, JsonProcessingException {
+ 
+     final AbstractParameter parameter = ODataServiceVersion.V30 == client.getServiceVersion()
+             ? new org.apache.olingo.client.core.edm.xml.v3.ParameterImpl()
+             : new org.apache.olingo.client.core.edm.xml.v4.ParameterImpl();
+ 
+     for (; jp.getCurrentToken() != JsonToken.END_OBJECT; jp.nextToken()) {
+       final JsonToken token = jp.getCurrentToken();
+       if (token == JsonToken.FIELD_NAME) {
+         if ("Name".equals(jp.getCurrentName())) {
+           parameter.setName(jp.nextTextValue());
+         } else if ("Type".equals(jp.getCurrentName())) {
+           parameter.setType(jp.nextTextValue());
+         } else if ("Nullable".equals(jp.getCurrentName())) {
+           parameter.setNullable(BooleanUtils.toBoolean(jp.nextTextValue()));
+         } else if ("MaxLength".equals(jp.getCurrentName())) {
+           final String maxLenght = jp.nextTextValue();
+           parameter.setMaxLength(maxLenght.equalsIgnoreCase("max") ? Integer.MAX_VALUE : Integer.valueOf(maxLenght));
+         } else if ("Precision".equals(jp.getCurrentName())) {
+           parameter.setPrecision(Integer.valueOf(jp.nextTextValue()));
+         } else if ("Scale".equals(jp.getCurrentName())) {
 -          parameter.setScale(Integer.valueOf(jp.nextTextValue()));
++          final String scale = jp.nextTextValue();
++          parameter.setScale(scale.equalsIgnoreCase("variable") ? 0 : Integer.valueOf(scale));
+         } else if ("Mode".equals(jp.getCurrentName())) {
+           ((org.apache.olingo.client.core.edm.xml.v3.ParameterImpl) parameter).
+                   setMode(ParameterMode.valueOf(jp.nextTextValue()));
+         } else if ("SRID".equals(jp.getCurrentName())) {
+           ((org.apache.olingo.client.core.edm.xml.v4.ParameterImpl) parameter).setSrid(jp.nextTextValue());
+         }
+       }
+     }
+ 
+     return parameter;
+   }
+ 
+ }


[2/6] git commit: Again refinements in Edm type management

Posted by il...@apache.org.
Again refinements in Edm type management


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

Branch: refs/heads/master
Commit: 027e1355835d549980a95301725a58a9d38873d2
Parents: 848976b
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Mar 10 09:47:08 2014 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Mar 10 09:47:08 2014 +0100

----------------------------------------------------------------------
 .../odata4/client/core/edm/EdmEnumTypeImpl.java   | 18 +++++++++++++++---
 .../client/core/edm/EdmTypeDefinitionImpl.java    |  5 ++---
 .../edm/primitivetype/EdmPrimitiveTypeKind.java   | 11 ++++-------
 3 files changed, 21 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/027e1355/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEnumTypeImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEnumTypeImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEnumTypeImpl.java
index 6d090ab..4a5b310 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEnumTypeImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmEnumTypeImpl.java
@@ -25,10 +25,12 @@ import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.olingo.odata4.client.api.edm.xml.EnumType;
 import org.apache.olingo.odata4.client.api.edm.xml.Member;
 import org.apache.olingo.odata4.commons.api.edm.Edm;
 import org.apache.olingo.odata4.commons.api.edm.EdmEnumType;
+import org.apache.olingo.odata4.commons.api.edm.EdmException;
 import org.apache.olingo.odata4.commons.api.edm.EdmMember;
 import org.apache.olingo.odata4.commons.api.edm.EdmPrimitiveType;
 import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
@@ -37,6 +39,14 @@ import org.apache.olingo.odata4.commons.core.edm.primitivetype.EdmPrimitiveTypeK
 
 public class EdmEnumTypeImpl extends AbstractEdmEnumType implements EdmEnumType {
 
+  private static final EdmPrimitiveTypeKind[] VALID_UNDERLYING_TYPES = new EdmPrimitiveTypeKind[] {
+    EdmPrimitiveTypeKind.Byte,
+    EdmPrimitiveTypeKind.SByte,
+    EdmPrimitiveTypeKind.Int16,
+    EdmPrimitiveTypeKind.Int32,
+    EdmPrimitiveTypeKind.Int64
+  };
+
   private final EdmPrimitiveType underlyingType;
 
   private final List<String> memberNames;
@@ -49,9 +59,11 @@ public class EdmEnumTypeImpl extends AbstractEdmEnumType implements EdmEnumType
     if (xmlEnumType.getUnderlyingType() == null) {
       this.underlyingType = EdmPrimitiveTypeKind.Int32.getEdmPrimitiveTypeInstance();
     } else {
-      this.underlyingType = EdmPrimitiveTypeKind.fromString(
-              xmlEnumType.getUnderlyingType()).getEdmPrimitiveTypeInstance();
-      // TODO: Should we validate that the underlying type is of byte, sbyte, in16, int32 or int64?
+      this.underlyingType = EdmPrimitiveTypeKind.valueOfFQN(xmlEnumType.getUnderlyingType()).
+              getEdmPrimitiveTypeInstance();
+      if (!ArrayUtils.contains(VALID_UNDERLYING_TYPES, this.underlyingType.getKind())) {
+        throw new EdmException("Not allowed as underlying type: " + this.underlyingType.getKind());
+      }
     }
 
     final List<? extends Member> xmlMembers = xmlEnumType.getMembers();

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/027e1355/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmTypeDefinitionImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmTypeDefinitionImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmTypeDefinitionImpl.java
index 43a5455..634e20c 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmTypeDefinitionImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/EdmTypeDefinitionImpl.java
@@ -38,10 +38,9 @@ public class EdmTypeDefinitionImpl extends AbstractEdmTypeDefinition implements
 
     super(edm, typeDefinitionName);
     this.typeDefinition = typeDefinition;
-    // TODO: Should we check for edmNamespace in the underlying type name?
     try {
-      edmPrimitiveTypeInstance = EdmPrimitiveTypeKind.fromString(
-              typeDefinition.getUnderlyingType()).getEdmPrimitiveTypeInstance();
+      edmPrimitiveTypeInstance = EdmPrimitiveTypeKind.valueOfFQN(typeDefinition.getUnderlyingType()).
+              getEdmPrimitiveTypeInstance();
     } catch (IllegalArgumentException e) {
       throw new EdmException("Invalid underlying type: " + typeDefinition.getUnderlyingType(), e);
     }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/027e1355/odata4-lib/odata4-commons-core/src/main/java/org/apache/olingo/odata4/commons/core/edm/primitivetype/EdmPrimitiveTypeKind.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-commons-core/src/main/java/org/apache/olingo/odata4/commons/core/edm/primitivetype/EdmPrimitiveTypeKind.java b/odata4-lib/odata4-commons-core/src/main/java/org/apache/olingo/odata4/commons/core/edm/primitivetype/EdmPrimitiveTypeKind.java
index 2b0b08f..b46a34f 100644
--- a/odata4-lib/odata4-commons-core/src/main/java/org/apache/olingo/odata4/commons/core/edm/primitivetype/EdmPrimitiveTypeKind.java
+++ b/odata4-lib/odata4-commons-core/src/main/java/org/apache/olingo/odata4/commons/core/edm/primitivetype/EdmPrimitiveTypeKind.java
@@ -86,13 +86,10 @@ public enum EdmPrimitiveTypeKind {
    * @param value string value type.
    * @return <tt>EdmPrimitiveTypeKind</tt> object.
    */
-  public static EdmPrimitiveTypeKind fromString(final String value) {
-    final String noNsValue = value.substring(4);
-    for (EdmPrimitiveTypeKind edmSimpleType : EdmPrimitiveTypeKind.values()) {
-      if (edmSimpleType.name().equals(noNsValue)) {
-        return edmSimpleType;
-      }
+  public static EdmPrimitiveTypeKind valueOfFQN(final String value) {
+    if (!value.startsWith(EdmPrimitiveType.EDM_NAMESPACE + ".")) {
+      throw new IllegalArgumentException(value + " does not look like an Edm primitive type");
     }
-    throw new IllegalArgumentException(value);
+    return valueOf(value.substring(4));
   }
 }


[6/6] git commit: Merge from master

Posted by il...@apache.org.
Merge from master


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

Branch: refs/heads/master
Commit: f70d3f0bd3dd38ef76d5f22d4de7bb26bc2ecf11
Parents: 7f7a68e 897db8e
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Mar 10 10:49:41 2014 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Mar 10 10:49:41 2014 +0100

----------------------------------------------------------------------
 fit/pom.xml                                     |   49 +
 lib/client-api/pom.xml                          |   54 +
 .../apache/olingo/client/api/Configuration.java |  184 +
 .../org/apache/olingo/client/api/Constants.java |  217 +
 .../apache/olingo/client/api/ODataClient.java   |   55 +
 .../olingo/client/api/ODataConstants.java       |  219 +
 .../apache/olingo/client/api/ODataError.java    |   67 +
 .../apache/olingo/client/api/ODataV3Client.java |   39 +
 .../apache/olingo/client/api/ODataV4Client.java |   39 +
 .../client/api/UnsupportedInV3Exception.java    |   31 +
 .../olingo/client/api/V3Configuration.java      |   44 +
 .../olingo/client/api/V4Configuration.java      |   24 +
 .../olingo/client/api/data/ServiceDocument.java |  138 +
 .../client/api/data/ServiceDocumentItem.java    |   30 +
 .../api/deserializer/AnnotationProperty.java    |   24 +
 .../api/deserializer/ClientException.java       |   36 +
 .../client/api/deserializer/ComplexValue.java   |   35 +
 .../olingo/client/api/deserializer/Entity.java  |   59 +
 .../client/api/deserializer/EntitySet.java      |   34 +
 .../api/deserializer/NavigationProperty.java    |   27 +
 .../client/api/deserializer/Property.java       |   24 +
 .../olingo/client/api/deserializer/Reader.java  |   30 +
 .../api/deserializer/StructuralProperty.java    |   30 +
 .../olingo/client/api/deserializer/Value.java   |   28 +
 .../olingo/client/api/domain/EdmSimpleType.java |  289 +
 .../client/api/domain/ODataCollectionValue.java |   98 +
 .../client/api/domain/ODataComplexValue.java    |   97 +
 .../olingo/client/api/domain/ODataDuration.java |   79 +
 .../client/api/domain/ODataGeospatialValue.java |  488 ++
 .../client/api/domain/ODataInvokeResult.java    |   30 +
 .../client/api/domain/ODataPrimitiveValue.java  |  378 ++
 .../olingo/client/api/domain/ODataProperty.java |  192 +
 .../client/api/domain/ODataServiceDocument.java |  183 +
 .../client/api/domain/ODataTimestamp.java       |  138 +
 .../olingo/client/api/domain/ODataValue.java    |  111 +
 .../domain/geospatial/ComposedGeospatial.java   |   75 +
 .../api/domain/geospatial/Geospatial.java       |  157 +
 .../domain/geospatial/GeospatialCollection.java |   48 +
 .../api/domain/geospatial/LineString.java       |   39 +
 .../api/domain/geospatial/MultiLineString.java  |   39 +
 .../api/domain/geospatial/MultiPoint.java       |   39 +
 .../api/domain/geospatial/MultiPolygon.java     |   39 +
 .../client/api/domain/geospatial/Point.java     |   77 +
 .../client/api/domain/geospatial/Polygon.java   |   73 +
 .../olingo/client/api/edm/ConcurrencyMode.java  |   26 +
 .../client/api/edm/StoreGeneratedPattern.java   |   27 +
 .../client/api/edm/xml/CommonAnnotations.java   |   26 +
 .../api/edm/xml/CommonFunctionImport.java       |   22 +
 .../api/edm/xml/CommonNavigationProperty.java   |   22 +
 .../client/api/edm/xml/CommonParameter.java     |   33 +
 .../client/api/edm/xml/CommonProperty.java      |   39 +
 .../olingo/client/api/edm/xml/ComplexType.java  |   32 +
 .../olingo/client/api/edm/xml/DataServices.java |   30 +
 .../apache/olingo/client/api/edm/xml/Edmx.java  |   26 +
 .../client/api/edm/xml/EntityContainer.java     |   40 +
 .../olingo/client/api/edm/xml/EntityKey.java    |   26 +
 .../olingo/client/api/edm/xml/EntitySet.java    |   25 +
 .../olingo/client/api/edm/xml/EntityType.java   |   32 +
 .../olingo/client/api/edm/xml/EnumType.java     |   34 +
 .../olingo/client/api/edm/xml/Member.java       |   26 +
 .../apache/olingo/client/api/edm/xml/Named.java |   24 +
 .../olingo/client/api/edm/xml/OnDelete.java     |   24 +
 .../client/api/edm/xml/OnDeleteAction.java      |   28 +
 .../olingo/client/api/edm/xml/PropertyRef.java  |   25 +
 .../olingo/client/api/edm/xml/Schema.java       |   74 +
 .../olingo/client/api/edm/xml/XMLMetadata.java  |   59 +
 .../client/api/edm/xml/v3/Annotations.java      |   30 +
 .../client/api/edm/xml/v3/Association.java      |   31 +
 .../client/api/edm/xml/v3/AssociationEnd.java   |   32 +
 .../client/api/edm/xml/v3/AssociationSet.java   |   30 +
 .../api/edm/xml/v3/AssociationSetEnd.java       |   26 +
 .../client/api/edm/xml/v3/FunctionImport.java   |   43 +
 .../api/edm/xml/v3/NavigationProperty.java      |   29 +
 .../olingo/client/api/edm/xml/v3/Parameter.java |   24 +
 .../client/api/edm/xml/v3/ParameterMode.java    |   27 +
 .../olingo/client/api/edm/xml/v3/Property.java  |   48 +
 .../client/api/edm/xml/v3/PropertyValue.java    |   43 +
 .../api/edm/xml/v3/ReferentialConstraint.java   |   26 +
 .../edm/xml/v3/ReferentialConstraintRole.java   |   31 +
 .../client/api/edm/xml/v3/TypeAnnotation.java   |   31 +
 .../olingo/client/api/edm/xml/v3/Using.java     |   27 +
 .../client/api/edm/xml/v3/ValueAnnotation.java  |   45 +
 .../olingo/client/api/edm/xml/v3/ValueTerm.java |   26 +
 .../olingo/client/api/edm/xml/v4/Action.java    |   37 +
 .../client/api/edm/xml/v4/ActionImport.java     |   24 +
 .../client/api/edm/xml/v4/AnnotatedEdmItem.java |   24 +
 .../client/api/edm/xml/v4/Annotation.java       |   33 +
 .../client/api/edm/xml/v4/Annotations.java      |   30 +
 .../client/api/edm/xml/v4/BindingTarget.java    |   28 +
 .../client/api/edm/xml/v4/CSDLElement.java      |   37 +
 .../client/api/edm/xml/v4/ComplexType.java      |   43 +
 .../olingo/client/api/edm/xml/v4/Edmx.java      |   26 +
 .../client/api/edm/xml/v4/EntityContainer.java  |   44 +
 .../olingo/client/api/edm/xml/v4/EntitySet.java |   24 +
 .../client/api/edm/xml/v4/EntityType.java       |   23 +
 .../olingo/client/api/edm/xml/v4/Function.java  |   24 +
 .../client/api/edm/xml/v4/FunctionImport.java   |   28 +
 .../olingo/client/api/edm/xml/v4/Include.java   |   26 +
 .../api/edm/xml/v4/IncludeAnnotations.java      |   28 +
 .../api/edm/xml/v4/NavigationProperty.java      |   40 +
 .../edm/xml/v4/NavigationPropertyBinding.java   |   27 +
 .../client/api/edm/xml/v4/OperationImport.java  |   28 +
 .../olingo/client/api/edm/xml/v4/Parameter.java |   24 +
 .../olingo/client/api/edm/xml/v4/Property.java  |   25 +
 .../olingo/client/api/edm/xml/v4/Reference.java |   33 +
 .../api/edm/xml/v4/ReferentialConstraint.java   |   27 +
 .../client/api/edm/xml/v4/ReturnType.java       |   34 +
 .../olingo/client/api/edm/xml/v4/Schema.java    |   64 +
 .../olingo/client/api/edm/xml/v4/Singleton.java |   25 +
 .../olingo/client/api/edm/xml/v4/Term.java      |   44 +
 .../client/api/edm/xml/v4/TypeDefinition.java   |   40 +
 .../client/api/edm/xml/v4/XMLMetadata.java      |   36 +
 .../xml/v4/annotation/ConstExprConstruct.java   |   56 +
 .../edm/xml/v4/annotation/DynExprConstruct.java |   23 +
 .../edm/xml/v4/annotation/ExprConstruct.java    |   23 +
 .../olingo/client/api/format/ODataFormat.java   |   97 +
 .../client/api/format/ODataMediaFormat.java     |   71 +
 .../client/api/format/ODataPubFormat.java       |   97 +
 .../client/api/format/ODataValueFormat.java     |   76 +
 .../client/api/http/HttpClientException.java    |   68 +
 .../client/api/http/HttpClientFactory.java      |   30 +
 .../olingo/client/api/http/HttpMethod.java      |   33 +
 .../client/api/http/HttpUriRequestFactory.java  |   30 +
 .../client/api/http/NoContentException.java     |   36 +
 .../olingo/client/api/op/ODataBinder.java       |  122 +
 .../olingo/client/api/op/ODataDeserializer.java |   94 +
 .../olingo/client/api/op/ODataReader.java       |  104 +
 .../olingo/client/api/op/ODataSerializer.java   |  118 +
 .../client/api/op/ODataV3Deserializer.java      |   23 +
 .../client/api/op/ODataV4Deserializer.java      |   30 +
 .../olingo/client/api/uri/QueryOption.java      |   95 +
 .../olingo/client/api/uri/SegmentType.java      |   66 +
 .../olingo/client/api/uri/URIBuilder.java       |  225 +
 .../olingo/client/api/uri/V3URIBuilder.java     |   47 +
 .../olingo/client/api/uri/V4URIBuilder.java     |   87 +
 .../olingo/client/api/uri/filter/FilterArg.java |   30 +
 .../client/api/uri/filter/FilterArgFactory.java |   83 +
 .../client/api/uri/filter/FilterFactory.java    |   61 +
 .../olingo/client/api/uri/filter/URIFilter.java |   32 +
 .../api/uri/filter/V3FilterArgFactory.java      |   25 +
 .../client/api/uri/filter/V3FilterFactory.java  |   26 +
 .../api/uri/filter/V4FilterArgFactory.java      |   55 +
 .../client/api/uri/filter/V4FilterFactory.java  |   32 +
 .../olingo/client/api/utils/XMLUtils.java       |  178 +
 lib/client-core/pom.xml                         |   98 +
 .../client/core/AbstractConfiguration.java      |  198 +
 .../olingo/client/core/AbstractODataClient.java |   37 +
 .../olingo/client/core/ODataClientFactory.java  |   37 +
 .../olingo/client/core/ODataV3ClientImpl.java   |  146 +
 .../olingo/client/core/ODataV4ClientImpl.java   |  146 +
 .../olingo/client/core/V3ConfigurationImpl.java |   57 +
 .../olingo/client/core/V4ConfigurationImpl.java |   31 +
 .../core/data/AbstractServiceDocument.java      |  146 +
 .../data/JSONServiceDocumentDeserializer.java   |   84 +
 .../core/data/ODataJacksonDeserializer.java     |   45 +
 .../core/data/ODataJacksonSerializer.java       |   45 +
 .../core/data/ServiceDocumentItemImpl.java      |   79 +
 .../data/XMLServiceDocumentDeserializer.java    |  120 +
 .../core/data/v3/JSONServiceDocumentImpl.java   |   67 +
 .../core/data/v3/XMLServiceDocumentImpl.java    |   48 +
 .../core/data/v4/AbstractServiceDocument.java   |   89 +
 .../core/data/v4/JSONServiceDocumentImpl.java   |   43 +
 .../core/data/v4/XMLServiceDocumentImpl.java    |   29 +
 .../deserializer/AnnotationPropertyImpl.java    |   53 +
 .../core/deserializer/ComplexValueImpl.java     |   82 +
 .../client/core/deserializer/EntityImpl.java    |  126 +
 .../core/deserializer/EntitySetBuilder.java     |   72 +
 .../client/core/deserializer/EntitySetImpl.java |  120 +
 .../client/core/deserializer/JsonReader.java    |   89 +
 .../deserializer/NavigationPropertyImpl.java    |   89 +
 .../core/deserializer/PrimitiveValue.java       |   51 +
 .../core/deserializer/PropertyCollection.java   |   96 +
 .../deserializer/PropertyCollectionBuilder.java |  221 +
 .../deserializer/StructuralPropertyImpl.java    |   83 +
 .../edm/AbstractEdmServiceMetadataImpl.java     |   99 +
 .../olingo/client/core/edm/EdmActionImpl.java   |   37 +
 .../client/core/edm/EdmActionImportImpl.java    |   45 +
 .../client/core/edm/EdmBindingTargetImpl.java   |   79 +
 .../olingo/client/core/edm/EdmClientImpl.java   |  374 ++
 .../client/core/edm/EdmComplexTypeImpl.java     |   66 +
 .../client/core/edm/EdmEntityContainerImpl.java |  123 +
 .../client/core/edm/EdmEntitySetImpl.java       |   35 +
 .../client/core/edm/EdmEntityTypeImpl.java      |   80 +
 .../olingo/client/core/edm/EdmEnumTypeImpl.java |   96 +
 .../olingo/client/core/edm/EdmFunctionImpl.java |   44 +
 .../client/core/edm/EdmFunctionImportImpl.java  |   46 +
 .../client/core/edm/EdmKeyPropertyRefImpl.java  |   49 +
 .../core/edm/EdmNavigationPropertyImpl.java     |   74 +
 .../client/core/edm/EdmOperationImpl.java       |   61 +
 .../client/core/edm/EdmOperationImportImpl.java |   34 +
 .../client/core/edm/EdmParameterImpl.java       |   73 +
 .../olingo/client/core/edm/EdmPropertyImpl.java |   90 +
 .../client/core/edm/EdmReturnTypeImpl.java      |   67 +
 .../client/core/edm/EdmSingletonImpl.java       |   35 +
 .../core/edm/EdmStructuredTypeHelperImpl.java   |   72 +
 .../client/core/edm/EdmTypeDefinitionImpl.java  |   73 +
 .../olingo/client/core/edm/EdmTypeInfo.java     |  174 +
 .../core/edm/v3/EdmActionImportProxy.java       |   45 +
 .../client/core/edm/v3/EdmActionProxy.java      |   39 +
 .../client/core/edm/v3/EdmEntitySetProxy.java   |  102 +
 .../core/edm/v3/EdmFunctionImportProxy.java     |   47 +
 .../client/core/edm/v3/EdmFunctionProxy.java    |   43 +
 .../client/core/edm/v3/EdmOperationProxy.java   |   65 +
 .../core/edm/v3/EdmServiceMetadataImpl.java     |   98 +
 .../client/core/edm/v3/ReturnTypeProxy.java     |   62 +
 .../core/edm/v3/V3FunctionImportUtils.java      |   36 +
 .../core/edm/v4/EdmServiceMetadataImpl.java     |  105 +
 .../core/edm/xml/AbstractAnnotations.java       |   51 +
 .../core/edm/xml/AbstractComplexType.java       |   53 +
 .../core/edm/xml/AbstractDataServices.java      |   51 +
 .../client/core/edm/xml/AbstractEdmItem.java    |   62 +
 .../client/core/edm/xml/AbstractEdmx.java       |   52 +
 .../core/edm/xml/AbstractEntityContainer.java   |  105 +
 .../client/core/edm/xml/AbstractEntitySet.java  |   52 +
 .../client/core/edm/xml/AbstractEntityType.java |   87 +
 .../client/core/edm/xml/AbstractEnumType.java   |   97 +
 .../client/core/edm/xml/AbstractMember.java     |   52 +
 .../edm/xml/AbstractNavigationProperty.java     |   40 +
 .../client/core/edm/xml/AbstractParameter.java  |   95 +
 .../client/core/edm/xml/AbstractProperty.java   |  128 +
 .../client/core/edm/xml/AbstractSchema.java     |   70 +
 .../core/edm/xml/AbstractXMLMetadata.java       |   96 +
 .../core/edm/xml/DataServicesDeserializer.java  |   66 +
 .../client/core/edm/xml/EdmxDeserializer.java   |   69 +
 .../client/core/edm/xml/EntityKeyImpl.java      |   41 +
 .../client/core/edm/xml/OnDeleteImpl.java       |   42 +
 .../core/edm/xml/ParameterDeserializer.java     |   72 +
 .../core/edm/xml/PropertyDeserializer.java      |  129 +
 .../client/core/edm/xml/PropertyRefImpl.java    |   53 +
 .../edm/xml/v3/AnnotationsDeserializer.java     |   57 +
 .../client/core/edm/xml/v3/AnnotationsImpl.java |   50 +
 .../edm/xml/v3/AssociationDeserializer.java     |   55 +
 .../core/edm/xml/v3/AssociationEndImpl.java     |   78 +
 .../client/core/edm/xml/v3/AssociationImpl.java |   64 +
 .../edm/xml/v3/AssociationSetDeserializer.java  |   54 +
 .../core/edm/xml/v3/AssociationSetEndImpl.java  |   53 +
 .../core/edm/xml/v3/AssociationSetImpl.java     |   63 +
 .../client/core/edm/xml/v3/ComplexTypeImpl.java |   55 +
 .../core/edm/xml/v3/DataServicesImpl.java       |   38 +
 .../olingo/client/core/edm/xml/v3/EdmxImpl.java |   32 +
 .../core/edm/xml/v3/EntityContainerImpl.java    |   69 +
 .../client/core/edm/xml/v3/EntitySetImpl.java   |   27 +
 .../client/core/edm/xml/v3/EntityTypeImpl.java  |   54 +
 .../client/core/edm/xml/v3/EnumTypeImpl.java    |   38 +
 .../edm/xml/v3/FunctionImportDeserializer.java  |   69 +
 .../core/edm/xml/v3/FunctionImportImpl.java     |  140 +
 .../client/core/edm/xml/v3/MemberImpl.java      |   27 +
 .../core/edm/xml/v3/NavigationPropertyImpl.java |   66 +
 .../client/core/edm/xml/v3/ParameterImpl.java   |   40 +
 .../client/core/edm/xml/v3/PropertyImpl.java    |  141 +
 .../core/edm/xml/v3/PropertyValueImpl.java      |  129 +
 .../edm/xml/v3/ReferentialConstraintImpl.java   |   57 +
 .../ReferentialConstraintRoleDeserializer.java  |   53 +
 .../xml/v3/ReferentialConstraintRoleImpl.java   |   51 +
 .../client/core/edm/xml/v3/SchemaImpl.java      |  138 +
 .../edm/xml/v3/TypeAnnotationDeserializer.java  |   54 +
 .../core/edm/xml/v3/TypeAnnotationImpl.java     |   64 +
 .../client/core/edm/xml/v3/UsingImpl.java       |   53 +
 .../core/edm/xml/v3/ValueAnnotationImpl.java    |  141 +
 .../client/core/edm/xml/v3/ValueTermImpl.java   |   53 +
 .../client/core/edm/xml/v3/XMLMetadataImpl.java |   31 +
 .../edm/xml/v4/AbstractAnnotatedEdmItem.java    |   45 +
 .../core/edm/xml/v4/ActionDeserializer.java     |   62 +
 .../client/core/edm/xml/v4/ActionImpl.java      |   91 +
 .../core/edm/xml/v4/ActionImportImpl.java       |   66 +
 .../core/edm/xml/v4/AnnotationDeserializer.java |   59 +
 .../client/core/edm/xml/v4/AnnotationImpl.java  |   77 +
 .../edm/xml/v4/AnnotationsDeserializer.java     |   55 +
 .../client/core/edm/xml/v4/AnnotationsImpl.java |   51 +
 .../client/core/edm/xml/v4/ComplexTypeImpl.java |  102 +
 .../core/edm/xml/v4/DataServicesImpl.java       |   38 +
 .../olingo/client/core/edm/xml/v4/EdmxImpl.java |   44 +
 .../core/edm/xml/v4/EntityContainerImpl.java    |  129 +
 .../client/core/edm/xml/v4/EntitySetImpl.java   |   62 +
 .../client/core/edm/xml/v4/EntityTypeImpl.java  |   69 +
 .../client/core/edm/xml/v4/EnumTypeImpl.java    |   40 +
 .../core/edm/xml/v4/FunctionDeserializer.java   |   64 +
 .../client/core/edm/xml/v4/FunctionImpl.java    |   41 +
 .../core/edm/xml/v4/FunctionImportImpl.java     |   93 +
 .../core/edm/xml/v4/IncludeAnnotationsImpl.java |   66 +
 .../client/core/edm/xml/v4/IncludeImpl.java     |   54 +
 .../client/core/edm/xml/v4/MemberImpl.java      |   45 +
 .../xml/v4/NavigationPropertyBindingImpl.java   |   54 +
 .../xml/v4/NavigationPropertyDeserializer.java  |   70 +
 .../core/edm/xml/v4/NavigationPropertyImpl.java |  110 +
 .../client/core/edm/xml/v4/ParameterImpl.java   |   39 +
 .../client/core/edm/xml/v4/PropertyImpl.java    |   42 +
 .../core/edm/xml/v4/ReferenceDeserializer.java  |   60 +
 .../client/core/edm/xml/v4/ReferenceImpl.java   |   70 +
 .../edm/xml/v4/ReferentialConstraintImpl.java   |   53 +
 .../core/edm/xml/v4/ReturnTypeDeserializer.java |   63 +
 .../client/core/edm/xml/v4/ReturnTypeImpl.java  |   97 +
 .../client/core/edm/xml/v4/SchemaImpl.java      |  181 +
 .../core/edm/xml/v4/SingletonDeserializer.java  |   59 +
 .../client/core/edm/xml/v4/SingletonImpl.java   |   63 +
 .../core/edm/xml/v4/TermDeserializer.java       |   78 +
 .../olingo/client/core/edm/xml/v4/TermImpl.java |  140 +
 .../edm/xml/v4/TypeDefinitionDeserializer.java  |   67 +
 .../core/edm/xml/v4/TypeDefinitionImpl.java     |  119 +
 .../client/core/edm/xml/v4/XMLMetadataImpl.java |   56 +
 .../annotation/AbstractElOrAttrConstruct.java   |   37 +
 .../annotation/AnnotatedDynExprConstruct.java   |   38 +
 .../edm/xml/v4/annotation/AnnotationPath.java   |   25 +
 .../core/edm/xml/v4/annotation/Apply.java       |   55 +
 .../xml/v4/annotation/ApplyDeserializer.java    |   57 +
 .../client/core/edm/xml/v4/annotation/Cast.java |   92 +
 .../edm/xml/v4/annotation/CastDeserializer.java |   64 +
 .../core/edm/xml/v4/annotation/Collection.java  |   39 +
 .../v4/annotation/CollectionDeserializer.java   |   52 +
 .../v4/annotation/ConstExprConstructImpl.java   |   51 +
 .../DynExprConstructDeserializer.java           |  147 +
 .../xml/v4/annotation/DynExprConstructImpl.java |   30 +
 .../xml/v4/annotation/DynExprDoubleParamOp.java |   73 +
 .../xml/v4/annotation/DynExprSingleParamOp.java |   69 +
 .../xml/v4/annotation/ExprConstructImpl.java    |   28 +
 .../client/core/edm/xml/v4/annotation/If.java   |   57 +
 .../client/core/edm/xml/v4/annotation/IsOf.java |   92 +
 .../edm/xml/v4/annotation/IsOfDeserializer.java |   64 +
 .../edm/xml/v4/annotation/LabeledElement.java   |   50 +
 .../annotation/LabeledElementDeserializer.java  |   55 +
 .../v4/annotation/LabeledElementReference.java  |   25 +
 .../v4/annotation/NavigationPropertyPath.java   |   25 +
 .../client/core/edm/xml/v4/annotation/Null.java |   28 +
 .../edm/xml/v4/annotation/NullDeserializer.java |   51 +
 .../client/core/edm/xml/v4/annotation/Path.java |   25 +
 .../edm/xml/v4/annotation/PropertyPath.java     |   25 +
 .../edm/xml/v4/annotation/PropertyValue.java    |   50 +
 .../annotation/PropertyValueDeserializer.java   |   57 +
 .../core/edm/xml/v4/annotation/Record.java      |   46 +
 .../xml/v4/annotation/RecordDeserializer.java   |   55 +
 .../core/edm/xml/v4/annotation/UrlRef.java      |   40 +
 .../xml/v4/annotation/UrlRefDeserializer.java   |   52 +
 .../AbstractBasicAuthHttpClientFactory.java     |   51 +
 .../http/AbstractNTLMAuthHttpClientFactory.java |   63 +
 .../core/http/DefaultHttpClientFactory.java     |   40 +
 .../core/http/DefaultHttpUriRequestFactory.java |   69 +
 .../olingo/client/core/http/HttpMerge.java      |   70 +
 .../olingo/client/core/http/HttpPatch.java      |   70 +
 .../core/op/impl/AbstractEdmDeserializer.java   |   71 +
 .../core/op/impl/AbstractJacksonTool.java       |   85 +
 .../core/op/impl/AbstractODataBinder.java       |  582 ++
 .../core/op/impl/AbstractODataDeserializer.java |  178 +
 .../core/op/impl/AbstractODataReader.java       |  138 +
 .../core/op/impl/AbstractODataSerializer.java   |  161 +
 .../core/op/impl/ComplexTypeDeserializer.java   |   83 +
 .../op/impl/EntityContainerDeserializer.java    |  102 +
 .../core/op/impl/EntityKeyDeserializer.java     |   50 +
 .../core/op/impl/EntitySetDeserializer.java     |   70 +
 .../core/op/impl/EntityTypeDeserializer.java    |   92 +
 .../core/op/impl/EnumTypeDeserializer.java      |   73 +
 .../op/impl/InjectableSerializerProvider.java   |   43 +
 .../client/core/op/impl/ODataV3BinderImpl.java  |   37 +
 .../core/op/impl/ODataV3DeserializerImpl.java   |   70 +
 .../client/core/op/impl/ODataV3ReaderImpl.java  |   48 +
 .../core/op/impl/ODataV3SerializerImpl.java     |   32 +
 .../client/core/op/impl/ODataV4BinderImpl.java  |   62 +
 .../core/op/impl/ODataV4DeserializerImpl.java   |   71 +
 .../client/core/op/impl/ODataV4ReaderImpl.java  |   48 +
 .../core/op/impl/ODataV4SerializerImpl.java     |   32 +
 .../client/core/op/impl/SchemaDeserializer.java |  149 +
 .../client/core/uri/AbstractURIBuilder.java     |  274 +
 .../apache/olingo/client/core/uri/URIUtils.java |  196 +
 .../client/core/uri/V3URIBuilderImpl.java       |   94 +
 .../client/core/uri/V4URIBuilderImpl.java       |  101 +
 .../uri/filter/AbstractComparingFilter.java     |   45 +
 .../uri/filter/AbstractFilterArgFactory.java    |  178 +
 .../core/uri/filter/AbstractFilterFactory.java  |  108 +
 .../client/core/uri/filter/AndFilter.java       |   42 +
 .../olingo/client/core/uri/filter/EqFilter.java |   33 +
 .../client/core/uri/filter/FilterConst.java     |   41 +
 .../client/core/uri/filter/FilterFunction.java  |   48 +
 .../client/core/uri/filter/FilterLambda.java    |   46 +
 .../client/core/uri/filter/FilterLiteral.java   |   41 +
 .../olingo/client/core/uri/filter/FilterOp.java |   45 +
 .../client/core/uri/filter/FilterProperty.java  |   40 +
 .../olingo/client/core/uri/filter/GeFilter.java |   33 +
 .../olingo/client/core/uri/filter/GtFilter.java |   33 +
 .../client/core/uri/filter/HasFilter.java       |   34 +
 .../olingo/client/core/uri/filter/LeFilter.java |   33 +
 .../olingo/client/core/uri/filter/LtFilter.java |   33 +
 .../client/core/uri/filter/MatchFilter.java     |   36 +
 .../olingo/client/core/uri/filter/NeFilter.java |   33 +
 .../client/core/uri/filter/NotFilter.java       |   35 +
 .../olingo/client/core/uri/filter/OrFilter.java |   42 +
 .../core/uri/filter/V3FilterArgFactoryImpl.java |   31 +
 .../core/uri/filter/V3FilterFactoryImpl.java    |   33 +
 .../core/uri/filter/V4FilterArgFactoryImpl.java |  107 +
 .../core/uri/filter/V4FilterFactoryImpl.java    |   46 +
 .../client/core/xml/AbstractDOMParser.java      |   46 +
 .../client/core/xml/AndroidDOMParserImpl.java   |   53 +
 .../client/core/xml/DefaultDOMParserImpl.java   |   78 +
 .../olingo/client/core/xml/XMLParser.java       |   37 +
 .../apache/olingo/client/core/AbstractTest.java |   60 +
 .../olingo/client/core/ODataClientTest.java     |   41 +
 .../deserializer/JsonReaderPerformance.java     |   76 +
 .../core/deserializer/JsonReaderTest.java       |  372 ++
 .../client/core/v3/FilterFactoryTest.java       |  167 +
 .../olingo/client/core/v3/MetadataTest.java     |  224 +
 .../client/core/v3/ServiceDocumentTest.java     |   58 +
 .../olingo/client/core/v3/URIBuilderTest.java   |  131 +
 .../client/core/v4/FilterFactoryTest.java       |   85 +
 .../olingo/client/core/v4/MetadataTest.java     |  282 +
 .../client/core/v4/ServiceDocumentTest.java     |   68 +
 .../olingo/client/core/v4/URIBuilderTest.java   |  136 +
 .../src/test/resources/complexProperty.json     |    8 +
 .../src/test/resources/fullEntity.json          |   22 +
 .../src/test/resources/fullEntitySet.json       |   29 +
 .../resources/fullEntitySetWithTwoEntities.json |   49 +
 ...fullEntityWithCollectionOfComplexValues.json |   28 +
 .../src/test/resources/minimalEntity.json       |   21 +
 .../apache/olingo/client/core/v3/metadata.xml   |  721 +++
 .../client/core/v3/northwind-metadata.xml       |   22 +
 .../olingo/client/core/v3/serviceDocument.json  |   33 +
 .../olingo/client/core/v3/serviceDocument.xml   |   49 +
 .../olingo/client/core/v4/demo-metadata.xml     |  163 +
 .../olingo/client/core/v4/fromdoc1-metadata.xml |  126 +
 .../olingo/client/core/v4/fromdoc2-metadata.xml |   54 +
 .../olingo/client/core/v4/fromdoc3-metadata.xml |  131 +
 .../apache/olingo/client/core/v4/metadata.xml   |  232 +
 .../client/core/v4/northwind-metadata.xml       |  471 ++
 .../olingo/client/core/v4/serviceDocument.json  |   32 +
 .../olingo/client/core/v4/serviceDocument.xml   |   46 +
 .../src/test/resources/primitiveNullValue.json  |    3 +
 .../test/resources/setOfComplexProperties.json  |   13 +
 .../resources/setOfPrimitiveProperties.json     |    8 +
 lib/commons-api/pom.xml                         |   39 +
 .../commons/api/ODataApplicationException.java  |   37 +
 .../olingo/commons/api/ODataException.java      |   37 +
 .../api/ODataNotImplementedException.java       |   33 +
 .../org/apache/olingo/commons/api/edm/Edm.java  |  111 +
 .../olingo/commons/api/edm/EdmAction.java       |   26 +
 .../olingo/commons/api/edm/EdmActionImport.java |   27 +
 .../commons/api/edm/EdmActionImportInfo.java    |   40 +
 .../olingo/commons/api/edm/EdmAnnotatable.java  |   30 +
 .../olingo/commons/api/edm/EdmAnnotations.java  |   24 +
 .../commons/api/edm/EdmBindingTarget.java       |   48 +
 .../olingo/commons/api/edm/EdmComplexType.java  |   31 +
 .../olingo/commons/api/edm/EdmElement.java      |   27 +
 .../commons/api/edm/EdmEntityContainer.java     |   66 +
 .../olingo/commons/api/edm/EdmEntitySet.java    |   29 +
 .../commons/api/edm/EdmEntitySetInfo.java       |   47 +
 .../olingo/commons/api/edm/EdmEntityType.java   |   64 +
 .../olingo/commons/api/edm/EdmEnumType.java     |   43 +
 .../olingo/commons/api/edm/EdmException.java    |   37 +
 .../olingo/commons/api/edm/EdmFunction.java     |   31 +
 .../commons/api/edm/EdmFunctionImport.java      |   30 +
 .../commons/api/edm/EdmFunctionImportInfo.java  |   40 +
 .../commons/api/edm/EdmKeyPropertyRef.java      |   43 +
 .../olingo/commons/api/edm/EdmMappable.java     |   32 +
 .../olingo/commons/api/edm/EdmMapping.java      |   53 +
 .../olingo/commons/api/edm/EdmMember.java       |   30 +
 .../apache/olingo/commons/api/edm/EdmNamed.java |   30 +
 .../commons/api/edm/EdmNavigationProperty.java  |   40 +
 .../olingo/commons/api/edm/EdmOperation.java    |   57 +
 .../commons/api/edm/EdmOperationImport.java     |   36 +
 .../commons/api/edm/EdmOperationImportInfo.java |   31 +
 .../olingo/commons/api/edm/EdmParameter.java    |   45 +
 .../commons/api/edm/EdmPrimitiveType.java       |  166 +
 .../api/edm/EdmPrimitiveTypeException.java      |   32 +
 .../olingo/commons/api/edm/EdmProperty.java     |   71 +
 .../olingo/commons/api/edm/EdmReturnType.java   |   45 +
 .../commons/api/edm/EdmServiceMetadata.java     |   59 +
 .../olingo/commons/api/edm/EdmSingleton.java    |   26 +
 .../commons/api/edm/EdmSingletonInfo.java       |   45 +
 .../commons/api/edm/EdmStructuredType.java      |   82 +
 .../apache/olingo/commons/api/edm/EdmTerm.java  |   50 +
 .../apache/olingo/commons/api/edm/EdmType.java  |   40 +
 .../commons/api/edm/EdmTypeDefinition.java      |   52 +
 .../apache/olingo/commons/api/edm/EdmTyped.java |   37 +
 .../commons/api/edm/FullQualifiedName.java      |   84 +
 .../apache/olingo/commons/api/edm/Target.java   |   71 +
 .../api/edm/constants/EdmContentKind.java       |   30 +
 .../commons/api/edm/constants/EdmOnDelete.java  |   25 +
 .../api/edm/constants/EdmTargetPath.java        |   50 +
 .../commons/api/edm/constants/EdmTypeKind.java  |   28 +
 .../api/edm/constants/ODataServiceVersion.java  |  140 +
 .../olingo/commons/api/edm/package-info.java    |   19 +
 lib/commons-core/pom.xml                        |   46 +
 .../core/edm/AbstractEdmBindingTarget.java      |   55 +
 .../core/edm/AbstractEdmComplexType.java        |   50 +
 .../core/edm/AbstractEdmEntityContainer.java    |  102 +
 .../commons/core/edm/AbstractEdmEntityType.java |  114 +
 .../commons/core/edm/AbstractEdmEnumType.java   |  206 +
 .../commons/core/edm/AbstractEdmImpl.java       |  252 +
 .../core/edm/AbstractEdmKeyPropertyRef.java     |   80 +
 .../core/edm/AbstractEdmNavigationProperty.java |   76 +
 .../commons/core/edm/AbstractEdmOperation.java  |  114 +
 .../core/edm/AbstractEdmOperationImport.java    |   63 +
 .../commons/core/edm/AbstractEdmParameter.java  |   87 +
 .../commons/core/edm/AbstractEdmProperty.java   |   70 +
 .../commons/core/edm/AbstractEdmReturnType.java |   85 +
 .../core/edm/AbstractEdmStructuredType.java     |  129 +
 .../core/edm/AbstractEdmTypeDefinition.java     |  107 +
 .../olingo/commons/core/edm/ActionMapKey.java   |   67 +
 .../core/edm/EdmActionImportInfoImpl.java       |   45 +
 .../olingo/commons/core/edm/EdmElementImpl.java |   29 +
 .../commons/core/edm/EdmEntitySetInfoImpl.java  |   52 +
 .../core/edm/EdmFunctionImportInfoImpl.java     |   45 +
 .../olingo/commons/core/edm/EdmMemberImpl.java  |   38 +
 .../olingo/commons/core/edm/EdmNamedImpl.java   |   40 +
 .../core/edm/EdmOperationImportInfoImpl.java    |   36 +
 .../commons/core/edm/EdmSingletonInfoImpl.java  |   52 +
 .../core/edm/EdmStructuredTypeHelper.java       |   31 +
 .../olingo/commons/core/edm/EdmTypeImpl.java    |   48 +
 .../olingo/commons/core/edm/FunctionMapKey.java |  113 +
 .../primitivetype/AbstractPrimitiveType.java    |  116 +
 .../core/edm/primitivetype/EdmBinary.java       |  117 +
 .../core/edm/primitivetype/EdmBoolean.java      |   81 +
 .../commons/core/edm/primitivetype/EdmByte.java |  101 +
 .../commons/core/edm/primitivetype/EdmDate.java |   95 +
 .../edm/primitivetype/EdmDateTimeOffset.java    |  239 +
 .../core/edm/primitivetype/EdmDecimal.java      |  200 +
 .../core/edm/primitivetype/EdmDouble.java       |  146 +
 .../core/edm/primitivetype/EdmDuration.java     |  141 +
 .../commons/core/edm/primitivetype/EdmGuid.java |   88 +
 .../core/edm/primitivetype/EdmInt16.java        |   99 +
 .../core/edm/primitivetype/EdmInt32.java        |  100 +
 .../core/edm/primitivetype/EdmInt64.java        |  135 +
 .../commons/core/edm/primitivetype/EdmNull.java |   75 +
 .../edm/primitivetype/EdmPrimitiveTypeKind.java |   95 +
 .../core/edm/primitivetype/EdmSByte.java        |   95 +
 .../core/edm/primitivetype/EdmSingle.java       |  148 +
 .../core/edm/primitivetype/EdmString.java       |  108 +
 .../core/edm/primitivetype/EdmTimeOfDay.java    |  107 +
 .../primitivetype/SingletonPrimitiveType.java   |   52 +
 .../commons/core/edm/primitivetype/Uint7.java   |   66 +
 .../commons/core/edm/ActionMapKeyTest.java      |  102 +
 .../commons/core/edm/EdmImplCachingTest.java    |  389 ++
 .../commons/core/edm/EdmImplCallCreateTest.java |  268 +
 .../commons/core/edm/FunctionMapKeyTest.java    |  252 +
 .../primitivetype/CommonPrimitiveTypeTest.java  |  175 +
 .../core/edm/primitivetype/EdmBinaryTest.java   |  106 +
 .../core/edm/primitivetype/EdmBooleanTest.java  |   64 +
 .../core/edm/primitivetype/EdmByteTest.java     |   86 +
 .../core/edm/primitivetype/EdmDateTest.java     |   93 +
 .../primitivetype/EdmDateTimeOffsetTest.java    |  125 +
 .../core/edm/primitivetype/EdmDecimalTest.java  |  132 +
 .../core/edm/primitivetype/EdmDoubleTest.java   |  132 +
 .../core/edm/primitivetype/EdmDurationTest.java |  105 +
 .../core/edm/primitivetype/EdmGuidTest.java     |   68 +
 .../core/edm/primitivetype/EdmInt16Test.java    |   88 +
 .../core/edm/primitivetype/EdmInt32Test.java    |   89 +
 .../core/edm/primitivetype/EdmInt64Test.java    |   96 +
 .../core/edm/primitivetype/EdmNullTest.java     |   50 +
 .../core/edm/primitivetype/EdmSByteTest.java    |   82 +
 .../core/edm/primitivetype/EdmSingleTest.java   |  138 +
 .../core/edm/primitivetype/EdmStringTest.java   |   78 +
 .../edm/primitivetype/EdmTimeOfDayTest.java     |   93 +
 .../primitivetype/PrimitiveTypeBaseTest.java    |  119 +
 .../core/edm/primitivetype/UInt7Test.java       |   35 +
 lib/pom.xml                                     |   47 +
 lib/ref/pom.xml                                 |   50 +
 lib/server-api/pom.xml                          |   45 +
 .../olingo/server/api/edm/provider/Action.java  |   54 +
 .../server/api/edm/provider/ActionImport.java   |   48 +
 .../server/api/edm/provider/AliasInfo.java      |   45 +
 .../server/api/edm/provider/Annotation.java     |   72 +
 .../server/api/edm/provider/BindingTarget.java  |   60 +
 .../server/api/edm/provider/ComplexType.java    |   62 +
 .../server/api/edm/provider/EdmProvider.java    |  182 +
 .../api/edm/provider/EntityContainer.java       |   93 +
 .../api/edm/provider/EntityContainerInfo.java   |   47 +
 .../server/api/edm/provider/EntitySet.java      |   55 +
 .../server/api/edm/provider/EntitySetPath.java  |   45 +
 .../server/api/edm/provider/EntityType.java     |   84 +
 .../server/api/edm/provider/EnumMember.java     |   49 +
 .../server/api/edm/provider/EnumType.java       |   73 +
 .../server/api/edm/provider/Expression.java     |   24 +
 .../server/api/edm/provider/Function.java       |   65 +
 .../server/api/edm/provider/FunctionImport.java |   64 +
 .../olingo/server/api/edm/provider/Mapping.java |   96 +
 .../api/edm/provider/NavigationProperty.java    |  118 +
 .../edm/provider/NavigationPropertyBinding.java |   46 +
 .../server/api/edm/provider/Operation.java      |   81 +
 .../api/edm/provider/OperationImport.java       |   47 +
 .../server/api/edm/provider/Parameter.java      |  113 +
 .../server/api/edm/provider/Property.java       |  148 +
 .../server/api/edm/provider/PropertyRef.java    |   55 +
 .../api/edm/provider/ReferentialConstraint.java |   46 +
 .../server/api/edm/provider/ReturnType.java     |   91 +
 .../olingo/server/api/edm/provider/Schema.java  |  135 +
 .../server/api/edm/provider/Singleton.java      |   44 +
 .../server/api/edm/provider/StructuredType.java |   93 +
 .../olingo/server/api/edm/provider/Term.java    |  150 +
 .../server/api/edm/provider/TypeDefinition.java |   94 +
 .../apache/olingo/server/api/uri/UriInfo.java   |   48 +
 .../olingo/server/api/uri/UriInfoAll.java       |   28 +
 .../olingo/server/api/uri/UriInfoBatch.java     |   27 +
 .../olingo/server/api/uri/UriInfoCrossjoin.java |   34 +
 .../olingo/server/api/uri/UriInfoEntityId.java  |   68 +
 .../olingo/server/api/uri/UriInfoKind.java      |   67 +
 .../olingo/server/api/uri/UriInfoMetadata.java  |   39 +
 .../olingo/server/api/uri/UriInfoResource.java  |  118 +
 .../olingo/server/api/uri/UriInfoService.java   |   27 +
 .../olingo/server/api/uri/UriParameter.java     |   53 +
 .../olingo/server/api/uri/UriResource.java      |   35 +
 .../server/api/uri/UriResourceAction.java       |   42 +
 .../api/uri/UriResourceComplexProperty.java     |   41 +
 .../olingo/server/api/uri/UriResourceCount.java |   27 +
 .../server/api/uri/UriResourceEntitySet.java    |   58 +
 .../server/api/uri/UriResourceFunction.java     |   66 +
 .../olingo/server/api/uri/UriResourceIt.java    |   38 +
 .../olingo/server/api/uri/UriResourceKind.java  |  115 +
 .../server/api/uri/UriResourceLambdaAll.java    |   39 +
 .../server/api/uri/UriResourceLambdaAny.java    |   39 +
 .../api/uri/UriResourceLambdaVariable.java      |   33 +
 .../server/api/uri/UriResourceNavigation.java   |   51 +
 .../server/api/uri/UriResourcePartTyped.java    |   43 +
 .../api/uri/UriResourcePrimitiveProperty.java   |   27 +
 .../server/api/uri/UriResourceProperty.java     |   33 +
 .../olingo/server/api/uri/UriResourceRef.java   |   28 +
 .../olingo/server/api/uri/UriResourceRoot.java  |   28 +
 .../server/api/uri/UriResourceSingleton.java    |   46 +
 .../olingo/server/api/uri/UriResourceValue.java |   27 +
 .../api/uri/queryoption/AliasQueryOption.java   |   27 +
 .../server/api/uri/queryoption/CountOption.java |   25 +
 .../api/uri/queryoption/CustomQueryOption.java  |   23 +
 .../uri/queryoption/ExceptionVisitExpand.java   |   25 +
 .../server/api/uri/queryoption/ExpandItem.java  |   53 +
 .../api/uri/queryoption/ExpandOption.java       |   27 +
 .../api/uri/queryoption/FilterOption.java       |   26 +
 .../api/uri/queryoption/FormatOption.java       |   25 +
 .../server/api/uri/queryoption/IdOption.java    |   25 +
 .../api/uri/queryoption/LevelsExpandOption.java |   27 +
 .../server/api/uri/queryoption/OrderByItem.java |   33 +
 .../api/uri/queryoption/OrderByOption.java      |   27 +
 .../server/api/uri/queryoption/QueryOption.java |   27 +
 .../api/uri/queryoption/SearchOption.java       |   27 +
 .../server/api/uri/queryoption/SelectItem.java  |   37 +
 .../api/uri/queryoption/SelectOption.java       |   27 +
 .../server/api/uri/queryoption/SkipOption.java  |   25 +
 .../api/uri/queryoption/SkipTokenOption.java    |   25 +
 .../uri/queryoption/SupportedQueryOptions.java  |   45 +
 .../api/uri/queryoption/SystemQueryOption.java  |   25 +
 .../server/api/uri/queryoption/TopOption.java   |   25 +
 .../queryoption/expression/AliasExpression.java |   25 +
 .../expression/BinaryExpression.java            |   29 +
 .../expression/BinaryOperatorKind.java          |   57 +
 .../uri/queryoption/expression/Enumeration.java |   31 +
 .../uri/queryoption/expression/Expression.java  |   23 +
 .../expression/ExpressionVisitException.java    |   25 +
 .../expression/ExpressionVisitor.java           |   57 +
 .../uri/queryoption/expression/LambdaRef.java   |   25 +
 .../api/uri/queryoption/expression/Literal.java |   29 +
 .../api/uri/queryoption/expression/Member.java  |   36 +
 .../uri/queryoption/expression/MethodCall.java  |   29 +
 .../queryoption/expression/MethodCallKind.java  |   58 +
 .../uri/queryoption/expression/TypeLiteral.java |   27 +
 .../queryoption/expression/UnaryOperator.java   |   27 +
 .../expression/UnaryOperatorKind.java           |   44 +
 .../expression/VisitableExression.java          |   47 +
 .../uri/queryoption/search/SearchBinary.java    |   29 +
 .../search/SearchBinaryOperatorKind.java        |   45 +
 .../queryoption/search/SearchExpression.java    |   23 +
 .../api/uri/queryoption/search/SearchTerm.java  |   25 +
 .../api/uri/queryoption/search/SearchUnary.java |   25 +
 .../search/SearchUnaryOperatorKind.java         |   43 +
 lib/server-core/pom.xml                         |   84 +
 .../olingo/server/core/uri/antlr/UriLexer.g4    |  404 ++
 .../olingo/server/core/uri/antlr/UriParser.g4   |  439 ++
 .../server/core/edm/provider/EdmActionImpl.java |   36 +
 .../core/edm/provider/EdmActionImportImpl.java  |   43 +
 .../core/edm/provider/EdmBindingTargetImpl.java |   77 +
 .../core/edm/provider/EdmComplexTypeImpl.java   |   59 +
 .../edm/provider/EdmEntityContainerImpl.java    |  111 +
 .../core/edm/provider/EdmEntitySetImpl.java     |   32 +
 .../core/edm/provider/EdmEntityTypeImpl.java    |   87 +
 .../core/edm/provider/EdmEnumTypeImpl.java      |   61 +
 .../core/edm/provider/EdmFunctionImpl.java      |   56 +
 .../edm/provider/EdmFunctionImportImpl.java     |   45 +
 .../edm/provider/EdmKeyPropertyRefImpl.java     |   48 +
 .../edm/provider/EdmNavigationPropertyImpl.java |   71 +
 .../core/edm/provider/EdmOperationImpl.java     |   67 +
 .../edm/provider/EdmOperationImportImpl.java    |   33 +
 .../core/edm/provider/EdmParameterImpl.java     |   65 +
 .../core/edm/provider/EdmPropertyImpl.java      |   87 +
 .../core/edm/provider/EdmProviderImpl.java      |  287 +
 .../core/edm/provider/EdmReturnTypeImpl.java    |   59 +
 .../edm/provider/EdmServiceMetadataImpl.java    |  190 +
 .../core/edm/provider/EdmSingletonImpl.java     |   31 +
 .../provider/EdmStructuredTypeHelperImpl.java   |   73 +
 .../edm/provider/EdmTypeDefinitionImpl.java     |   74 +
 .../olingo/server/core/uri/UriInfoImpl.java     |  296 +
 .../server/core/uri/UriParameterImpl.java       |   82 +
 .../server/core/uri/UriResourceActionImpl.java  |   77 +
 .../uri/UriResourceComplexPropertyImpl.java     |   70 +
 .../server/core/uri/UriResourceCountImpl.java   |   35 +
 .../core/uri/UriResourceEntitySetImpl.java      |   66 +
 .../core/uri/UriResourceFunctionImpl.java       |  111 +
 .../olingo/server/core/uri/UriResourceImpl.java |   39 +
 .../server/core/uri/UriResourceItImpl.java      |   65 +
 .../core/uri/UriResourceLambdaAllImpl.java      |   73 +
 .../core/uri/UriResourceLambdaAnyImpl.java      |   72 +
 .../core/uri/UriResourceLambdaVarImpl.java      |   70 +
 .../uri/UriResourceNavigationPropertyImpl.java  |   63 +
 .../uri/UriResourcePrimitivePropertyImpl.java   |   59 +
 .../server/core/uri/UriResourceRefImpl.java     |   36 +
 .../server/core/uri/UriResourceRootImpl.java    |   62 +
 .../core/uri/UriResourceSingletonImpl.java      |   71 +
 .../uri/UriResourceStartingTypeFilterImpl.java  |   66 +
 .../server/core/uri/UriResourceTypedImpl.java   |   60 +
 .../server/core/uri/UriResourceValueImpl.java   |   36 +
 .../core/uri/UriResourceWithKeysImpl.java       |   99 +
 .../uri/parser/CheckFullContextListener.java    |   60 +
 .../olingo/server/core/uri/parser/Parser.java   |  442 ++
 .../olingo/server/core/uri/parser/RawUri.java   |   46 +
 .../server/core/uri/parser/UriContext.java      |   80 +
 .../server/core/uri/parser/UriDecoder.java      |  137 +
 .../core/uri/parser/UriParseTreeVisitor.java    | 2111 ++++++++
 .../core/uri/parser/UriParserException.java     |   35 +
 .../uri/parser/UriParserSemanticException.java  |   33 +
 .../uri/parser/UriParserSyntaxException.java    |   36 +
 .../uri/queryoption/AliasQueryOptionImpl.java   |   38 +
 .../core/uri/queryoption/CountOptionImpl.java   |   42 +
 .../uri/queryoption/CustomQueryOptionImpl.java  |   25 +
 .../core/uri/queryoption/ExpandItemImpl.java    |  176 +
 .../core/uri/queryoption/ExpandOptionImpl.java  |   49 +
 .../core/uri/queryoption/FilterOptionImpl.java  |   43 +
 .../core/uri/queryoption/FormatOptionImpl.java  |   41 +
 .../core/uri/queryoption/IdOptionImpl.java      |   40 +
 .../core/uri/queryoption/LevelsOptionImpl.java  |   53 +
 .../core/uri/queryoption/OrderByItemImpl.java   |   49 +
 .../core/uri/queryoption/OrderByOptionImpl.java |   50 +
 .../core/uri/queryoption/QueryOptionImpl.java   |   47 +
 .../core/uri/queryoption/SearchOptionImpl.java  |   37 +
 .../core/uri/queryoption/SelectItemImpl.java    |   84 +
 .../core/uri/queryoption/SelectOptionImpl.java  |   50 +
 .../core/uri/queryoption/SkipOptionImpl.java    |   41 +
 .../uri/queryoption/SkipTokenOptionImpl.java    |   41 +
 .../uri/queryoption/SystemQueryOptionImpl.java  |   42 +
 .../core/uri/queryoption/TopOptionImpl.java     |   42 +
 .../uri/queryoption/expression/AliasImpl.java   |   44 +
 .../uri/queryoption/expression/BinaryImpl.java  |   70 +
 .../queryoption/expression/EnumerationImpl.java |   60 +
 .../queryoption/expression/ExpressionImpl.java  |   25 +
 .../queryoption/expression/LambdaRefImpl.java   |   46 +
 .../uri/queryoption/expression/LiteralImpl.java |   58 +
 .../uri/queryoption/expression/MemberImpl.java  |   99 +
 .../queryoption/expression/MethodCallImpl.java  |   70 +
 .../queryoption/expression/TypeLiteralImpl.java |   47 +
 .../uri/queryoption/expression/UnaryImpl.java   |   58 +
 .../core/edm/provider/EdmActionImplTest.java    |  158 +
 .../edm/provider/EdmActionImportImplTest.java   |  105 +
 .../edm/provider/EdmComplexTypeImplTest.java    |  165 +
 .../provider/EdmEntityContainerImplTest.java    |  207 +
 .../core/edm/provider/EdmEntitySetImplTest.java |   84 +
 .../edm/provider/EdmEntityTypeImplTest.java     |  278 +
 .../server/core/edm/provider/EdmEnumTest.java   |  179 +
 .../core/edm/provider/EdmFunctionImplTest.java  |   77 +
 .../edm/provider/EdmFunctionImportImplTest.java |   87 +
 .../edm/provider/EdmKeyPropertyRefImplTest.java |  143 +
 .../core/edm/provider/EdmMemberImplTest.java    |   41 +
 .../core/edm/provider/EdmNamedImplTest.java     |   42 +
 .../provider/EdmNavigationPropertyImplTest.java |  146 +
 .../core/edm/provider/EdmParameterImplTest.java |  142 +
 .../core/edm/provider/EdmPropertyImplTest.java  |  157 +
 .../EdmProviderImplOverloadingTest.java         |  199 +
 .../core/edm/provider/EdmProviderImplTest.java  |  232 +
 .../edm/provider/EdmReturnTypeImplTest.java     |  131 +
 .../provider/EdmServiceMetadataImplTest.java    |  189 +
 .../core/edm/provider/EdmSingletonImplTest.java |  132 +
 .../edm/provider/EdmTypeDefinitionImplTest.java |   75 +
 .../core/edm/provider/EdmTypeImplTest.java      |   45 +
 .../edm/provider/PrimitiveTypeBaseTest.java     |  117 +
 .../server/core/testutil/EdmTechProvider.java   | 1976 +++++++
 .../core/testutil/EdmTechTestProvider.java      |   94 +
 .../olingo/server/core/uri/RawUriTest.java      |  151 +
 .../olingo/server/core/uri/UriInfoImplTest.java |  204 +
 .../server/core/uri/UriResourceImplTest.java    |  523 ++
 .../core/uri/antlr/TestFullResourcePath.java    | 5104 ++++++++++++++++++
 .../olingo/server/core/uri/antlr/TestLexer.java |  251 +
 .../core/uri/antlr/TestUriParserImpl.java       | 1128 ++++
 .../core/uri/queryoption/QueryOptionTest.java   |  321 ++
 .../queryoption/expression/ExpressionTest.java  |  249 +
 .../core/uri/testutil/ExpandValidator.java      |  232 +
 .../core/uri/testutil/FilterTreeToText.java     |  154 +
 .../core/uri/testutil/FilterValidator.java      |  534 ++
 .../core/uri/testutil/ParseTreeToText.java      |   82 +
 .../core/uri/testutil/ParserValidator.java      |  162 +
 .../core/uri/testutil/ParserWithLogging.java    |   56 +
 .../core/uri/testutil/ResourceValidator.java    |  595 ++
 .../core/uri/testutil/TestErrorLogger.java      |  105 +
 .../core/uri/testutil/TokenValidator.java       |  194 +
 .../core/uri/testutil/UriLexerWithTrace.java    |   85 +
 .../server/core/uri/testutil/UriValidator.java  |  258 +
 .../server/core/uri/testutil/Validator.java     |   23 +
 odata4-lib/odata4-client-api/pom.xml            |   54 -
 .../olingo/odata4/client/api/Configuration.java |  183 -
 .../olingo/odata4/client/api/Constants.java     |  217 -
 .../olingo/odata4/client/api/ODataClient.java   |   55 -
 .../odata4/client/api/ODataConstants.java       |  219 -
 .../olingo/odata4/client/api/ODataError.java    |   67 -
 .../olingo/odata4/client/api/ODataV3Client.java |   39 -
 .../olingo/odata4/client/api/ODataV4Client.java |   39 -
 .../client/api/UnsupportedInV3Exception.java    |   31 -
 .../odata4/client/api/V3Configuration.java      |   44 -
 .../odata4/client/api/V4Configuration.java      |   24 -
 .../odata4/client/api/data/ServiceDocument.java |  138 -
 .../client/api/data/ServiceDocumentItem.java    |   30 -
 .../api/deserializer/AnnotationProperty.java    |   24 -
 .../api/deserializer/ClientException.java       |   36 -
 .../client/api/deserializer/ComplexValue.java   |   35 -
 .../odata4/client/api/deserializer/Entity.java  |   59 -
 .../client/api/deserializer/EntitySet.java      |   34 -
 .../api/deserializer/NavigationProperty.java    |   27 -
 .../client/api/deserializer/Property.java       |   24 -
 .../odata4/client/api/deserializer/Reader.java  |   30 -
 .../api/deserializer/StructuralProperty.java    |   30 -
 .../odata4/client/api/deserializer/Value.java   |   28 -
 .../odata4/client/api/domain/EdmSimpleType.java |  288 -
 .../client/api/domain/ODataCollectionValue.java |   98 -
 .../client/api/domain/ODataComplexValue.java    |   97 -
 .../odata4/client/api/domain/ODataDuration.java |   79 -
 .../client/api/domain/ODataGeospatialValue.java |  486 --
 .../client/api/domain/ODataInvokeResult.java    |   30 -
 .../client/api/domain/ODataPrimitiveValue.java  |  376 --
 .../odata4/client/api/domain/ODataProperty.java |  192 -
 .../client/api/domain/ODataServiceDocument.java |  183 -
 .../client/api/domain/ODataTimestamp.java       |  138 -
 .../odata4/client/api/domain/ODataValue.java    |  111 -
 .../domain/geospatial/ComposedGeospatial.java   |   75 -
 .../api/domain/geospatial/Geospatial.java       |  156 -
 .../domain/geospatial/GeospatialCollection.java |   47 -
 .../api/domain/geospatial/LineString.java       |   38 -
 .../api/domain/geospatial/MultiLineString.java  |   38 -
 .../api/domain/geospatial/MultiPoint.java       |   38 -
 .../api/domain/geospatial/MultiPolygon.java     |   38 -
 .../client/api/domain/geospatial/Point.java     |   77 -
 .../client/api/domain/geospatial/Polygon.java   |   72 -
 .../odata4/client/api/edm/ConcurrencyMode.java  |   26 -
 .../client/api/edm/StoreGeneratedPattern.java   |   27 -
 .../client/api/edm/xml/CommonAnnotations.java   |   26 -
 .../api/edm/xml/CommonFunctionImport.java       |   22 -
 .../api/edm/xml/CommonNavigationProperty.java   |   22 -
 .../client/api/edm/xml/CommonParameter.java     |   33 -
 .../client/api/edm/xml/CommonProperty.java      |   39 -
 .../odata4/client/api/edm/xml/ComplexType.java  |   32 -
 .../odata4/client/api/edm/xml/DataServices.java |   30 -
 .../olingo/odata4/client/api/edm/xml/Edmx.java  |   26 -
 .../client/api/edm/xml/EntityContainer.java     |   40 -
 .../odata4/client/api/edm/xml/EntityKey.java    |   26 -
 .../odata4/client/api/edm/xml/EntitySet.java    |   25 -
 .../odata4/client/api/edm/xml/EntityType.java   |   32 -
 .../odata4/client/api/edm/xml/EnumType.java     |   34 -
 .../odata4/client/api/edm/xml/Member.java       |   26 -
 .../olingo/odata4/client/api/edm/xml/Named.java |   24 -
 .../odata4/client/api/edm/xml/OnDelete.java     |   24 -
 .../client/api/edm/xml/OnDeleteAction.java      |   28 -
 .../odata4/client/api/edm/xml/PropertyRef.java  |   25 -
 .../odata4/client/api/edm/xml/Schema.java       |   74 -
 .../odata4/client/api/edm/xml/XMLMetadata.java  |   59 -
 .../client/api/edm/xml/v3/Annotations.java      |   29 -
 .../client/api/edm/xml/v3/Association.java      |   30 -
 .../client/api/edm/xml/v3/AssociationEnd.java   |   32 -
 .../client/api/edm/xml/v3/AssociationSet.java   |   29 -
 .../api/edm/xml/v3/AssociationSetEnd.java       |   26 -
 .../client/api/edm/xml/v3/FunctionImport.java   |   43 -
 .../api/edm/xml/v3/NavigationProperty.java      |   29 -
 .../odata4/client/api/edm/xml/v3/Parameter.java |   24 -
 .../client/api/edm/xml/v3/ParameterMode.java    |   27 -
 .../odata4/client/api/edm/xml/v3/Property.java  |   48 -
 .../client/api/edm/xml/v3/PropertyValue.java    |   43 -
 .../api/edm/xml/v3/ReferentialConstraint.java   |   26 -
 .../edm/xml/v3/ReferentialConstraintRole.java   |   30 -
 .../client/api/edm/xml/v3/TypeAnnotation.java   |   31 -
 .../odata4/client/api/edm/xml/v3/Using.java     |   27 -
 .../client/api/edm/xml/v3/ValueAnnotation.java  |   45 -
 .../odata4/client/api/edm/xml/v3/ValueTerm.java |   26 -
 .../odata4/client/api/edm/xml/v4/Action.java    |   36 -
 .../client/api/edm/xml/v4/ActionImport.java     |   24 -
 .../client/api/edm/xml/v4/AnnotatedEdmItem.java |   24 -
 .../client/api/edm/xml/v4/Annotation.java       |   33 -
 .../client/api/edm/xml/v4/Annotations.java      |   29 -
 .../client/api/edm/xml/v4/BindingTarget.java    |   27 -
 .../client/api/edm/xml/v4/CSDLElement.java      |   37 -
 .../client/api/edm/xml/v4/ComplexType.java      |   43 -
 .../odata4/client/api/edm/xml/v4/Edmx.java      |   26 -
 .../client/api/edm/xml/v4/EntityContainer.java  |   44 -
 .../odata4/client/api/edm/xml/v4/EntitySet.java |   24 -
 .../client/api/edm/xml/v4/EntityType.java       |   23 -
 .../odata4/client/api/edm/xml/v4/Function.java  |   24 -
 .../client/api/edm/xml/v4/FunctionImport.java   |   28 -
 .../odata4/client/api/edm/xml/v4/Include.java   |   26 -
 .../api/edm/xml/v4/IncludeAnnotations.java      |   28 -
 .../api/edm/xml/v4/NavigationProperty.java      |   39 -
 .../edm/xml/v4/NavigationPropertyBinding.java   |   27 -
 .../client/api/edm/xml/v4/OperationImport.java  |   28 -
 .../odata4/client/api/edm/xml/v4/Parameter.java |   24 -
 .../odata4/client/api/edm/xml/v4/Property.java  |   25 -
 .../odata4/client/api/edm/xml/v4/Reference.java |   33 -
 .../api/edm/xml/v4/ReferentialConstraint.java   |   27 -
 .../client/api/edm/xml/v4/ReturnType.java       |   34 -
 .../odata4/client/api/edm/xml/v4/Schema.java    |   64 -
 .../odata4/client/api/edm/xml/v4/Singleton.java |   25 -
 .../odata4/client/api/edm/xml/v4/Term.java      |   43 -
 .../client/api/edm/xml/v4/TypeDefinition.java   |   39 -
 .../client/api/edm/xml/v4/XMLMetadata.java      |   36 -
 .../xml/v4/annotation/ConstExprConstruct.java   |   56 -
 .../edm/xml/v4/annotation/DynExprConstruct.java |   23 -
 .../edm/xml/v4/annotation/ExprConstruct.java    |   23 -
 .../odata4/client/api/format/ODataFormat.java   |   97 -
 .../client/api/format/ODataMediaFormat.java     |   71 -
 .../client/api/format/ODataPubFormat.java       |   97 -
 .../client/api/format/ODataValueFormat.java     |   76 -
 .../client/api/http/HttpClientException.java    |   68 -
 .../client/api/http/HttpClientFactory.java      |   30 -
 .../odata4/client/api/http/HttpMethod.java      |   33 -
 .../client/api/http/HttpUriRequestFactory.java  |   30 -
 .../client/api/http/NoContentException.java     |   36 -
 .../odata4/client/api/op/ODataBinder.java       |  121 -
 .../odata4/client/api/op/ODataDeserializer.java |   93 -
 .../odata4/client/api/op/ODataReader.java       |  103 -
 .../odata4/client/api/op/ODataSerializer.java   |  118 -
 .../client/api/op/ODataV3Deserializer.java      |   23 -
 .../client/api/op/ODataV4Deserializer.java      |   29 -
 .../odata4/client/api/uri/QueryOption.java      |   95 -
 .../odata4/client/api/uri/SegmentType.java      |   66 -
 .../odata4/client/api/uri/URIBuilder.java       |  224 -
 .../odata4/client/api/uri/V3URIBuilder.java     |   47 -
 .../odata4/client/api/uri/V4URIBuilder.java     |   87 -
 .../odata4/client/api/uri/filter/FilterArg.java |   30 -
 .../client/api/uri/filter/FilterArgFactory.java |   83 -
 .../client/api/uri/filter/FilterFactory.java    |   61 -
 .../odata4/client/api/uri/filter/URIFilter.java |   32 -
 .../api/uri/filter/V3FilterArgFactory.java      |   25 -
 .../client/api/uri/filter/V3FilterFactory.java  |   26 -
 .../api/uri/filter/V4FilterArgFactory.java      |   55 -
 .../client/api/uri/filter/V4FilterFactory.java  |   32 -
 .../odata4/client/api/utils/XMLUtils.java       |  176 -
 odata4-lib/odata4-client-core/pom.xml           |   98 -
 .../client/core/AbstractConfiguration.java      |  197 -
 .../odata4/client/core/AbstractODataClient.java |   37 -
 .../odata4/client/core/ODataClientFactory.java  |   37 -
 .../odata4/client/core/ODataV3ClientImpl.java   |  146 -
 .../odata4/client/core/ODataV4ClientImpl.java   |  146 -
 .../odata4/client/core/V3ConfigurationImpl.java |   57 -
 .../odata4/client/core/V4ConfigurationImpl.java |   31 -
 .../core/data/AbstractServiceDocument.java      |  145 -
 .../data/JSONServiceDocumentDeserializer.java   |   82 -
 .../core/data/ODataJacksonDeserializer.java     |   43 -
 .../core/data/ODataJacksonSerializer.java       |   43 -
 .../core/data/ServiceDocumentItemImpl.java      |   78 -
 .../data/XMLServiceDocumentDeserializer.java    |  118 -
 .../core/data/v3/JSONServiceDocumentImpl.java   |   65 -
 .../core/data/v3/XMLServiceDocumentImpl.java    |   46 -
 .../core/data/v4/AbstractServiceDocument.java   |   88 -
 .../core/data/v4/JSONServiceDocumentImpl.java   |   41 -
 .../core/data/v4/XMLServiceDocumentImpl.java    |   28 -
 .../deserializer/AnnotationPropertyImpl.java    |   53 -
 .../core/deserializer/ComplexValueImpl.java     |   82 -
 .../client/core/deserializer/EntityImpl.java    |  126 -
 .../core/deserializer/EntitySetBuilder.java     |   72 -
 .../client/core/deserializer/EntitySetImpl.java |  120 -
 .../client/core/deserializer/JsonReader.java    |   89 -
 .../deserializer/NavigationPropertyImpl.java    |   89 -
 .../core/deserializer/PrimitiveValue.java       |   51 -
 .../core/deserializer/PropertyCollection.java   |   96 -
 .../deserializer/PropertyCollectionBuilder.java |  220 -
 .../deserializer/StructuralPropertyImpl.java    |   83 -
 .../edm/AbstractEdmServiceMetadataImpl.java     |   98 -
 .../odata4/client/core/edm/EdmActionImpl.java   |   37 -
 .../client/core/edm/EdmActionImportImpl.java    |   44 -
 .../client/core/edm/EdmBindingTargetImpl.java   |   78 -
 .../odata4/client/core/edm/EdmClientImpl.java   |  373 --
 .../client/core/edm/EdmComplexTypeImpl.java     |   66 -
 .../client/core/edm/EdmEntityContainerImpl.java |  123 -
 .../client/core/edm/EdmEntitySetImpl.java       |   35 -
 .../client/core/edm/EdmEntityTypeImpl.java      |   79 -
 .../odata4/client/core/edm/EdmEnumTypeImpl.java |   95 -
 .../odata4/client/core/edm/EdmFunctionImpl.java |   44 -
 .../client/core/edm/EdmFunctionImportImpl.java  |   45 -
 .../client/core/edm/EdmKeyPropertyRefImpl.java  |   49 -
 .../core/edm/EdmNavigationPropertyImpl.java     |   73 -
 .../client/core/edm/EdmOperationImpl.java       |   60 -
 .../client/core/edm/EdmOperationImportImpl.java |   34 -
 .../client/core/edm/EdmParameterImpl.java       |   73 -
 .../odata4/client/core/edm/EdmPropertyImpl.java |   90 -
 .../client/core/edm/EdmReturnTypeImpl.java      |   67 -
 .../client/core/edm/EdmSingletonImpl.java       |   35 -
 .../core/edm/EdmStructuredTypeHelperImpl.java   |   71 -
 .../client/core/edm/EdmTypeDefinitionImpl.java  |   73 -
 .../odata4/client/core/edm/EdmTypeInfo.java     |  174 -
 .../core/edm/v3/EdmActionImportProxy.java       |   45 -
 .../client/core/edm/v3/EdmActionProxy.java      |   39 -
 .../client/core/edm/v3/EdmEntitySetProxy.java   |  101 -
 .../core/edm/v3/EdmFunctionImportProxy.java     |   46 -
 .../client/core/edm/v3/EdmFunctionProxy.java    |   43 -
 .../client/core/edm/v3/EdmOperationProxy.java   |   64 -
 .../core/edm/v3/EdmServiceMetadataImpl.java     |   97 -
 .../client/core/edm/v3/ReturnTypeProxy.java     |   62 -
 .../core/edm/v3/V3FunctionImportUtils.java      |   36 -
 .../core/edm/v4/EdmServiceMetadataImpl.java     |  104 -
 .../core/edm/xml/AbstractAnnotations.java       |   51 -
 .../core/edm/xml/AbstractComplexType.java       |   52 -
 .../core/edm/xml/AbstractDataServices.java      |   50 -
 .../client/core/edm/xml/AbstractEdmItem.java    |   61 -
 .../client/core/edm/xml/AbstractEdmx.java       |   51 -
 .../core/edm/xml/AbstractEntityContainer.java   |  103 -
 .../client/core/edm/xml/AbstractEntitySet.java  |   51 -
 .../client/core/edm/xml/AbstractEntityType.java |   86 -
 .../client/core/edm/xml/AbstractEnumType.java   |   95 -
 .../client/core/edm/xml/AbstractMember.java     |   51 -
 .../edm/xml/AbstractNavigationProperty.java     |   39 -
 .../client/core/edm/xml/AbstractParameter.java  |   94 -
 .../client/core/edm/xml/AbstractProperty.java   |  127 -
 .../client/core/edm/xml/AbstractSchema.java     |   69 -
 .../core/edm/xml/AbstractXMLMetadata.java       |   95 -
 .../core/edm/xml/DataServicesDeserializer.java  |   64 -
 .../client/core/edm/xml/EdmxDeserializer.java   |   67 -
 .../client/core/edm/xml/EntityKeyImpl.java      |   39 -
 .../client/core/edm/xml/OnDeleteImpl.java       |   41 -
 .../core/edm/xml/ParameterDeserializer.java     |   70 -
 .../core/edm/xml/PropertyDeserializer.java      |  127 -
 .../client/core/edm/xml/PropertyRefImpl.java    |   52 -
 .../edm/xml/v3/AnnotationsDeserializer.java     |   55 -
 .../client/core/edm/xml/v3/AnnotationsImpl.java |   48 -
 .../edm/xml/v3/AssociationDeserializer.java     |   53 -
 .../core/edm/xml/v3/AssociationEndImpl.java     |   77 -
 .../client/core/edm/xml/v3/AssociationImpl.java |   62 -
 .../edm/xml/v3/AssociationSetDeserializer.java  |   52 -
 .../core/edm/xml/v3/AssociationSetEndImpl.java  |   52 -
 .../core/edm/xml/v3/AssociationSetImpl.java     |   61 -
 .../client/core/edm/xml/v3/ComplexTypeImpl.java |   54 -
 .../core/edm/xml/v3/DataServicesImpl.java       |   37 -
 .../odata4/client/core/edm/xml/v3/EdmxImpl.java |   32 -
 .../core/edm/xml/v3/EntityContainerImpl.java    |   68 -
 .../client/core/edm/xml/v3/EntitySetImpl.java   |   27 -
 .../client/core/edm/xml/v3/EntityTypeImpl.java  |   53 -
 .../client/core/edm/xml/v3/EnumTypeImpl.java    |   37 -
 .../edm/xml/v3/FunctionImportDeserializer.java  |   67 -
 .../core/edm/xml/v3/FunctionImportImpl.java     |  138 -
 .../client/core/edm/xml/v3/MemberImpl.java      |   27 -
 .../core/edm/xml/v3/NavigationPropertyImpl.java |   65 -
 .../client/core/edm/xml/v3/ParameterImpl.java   |   40 -
 .../client/core/edm/xml/v3/PropertyImpl.java    |  141 -
 .../core/edm/xml/v3/PropertyValueImpl.java      |  127 -
 .../edm/xml/v3/ReferentialConstraintImpl.java   |   56 -
 .../ReferentialConstraintRoleDeserializer.java  |   51 -
 .../xml/v3/ReferentialConstraintRoleImpl.java   |   49 -
 .../client/core/edm/xml/v3/SchemaImpl.java      |  137 -
 .../edm/xml/v3/TypeAnnotationDeserializer.java  |   52 -
 .../core/edm/xml/v3/TypeAnnotationImpl.java     |   62 -
 .../client/core/edm/xml/v3/UsingImpl.java       |   52 -
 .../core/edm/xml/v3/ValueAnnotationImpl.java    |  139 -
 .../client/core/edm/xml/v3/ValueTermImpl.java   |   52 -
 .../client/core/edm/xml/v3/XMLMetadataImpl.java |   31 -
 .../edm/xml/v4/AbstractAnnotatedEdmItem.java    |   44 -
 .../core/edm/xml/v4/ActionDeserializer.java     |   60 -
 .../client/core/edm/xml/v4/ActionImpl.java      |   89 -
 .../core/edm/xml/v4/ActionImportImpl.java       |   65 -
 .../core/edm/xml/v4/AnnotationDeserializer.java |   57 -
 .../client/core/edm/xml/v4/AnnotationImpl.java  |   76 -
 .../edm/xml/v4/AnnotationsDeserializer.java     |   53 -
 .../client/core/edm/xml/v4/AnnotationsImpl.java |   49 -
 .../client/core/edm/xml/v4/ComplexTypeImpl.java |  101 -
 .../core/edm/xml/v4/DataServicesImpl.java       |   37 -
 .../odata4/client/core/edm/xml/v4/EdmxImpl.java |   43 -
 .../core/edm/xml/v4/EntityContainerImpl.java    |  128 -
 .../client/core/edm/xml/v4/EntitySetImpl.java   |   61 -
 .../client/core/edm/xml/v4/EntityTypeImpl.java  |   68 -
 .../client/core/edm/xml/v4/EnumTypeImpl.java    |   40 -
 .../core/edm/xml/v4/FunctionDeserializer.java   |   62 -
 .../client/core/edm/xml/v4/FunctionImpl.java    |   40 -
 .../core/edm/xml/v4/FunctionImportImpl.java     |   92 -
 .../core/edm/xml/v4/IncludeAnnotationsImpl.java |   65 -
 .../client/core/edm/xml/v4/IncludeImpl.java     |   53 -
 .../client/core/edm/xml/v4/MemberImpl.java      |   44 -
 .../xml/v4/NavigationPropertyBindingImpl.java   |   53 -
 .../xml/v4/NavigationPropertyDeserializer.java  |   67 -
 .../core/edm/xml/v4/NavigationPropertyImpl.java |  108 -
 .../client/core/edm/xml/v4/ParameterImpl.java   |   39 -
 .../client/core/edm/xml/v4/PropertyImpl.java    |   41 -
 .../core/edm/xml/v4/ReferenceDeserializer.java  |   58 -
 .../client/core/edm/xml/v4/ReferenceImpl.java   |   68 -
 .../edm/xml/v4/ReferentialConstraintImpl.java   |   52 -
 .../core/edm/xml/v4/ReturnTypeDeserializer.java |   61 -
 .../client/core/edm/xml/v4/ReturnTypeImpl.java  |   96 -
 .../client/core/edm/xml/v4/SchemaImpl.java      |  180 -
 .../core/edm/xml/v4/SingletonDeserializer.java  |   57 -
 .../client/core/edm/xml/v4/SingletonImpl.java   |   61 -
 .../core/edm/xml/v4/TermDeserializer.java       |   76 -
 .../odata4/client/core/edm/xml/v4/TermImpl.java |  138 -
 .../edm/xml/v4/TypeDefinitionDeserializer.java  |   65 -
 .../core/edm/xml/v4/TypeDefinitionImpl.java     |  117 -
 .../client/core/edm/xml/v4/XMLMetadataImpl.java |   55 -
 .../annotation/AbstractElOrAttrConstruct.java   |   37 -
 .../annotation/AnnotatedDynExprConstruct.java   |   38 -
 .../edm/xml/v4/annotation/AnnotationPath.java   |   25 -
 .../core/edm/xml/v4/annotation/Apply.java       |   53 -
 .../xml/v4/annotation/ApplyDeserializer.java    |   55 -
 .../client/core/edm/xml/v4/annotation/Cast.java |   90 -
 .../edm/xml/v4/annotation/CastDeserializer.java |   62 -
 .../core/edm/xml/v4/annotation/Collection.java  |   37 -
 .../v4/annotation/CollectionDeserializer.java   |   50 -
 .../v4/annotation/ConstExprConstructImpl.java   |   51 -
 .../DynExprConstructDeserializer.java           |  145 -
 .../xml/v4/annotation/DynExprConstructImpl.java |   29 -
 .../xml/v4/annotation/DynExprDoubleParamOp.java |   73 -
 .../xml/v4/annotation/DynExprSingleParamOp.java |   69 -
 .../xml/v4/annotation/ExprConstructImpl.java    |   28 -
 .../client/core/edm/xml/v4/annotation/If.java   |   57 -
 .../client/core/edm/xml/v4/annotation/IsOf.java |   90 -
 .../edm/xml/v4/annotation/IsOfDeserializer.java |   62 -
 .../edm/xml/v4/annotation/LabeledElement.java   |   49 -
 .../annotation/LabeledElementDeserializer.java  |   53 -
 .../v4/annotation/LabeledElementReference.java  |   25 -
 .../v4/annotation/NavigationPropertyPath.java   |   25 -
 .../client/core/edm/xml/v4/annotation/Null.java |   28 -
 .../edm/xml/v4/annotation/NullDeserializer.java |   49 -
 .../client/core/edm/xml/v4/annotation/Path.java |   25 -
 .../edm/xml/v4/annotation/PropertyPath.java     |   25 -
 .../edm/xml/v4/annotation/PropertyValue.java    |   49 -
 .../annotation/PropertyValueDeserializer.java   |   55 -
 .../core/edm/xml/v4/annotation/Record.java      |   46 -
 .../xml/v4/annotation/RecordDeserializer.java   |   53 -
 .../core/edm/xml/v4/annotation/UrlRef.java      |   39 -
 .../xml/v4/annotation/UrlRefDeserializer.java   |   50 -
 .../AbstractBasicAuthHttpClientFactory.java     |   50 -
 .../http/AbstractNTLMAuthHttpClientFactory.java |   62 -
 .../core/http/DefaultHttpClientFactory.java     |   39 -
 .../core/http/DefaultHttpUriRequestFactory.java |   68 -
 .../odata4/client/core/http/HttpMerge.java      |   70 -
 .../odata4/client/core/http/HttpPatch.java      |   70 -
 .../core/op/impl/AbstractEdmDeserializer.java   |   69 -
 .../core/op/impl/AbstractJacksonTool.java       |   83 -
 .../core/op/impl/AbstractODataBinder.java       |  581 --
 .../core/op/impl/AbstractODataDeserializer.java |  177 -
 .../core/op/impl/AbstractODataReader.java       |  138 -
 .../core/op/impl/AbstractODataSerializer.java   |  160 -
 .../core/op/impl/ComplexTypeDeserializer.java   |   81 -
 .../op/impl/EntityContainerDeserializer.java    |  100 -
 .../core/op/impl/EntityKeyDeserializer.java     |   48 -
 .../core/op/impl/EntitySetDeserializer.java     |   68 -
 .../core/op/impl/EntityTypeDeserializer.java    |   90 -
 .../core/op/impl/EnumTypeDeserializer.java      |   71 -
 .../op/impl/InjectableSerializerProvider.java   |   43 -
 .../client/core/op/impl/ODataV3BinderImpl.java  |   37 -
 .../core/op/impl/ODataV3DeserializerImpl.java   |   69 -
 .../client/core/op/impl/ODataV3ReaderImpl.java  |   47 -
 .../core/op/impl/ODataV3SerializerImpl.java     |   32 -
 .../client/core/op/impl/ODataV4BinderImpl.java  |   62 -
 .../core/op/impl/ODataV4DeserializerImpl.java   |   70 -
 .../client/core/op/impl/ODataV4ReaderImpl.java  |   47 -
 .../core/op/impl/ODataV4SerializerImpl.java     |   32 -
 .../client/core/op/impl/SchemaDeserializer.java |  147 -
 .../client/core/uri/AbstractURIBuilder.java     |  273 -
 .../olingo/odata4/client/core/uri/URIUtils.java |  195 -
 .../client/core/uri/V3URIBuilderImpl.java       |   93 -
 .../client/core/uri/V4URIBuilderImpl.java       |  101 -
 .../uri/filter/AbstractComparingFilter.java     |   45 -
 .../uri/filter/AbstractFilterArgFactory.java    |  178 -
 .../core/uri/filter/AbstractFilterFactory.java  |  108 -
 .../client/core/uri/filter/AndFilter.java       |   42 -
 .../odata4/client/core/uri/filter/EqFilter.java |   33 -
 .../client/core/uri/filter/FilterConst.java     |   41 -
 .../client/core/uri/filter/FilterFunction.java  |   48 -
 .../client/core/uri/filter/FilterLambda.java    |   46 -
 .../client/core/uri/filter/FilterLiteral.java   |   41 -
 .../odata4/client/core/uri/filter/FilterOp.java |   45 -
 .../client/core/uri/filter/FilterProperty.java  |   40 -
 .../odata4/client/core/uri/filter/GeFilter.java |   33 -
 .../odata4/client/core/uri/filter/GtFilter.java |   33 -
 .../client/core/uri/filter/HasFilter.java       |   34 -
 .../odata4/client/core/uri/filter/LeFilter.java |   33 -
 .../odata4/client/core/uri/filter/LtFilter.java |   33 -
 .../client/core/uri/filter/MatchFilter.java     |   36 -
 .../odata4/client/core/uri/filter/NeFilter.java |   33 -
 .../client/core/uri/filter/NotFilter.java       |   35 -
 .../odata4/client/core/uri/filter/OrFilter.java |   42 -
 .../core/uri/filter/V3FilterArgFactoryImpl.java |   31 -
 .../core/uri/filter/V3FilterFactoryImpl.java    |   33 -
 .../core/uri/filter/V4FilterArgFactoryImpl.java |  107 -
 .../core/uri/filter/V4FilterFactoryImpl.java    |   46 -
 .../client/core/xml/AbstractDOMParser.java      |   46 -
 .../client/core/xml/AndroidDOMParserImpl.java   |   50 -
 .../client/core/xml/DefaultDOMParserImpl.java   |   78 -
 .../odata4/client/core/xml/XMLParser.java       |   37 -
 .../olingo/odata4/client/core/AbstractTest.java |   58 -
 .../odata4/client/core/ODataClientTest.java     |   40 -
 .../deserializer/JsonReaderPerformance.java     |   75 -
 .../core/deserializer/JsonReaderTest.java       |  371 --
 .../client/core/v3/FilterFactoryTest.java       |  166 -
 .../odata4/client/core/v3/MetadataTest.java     |  223 -
 .../client/core/v3/ServiceDocumentTest.java     |   57 -
 .../odata4/client/core/v3/URIBuilderTest.java   |  130 -
 .../client/core/v4/FilterFactoryTest.java       |   84 -
 .../odata4/client/core/v4/MetadataTest.java     |  282 -
 .../client/core/v4/ServiceDocumentTest.java     |   67 -
 .../odata4/client/core/v4/URIBuilderTest.java   |  133 -
 .../src/test/resources/complexProperty.json     |    8 -
 .../src/test/resources/fullEntity.json          |   22 -
 .../src/test/resources/fullEntitySet.json       |   29 -
 .../resources/fullEntitySetWithTwoEntities.json |   49 -
 ...fullEntityWithCollectionOfComplexValues.json |   28 -
 .../src/test/resources/minimalEntity.json       |   21 -
 .../olingo/odata4/client/core/v3/metadata.xml   |  721 ---
 .../client/core/v3/northwind-metadata.xml       |   22 -
 .../odata4/client/core/v3/serviceDocument.json  |   33 -
 .../odata4/client/core/v3/serviceDocument.xml   |   49 -
 .../odata4/client/core/v4/demo-metadata.xml     |  163 -
 .../odata4/client/core/v4/fromdoc1-metadata.xml |  126 -
 .../odata4/client/core/v4/fromdoc2-metadata.xml |   54 -
 .../odata4/client/core/v4/fromdoc3-metadata.xml |  131 -
 .../olingo/odata4/client/core/v4/metadata.xml   |  232 -
 .../client/core/v4/northwind-metadata.xml       |  471 --
 .../odata4/client/core/v4/serviceDocument.json  |   32 -
 .../odata4/client/core/v4/serviceDocument.xml   |   46 -
 .../src/test/resources/primitiveNullValue.json  |    3 -
 .../test/resources/setOfComplexProperties.json  |   13 -
 .../resources/setOfPrimitiveProperties.json     |    8 -
 odata4-lib/odata4-commons-api/pom.xml           |   39 -
 .../commons/api/ODataApplicationException.java  |   37 -
 .../odata4/commons/api/ODataException.java      |   37 -
 .../api/ODataNotImplementedException.java       |   33 -
 .../olingo/odata4/commons/api/edm/Edm.java      |  111 -
 .../odata4/commons/api/edm/EdmAction.java       |   26 -
 .../odata4/commons/api/edm/EdmActionImport.java |   27 -
 .../commons/api/edm/EdmActionImportInfo.java    |   40 -
 .../odata4/commons/api/edm/EdmAnnotatable.java  |   30 -
 .../odata4/commons/api/edm/EdmAnnotations.java  |   24 -
 .../commons/api/edm/EdmBindingTarget.java       |   48 -
 .../odata4/commons/api/edm/EdmComplexType.java  |   31 -
 .../odata4/commons/api/edm/EdmElement.java      |   27 -
 .../commons/api/edm/EdmEntityContainer.java     |   66 -
 .../odata4/commons/api/edm/EdmEntitySet.java    |   29 -
 .../commons/api/edm/EdmEntitySetInfo.java       |   47 -
 .../odata4/commons/api/edm/EdmEntityType.java   |   64 -
 .../odata4/commons/api/edm/EdmEnumType.java     |   43 -
 .../odata4/commons/api/edm/EdmException.java    |   37 -
 .../odata4/commons/api/edm/EdmFunction.java     |   31 -
 .../commons/api/edm/EdmFunctionImport.java      |   30 -
 .../commons/api/edm/EdmFunctionImportInfo.java  |   40 -
 .../commons/api/edm/EdmKeyPropertyRef.java      |   43 -
 .../odata4/commons/api/edm/EdmMappable.java     |   32 -
 .../odata4/commons/api/edm/EdmMapping.java      |   53 -
 .../odata4/commons/api/edm/EdmMember.java       |   30 -
 .../olingo/odata4/commons/api/edm/EdmNamed.java |   30 -
 .../commons/api/edm/EdmNavigationProperty.java  |   40 -
 .../odata4/commons/api/edm/EdmOperation.java    |   57 -
 .../commons/api/edm/EdmOperationImport.java     |   36 -
 .../commons/api/edm/EdmOperationImportInfo.java |   31 -
 .../odata4/commons/api/edm/EdmParameter.java    |   45 -
 .../commons/api/edm/EdmPrimitiveType.java       |  166 -
 .../api/edm/EdmPrimitiveTypeException.java      |   32 -
 .../odata4/commons/api/edm/EdmProperty.java     |   71 -
 .../odata4/commons/api/edm/EdmReturnType.java   |   45 -
 .../commons/api/edm/EdmServiceMetadata.java     |   59 -
 .../odata4/commons/api/edm/EdmSingleton.java    |   26 -
 .../commons/api/edm/EdmSingletonInfo.java       |   45 -
 .../commons/api/edm/EdmStructuredType.java      |   82 -
 .../olingo/odata4/commons/api/edm/EdmTerm.java  |   50 -
 .../olingo/odata4/commons/api/edm/EdmType.java  |   40 -
 .../commons/api/edm/EdmTypeDefinition.java      |   52 -
 .../olingo/odata4/commons/api/edm/EdmTyped.java |   37 -
 .../commons/api/edm/FullQualifiedName.java      |   84 -
 .../olingo/odata4/commons/api/edm/Target.java   |   71 -
 .../api/edm/constants/EdmContentKind.java       |   30 -
 .../commons/api/edm/constants/EdmOnDelete.java  |   25 -
 .../api/edm/constants/EdmTargetPath.java        |   50 -
 .../commons/api/edm/constants/EdmTypeKind.java  |   28 -
 .../api/edm/constants/ODataServiceVersion.java  |  140 -
 .../odata4/commons/api/edm/package-info.java    |   19 -
 odata4-lib/odata4-commons-core/pom.xml          |   46 -
 .../core/edm/AbstractEdmBindingTarget.java      |   55 -
 .../core/edm/AbstractEdmComplexType.java        |   50 -
 .../core/edm/AbstractEdmEntityContainer.java    |  101 -
 .../commons/core/edm/AbstractEdmEntityType.java |  113 -
 .../commons/core/edm/AbstractEdmEnumType.java   |  205 -
 .../commons/core/edm/AbstractEdmImpl.java       |  252 -
 .../core/edm/AbstractEdmKeyPropertyRef.java     |   80 -
 .../core/edm/AbstractEdmNavigationProperty.java |   76 -
 .../commons/core/edm/AbstractEdmOperation.java  |  113 -
 .../core/edm/AbstractEdmOperationImport.java    |   63 -
 .../commons/core/edm/AbstractEdmParameter.java  |   87 -
 .../commons/core/edm/AbstractEdmProperty.java   |   70 -
 .../commons/core/edm/AbstractEdmReturnType.java |   85 -
 .../core/edm/AbstractEdmStructuredType.java     |  128 -
 .../core/edm/AbstractEdmTypeDefinition.java     |  107 -
 .../odata4/commons/core/edm/ActionMapKey.java   |   67 -
 .../core/edm/EdmActionImportInfoImpl.java       |   45 -
 .../odata4/commons/core/edm/EdmElementImpl.java |   29 -
 .../commons/core/edm/EdmEntitySetInfoImpl.java  |   52 -
 .../core/edm/EdmFunctionImportInfoImpl.java     |   45 -
 .../odata4/commons/core/edm/EdmMemberImpl.java  |   38 -
 .../odata4/commons/core/edm/EdmNamedImpl.java   |   40 -
 .../core/edm/EdmOperationImportInfoImpl.java    |   36 -
 .../commons/core/edm/EdmSingletonInfoImpl.java  |   52 -
 .../core/edm/EdmStructuredTypeHelper.java       |   30 -
 .../odata4/commons/core/edm/EdmTypeImpl.java    |   48 -
 .../odata4/commons/core/edm/FunctionMapKey.java |  113 -
 .../primitivetype/AbstractPrimitiveType.java    |  116 -
 .../core/edm/primitivetype/EdmBinary.java       |  117 -
 .../core/edm/primitivetype/EdmBoolean.java      |   81 -
 .../commons/core/edm/primitivetype/EdmByte.java |  101 -
 .../commons/core/edm/primitivetype/EdmDate.java |   95 -
 .../edm/primitivetype/EdmDateTimeOffset.java    |  239 -
 .../core/edm/primitivetype/EdmDecimal.java      |  200 -
 .../core/edm/primitivetype/EdmDouble.java       |  146 -
 .../core/edm/primitivetype/EdmDuration.java     |  141 -
 .../commons/core/edm/primitivetype/EdmGuid.java |   88 -
 .../core/edm/primitivetype/EdmInt16.java        |   99 -
 .../core/edm/primitivetype/EdmInt32.java        |  100 -
 .../core/edm/primitivetype/EdmInt64.java        |  135 -
 .../commons/core/edm/primitivetype/EdmNull.java |   75 -
 .../edm/primitivetype/EdmPrimitiveTypeKind.java |   95 -
 .../core/edm/primitivetype/EdmSByte.java        |   95 -
 .../core/edm/primitivetype/EdmSingle.java       |  148 -
 .../core/edm/primitivetype/EdmString.java       |  108 -
 .../core/edm/primitivetype/EdmTimeOfDay.java    |  107 -
 .../primitivetype/SingletonPrimitiveType.java   |   52 -
 .../commons/core/edm/primitivetype/Uint7.java   |   66 -
 .../commons/core/edm/ActionMapKeyTest.java      |  101 -
 .../commons/core/edm/EdmImplCachingTest.java    |  388 --
 .../commons/core/edm/EdmImplCallCreateTest.java |  267 -
 .../commons/core/edm/FunctionMapKeyTest.java    |  251 -
 .../primitivetype/CommonPrimitiveTypeTest.java  |  172 -
 .../core/edm/primitivetype/EdmBinaryTest.java   |  105 -
 .../core/edm/primitivetype/EdmBooleanTest.java  |   63 -
 .../core/edm/primitivetype/EdmByteTest.java     |   84 -
 .../core/edm/primitivetype/EdmDateTest.java     |   92 -
 .../primitivetype/EdmDateTimeOffsetTest.java    |  124 -
 .../core/edm/primitivetype/EdmDecimalTest.java  |  130 -
 .../core/edm/primitivetype/EdmDoubleTest.java   |  130 -
 .../core/edm/primitivetype/EdmDurationTest.java |  104 -
 .../core/edm/primitivetype/EdmGuidTest.java     |   67 -
 .../core/edm/primitivetype/EdmInt16Test.java    |   86 -
 .../core/edm/primitivetype/EdmInt32Test.java    |   87 -
 .../core/edm/primitivetype/EdmInt64Test.java    |   94 -
 .../core/edm/primitivetype/EdmNullTest.java     |   49 -
 .../core/edm/primitivetype/EdmSByteTest.java    |   80 -
 .../core/edm/primitivetype/EdmSingleTest.java   |  136 -
 .../core/edm/primitivetype/EdmStringTest.java   |   77 -
 .../edm/primitivetype/EdmTimeOfDayTest.java     |   92 -
 .../primitivetype/PrimitiveTypeBaseTest.java    |  119 -
 .../core/edm/primitivetype/UInt7Test.java       |   33 -
 odata4-lib/odata4-fit/pom.xml                   |   48 -
 odata4-lib/odata4-ref/pom.xml                   |   50 -
 odata4-lib/odata4-server-api/pom.xml            |   45 -
 .../odata4/server/api/edm/provider/Action.java  |   54 -
 .../server/api/edm/provider/ActionImport.java   |   48 -
 .../server/api/edm/provider/AliasInfo.java      |   45 -
 .../server/api/edm/provider/Annotation.java     |   72 -
 .../server/api/edm/provider/BindingTarget.java  |   60 -
 .../server/api/edm/provider/ComplexType.java    |   62 -
 .../server/api/edm/provider/EdmProvider.java    |  182 -
 .../api/edm/provider/EntityContainer.java       |   93 -
 .../api/edm/provider/EntityContainerInfo.java   |   47 -
 .../server/api/edm/provider/EntitySet.java      |   55 -
 .../server/api/edm/provider/EntitySetPath.java  |   45 -
 .../server/api/edm/provider/EntityType.java     |   84 -
 .../server/api/edm/provider/EnumMember.java     |   49 -
 .../server/api/edm/provider/EnumType.java       |   73 -
 .../server/api/edm/provider/Expression.java     |   24 -
 .../server/api/edm/provider/Function.java       |   65 -
 .../server/api/edm/provider/FunctionImport.java |   64 -
 .../odata4/server/api/edm/provider/Mapping.java |   96 -
 .../api/edm/provider/NavigationProperty.java    |  118 -
 .../edm/provider/NavigationPropertyBinding.java |   46 -
 .../server/api/edm/provider/Operation.java      |   81 -
 .../api/edm/provider/OperationImport.java       |   47 -
 .../server/api/edm/provider/Parameter.java      |  113 -
 .../server/api/edm/provider/Property.java       |  148 -
 .../server/api/edm/provider/PropertyRef.java    |   55 -
 .../api/edm/provider/ReferentialConstraint.java |   46 -
 .../server/api/edm/provider/ReturnType.java     |   91 -
 .../odata4/server/api/edm/provider/Schema.java  |  135 -
 .../server/api/edm/provider/Singleton.java      |   44 -
 .../server/api/edm/provider/StructuredType.java |   93 -
 .../odata4/server/api/edm/provider/Term.java    |  150 -
 .../server/api/edm/provider/TypeDefinition.java |   94 -
 .../olingo/odata4/server/api/uri/UriInfo.java   |   48 -
 .../odata4/server/api/uri/UriInfoAll.java       |   28 -
 .../odata4/server/api/uri/UriInfoBatch.java     |   27 -
 .../odata4/server/api/uri/UriInfoCrossjoin.java |   34 -
 .../odata4/server/api/uri/UriInfoEntityId.java  |   68 -
 .../odata4/server/api/uri/UriInfoKind.java      |   67 -
 .../odata4/server/api/uri/UriInfoMetadata.java  |   39 -
 .../odata4/server/api/uri/UriInfoResource.java  |  118 -
 .../odata4/server/api/uri/UriInfoService.java   |   27 -
 .../odata4/server/api/uri/UriParameter.java     |   53 -
 .../odata4/server/api/uri/UriResource.java      |   35 -
 .../server/api/uri/UriResourceAction.java       |   42 -
 .../api/uri/UriResourceComplexProperty.java     |   41 -
 .../odata4/server/api/uri/UriResourceCount.java |   27 -
 .../server/api/uri/UriResourceEntitySet.java    |   58 -
 .../server/api/uri/UriResourceFunction.java     |   66 -
 .../odata4/server/api/uri/UriResourceIt.java    |   38 -
 .../odata4/server/api/uri/UriResourceKind.java  |  115 -
 .../server/api/uri/UriResourceLambdaAll.java    |   39 -
 .../server/api/uri/UriResourceLambdaAny.java    |   39 -
 .../api/uri/UriResourceLambdaVariable.java      |   33 -
 .../server/api/uri/UriResourceNavigation.java   |   51 -
 .../server/api/uri/UriResourcePartTyped.java    |   43 -
 .../api/uri/UriResourcePrimitiveProperty.java   |   27 -
 .../server/api/uri/UriResourceProperty.java     |   33 -
 .../odata4/server/api/uri/UriResourceRef.java   |   28 -
 .../odata4/server/api/uri/UriResourceRoot.java  |   28 -
 .../server/api/uri/UriResourceSingleton.java    |   46 -
 .../odata4/server/api/uri/UriResourceValue.java |   27 -
 .../api/uri/queryoption/AliasQueryOption.java   |   27 -
 .../server/api/uri/queryoption/CountOption.java |   25 -
 .../api/uri/queryoption/CustomQueryOption.java  |   23 -
 .../uri/queryoption/ExceptionVisitExpand.java   |   25 -
 .../server/api/uri/queryoption/ExpandItem.java  |   53 -
 .../api/uri/queryoption/ExpandOption.java       |   27 -
 .../api/uri/queryoption/FilterOption.java       |   26 -
 .../api/uri/queryoption/FormatOption.java       |   25 -
 .../server/api/uri/queryoption/IdOption.java    |   25 -
 .../api/uri/queryoption/LevelsExpandOption.java |   27 -
 .../server/api/uri/queryoption/OrderByItem.java |   33 -
 .../api/uri/queryoption/OrderByOption.java      |   27 -
 .../server/api/uri/queryoption/QueryOption.java |   27 -
 .../api/uri/queryoption/SearchOption.java       |   27 -
 .../server/api/uri/queryoption/SelectItem.java  |   37 -
 .../api/uri/queryoption/SelectOption.java       |   27 -
 .../server/api/uri/queryoption/SkipOption.java  |   25 -
 .../api/uri/queryoption/SkipTokenOption.java    |   25 -
 .../uri/queryoption/SupportedQueryOptions.java  |   45 -
 .../api/uri/queryoption/SystemQueryOption.java  |   25 -
 .../server/api/uri/queryoption/TopOption.java   |   25 -
 .../queryoption/expression/AliasExpression.java |   25 -
 .../expression/BinaryExpression.java            |   29 -
 .../expression/BinaryOperatorKind.java          |   57 -
 .../uri/queryoption/expression/Enumeration.java |   31 -
 .../uri/queryoption/expression/Expression.java  |   23 -
 .../expression/ExpressionVisitException.java    |   25 -
 .../expression/ExpressionVisitor.java           |   57 -
 .../uri/queryoption/expression/LambdaRef.java   |   25 -
 .../api/uri/queryoption/expression/Literal.java |   29 -
 .../api/uri/queryoption/expression/Member.java  |   36 -
 .../uri/queryoption/expression/MethodCall.java  |   29 -
 .../queryoption/expression/MethodCallKind.java  |   58 -
 .../uri/queryoption/expression/TypeLiteral.java |   27 -
 .../queryoption/expression/UnaryOperator.java   |   27 -
 .../expression/UnaryOperatorKind.java           |   44 -
 .../expression/VisitableExression.java          |   47 -
 .../uri/queryoption/search/SearchBinary.java    |   29 -
 .../search/SearchBinaryOperatorKind.java        |   45 -
 .../queryoption/search/SearchExpression.java    |   23 -
 .../api/uri/queryoption/search/SearchTerm.java  |   25 -
 .../api/uri/queryoption/search/SearchUnary.java |   25 -
 .../search/SearchUnaryOperatorKind.java         |   43 -
 odata4-lib/odata4-server-core/pom.xml           |   84 -
 .../odata4/server/core/uri/antlr/UriLexer.g4    |  404 --
 .../odata4/server/core/uri/antlr/UriParser.g4   |  439 --
 .../server/core/edm/provider/EdmActionImpl.java |   36 -
 .../core/edm/provider/EdmActionImportImpl.java  |   43 -
 .../core/edm/provider/EdmBindingTargetImpl.java |   77 -
 .../core/edm/provider/EdmComplexTypeImpl.java   |   58 -
 .../edm/provider/EdmEntityContainerImpl.java    |  111 -
 .../core/edm/provider/EdmEntitySetImpl.java     |   32 -
 .../core/edm/provider/EdmEntityTypeImpl.java    |   87 -
 .../core/edm/provider/EdmEnumTypeImpl.java      |   61 -
 .../core/edm/provider/EdmFunctionImpl.java      |   56 -
 .../edm/provider/EdmFunctionImportImpl.java     |   45 -
 .../edm/provider/EdmKeyPropertyRefImpl.java     |   48 -
 .../edm/provider/EdmNavigationPropertyImpl.java |   71 -
 .../core/edm/provider/EdmOperationImpl.java     |   67 -
 .../edm/provider/EdmOperationImportImpl.java    |   33 -
 .../core/edm/provider/EdmParameterImpl.java     |   65 -
 .../core/edm/provider/EdmPropertyImpl.java      |   87 -
 .../core/edm/provider/EdmProviderImpl.java      |  287 -
 .../core/edm/provider/EdmReturnTypeImpl.java    |   59 -
 .../edm/provider/EdmServiceMetadataImpl.java    |  190 -
 .../core/edm/provider/EdmSingletonImpl.java     |   31 -
 .../provider/EdmStructuredTypeHelperImpl.java   |   72 -
 .../edm/provider/EdmTypeDefinitionImpl.java     |   74 -
 .../odata4/server/core/uri/UriInfoImpl.java     |  296 -
 .../server/core/uri/UriParameterImpl.java       |   82 -
 .../server/core/uri/UriResourceActionImpl.java  |   77 -
 .../uri/UriResourceComplexPropertyImpl.java     |   70 -
 .../server/core/uri/UriResourceCountImpl.java   |   35 -
 .../core/uri/UriResourceEntitySetImpl.java      |   66 -
 .../core/uri/UriResourceFunctionImpl.java       |  111 -
 .../odata4/server/core/uri/UriResourceImpl.java |   39 -
 .../server/core/uri/UriResourceItImpl.java      |   65 -
 .../core/uri/UriResourceLambdaAllImpl.java      |   73 -
 .../core/uri/UriResourceLambdaAnyImpl.java      |   72 -
 .../core/uri/UriResourceLambdaVarImpl.java      |   70 -
 .../uri/UriResourceNavigationPropertyImpl.java  |   63 -
 .../uri/UriResourcePrimitivePropertyImpl.java   |   59 -
 .../server/core/uri/UriResourceRefImpl.java     |   36 -
 .../server/core/uri/UriResourceRootImpl.java    |   62 -
 .../core/uri/UriResourceSingletonImpl.java      |   71 -
 .../uri/UriResourceStartingTypeFilterImpl.java  |   66 -
 .../server/core/uri/UriResourceTypedImpl.java   |   60 -
 .../server/core/uri/UriResourceValueImpl.java   |   36 -
 .../core/uri/UriResourceWithKeysImpl.java       |   99 -
 .../uri/parser/CheckFullContextListener.java    |   60 -
 .../odata4/server/core/uri/parser/Parser.java   |  442 --
 .../odata4/server/core/uri/parser/RawUri.java   |   46 -
 .../server/core/uri/parser/UriContext.java      |   80 -
 .../server/core/uri/parser/UriDecoder.java      |  137 -
 .../core/uri/parser/UriParseTreeVisitor.java    | 2111 --------
 .../core/uri/parser/UriParserException.java     |   35 -
 .../uri/parser/UriParserSemanticException.java  |   33 -
 .../uri/parser/UriParserSyntaxException.java    |   36 -
 .../uri/queryoption/AliasQueryOptionImpl.java   |   38 -
 .../core/uri/queryoption/CountOptionImpl.java   |   42 -
 .../uri/queryoption/CustomQueryOptionImpl.java  |   25 -
 .../core/uri/queryoption/ExpandItemImpl.java    |  176 -
 .../core/uri/queryoption/ExpandOptionImpl.java  |   49 -
 .../core/uri/queryoption/FilterOptionImpl.java  |   43 -
 .../core/uri/queryoption/FormatOptionImpl.java  |   41 -
 .../core/uri/queryoption/IdOptionImpl.java      |   40 -
 .../core/uri/queryoption/LevelsOptionImpl.java  |   53 -
 .../core/uri/queryoption/OrderByItemImpl.java   |   49 -
 .../core/uri/queryoption/OrderByOptionImpl.java |   50 -
 .../core/uri/queryoption/QueryOptionImpl.java   |   47 -
 .../core/uri/queryoption/SearchOptionImpl.java  |   37 -
 .../core/uri/queryoption/SelectItemImpl.java    |   84 -
 .../core/uri/queryoption/SelectOptionImpl.java  |   50 -
 .../core/uri/queryoption/SkipOptionImpl.java    |   41 -
 .../uri/queryoption/SkipTokenOptionImpl.java    |   41 -
 .../uri/queryoption/SystemQueryOptionImpl.java  |   42 -
 .../core/uri/queryoption/TopOptionImpl.java     |   42 -
 .../uri/queryoption/expression/AliasImpl.java   |   44 -
 .../uri/queryoption/expression/BinaryImpl.java  |   70 -
 .../queryoption/expression/EnumerationImpl.java |   60 -
 .../queryoption/expression/ExpressionImpl.java  |   25 -
 .../queryoption/expression/LambdaRefImpl.java   |   46 -
 .../uri/queryoption/expression/LiteralImpl.java |   58 -
 .../uri/queryoption/expression/MemberImpl.java  |   99 -
 .../queryoption/expression/MethodCallImpl.java  |   70 -
 .../queryoption/expression/TypeLiteralImpl.java |   47 -
 .../uri/queryoption/expression/UnaryImpl.java   |   58 -
 .../core/edm/provider/EdmActionImplTest.java    |  156 -
 .../edm/provider/EdmActionImportImplTest.java   |  103 -
 .../edm/provider/EdmComplexTypeImplTest.java    |  163 -
 .../provider/EdmEntityContainerImplTest.java    |  205 -
 .../core/edm/provider/EdmEntitySetImplTest.java |   81 -
 .../edm/provider/EdmEntityTypeImplTest.java     |  276 -
 .../server/core/edm/provider/EdmEnumTest.java   |  177 -
 .../core/edm/provider/EdmFunctionImplTest.java  |   75 -
 .../edm/provider/EdmFunctionImportImplTest.java |   84 -
 .../edm/provider/EdmKeyPropertyRefImplTest.java |  142 -
 .../core/edm/provider/EdmMemberImplTest.java    |   39 -
 .../core/edm/provider/EdmNamedImplTest.java     |   42 -
 .../provider/EdmNavigationPropertyImplTest.java |  144 -
 .../core/edm/provider/EdmParameterImplTest.java |  140 -
 .../core/edm/provider/EdmPropertyImplTest.java  |  155 -
 .../EdmProviderImplOverloadingTest.java         |  198 -
 .../core/edm/provider/EdmProviderImplTest.java  |  231 -
 .../edm/provider/EdmReturnTypeImplTest.java     |  129 -
 .../provider/EdmServiceMetadataImplTest.java    |  188 -
 .../core/edm/provider/EdmSingletonImplTest.java |  129 -
 .../edm/provider/EdmTypeDefinitionImplTest.java |   73 -
 .../core/edm/provider/EdmTypeImplTest.java      |   45 -
 .../edm/provider/PrimitiveTypeBaseTest.java     |  117 -
 .../server/core/testutil/EdmTechProvider.java   | 1976 -------
 .../core/testutil/EdmTechTestProvider.java      |   94 -
 .../odata4/server/core/uri/RawUriTest.java      |  151 -
 .../odata4/server/core/uri/UriInfoImplTest.java |  201 -
 .../server/core/uri/UriResourceImplTest.java    |  504 --
 .../core/uri/antlr/TestFullResourcePath.java    | 5104 ------------------
 .../odata4/server/core/uri/antlr/TestLexer.java |  250 -
 .../core/uri/antlr/TestUriParserImpl.java       | 1128 ----
 .../core/uri/queryoption/QueryOptionTest.java   |  303 --
 .../queryoption/expression/ExpressionTest.java  |  239 -
 .../core/uri/testutil/ExpandValidator.java      |  232 -
 .../core/uri/testutil/FilterTreeToText.java     |  154 -
 .../core/uri/testutil/FilterValidator.java      |  534 --
 .../core/uri/testutil/ParseTreeToText.java      |   82 -
 .../core/uri/testutil/ParserValidator.java      |  162 -
 .../core/uri/testutil/ParserWithLogging.java    |   56 -
 .../core/uri/testutil/ResourceValidator.java    |  595 --
 .../core/uri/testutil/TestErrorLogger.java      |  105 -
 .../core/uri/testutil/TokenValidator.java       |  194 -
 .../core/uri/testutil/UriLexerWithTrace.java    |   85 -
 .../server/core/uri/testutil/UriValidator.java  |  258 -
 .../server/core/uri/testutil/Validator.java     |   23 -
 odata4-lib/pom.xml                              |   48 -
 pom.xml                                         |    5 +-
 1573 files changed, 70237 insertions(+), 69835 deletions(-)
----------------------------------------------------------------------



[4/6] Merge from master

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/PropertyDeserializer.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/PropertyDeserializer.java
index 0000000,89bdfcf..ce8e4aa
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/PropertyDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/PropertyDeserializer.java
@@@ -1,0 -1,104 +1,129 @@@
+ /*
+  * 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.edm.xml;
+ 
+ import com.fasterxml.jackson.core.JsonParser;
+ import com.fasterxml.jackson.core.JsonProcessingException;
+ import com.fasterxml.jackson.core.JsonToken;
+ import com.fasterxml.jackson.databind.DeserializationContext;
+ 
+ import java.io.IOException;
+ 
+ import org.apache.commons.lang3.BooleanUtils;
+ import org.apache.olingo.client.core.edm.xml.v4.AnnotationImpl;
+ import org.apache.olingo.client.core.op.impl.AbstractEdmDeserializer;
 -import org.apache.olingo.commons.api.edm.constants.ConcurrencyMode;
+ import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
+ import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 -import org.apache.olingo.commons.api.edm.constants.StoreGeneratedPattern;
++import org.apache.olingo.odata4.client.api.edm.ConcurrencyMode;
++import org.apache.olingo.odata4.client.api.edm.StoreGeneratedPattern;
+ 
+ public class PropertyDeserializer extends AbstractEdmDeserializer<AbstractProperty> {
+ 
+   @Override
+   protected AbstractProperty doDeserialize(final JsonParser jp, final DeserializationContext ctxt)
+           throws IOException, JsonProcessingException {
+ 
+     final AbstractProperty property = ODataServiceVersion.V30 == client.getServiceVersion()
+             ? new org.apache.olingo.client.core.edm.xml.v3.PropertyImpl()
+             : new org.apache.olingo.client.core.edm.xml.v4.PropertyImpl();
+ 
+     for (; jp.getCurrentToken() != JsonToken.END_OBJECT; jp.nextToken()) {
+       final JsonToken token = jp.getCurrentToken();
+       if (token == JsonToken.FIELD_NAME) {
+         if ("Name".equals(jp.getCurrentName())) {
+           property.setName(jp.nextTextValue());
+         } else if ("Type".equals(jp.getCurrentName())) {
+           property.setType(jp.nextTextValue());
+         } else if ("Nullable".equals(jp.getCurrentName())) {
+           property.setNullable(BooleanUtils.toBoolean(jp.nextTextValue()));
+         } else if ("DefaultValue".equals(jp.getCurrentName())) {
+           property.setDefaultValue(jp.nextTextValue());
+         } else if ("MaxLength".equals(jp.getCurrentName())) {
+           final String maxLenght = jp.nextTextValue();
+           property.setMaxLength(maxLenght.equalsIgnoreCase("max") ? Integer.MAX_VALUE : Integer.valueOf(maxLenght));
+         } else if ("FixedLength".equals(jp.getCurrentName())) {
 -          property.setFixedLength(BooleanUtils.toBoolean(jp.nextTextValue()));
++          if (property instanceof org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) {
++            ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
++                    setFixedLength(BooleanUtils.toBoolean(jp.nextTextValue()));
++          }
+         } else if ("Precision".equals(jp.getCurrentName())) {
+           property.setPrecision(Integer.valueOf(jp.nextTextValue()));
+         } else if ("Scale".equals(jp.getCurrentName())) {
 -          property.setScale(Integer.valueOf(jp.nextTextValue()));
++          final String scale = jp.nextTextValue();
++          property.setScale(scale.equalsIgnoreCase("variable") ? 0 : Integer.valueOf(scale));
+         } else if ("Unicode".equals(jp.getCurrentName())) {
+           property.setUnicode(BooleanUtils.toBoolean(jp.nextTextValue()));
+         } else if ("Collation".equals(jp.getCurrentName())) {
 -          property.setCollation(jp.nextTextValue());
++          if (property instanceof org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) {
++            ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
++                    setCollation(jp.nextTextValue());
++          }
+         } else if ("SRID".equals(jp.getCurrentName())) {
+           property.setSrid(jp.nextTextValue());
+         } else if ("ConcurrencyMode".equals(jp.getCurrentName())) {
 -          property.setConcurrencyMode(ConcurrencyMode.valueOf(jp.nextTextValue()));
++          if (property instanceof org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) {
++            ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
++                    setConcurrencyMode(ConcurrencyMode.valueOf(jp.nextTextValue()));
++          }
+         } else if ("StoreGeneratedPattern".equals(jp.getCurrentName())) {
 -          property.setStoreGeneratedPattern(StoreGeneratedPattern.valueOf(jp.nextTextValue()));
++          if (property instanceof org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) {
++            ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
++                    setStoreGeneratedPattern(StoreGeneratedPattern.valueOf(jp.nextTextValue()));
++          }
+         } else if ("FC_SourcePath".equals(jp.getCurrentName())) {
 -          ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
 -                  setFcSourcePath(jp.nextTextValue());
++          if (property instanceof org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) {
++            ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
++                    setFcSourcePath(jp.nextTextValue());
++          }
+         } else if ("FC_TargetPath".equals(jp.getCurrentName())) {
 -          ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
 -                  setFcTargetPath(jp.nextTextValue());
++          if (property instanceof org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) {
++            ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
++                    setFcTargetPath(jp.nextTextValue());
++          }
+         } else if ("FC_ContentKind".equals(jp.getCurrentName())) {
 -          ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
 -                  setFcContentKind(EdmContentKind.valueOf(jp.nextTextValue()));
++          if (property instanceof org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) {
++            ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
++                    setFcContentKind(EdmContentKind.valueOf(jp.nextTextValue()));
++          }
+         } else if ("FC_NsPrefix".equals(jp.getCurrentName())) {
 -          ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
 -                  setFcNSPrefix(jp.nextTextValue());
++          if (property instanceof org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) {
++            ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
++                    setFcNSPrefix(jp.nextTextValue());
++          }
+         } else if ("FC_NsUri".equals(jp.getCurrentName())) {
 -          ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
 -                  setFcNSURI(jp.nextTextValue());
++          if (property instanceof org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) {
++            ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
++                    setFcNSURI(jp.nextTextValue());
++          }
+         } else if ("FC_KeepInContent".equals(jp.getCurrentName())) {
 -          ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
 -                  setFcKeepInContent(BooleanUtils.toBoolean(jp.nextTextValue()));
++          if (property instanceof org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) {
++            ((org.apache.olingo.client.core.edm.xml.v3.PropertyImpl) property).
++                    setFcKeepInContent(BooleanUtils.toBoolean(jp.nextTextValue()));
++          }
+         } else if ("Annotation".equals(jp.getCurrentName())) {
+           ((org.apache.olingo.client.core.edm.xml.v4.PropertyImpl) property).
+                   setAnnotation(jp.readValueAs(AnnotationImpl.class));
+         }
+       }
+     }
+ 
+     return property;
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v3/PropertyImpl.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v3/PropertyImpl.java
index 0000000,c2fc43c..53b3230
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v3/PropertyImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v3/PropertyImpl.java
@@@ -1,0 -1,95 +1,141 @@@
+ /*
+  * 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.edm.xml.v3;
+ 
+ import org.apache.olingo.client.api.edm.xml.v3.Property;
+ import org.apache.olingo.client.core.edm.xml.AbstractProperty;
+ import org.apache.olingo.commons.api.edm.constants.EdmContentKind;
++import org.apache.olingo.odata4.client.api.edm.ConcurrencyMode;
++import org.apache.olingo.odata4.client.api.edm.StoreGeneratedPattern;
+ 
+ public class PropertyImpl extends AbstractProperty implements Property {
+ 
+   private static final long serialVersionUID = 6224524803474652100L;
+ 
++  private String collation;
++
++  private boolean fixedLength;
++
++  private ConcurrencyMode concurrencyMode;
++
++  private StoreGeneratedPattern storeGeneratedPattern = StoreGeneratedPattern.None;
++
+   private String fcSourcePath;
+ 
+   private String fcTargetPath;
+ 
+   private EdmContentKind fcContentKind = EdmContentKind.text;
+ 
+   private String fcNSPrefix;
+ 
+   private String fcNSURI;
+ 
+   private boolean fcKeepInContent = true;
+ 
+   @Override
++  public boolean isFixedLength() {
++    return fixedLength;
++  }
++
++  public void setFixedLength(final boolean fixedLength) {
++    this.fixedLength = fixedLength;
++  }
++
++  @Override
++  public String getCollation() {
++    return collation;
++  }
++
++  public void setCollation(final String collation) {
++    this.collation = collation;
++  }
++
++  @Override
++  public ConcurrencyMode getConcurrencyMode() {
++    return concurrencyMode;
++  }
++
++  public void setConcurrencyMode(final ConcurrencyMode concurrencyMode) {
++    this.concurrencyMode = concurrencyMode;
++  }
++
++  @Override
++  public StoreGeneratedPattern getStoreGeneratedPattern() {
++    return storeGeneratedPattern;
++  }
++
++  public void setStoreGeneratedPattern(final StoreGeneratedPattern storeGeneratedPattern) {
++    this.storeGeneratedPattern = storeGeneratedPattern;
++  }
++
++  @Override
+   public String getFcSourcePath() {
+     return fcSourcePath;
+   }
+ 
+   public void setFcSourcePath(final String fcSourcePath) {
+     this.fcSourcePath = fcSourcePath;
+   }
+ 
+   @Override
+   public String getFcTargetPath() {
+     return fcTargetPath;
+   }
+ 
+   public void setFcTargetPath(final String fcTargetPath) {
+     this.fcTargetPath = fcTargetPath;
+   }
+ 
+   @Override
+   public EdmContentKind getFcContentKind() {
+     return fcContentKind;
+   }
+ 
+   public void setFcContentKind(final EdmContentKind fcContentKind) {
+     this.fcContentKind = fcContentKind;
+   }
+ 
+   @Override
+   public String getFcNSPrefix() {
+     return fcNSPrefix;
+   }
+ 
+   public void setFcNSPrefix(final String fcNSPrefix) {
+     this.fcNSPrefix = fcNSPrefix;
+   }
+ 
+   @Override
+   public String getFcNSURI() {
+     return fcNSURI;
+   }
+ 
+   public void setFcNSURI(final String fcNSURI) {
+     this.fcNSURI = fcNSURI;
+   }
+ 
+   @Override
+   public boolean isFcKeepInContent() {
+     return fcKeepInContent;
+   }
+ 
+   public void setFcKeepInContent(final boolean fcKeepInContent) {
+     this.fcKeepInContent = fcKeepInContent;
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/ReturnTypeDeserializer.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/ReturnTypeDeserializer.java
index 0000000,f51a850..89c4070
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/ReturnTypeDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/ReturnTypeDeserializer.java
@@@ -1,0 -1,62 +1,63 @@@
+ /*
+  * 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.edm.xml.v4;
+ 
+ import com.fasterxml.jackson.core.JsonParser;
+ import com.fasterxml.jackson.core.JsonProcessingException;
+ import com.fasterxml.jackson.core.JsonToken;
+ import com.fasterxml.jackson.databind.DeserializationContext;
+ 
+ import java.io.IOException;
+ 
+ import org.apache.commons.lang3.BooleanUtils;
+ import org.apache.olingo.client.core.op.impl.AbstractEdmDeserializer;
+ 
+ public class ReturnTypeDeserializer extends AbstractEdmDeserializer<ReturnTypeImpl> {
+ 
+   @Override
+   protected ReturnTypeImpl doDeserialize(final JsonParser jp, final DeserializationContext ctxt)
+           throws IOException, JsonProcessingException {
+ 
+     final ReturnTypeImpl returnType = new ReturnTypeImpl();
+ 
+     for (; jp.getCurrentToken() != JsonToken.END_OBJECT; jp.nextToken()) {
+       final JsonToken token = jp.getCurrentToken();
+       if (token == JsonToken.FIELD_NAME) {
+         if ("Type".equals(jp.getCurrentName())) {
+           returnType.setType(jp.nextTextValue());
+         } else if ("Nullable".equals(jp.getCurrentName())) {
+           returnType.setNullable(BooleanUtils.toBoolean(jp.nextTextValue()));
+         } else if ("MaxLength".equals(jp.getCurrentName())) {
+           final String maxLenght = jp.nextTextValue();
+           returnType.setMaxLength(maxLenght.equalsIgnoreCase("max") ? Integer.MAX_VALUE : Integer.valueOf(maxLenght));
+         } else if ("Precision".equals(jp.getCurrentName())) {
+           returnType.setPrecision(Integer.valueOf(jp.nextTextValue()));
+         } else if ("Scale".equals(jp.getCurrentName())) {
 -          returnType.setScale(Integer.valueOf(jp.nextTextValue()));
++          final String scale = jp.nextTextValue();
++          returnType.setScale(scale.equalsIgnoreCase("variable") ? 0 : Integer.valueOf(scale));
+         } else if ("SRID".equals(jp.getCurrentName())) {
+           returnType.setSrid(jp.nextTextValue());
+         }
+       }
+     }
+ 
+     return returnType;
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/TermDeserializer.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/TermDeserializer.java
index 0000000,9d4e803..f1b756e
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/TermDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/TermDeserializer.java
@@@ -1,0 -1,77 +1,78 @@@
+ /*
+  * 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.edm.xml.v4;
+ 
+ import com.fasterxml.jackson.core.JsonParser;
+ import com.fasterxml.jackson.core.JsonProcessingException;
+ import com.fasterxml.jackson.core.JsonToken;
+ import com.fasterxml.jackson.databind.DeserializationContext;
+ 
+ import java.io.IOException;
+ 
+ import org.apache.commons.lang3.BooleanUtils;
+ import org.apache.commons.lang3.StringUtils;
+ import org.apache.olingo.client.api.edm.xml.v4.CSDLElement;
+ import org.apache.olingo.client.core.op.impl.AbstractEdmDeserializer;
+ 
+ public class TermDeserializer extends AbstractEdmDeserializer<TermImpl> {
+ 
+   @Override
+   protected TermImpl doDeserialize(final JsonParser jp, final DeserializationContext ctxt)
+           throws IOException, JsonProcessingException {
+ 
+     final TermImpl term = new TermImpl();
+ 
+     for (; jp.getCurrentToken() != JsonToken.END_OBJECT; jp.nextToken()) {
+       final JsonToken token = jp.getCurrentToken();
+       if (token == JsonToken.FIELD_NAME) {
+         if ("Name".equals(jp.getCurrentName())) {
+           term.setName(jp.nextTextValue());
+         } else if ("Type".equals(jp.getCurrentName())) {
+           term.setType(jp.nextTextValue());
+         } else if ("BaseTerm".equals(jp.getCurrentName())) {
+           term.setBaseTerm(jp.nextTextValue());
+         } else if ("DefaultValue".equals(jp.getCurrentName())) {
+           term.setDefaultValue(jp.nextTextValue());
+         } else if ("Nullable".equals(jp.getCurrentName())) {
+           term.setNullable(BooleanUtils.toBoolean(jp.nextTextValue()));
+         } else if ("MaxLength".equals(jp.getCurrentName())) {
+           final String maxLenght = jp.nextTextValue();
+           term.setMaxLength(maxLenght.equalsIgnoreCase("max") ? Integer.MAX_VALUE : Integer.valueOf(maxLenght));
+         } else if ("Precision".equals(jp.getCurrentName())) {
+           term.setPrecision(Integer.valueOf(jp.nextTextValue()));
+         } else if ("Scale".equals(jp.getCurrentName())) {
 -          term.setScale(Integer.valueOf(jp.nextTextValue()));
++          final String scale = jp.nextTextValue();
++          term.setScale(scale.equalsIgnoreCase("variable") ? 0 : Integer.valueOf(scale));
+         } else if ("SRID".equals(jp.getCurrentName())) {
+           term.setSrid(jp.nextTextValue());
+         } else if ("AppliesTo".equals(jp.getCurrentName())) {
+           for (String split : StringUtils.split(jp.nextTextValue())) {
+             term.getAppliesTo().add(CSDLElement.valueOf(split));
+           }
+         } else if ("Annotation".equals(jp.getCurrentName())) {
+           jp.nextToken();
+           term.setAnnotation(jp.readValueAs(AnnotationImpl.class));
+         }
+       }
+     }
+ 
+     return term;
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/TypeDefinitionDeserializer.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/TypeDefinitionDeserializer.java
index 0000000,f951c77..28dee4d
mode 000000,100644..100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/TypeDefinitionDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/xml/v4/TypeDefinitionDeserializer.java
@@@ -1,0 -1,66 +1,67 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one
+  * or more contributor license agreements.  See the NOTICE file
+  * distributed with this work for additional information
+  * regarding copyright ownership.  The ASF licenses this file
+  * to you under the Apache License, Version 2.0 (the
+  * "License"); you may not use this file except in compliance
+  * with the License.  You may obtain a copy of the License at
+  *
+  *   http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing,
+  * software distributed under the License is distributed on an
+  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  * KIND, either express or implied.  See the License for the
+  * specific language governing permissions and limitations
+  * under the License.
+  */
+ package org.apache.olingo.client.core.edm.xml.v4;
+ 
+ import com.fasterxml.jackson.core.JsonParser;
+ import com.fasterxml.jackson.core.JsonProcessingException;
+ import com.fasterxml.jackson.core.JsonToken;
+ import com.fasterxml.jackson.databind.DeserializationContext;
+ 
+ import java.io.IOException;
+ 
+ import org.apache.commons.lang3.BooleanUtils;
+ import org.apache.olingo.client.core.op.impl.AbstractEdmDeserializer;
+ 
+ public class TypeDefinitionDeserializer extends AbstractEdmDeserializer<TypeDefinitionImpl> {
+ 
+   @Override
+   protected TypeDefinitionImpl doDeserialize(final JsonParser jp, final DeserializationContext ctxt)
+           throws IOException, JsonProcessingException {
+ 
+     final TypeDefinitionImpl typeDefinition = new TypeDefinitionImpl();
+ 
+     for (; jp.getCurrentToken() != JsonToken.END_OBJECT; jp.nextToken()) {
+       final JsonToken token = jp.getCurrentToken();
+       if (token == JsonToken.FIELD_NAME) {
+         if ("Name".equals(jp.getCurrentName())) {
+           typeDefinition.setName(jp.nextTextValue());
+         } else if ("UnderlyingType".equals(jp.getCurrentName())) {
+           typeDefinition.setUnderlyingType(jp.nextTextValue());
+         } else if ("MaxLength".equals(jp.getCurrentName())) {
+           typeDefinition.setMaxLength(jp.nextIntValue(0));
+         } else if ("Unicode".equals(jp.getCurrentName())) {
+           typeDefinition.setUnicode(BooleanUtils.toBoolean(jp.nextTextValue()));
+         } else if ("Precision".equals(jp.getCurrentName())) {
+           typeDefinition.setPrecision(jp.nextIntValue(0));
+         } else if ("Scale".equals(jp.getCurrentName())) {
 -          typeDefinition.setScale(jp.nextIntValue(0));
++          final String scale = jp.nextTextValue();
++          typeDefinition.setScale(scale.equalsIgnoreCase("variable") ? 0 : Integer.valueOf(scale));
+         } else if ("SRID".equals(jp.getCurrentName())) {
+           typeDefinition.setSrid(jp.nextTextValue());
+         } else if ("Annotation".equals(jp.getCurrentName())) {
+           jp.nextToken();
+           typeDefinition.getAnnotations().add(jp.readValueAs(AnnotationImpl.class));
+         }
+       }
+     }
+ 
+     return typeDefinition;
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/MetadataTest.java
----------------------------------------------------------------------
diff --cc lib/client-core/src/test/java/org/apache/olingo/client/core/v4/MetadataTest.java
index 0000000,f183ff3..78e925a
mode 000000,100644..100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/MetadataTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/MetadataTest.java
@@@ -1,0 -1,286 +1,282 @@@
+ /*
+  * 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.v4;
+ 
+ import static org.junit.Assert.assertEquals;
+ import static org.junit.Assert.assertNotNull;
+ import static org.junit.Assert.assertNull;
+ import static org.junit.Assert.assertFalse;
+ import static org.junit.Assert.assertTrue;
+ 
+ import org.apache.olingo.client.api.ODataV4Client;
+ import org.apache.olingo.client.api.edm.xml.v4.Annotation;
+ import org.apache.olingo.client.api.edm.xml.v4.Annotations;
+ import org.apache.olingo.client.api.edm.xml.v4.ComplexType;
+ import org.apache.olingo.client.api.edm.xml.v4.EntityContainer;
+ import org.apache.olingo.client.api.edm.xml.v4.EntityType;
+ import org.apache.olingo.client.api.edm.xml.v4.Function;
+ import org.apache.olingo.client.api.edm.xml.v4.FunctionImport;
+ import org.apache.olingo.client.api.edm.xml.v4.Schema;
+ import org.apache.olingo.client.api.edm.xml.v4.Singleton;
+ import org.apache.olingo.client.api.edm.xml.v4.XMLMetadata;
+ import org.apache.olingo.client.core.AbstractTest;
+ import org.apache.olingo.client.core.edm.xml.v4.annotation.Apply;
+ import org.apache.olingo.client.core.edm.xml.v4.annotation.Collection;
+ import org.apache.olingo.client.core.edm.xml.v4.annotation.ConstExprConstructImpl;
+ import org.apache.olingo.client.core.edm.xml.v4.annotation.Path;
+ import org.apache.olingo.commons.api.edm.Edm;
+ import org.apache.olingo.commons.api.edm.EdmAction;
+ import org.apache.olingo.commons.api.edm.EdmComplexType;
+ import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+ import org.apache.olingo.commons.api.edm.EdmEntitySet;
+ import org.apache.olingo.commons.api.edm.EdmEntityType;
+ import org.apache.olingo.commons.api.edm.EdmEnumType;
+ import org.apache.olingo.commons.api.edm.EdmFunction;
+ import org.apache.olingo.commons.api.edm.EdmFunctionImport;
+ import org.apache.olingo.commons.api.edm.EdmFunctionImportInfo;
+ import org.apache.olingo.commons.api.edm.FullQualifiedName;
+ import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 -import org.apache.olingo.commons.api.edm.constants.StoreGeneratedPattern;
+ import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeKind;
+ import org.junit.Test;
+ 
+ public class MetadataTest extends AbstractTest {
+ 
+   @Override
+   protected ODataV4Client getClient() {
+     return v4Client;
+   }
+ 
+   @Test
+   public void parse() {
+     final Edm edm = getClient().getReader().
+             readMetadata(getClass().getResourceAsStream("metadata.xml"));
+     assertNotNull(edm);
+ 
+     // 1. Enum
+     final EdmEnumType responseEnumType = edm.getEnumType(
+             new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "ResponseType"));
+     assertNotNull(responseEnumType);
+     assertEquals(6, responseEnumType.getMemberNames().size());
+     assertEquals("3", responseEnumType.getMember("Accepted").getValue());
+     assertEquals(EdmTypeKind.ENUM, responseEnumType.getKind());
+ 
+     // 2. Complex
+     final EdmComplexType responseStatus = edm.getComplexType(
+             new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "ResponseStatus"));
+     assertNotNull(responseStatus);
+     assertTrue(responseStatus.getNavigationPropertyNames().isEmpty());
+     assertEquals("Recipient", responseStatus.getBaseType().getName());
+     assertEquals(EdmPrimitiveTypeKind.DateTimeOffset.getEdmPrimitiveTypeInstance(),
+             responseStatus.getProperty("Time").getType());
+ 
+     // 3. Entity
+     final EdmEntityType user = edm.getEntityType(
+             new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "User"));
+     assertNotNull(user);
+     final EdmEntityType entity = edm.getEntityType(
+             new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "Entity"));
+     assertEquals(entity, user.getBaseType());
+     assertFalse(user.getPropertyNames().isEmpty());
+     assertFalse(user.getNavigationPropertyNames().isEmpty());
+     final EdmEntityType folder = edm.getEntityType(
+             new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "Folder"));
+     assertEquals(folder, user.getNavigationProperty("Inbox").getType());
+ 
+     // 4. Action
+     final EdmAction move = edm.getAction(
+             new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "Move"),
+             new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "Folder"),
+             false);
+     assertNotNull(move);
+     assertTrue(move.isBound());
+     assertEquals(2, move.getParameterNames().size());
+     assertEquals(
+             EdmPrimitiveTypeKind.String.getEdmPrimitiveTypeInstance(), move.getParameter("DestinationId").getType());
+ 
+     // 5. EntityContainer
+     final EdmEntityContainer container = edm.getEntityContainer(
+             new FullQualifiedName("Microsoft.Exchange.Services.OData.Model", "EntityContainer"));
+     assertNotNull(container);
+     final EdmEntitySet users = container.getEntitySet("Users");
+     assertNotNull(users);
+     assertEquals(edm.getEntityType(new FullQualifiedName(container.getNamespace(), "User")),
+             users.getEntityType());
+     assertEquals(container.getEntitySet("Folders"), users.getRelatedBindingTarget("Folders"));
+   }
+ 
+   @Test
+   public void demo() {
+     final XMLMetadata metadata = getClient().getDeserializer().
+             toMetadata(getClass().getResourceAsStream("demo-metadata.xml"));
+     assertNotNull(metadata);
+ 
+     assertFalse(metadata.getSchema(0).getAnnotationsList().isEmpty());
+     final Annotations annots = metadata.getSchema(0).getAnnotationsList("ODataDemo.DemoService/Suppliers");
+     assertNotNull(annots);
+     assertFalse(annots.getAnnotations().isEmpty());
+     assertEquals(ConstExprConstructImpl.Type.String,
+             annots.getAnnotation("Org.OData.Publication.V1.PrivacyPolicyUrl").getConstExpr().getType());
+     assertEquals("http://www.odata.org/",
+             annots.getAnnotation("Org.OData.Publication.V1.PrivacyPolicyUrl").getConstExpr().getValue());
+   }
+ 
+   @Test
+   public void multipleSchemas() {
+     final XMLMetadata metadata = getClient().getDeserializer().
+             toMetadata(getClass().getResourceAsStream("northwind-metadata.xml"));
+     assertNotNull(metadata);
+ 
+     final Schema first = metadata.getSchema("NorthwindModel");
+     assertNotNull(first);
+ 
+     final Schema second = metadata.getSchema("ODataWebExperimental.Northwind.Model");
+     assertNotNull(second);
+ 
 -    assertEquals(StoreGeneratedPattern.Identity,
 -            first.getEntityType("Category").getProperty("CategoryID").getStoreGeneratedPattern());
 -
+     final EntityContainer entityContainer = second.getEntityContainer();
+     assertNotNull(entityContainer);
+     assertEquals("NorthwindEntities", entityContainer.getName());
+     assertTrue(entityContainer.isLazyLoadingEnabled());
+   }
+ 
+   /**
+    * Tests Example 85 from CSDL specification.
+    */
+   @Test
+   public void fromdoc1() {
+     final XMLMetadata metadata = getClient().getDeserializer().
+             toMetadata(getClass().getResourceAsStream("fromdoc1-metadata.xml"));
+     assertNotNull(metadata);
+ 
+     assertFalse(metadata.getReferences().isEmpty());
+     assertEquals("Org.OData.Measures.V1", metadata.getReferences().get(1).getIncludes().get(0).getNamespace());
+ 
+     final EntityType product = metadata.getSchema(0).getEntityType("Product");
+     assertTrue(product.isHasStream());
+     assertEquals("UoM.ISOCurrency", product.getProperty("Price").getAnnotation().getTerm());
+     assertEquals("Products", product.getNavigationProperty("Supplier").getPartner());
+ 
+     final EntityType category = metadata.getSchema(0).getEntityType("Category");
+     assertNotNull(category);
+ 
+     final ComplexType address = metadata.getSchema(0).getComplexType("Address");
+     assertFalse(address.getNavigationProperty("Country").getReferentialConstraints().isEmpty());
+     assertEquals("Name",
+             address.getNavigationProperty("Country").getReferentialConstraints().get(0).getReferencedProperty());
+ 
+     final Function productsByRating = metadata.getSchema(0).getFunctions("ProductsByRating").get(0);
+     assertNotNull(productsByRating.getParameter("Rating"));
+     assertEquals("Edm.Int32", productsByRating.getParameter("Rating").getType());
+     assertEquals("Collection(ODataDemo.Product)", productsByRating.getReturnType().getType());
+ 
+     final Singleton contoso = metadata.getSchema(0).getEntityContainer().getSingleton("Contoso");
+     assertNotNull(contoso);
+     assertFalse(contoso.getNavigationPropertyBindings().isEmpty());
+     assertEquals("Products", contoso.getNavigationPropertyBindings().get(0).getPath());
+ 
+     final FunctionImport functionImport = metadata.getSchema(0).getEntityContainer().
+             getFunctionImport("ProductsByRating");
+     assertNotNull(functionImport);
+     assertEquals(metadata.getSchema(0).getNamespace() + "." + productsByRating.getName(),
+             functionImport.getFunction());
+ 
+     // Now let's go high-level
+     final Edm edm = getClient().getReader().
+             readMetadata(getClass().getResourceAsStream("fromdoc1-metadata.xml"));
+     assertNotNull(edm);
+ 
+     final EdmFunctionImportInfo fiInfo = edm.getServiceMetadata().getFunctionImportInfos().get(0);
+     final EdmEntityContainer demoService = edm.getEntityContainer(
+             new FullQualifiedName(metadata.getSchema(0).getNamespace(), fiInfo.getEntityContainerName()));
+     assertNotNull(demoService);
+     final EdmFunctionImport fi = demoService.getFunctionImport(fiInfo.getFunctionImportName());
+     assertNotNull(fi);
+     assertEquals(demoService.getEntitySet("Products"), fi.getReturnedEntitySet());
+ 
+     final EdmFunction function = edm.getFunction(
+             new FullQualifiedName(metadata.getSchema(0).getNamespace(), "ProductsByRating"),
+             null, Boolean.FALSE, null);
+     assertNotNull(function);
+     assertEquals(function.getName(), fi.getFunction(null).getName());
+     assertEquals(function.getNamespace(), fi.getFunction(null).getNamespace());
+     assertEquals(function.getParameterNames(), fi.getFunction(null).getParameterNames());
+     assertEquals(function.getReturnType().getType().getName(),
+             fi.getFunction(null).getReturnType().getType().getName());
+     assertEquals(function.getReturnType().getType().getNamespace(),
+             fi.getFunction(null).getReturnType().getType().getNamespace());
+   }
+ 
+   /**
+    * Tests Example 86 from CSDL specification.
+    */
+   @Test
+   public void fromdoc2() {
+     final XMLMetadata metadata = getClient().getDeserializer().
+             toMetadata(getClass().getResourceAsStream("fromdoc2-metadata.xml"));
+     assertNotNull(metadata);
+ 
+     // Check displayName
+     final Annotation displayName = metadata.getSchema(0).getAnnotationsList("ODataDemo.Supplier").
+             getAnnotation("Vocabulary1.DisplayName");
+     assertNotNull(displayName);
+     assertNull(displayName.getConstExpr());
+     assertNotNull(displayName.getDynExpr());
+ 
+     assertTrue(displayName.getDynExpr() instanceof Apply);
+     final Apply apply = (Apply) displayName.getDynExpr();
+     assertEquals(Apply.CANONICAL_FUNCTION_CONCAT, apply.getFunction());
+     assertEquals(3, apply.getParameters().size());
+ 
+     final Path firstArg = new Path();
+     firstArg.setValue("Name");
+     assertEquals(firstArg, apply.getParameters().get(0));
+ 
+     final ConstExprConstructImpl secondArg = new ConstExprConstructImpl();
+     secondArg.setType(ConstExprConstructImpl.Type.String);
+     secondArg.setValue(" in ");
+     assertEquals(secondArg, apply.getParameters().get(1));
+ 
+     final Path thirdArg = new Path();
+     thirdArg.setValue("Address/CountryName");
+     assertEquals(thirdArg, apply.getParameters().get(2));
+ 
+     // Check Tags
+     final Annotation tags = metadata.getSchema(0).getAnnotationsList("ODataDemo.Product").
+             getAnnotation("Vocabulary1.Tags");
+     assertNotNull(tags);
+     assertNull(tags.getConstExpr());
+     assertNotNull(tags.getDynExpr());
+ 
+     assertTrue(tags.getDynExpr() instanceof Collection);
+     final Collection collection = (Collection) tags.getDynExpr();
+     assertEquals(1, collection.getItems().size());
+     assertEquals(ConstExprConstructImpl.Type.String, ((ConstExprConstructImpl) collection.getItems().get(0)).getType());
+     assertEquals("MasterData", ((ConstExprConstructImpl) collection.getItems().get(0)).getValue());
+   }
+ 
+   /**
+    * Various annotation examples taken from CSDL specification.
+    */
+   @Test
+   public void fromdoc3() {
+     final Edm metadata = getClient().getReader().
+             readMetadata(getClass().getResourceAsStream("fromdoc3-metadata.xml"));
+     assertNotNull(metadata);
+   }
+ 
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmPrimitiveType.java
----------------------------------------------------------------------
diff --cc lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmPrimitiveType.java
index 0000000,7ce5c9a..d5b7e6d
mode 000000,100644..100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmPrimitiveType.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmPrimitiveType.java
@@@ -1,0 -1,166 +1,166 @@@
+ /* 
+  * 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.commons.api.edm;
+ 
+ /**
+  * EdmPrimitiveType is a primitive type as defined in the Entity Data Model (EDM).
+  * <br/>
+  * There are methods to convert EDM primitive types from and to Java objects, respectively. The following Java types are
+  * supported:
+  * <table frame="hsides" rules="groups">
+  * <thead>
+  * <tr><th>EDM primitive type</th><th>Java types</th></tr>
+  * </thead>
+  * <tbody>
+  * <tr><td>Binary</td><td>byte[], {@link Byte}[]</td></tr>
+  * <tr><td>Boolean</td><td>{@link Boolean}</td></tr>
+  * <tr><td>Byte</td><td>{@link Short}, {@link Byte}, {@link Integer}, {@link Long}, {@link java.math.BigInteger}
+  * </td></tr>
+  * <tr><td>Date</td><td>{@link java.util.Calendar}, {@link java.util.Date}, {@link Long}</td></tr>
+  * <tr><td>DateTimeOffset</td><td>{@link java.util.Calendar}, {@link java.util.Date}, {@link Long}</td></tr>
+  * <tr><td>Decimal</td><td>{@link java.math.BigDecimal}, {@link java.math.BigInteger}, {@link Double}, {@link Float},
+  * {@link Byte}, {@link Short}, {@link Integer}, {@link Long}</td></tr>
+  * <tr><td>Double</td><td>{@link Double}, {@link Float}, {@link java.math.BigDecimal}, {@link Byte}, {@link Short},
+  * {@link Integer}, {@link Long}</td></tr>
+  * <tr><td>Duration</td><td>{@link java.math.BigDecimal}, {@link java.math.BigInteger}, {@link Double}, {@link Float},
+  * {@link Byte}, {@link Short}, {@link Integer}, {@link Long}</td></tr>
+  * <tr><td>Guid</td><td>{@link java.util.UUID}</td></tr>
+  * <tr><td>Int16</td><td>{@link Short}, {@link Byte}, {@link Integer}, {@link Long}, {@link java.math.BigInteger}
+  * </td></tr>
+  * <tr><td>Int32</td><td>{@link Integer}, {@link Byte}, {@link Short}, {@link Long}, {@link java.math.BigInteger}
+  * </td></tr>
+  * <tr><td>Int64</td><td>{@link Long}, {@link Byte}, {@link Short}, {@link Integer}, {@link java.math.BigInteger}
+  * </td></tr>
+  * <tr><td>SByte</td><td>{@link Byte}, {@link Short}, {@link Integer}, {@link Long}, {@link java.math.BigInteger}
+  * </td></tr>
+  * <tr><td>Single</td><td>{@link Float}, {@link Double}, {@link java.math.BigDecimal}, {@link Byte}, {@link Short},
+  * {@link Integer}, {@link Long}</td></tr>
+  * <tr><td>String</td><td>{@link String}</td></tr>
+  * <tr><td>TimeOfDay</td><td>{@link java.util.Calendar}, {@link java.util.Date}, {@link Long}</td></tr>
+  * </tbody>
+  * </table>
+  * <p>
+  * The first Java type is the default type for the respective EDM primitive type.
+  * </p>
+  * <p>
+  * For all EDM primitive types, the <code>Nullable</code> facet is taken into account. For <code>Binary</code> and
+  * <code>String</code>, <code>MaxLength</code> is also applicable. For <code>String</code>, the facet
+  * <code>Unicode</code> is considered additionally. The EDM primitive types <code>DateTimeOffset</code>,
+  * <code>Decimal</code>, <code>Duration</code>, and <code>TimeOfDay</code> can have a <code>Precision</code> facet.
+  * Additionally, <code>Decimal</code> can have the facet <code>Scale</code>.
+  * </p>
+  */
+ public interface EdmPrimitiveType extends EdmType {
+ 
 -  static final String EDM_NAMESPACE = "Edm";
++  String EDM_NAMESPACE = "Edm";
+ 
 -  static final String SYSTEM_NAMESPACE = "System";
++  String SYSTEM_NAMESPACE = "System";
+ 
+   /**
+    * Checks type compatibility.
+    *
+    * @param primitiveType the {@link EdmPrimitiveType} to be tested for compatibility
+    * @return <code>true</code> if the provided type is compatible to this type
+    */
+   boolean isCompatible(EdmPrimitiveType primitiveType);
+ 
+   /**
+    * Returns the default Java type for this EDM primitive type as described in the documentation of
+    * {@link EdmPrimitiveType}.
+    *
+    * @return the default Java type
+    */
+   Class<?> getDefaultType();
+ 
+   /**
+    * Validates literal value.
+    *
+    * @param value the literal value
+    * @param isNullable whether the <code>null</code> value is allowed
+    * @param maxLength the maximum length
+    * @param precision the precision
+    * @param scale the scale
+    * @param isUnicode whether non-ASCII characters are allowed (relevant only for Edm.String)
+    * @return <code>true</code> if the validation is successful
+    */
+   boolean validate(String value,
+           Boolean isNullable, Integer maxLength, Integer precision, Integer scale, Boolean isUnicode);
+ 
+   /**
+    * Converts literal representation of value to system data type.
+    *
+    * @param value the literal representation of value
+    * @param isNullable whether the <code>null</code> value is allowed
+    * @param maxLength the maximum length
+    * @param precision the precision
+    * @param scale the scale
+    * @param isUnicode whether non-ASCII characters are allowed (relevant only for Edm.String)
+    * @param returnType the class of the returned value; it must be one of the list in the documentation of
+    * {@link EdmPrimitiveType}
+    * @throws EdmPrimitiveTypeException
+    * @return the value as an instance of the class the parameter <code>returnType</code> indicates
+    */
+   <T> T valueOfString(String value,
+           Boolean isNullable, Integer maxLength, Integer precision, Integer scale, Boolean isUnicode,
+           Class<T> returnType) throws EdmPrimitiveTypeException;
+ 
+   /**
+    * Converts system data type to literal representation of value.
+    * <p>
+    * Returns <code>null</code> if value is <code>null</code> and <code>null</code> is an allowed value.
+    * </p>
+    *
+    * @param value the Java value as Object; its type must be one of the list in the documentation of
+    * {@link EdmPrimitiveType}
+    * @param isNullable whether the <code>null</code> value is allowed
+    * @param maxLength the maximum length
+    * @param precision the precision
+    * @param scale the scale
+    * @param isUnicode whether non-ASCII characters are allowed (relevant only for Edm.String)
+    * @throws EdmPrimitiveTypeException
+    * @return literal representation as String
+    */
+   String valueToString(Object value,
+           Boolean isNullable, Integer maxLength, Integer precision, Integer scale, Boolean isUnicode)
+           throws EdmPrimitiveTypeException;
+ 
+   /**
+    * Converts default literal representation to URI literal representation.
+    * <p>
+    * Returns <code>null</code> if the literal is <code>null</code>. Does not perform any validation.
+    * </p>
+    *
+    * @param literal the literal in default representation
+    * @return URI literal representation as String
+    */
+   String toUriLiteral(String literal);
+ 
+   /**
+    * Converts URI literal representation to default literal representation.
+    * <p>
+    * Returns <code>null</code> if the literal is <code>null</code>. Checks the presence of a required prefix and of
+    * required surrounding quotation marks but does not perform any further validation.
+    * </p>
+    *
+    * @param literal the literal in URI representation
+    * @return default literal representation as String
+    * @throws EdmPrimitiveTypeException if a required prefix or required surrounding quotation marks are missing
+    */
+   String fromUriLiteral(String literal) throws EdmPrimitiveTypeException;
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDuration.java
----------------------------------------------------------------------
diff --cc lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDuration.java
index 0000000,fab05a7..87944c0
mode 000000,100644..100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDuration.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmDuration.java
@@@ -1,0 -1,140 +1,141 @@@
+ /* 
+  * 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.commons.core.edm.primitivetype;
+ 
+ import java.math.BigDecimal;
+ import java.math.BigInteger;
+ import java.util.regex.Matcher;
+ import java.util.regex.Pattern;
+ 
+ import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
+ 
+ public final class EdmDuration extends SingletonPrimitiveType {
+ 
+   private static final Pattern PATTERN = Pattern.compile(
+           "[-+]?P(?:(\\p{Digit}+)D)?(?:T(?:(\\p{Digit}+)H)?(?:(\\p{Digit}+)M)?"
+           + "(?:(\\p{Digit}+(?:\\.(?:\\p{Digit}+?)0*)?)S)?)?");
+ 
+   private static final EdmDuration INSTANCE = new EdmDuration();
+ 
+   {
+     uriPrefix = "duration'";
+     uriSuffix = "'";
+   }
+ 
+   public static EdmDuration getInstance() {
+     return INSTANCE;
+   }
+ 
+   @Override
+   public Class<?> getDefaultType() {
+     return BigDecimal.class;
+   }
+ 
+   @Override
+   protected <T> T internalValueOfString(final String value,
+           final Boolean isNullable, final Integer maxLength, final Integer precision,
+           final Integer scale, final Boolean isUnicode, final Class<T> returnType) throws EdmPrimitiveTypeException {
++
+     final Matcher matcher = PATTERN.matcher(value);
+     if (!matcher.matches()
+         || matcher.group(1) == null && matcher.group(2) == null && matcher.group(3) == null
+            && matcher.group(4) == null) {
+       throw new EdmPrimitiveTypeException(
+               "EdmPrimitiveTypeException.LITERAL_ILLEGAL_CONTENT.addContent(literal)");
+     }
+ 
+     BigDecimal result = (matcher.group(1) == null ? BigDecimal.ZERO
+                          : new BigDecimal(matcher.group(1)).multiply(BigDecimal.valueOf(24 * 60 * 60))).
+             add(matcher.group(2) == null ? BigDecimal.ZERO
+                 : new BigDecimal(matcher.group(2)).multiply(BigDecimal.valueOf(60 * 60))).
+             add(matcher.group(3) == null ? BigDecimal.ZERO
+                 : new BigDecimal(matcher.group(3)).multiply(BigDecimal.valueOf(60))).
+             add(matcher.group(4) == null ? BigDecimal.ZERO : new BigDecimal(matcher.group(4)));
+ 
+     if (result.scale() <= (precision == null ? 0 : precision)) {
 -      result = value.startsWith("-") ? result.negate() : result;
++      result = value.charAt(0) == '-' ? result.negate() : result;
+     } else {
+       throw new EdmPrimitiveTypeException(
+               "EdmPrimitiveTypeException.LITERAL_FACETS_NOT_MATCHED.addContent(literal, facets)");
+     }
+ 
+     try {
+       return EdmDecimal.convertDecimal(result, returnType);
+     } catch (final IllegalArgumentException e) {
+       throw new EdmPrimitiveTypeException(
+               "EdmPrimitiveTypeException.LITERAL_UNCONVERTIBLE_TO_VALUE_TYPE.addContent(value, returnType), e");
+     } catch (final ClassCastException e) {
+       throw new EdmPrimitiveTypeException(
+               "EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(returnType), e");
+     }
+   }
+ 
+   @Override
+   protected <T> String internalValueToString(final T value,
+           final Boolean isNullable, final Integer maxLength, final Integer precision,
+           final Integer scale, final Boolean isUnicode) throws EdmPrimitiveTypeException {
+ 
+     BigDecimal valueDecimal;
+     if (value instanceof BigDecimal) {
+       valueDecimal = (BigDecimal) value;
+     } else if (value instanceof Byte || value instanceof Short || value instanceof Integer || value instanceof Long) {
+       valueDecimal = BigDecimal.valueOf(((Number) value).longValue());
+     } else if (value instanceof BigInteger) {
+       valueDecimal = new BigDecimal((BigInteger) value);
+     } else {
+       throw new EdmPrimitiveTypeException(
+               "EdmPrimitiveTypeException.VALUE_TYPE_NOT_SUPPORTED.addContent(value.getClass())");
+     }
+ 
+     if (valueDecimal.scale() > (precision == null ? 0 : precision)) {
+       throw new EdmPrimitiveTypeException(
+               "EdmPrimitiveTypeException.VALUE_FACETS_NOT_MATCHED.addContent(value, facets)");
+     }
+ 
+     final StringBuilder result = new StringBuilder();
+     if (valueDecimal.signum() == -1) {
+       result.append('-');
+       valueDecimal = valueDecimal.negate();
+     }
+     result.append('P');
+     BigInteger seconds = valueDecimal.toBigInteger();
+     final BigInteger days = seconds.divide(BigInteger.valueOf(24 * 60 * 60));
+     if (!days.equals(BigInteger.ZERO)) {
+       result.append(days.toString());
+       result.append('D');
+     }
+     result.append('T');
+     seconds = seconds.subtract(days.multiply(BigInteger.valueOf(24 * 60 * 60)));
+     final BigInteger hours = seconds.divide(BigInteger.valueOf(60 * 60));
+     if (!hours.equals(BigInteger.ZERO)) {
+       result.append(hours.toString());
+       result.append('H');
+     }
+     seconds = seconds.subtract(hours.multiply(BigInteger.valueOf(60 * 60)));
+     final BigInteger minutes = seconds.divide(BigInteger.valueOf(60));
+     if (!minutes.equals(BigInteger.ZERO)) {
+       result.append(minutes.toString());
+       result.append('M');
+     }
+     result.append(valueDecimal.remainder(BigDecimal.valueOf(60)).toPlainString());
+     result.append('S');
+ 
+     return result.toString();
+   }
+ }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/f70d3f0b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmPrimitiveTypeKind.java
----------------------------------------------------------------------
diff --cc lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmPrimitiveTypeKind.java
index 0000000,b0deeef..e368607
mode 000000,100644..100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmPrimitiveTypeKind.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/EdmPrimitiveTypeKind.java
@@@ -1,0 -1,98 +1,95 @@@
+ /* 
+  * 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.commons.core.edm.primitivetype;
+ 
+ import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
+ import org.apache.olingo.commons.api.edm.FullQualifiedName;
+ 
+ //TODO: Should we delete this typekind and use a facade?
+ public enum EdmPrimitiveTypeKind {
+ 
+   Binary, Boolean, Byte, Date, DateTimeOffset, Decimal, Double, Duration, Guid,
+   Int16, Int32, Int64, SByte, Single, String, TimeOfDay;
+ 
+   /**
+    * Returns the {@link FullQualifiedName} for this type kind.
+    *
+    * @return {@link FullQualifiedName}
+    */
+   public FullQualifiedName getFullQualifiedName() {
+     return new FullQualifiedName(EdmPrimitiveType.EDM_NAMESPACE, toString());
+   }
+ 
+   /**
+    * Returns an instance for this {@link EdmPrimitiveTypeKind} in the form of {@link EdmPrimitiveType}.
+    *
+    * @return {@link EdmPrimitiveType} instance
+    */
+   public EdmPrimitiveType getEdmPrimitiveTypeInstance() {
+     switch (this) {
+       case Binary:
+         return EdmBinary.getInstance();
+       case Boolean:
+         return EdmBoolean.getInstance();
+       case Byte:
+         return EdmByte.getInstance();
+       case Date:
+         return EdmDate.getInstance();
+       case DateTimeOffset:
+         return EdmDateTimeOffset.getInstance();
+       case Decimal:
+         return EdmDecimal.getInstance();
+       case Double:
+         return EdmDouble.getInstance();
+       case Duration:
+         return EdmDuration.getInstance();
+       case Guid:
+         return EdmGuid.getInstance();
+       case Int16:
+         return EdmInt16.getInstance();
+       case Int32:
+         return EdmInt32.getInstance();
+       case Int64:
+         return EdmInt64.getInstance();
+       case SByte:
+         return EdmSByte.getInstance();
+       case Single:
+         return EdmSingle.getInstance();
+       case String:
+         return EdmString.getInstance();
+       case TimeOfDay:
+         return EdmTimeOfDay.getInstance();
+       default:
+         throw new RuntimeException("Wrong type:" + this);
+     }
+   }
+ 
+   /**
+    * Gets <tt>EdmPrimitiveTypeKind</tt> from a full string (e.g. 'Edm.Int32').
+    *
+    * @param value string value type.
+    * @return <tt>EdmPrimitiveTypeKind</tt> object.
+    */
 -  public static EdmPrimitiveTypeKind fromString(final String value) {
 -    final String noNsValue = value.substring(4);
 -    for (EdmPrimitiveTypeKind edmSimpleType : EdmPrimitiveTypeKind.values()) {
 -      if (edmSimpleType.name().equals(noNsValue)) {
 -        return edmSimpleType;
 -      }
++  public static EdmPrimitiveTypeKind valueOfFQN(final String value) {
++    if (!value.startsWith(EdmPrimitiveType.EDM_NAMESPACE + ".")) {
++      throw new IllegalArgumentException(value + " does not look like an Edm primitive type");
+     }
 -    throw new IllegalArgumentException(value);
++    return valueOf(value.substring(4));
+   }
+ }


[3/6] git commit: Pruning some structural properties from V4 which were erroneously left in the common interfaces

Posted by il...@apache.org.
Pruning some structural properties from V4 which were erroneously left in the common interfaces


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

Branch: refs/heads/master
Commit: 7f7a68e8cbf912ba427da8299875f1954281eaaa
Parents: 027e135
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Mar 10 10:29:57 2014 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Mar 10 10:29:57 2014 +0100

----------------------------------------------------------------------
 .../odata4/client/api/edm/ConcurrencyMode.java  | 26 ++++++++
 .../client/api/edm/StoreGeneratedPattern.java   | 27 +++++++++
 .../client/api/edm/xml/CommonProperty.java      | 10 ----
 .../odata4/client/api/edm/xml/v3/Property.java  | 10 ++++
 .../client/core/edm/xml/AbstractProperty.java   | 46 --------------
 .../core/edm/xml/ParameterDeserializer.java     |  3 +-
 .../core/edm/xml/PropertyDeserializer.java      | 63 ++++++++++++++------
 .../client/core/edm/xml/v3/PropertyImpl.java    | 46 ++++++++++++++
 .../core/edm/xml/v4/ReturnTypeDeserializer.java |  3 +-
 .../core/edm/xml/v4/TermDeserializer.java       |  3 +-
 .../edm/xml/v4/TypeDefinitionDeserializer.java  |  3 +-
 .../odata4/client/core/v4/MetadataTest.java     |  4 --
 .../api/edm/constants/ConcurrencyMode.java      | 26 --------
 .../edm/constants/StoreGeneratedPattern.java    | 27 ---------
 14 files changed, 161 insertions(+), 136 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7f7a68e8/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/ConcurrencyMode.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/ConcurrencyMode.java b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/ConcurrencyMode.java
new file mode 100644
index 0000000..90a8f7b
--- /dev/null
+++ b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/ConcurrencyMode.java
@@ -0,0 +1,26 @@
+/*
+ * 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.odata4.client.api.edm;
+
+public enum ConcurrencyMode {
+
+  None,
+  Fixed
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7f7a68e8/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/StoreGeneratedPattern.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/StoreGeneratedPattern.java b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/StoreGeneratedPattern.java
new file mode 100644
index 0000000..c081bdf
--- /dev/null
+++ b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/StoreGeneratedPattern.java
@@ -0,0 +1,27 @@
+/*
+ * 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.odata4.client.api.edm;
+
+public enum StoreGeneratedPattern {
+
+  None,
+  Identity,
+  Computed
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7f7a68e8/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/CommonProperty.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/CommonProperty.java b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/CommonProperty.java
index 7f51af7..e4936d6 100644
--- a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/CommonProperty.java
+++ b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/CommonProperty.java
@@ -18,9 +18,6 @@
  */
 package org.apache.olingo.odata4.client.api.edm.xml;
 
-import org.apache.olingo.odata4.commons.api.edm.constants.ConcurrencyMode;
-import org.apache.olingo.odata4.commons.api.edm.constants.StoreGeneratedPattern;
-
 public interface CommonProperty extends Named {
 
   String getType();
@@ -31,19 +28,12 @@ public interface CommonProperty extends Named {
 
   Integer getMaxLength();
 
-  boolean isFixedLength();
-
   Integer getPrecision();
 
   Integer getScale();
 
   boolean isUnicode();
 
-  String getCollation();
-
   String getSrid();
 
-  ConcurrencyMode getConcurrencyMode();
-
-  StoreGeneratedPattern getStoreGeneratedPattern();
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7f7a68e8/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v3/Property.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v3/Property.java b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v3/Property.java
index 950e562..6eed418 100644
--- a/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v3/Property.java
+++ b/odata4-lib/odata4-client-api/src/main/java/org/apache/olingo/odata4/client/api/edm/xml/v3/Property.java
@@ -19,10 +19,20 @@
 package org.apache.olingo.odata4.client.api.edm.xml.v3;
 
 import org.apache.olingo.odata4.client.api.edm.xml.CommonProperty;
+import org.apache.olingo.odata4.client.api.edm.ConcurrencyMode;
 import org.apache.olingo.odata4.commons.api.edm.constants.EdmContentKind;
+import org.apache.olingo.odata4.client.api.edm.StoreGeneratedPattern;
 
 public interface Property extends CommonProperty {
 
+  String getCollation();
+
+  boolean isFixedLength();
+
+  ConcurrencyMode getConcurrencyMode();
+
+  StoreGeneratedPattern getStoreGeneratedPattern();
+
   String getFcSourcePath();
 
   String getFcTargetPath();

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7f7a68e8/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/AbstractProperty.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/AbstractProperty.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/AbstractProperty.java
index 78cdc4b..1b43423 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/AbstractProperty.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/AbstractProperty.java
@@ -20,8 +20,6 @@ package org.apache.olingo.odata4.client.core.edm.xml;
 
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import org.apache.olingo.odata4.client.api.edm.xml.CommonProperty;
-import org.apache.olingo.odata4.commons.api.edm.constants.ConcurrencyMode;
-import org.apache.olingo.odata4.commons.api.edm.constants.StoreGeneratedPattern;
 
 @JsonDeserialize(using = PropertyDeserializer.class)
 public abstract class AbstractProperty extends AbstractEdmItem implements CommonProperty {
@@ -38,22 +36,14 @@ public abstract class AbstractProperty extends AbstractEdmItem implements Common
 
   private Integer maxLength;
 
-  private boolean fixedLength;
-
   private Integer precision;
 
   private Integer scale;
 
   private boolean unicode = true;
 
-  private String collation;
-
   private String srid;
 
-  private ConcurrencyMode concurrencyMode;
-
-  private StoreGeneratedPattern storeGeneratedPattern = StoreGeneratedPattern.None;
-
   @Override
   public String getName() {
     return name;
@@ -100,15 +90,6 @@ public abstract class AbstractProperty extends AbstractEdmItem implements Common
   }
 
   @Override
-  public boolean isFixedLength() {
-    return fixedLength;
-  }
-
-  public void setFixedLength(final boolean fixedLength) {
-    this.fixedLength = fixedLength;
-  }
-
-  @Override
   public Integer getPrecision() {
     return precision;
   }
@@ -136,15 +117,6 @@ public abstract class AbstractProperty extends AbstractEdmItem implements Common
   }
 
   @Override
-  public String getCollation() {
-    return collation;
-  }
-
-  public void setCollation(final String collation) {
-    this.collation = collation;
-  }
-
-  @Override
   public String getSrid() {
     return srid;
   }
@@ -152,22 +124,4 @@ public abstract class AbstractProperty extends AbstractEdmItem implements Common
   public void setSrid(final String srid) {
     this.srid = srid;
   }
-
-  @Override
-  public ConcurrencyMode getConcurrencyMode() {
-    return concurrencyMode;
-  }
-
-  public void setConcurrencyMode(final ConcurrencyMode concurrencyMode) {
-    this.concurrencyMode = concurrencyMode;
-  }
-
-  @Override
-  public StoreGeneratedPattern getStoreGeneratedPattern() {
-    return storeGeneratedPattern;
-  }
-
-  public void setStoreGeneratedPattern(final StoreGeneratedPattern storeGeneratedPattern) {
-    this.storeGeneratedPattern = storeGeneratedPattern;
-  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7f7a68e8/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/ParameterDeserializer.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/ParameterDeserializer.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/ParameterDeserializer.java
index e8bd47a..c7809e4 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/ParameterDeserializer.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/ParameterDeserializer.java
@@ -53,7 +53,8 @@ public class ParameterDeserializer extends AbstractEdmDeserializer<AbstractParam
         } else if ("Precision".equals(jp.getCurrentName())) {
           parameter.setPrecision(Integer.valueOf(jp.nextTextValue()));
         } else if ("Scale".equals(jp.getCurrentName())) {
-          parameter.setScale(Integer.valueOf(jp.nextTextValue()));
+          final String scale = jp.nextTextValue();
+          parameter.setScale(scale.equalsIgnoreCase("variable") ? 0 : Integer.valueOf(scale));
         } else if ("Mode".equals(jp.getCurrentName())) {
           ((org.apache.olingo.odata4.client.core.edm.xml.v3.ParameterImpl) parameter).
                   setMode(ParameterMode.valueOf(jp.nextTextValue()));

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7f7a68e8/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/PropertyDeserializer.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/PropertyDeserializer.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/PropertyDeserializer.java
index f45b510..9b5ecc6 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/PropertyDeserializer.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/PropertyDeserializer.java
@@ -26,10 +26,10 @@ import java.io.IOException;
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.olingo.odata4.client.core.edm.xml.v4.AnnotationImpl;
 import org.apache.olingo.odata4.client.core.op.impl.AbstractEdmDeserializer;
-import org.apache.olingo.odata4.commons.api.edm.constants.ConcurrencyMode;
+import org.apache.olingo.odata4.client.api.edm.ConcurrencyMode;
 import org.apache.olingo.odata4.commons.api.edm.constants.EdmContentKind;
 import org.apache.olingo.odata4.commons.api.edm.constants.ODataServiceVersion;
-import org.apache.olingo.odata4.commons.api.edm.constants.StoreGeneratedPattern;
+import org.apache.olingo.odata4.client.api.edm.StoreGeneratedPattern;
 
 public class PropertyDeserializer extends AbstractEdmDeserializer<AbstractProperty> {
 
@@ -56,39 +56,64 @@ public class PropertyDeserializer extends AbstractEdmDeserializer<AbstractProper
           final String maxLenght = jp.nextTextValue();
           property.setMaxLength(maxLenght.equalsIgnoreCase("max") ? Integer.MAX_VALUE : Integer.valueOf(maxLenght));
         } else if ("FixedLength".equals(jp.getCurrentName())) {
-          property.setFixedLength(BooleanUtils.toBoolean(jp.nextTextValue()));
+          if (property instanceof org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) {
+            ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
+                    setFixedLength(BooleanUtils.toBoolean(jp.nextTextValue()));
+          }
         } else if ("Precision".equals(jp.getCurrentName())) {
           property.setPrecision(Integer.valueOf(jp.nextTextValue()));
         } else if ("Scale".equals(jp.getCurrentName())) {
-          property.setScale(Integer.valueOf(jp.nextTextValue()));
+          final String scale = jp.nextTextValue();
+          property.setScale(scale.equalsIgnoreCase("variable") ? 0 : Integer.valueOf(scale));
         } else if ("Unicode".equals(jp.getCurrentName())) {
           property.setUnicode(BooleanUtils.toBoolean(jp.nextTextValue()));
         } else if ("Collation".equals(jp.getCurrentName())) {
-          property.setCollation(jp.nextTextValue());
+          if (property instanceof org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) {
+            ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
+                    setCollation(jp.nextTextValue());
+          }
         } else if ("SRID".equals(jp.getCurrentName())) {
           property.setSrid(jp.nextTextValue());
         } else if ("ConcurrencyMode".equals(jp.getCurrentName())) {
-          property.setConcurrencyMode(ConcurrencyMode.valueOf(jp.nextTextValue()));
+          if (property instanceof org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) {
+            ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
+                    setConcurrencyMode(ConcurrencyMode.valueOf(jp.nextTextValue()));
+          }
         } else if ("StoreGeneratedPattern".equals(jp.getCurrentName())) {
-          property.setStoreGeneratedPattern(StoreGeneratedPattern.valueOf(jp.nextTextValue()));
+          if (property instanceof org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) {
+            ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
+                    setStoreGeneratedPattern(StoreGeneratedPattern.valueOf(jp.nextTextValue()));
+          }
         } else if ("FC_SourcePath".equals(jp.getCurrentName())) {
-          ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
-                  setFcSourcePath(jp.nextTextValue());
+          if (property instanceof org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) {
+            ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
+                    setFcSourcePath(jp.nextTextValue());
+          }
         } else if ("FC_TargetPath".equals(jp.getCurrentName())) {
-          ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
-                  setFcTargetPath(jp.nextTextValue());
+          if (property instanceof org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) {
+            ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
+                    setFcTargetPath(jp.nextTextValue());
+          }
         } else if ("FC_ContentKind".equals(jp.getCurrentName())) {
-          ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
-                  setFcContentKind(EdmContentKind.valueOf(jp.nextTextValue()));
+          if (property instanceof org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) {
+            ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
+                    setFcContentKind(EdmContentKind.valueOf(jp.nextTextValue()));
+          }
         } else if ("FC_NsPrefix".equals(jp.getCurrentName())) {
-          ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
-                  setFcNSPrefix(jp.nextTextValue());
+          if (property instanceof org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) {
+            ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
+                    setFcNSPrefix(jp.nextTextValue());
+          }
         } else if ("FC_NsUri".equals(jp.getCurrentName())) {
-          ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
-                  setFcNSURI(jp.nextTextValue());
+          if (property instanceof org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) {
+            ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
+                    setFcNSURI(jp.nextTextValue());
+          }
         } else if ("FC_KeepInContent".equals(jp.getCurrentName())) {
-          ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
-                  setFcKeepInContent(BooleanUtils.toBoolean(jp.nextTextValue()));
+          if (property instanceof org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) {
+            ((org.apache.olingo.odata4.client.core.edm.xml.v3.PropertyImpl) property).
+                    setFcKeepInContent(BooleanUtils.toBoolean(jp.nextTextValue()));
+          }
         } else if ("Annotation".equals(jp.getCurrentName())) {
           ((org.apache.olingo.odata4.client.core.edm.xml.v4.PropertyImpl) property).
                   setAnnotation(jp.readValueAs(AnnotationImpl.class));

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7f7a68e8/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v3/PropertyImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v3/PropertyImpl.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v3/PropertyImpl.java
index 352f8f0..3522019 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v3/PropertyImpl.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v3/PropertyImpl.java
@@ -20,12 +20,22 @@ package org.apache.olingo.odata4.client.core.edm.xml.v3;
 
 import org.apache.olingo.odata4.client.api.edm.xml.v3.Property;
 import org.apache.olingo.odata4.client.core.edm.xml.AbstractProperty;
+import org.apache.olingo.odata4.client.api.edm.ConcurrencyMode;
 import org.apache.olingo.odata4.commons.api.edm.constants.EdmContentKind;
+import org.apache.olingo.odata4.client.api.edm.StoreGeneratedPattern;
 
 public class PropertyImpl extends AbstractProperty implements Property {
 
   private static final long serialVersionUID = 6224524803474652100L;
 
+  private String collation;
+
+  private boolean fixedLength;
+
+  private ConcurrencyMode concurrencyMode;
+
+  private StoreGeneratedPattern storeGeneratedPattern = StoreGeneratedPattern.None;
+
   private String fcSourcePath;
 
   private String fcTargetPath;
@@ -39,6 +49,42 @@ public class PropertyImpl extends AbstractProperty implements Property {
   private boolean fcKeepInContent = true;
 
   @Override
+  public boolean isFixedLength() {
+    return fixedLength;
+  }
+
+  public void setFixedLength(final boolean fixedLength) {
+    this.fixedLength = fixedLength;
+  }
+
+  @Override
+  public String getCollation() {
+    return collation;
+  }
+
+  public void setCollation(final String collation) {
+    this.collation = collation;
+  }
+
+  @Override
+  public ConcurrencyMode getConcurrencyMode() {
+    return concurrencyMode;
+  }
+
+  public void setConcurrencyMode(final ConcurrencyMode concurrencyMode) {
+    this.concurrencyMode = concurrencyMode;
+  }
+
+  @Override
+  public StoreGeneratedPattern getStoreGeneratedPattern() {
+    return storeGeneratedPattern;
+  }
+
+  public void setStoreGeneratedPattern(final StoreGeneratedPattern storeGeneratedPattern) {
+    this.storeGeneratedPattern = storeGeneratedPattern;
+  }
+
+  @Override
   public String getFcSourcePath() {
     return fcSourcePath;
   }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7f7a68e8/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/ReturnTypeDeserializer.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/ReturnTypeDeserializer.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/ReturnTypeDeserializer.java
index d3e426f..7b66602 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/ReturnTypeDeserializer.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/ReturnTypeDeserializer.java
@@ -47,7 +47,8 @@ public class ReturnTypeDeserializer extends AbstractEdmDeserializer<ReturnTypeIm
         } else if ("Precision".equals(jp.getCurrentName())) {
           returnType.setPrecision(Integer.valueOf(jp.nextTextValue()));
         } else if ("Scale".equals(jp.getCurrentName())) {
-          returnType.setScale(Integer.valueOf(jp.nextTextValue()));
+          final String scale = jp.nextTextValue();
+          returnType.setScale(scale.equalsIgnoreCase("variable") ? 0 : Integer.valueOf(scale));
         } else if ("SRID".equals(jp.getCurrentName())) {
           returnType.setSrid(jp.nextTextValue());
         }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7f7a68e8/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/TermDeserializer.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/TermDeserializer.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/TermDeserializer.java
index c8fed65..3c9848e 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/TermDeserializer.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/TermDeserializer.java
@@ -55,7 +55,8 @@ public class TermDeserializer extends AbstractEdmDeserializer<TermImpl> {
         } else if ("Precision".equals(jp.getCurrentName())) {
           term.setPrecision(Integer.valueOf(jp.nextTextValue()));
         } else if ("Scale".equals(jp.getCurrentName())) {
-          term.setScale(Integer.valueOf(jp.nextTextValue()));
+          final String scale = jp.nextTextValue();
+          term.setScale(scale.equalsIgnoreCase("variable") ? 0 : Integer.valueOf(scale));
         } else if ("SRID".equals(jp.getCurrentName())) {
           term.setSrid(jp.nextTextValue());
         } else if ("AppliesTo".equals(jp.getCurrentName())) {

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7f7a68e8/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/TypeDefinitionDeserializer.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/TypeDefinitionDeserializer.java b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/TypeDefinitionDeserializer.java
index 07d2589..3ca692f 100644
--- a/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/TypeDefinitionDeserializer.java
+++ b/odata4-lib/odata4-client-core/src/main/java/org/apache/olingo/odata4/client/core/edm/xml/v4/TypeDefinitionDeserializer.java
@@ -48,7 +48,8 @@ public class TypeDefinitionDeserializer extends AbstractEdmDeserializer<TypeDefi
         } else if ("Precision".equals(jp.getCurrentName())) {
           typeDefinition.setPrecision(jp.nextIntValue(0));
         } else if ("Scale".equals(jp.getCurrentName())) {
-          typeDefinition.setScale(jp.nextIntValue(0));
+          final String scale = jp.nextTextValue();
+          typeDefinition.setScale(scale.equalsIgnoreCase("variable") ? 0 : Integer.valueOf(scale));
         } else if ("SRID".equals(jp.getCurrentName())) {
           typeDefinition.setSrid(jp.nextTextValue());
         } else if ("Annotation".equals(jp.getCurrentName())) {

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7f7a68e8/odata4-lib/odata4-client-core/src/test/java/org/apache/olingo/odata4/client/core/v4/MetadataTest.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-client-core/src/test/java/org/apache/olingo/odata4/client/core/v4/MetadataTest.java b/odata4-lib/odata4-client-core/src/test/java/org/apache/olingo/odata4/client/core/v4/MetadataTest.java
index 2f9f4e7..135f4d0 100644
--- a/odata4-lib/odata4-client-core/src/test/java/org/apache/olingo/odata4/client/core/v4/MetadataTest.java
+++ b/odata4-lib/odata4-client-core/src/test/java/org/apache/olingo/odata4/client/core/v4/MetadataTest.java
@@ -52,7 +52,6 @@ import org.apache.olingo.odata4.commons.api.edm.EdmFunctionImport;
 import org.apache.olingo.odata4.commons.api.edm.EdmFunctionImportInfo;
 import org.apache.olingo.odata4.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.odata4.commons.api.edm.constants.EdmTypeKind;
-import org.apache.olingo.odata4.commons.api.edm.constants.StoreGeneratedPattern;
 import org.apache.olingo.odata4.commons.core.edm.primitivetype.EdmPrimitiveTypeKind;
 import org.junit.Test;
 
@@ -149,9 +148,6 @@ public class MetadataTest extends AbstractTest {
     final Schema second = metadata.getSchema("ODataWebExperimental.Northwind.Model");
     assertNotNull(second);
 
-    assertEquals(StoreGeneratedPattern.Identity,
-            first.getEntityType("Category").getProperty("CategoryID").getStoreGeneratedPattern());
-
     final EntityContainer entityContainer = second.getEntityContainer();
     assertNotNull(entityContainer);
     assertEquals("NorthwindEntities", entityContainer.getName());

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7f7a68e8/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/constants/ConcurrencyMode.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/constants/ConcurrencyMode.java b/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/constants/ConcurrencyMode.java
deleted file mode 100644
index 335ae8d..0000000
--- a/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/constants/ConcurrencyMode.java
+++ /dev/null
@@ -1,26 +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.odata4.commons.api.edm.constants;
-
-public enum ConcurrencyMode {
-
-  None,
-  Fixed
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7f7a68e8/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/constants/StoreGeneratedPattern.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/constants/StoreGeneratedPattern.java b/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/constants/StoreGeneratedPattern.java
deleted file mode 100644
index 3dad36b..0000000
--- a/odata4-lib/odata4-commons-api/src/main/java/org/apache/olingo/odata4/commons/api/edm/constants/StoreGeneratedPattern.java
+++ /dev/null
@@ -1,27 +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.odata4.commons.api.edm.constants;
-
-public enum StoreGeneratedPattern {
-
-  None,
-  Identity,
-  Computed
-
-}