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

[13/17] [OLINGO-168] More TechProvider Refactoring

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6a3a4a1d/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/EntityTypeProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/EntityTypeProvider.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/EntityTypeProvider.java
index fd93d5d..291d893 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/EntityTypeProvider.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/EntityTypeProvider.java
@@ -31,25 +31,35 @@ import org.apache.olingo.server.api.edm.provider.ReferentialConstraint;
 public class EntityTypeProvider {
 
   public static final FullQualifiedName nameETAllKey = new FullQualifiedName(SchemaProvider.nameSpace, "ETAllKey");
-  public static final FullQualifiedName nameETAllNullable = new FullQualifiedName(SchemaProvider.nameSpace, "ETAllNullable");
+  public static final FullQualifiedName nameETAllNullable = new FullQualifiedName(SchemaProvider.nameSpace,
+      "ETAllNullable");
   public static final FullQualifiedName nameETAllPrim = new FullQualifiedName(SchemaProvider.nameSpace, "ETAllPrim");
   public static final FullQualifiedName nameETBase = new FullQualifiedName(SchemaProvider.nameSpace, "ETBase");
-  public static final FullQualifiedName nameETBaseTwoKeyNav = new FullQualifiedName(SchemaProvider.nameSpace, "ETBaseTwoKeyNav");
+  public static final FullQualifiedName nameETBaseTwoKeyNav = new FullQualifiedName(SchemaProvider.nameSpace,
+      "ETBaseTwoKeyNav");
   public static final FullQualifiedName nameETBaseTwoKeyTwoPrim =
       new FullQualifiedName(SchemaProvider.nameSpace, "ETBaseTwoKeyTwoPrim");
-  public static final FullQualifiedName nameETCollAllPrim = new FullQualifiedName(SchemaProvider.nameSpace, "ETCollAllPrim");
-  public static final FullQualifiedName nameETCompAllPrim = new FullQualifiedName(SchemaProvider.nameSpace, "ETCompAllPrim");
-  public static final FullQualifiedName nameETCompCollAllPrim = new FullQualifiedName(SchemaProvider.nameSpace, "ETCompCollAllPrim");
-  public static final FullQualifiedName nameETCompCollComp = new FullQualifiedName(SchemaProvider.nameSpace, "ETCompCollComp");
+  public static final FullQualifiedName nameETCollAllPrim = new FullQualifiedName(SchemaProvider.nameSpace,
+      "ETCollAllPrim");
+  public static final FullQualifiedName nameETCompAllPrim = new FullQualifiedName(SchemaProvider.nameSpace,
+      "ETCompAllPrim");
+  public static final FullQualifiedName nameETCompCollAllPrim = new FullQualifiedName(SchemaProvider.nameSpace,
+      "ETCompCollAllPrim");
+  public static final FullQualifiedName nameETCompCollComp = new FullQualifiedName(SchemaProvider.nameSpace,
+      "ETCompCollComp");
   public static final FullQualifiedName nameETCompComp = new FullQualifiedName(SchemaProvider.nameSpace, "ETCompComp");
   public static final FullQualifiedName nameETCompMixPrimCollComp =
       new FullQualifiedName(SchemaProvider.nameSpace, "ETCompMixPrimCollComp");
-  public static final FullQualifiedName nameETFourKeyAlias = new FullQualifiedName(SchemaProvider.nameSpace, "ETFourKeyAlias");
+  public static final FullQualifiedName nameETFourKeyAlias = new FullQualifiedName(SchemaProvider.nameSpace,
+      "ETFourKeyAlias");
   public static final FullQualifiedName nameETKeyNav = new FullQualifiedName(SchemaProvider.nameSpace, "ETKeyNav");
-  public static final FullQualifiedName nameETKeyPrimNav = new FullQualifiedName(SchemaProvider.nameSpace, "ETKeyPrimNav");
-  public static final FullQualifiedName nameETKeyTwoKeyComp = new FullQualifiedName(SchemaProvider.nameSpace, "ETKeyTwoKeyComp");
+  public static final FullQualifiedName nameETKeyPrimNav = new FullQualifiedName(SchemaProvider.nameSpace,
+      "ETKeyPrimNav");
+  public static final FullQualifiedName nameETKeyTwoKeyComp = new FullQualifiedName(SchemaProvider.nameSpace,
+      "ETKeyTwoKeyComp");
   public static final FullQualifiedName nameETMedia = new FullQualifiedName(SchemaProvider.nameSpace, "ETMedia");
-  public static final FullQualifiedName nameETMixPrimCollComp = new FullQualifiedName(SchemaProvider.nameSpace, "ETMixPrimCollComp");
+  public static final FullQualifiedName nameETMixPrimCollComp = new FullQualifiedName(SchemaProvider.nameSpace,
+      "ETMixPrimCollComp");
   public static final FullQualifiedName nameETServerSidePaging =
       new FullQualifiedName(SchemaProvider.nameSpace, "ETServerSidePaging");
   public static final FullQualifiedName nameETTwoBase = new FullQualifiedName(SchemaProvider.nameSpace, "ETTwoBase");
@@ -57,8 +67,10 @@ public class EntityTypeProvider {
       new FullQualifiedName(SchemaProvider.nameSpace, "ETTwoBaseTwoKeyNav");
   public static final FullQualifiedName nameETTwoBaseTwoKeyTwoPrim =
       new FullQualifiedName(SchemaProvider.nameSpace, "ETTwoBaseTwoKeyTwoPrim");
-  public static final FullQualifiedName nameETTwoKeyNav = new FullQualifiedName(SchemaProvider.nameSpace, "ETTwoKeyNav");
-  public static final FullQualifiedName nameETTwoKeyTwoPrim = new FullQualifiedName(SchemaProvider.nameSpace, "ETTwoKeyTwoPrim");
+  public static final FullQualifiedName nameETTwoKeyNav =
+      new FullQualifiedName(SchemaProvider.nameSpace, "ETTwoKeyNav");
+  public static final FullQualifiedName nameETTwoKeyTwoPrim = new FullQualifiedName(SchemaProvider.nameSpace,
+      "ETTwoKeyTwoPrim");
   public static final FullQualifiedName nameETTwoPrim = new FullQualifiedName(SchemaProvider.nameSpace, "ETTwoPrim");
 
   public EntityType getEntityType(final FullQualifiedName entityTypeName) throws ODataException {
@@ -74,7 +86,9 @@ public class EntityTypeProvider {
               PropertyProvider.propertySingle, PropertyProvider.propertyDouble, PropertyProvider.propertyDecimal,
               PropertyProvider.propertyBinary, PropertyProvider.propertyDate, PropertyProvider.propertyDateTimeOffset,
               PropertyProvider.propertyDuration, PropertyProvider.propertyGuid, PropertyProvider.propertyTimeOfDay
-              /* TODO add propertyStream */));
+              /* TODO add propertyStream */))
+          .setNavigationProperties(Arrays.asList(PropertyProvider.navPropertyETTwoPrimOne_ETTwoPrim,
+              PropertyProvider.collectionNavPropertyETTwoPrimMany_ETTwoPrim));
 
     } else if (entityTypeName.equals(nameETCollAllPrim)) {
       return new EntityType()
@@ -98,7 +112,10 @@ public class EntityTypeProvider {
           .setName("ETTwoPrim")
           .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
           .setProperties(Arrays.asList(
-              PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyString));
+              PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyString))
+          .setNavigationProperties(
+              Arrays.asList(PropertyProvider.navPropertyETAllPrimOne_ETAllPrim,
+                  PropertyProvider.collectionNavPropertyETAllPrimMany_ETAllPrim));
 
     } else if (entityTypeName.equals(nameETMixPrimCollComp)) {
       return new EntityType()
@@ -163,14 +180,14 @@ public class EntityTypeProvider {
               new PropertyRef().setPropertyName("PropertyTimeOfDay")))
           .setProperties(
               Arrays.asList(
-                  PropertyProvider.propertyString, PropertyProvider.propertyBoolean,
-                  PropertyProvider.propertyByte, PropertyProvider.propertySByte,
-                  PropertyProvider.propertyInt16, PropertyProvider.propertyInt32, PropertyProvider.propertyInt64,
-                  PropertyProvider.propertyDecimal, PropertyProvider.propertyDate,
-                  PropertyProvider.propertySingle, PropertyProvider.propertyDouble,
-                  PropertyProvider.propertyDateTimeOffset,
-                  PropertyProvider.propertyDuration, PropertyProvider.propertyGuid,
-                  PropertyProvider.propertyTimeOfDay /* TODO add propertyStream */));
+                  PropertyProvider.propertyString_NotNullable, PropertyProvider.propertyBoolean_NotNullable,
+                  PropertyProvider.propertyByte_NotNullable, PropertyProvider.propertySByte_NotNullable,
+                  PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyInt32_NotNullable,
+                  PropertyProvider.propertyInt64_NotNullable,
+                  PropertyProvider.propertyDecimal_NotNullable, PropertyProvider.propertyDate_NotNullable,
+                  PropertyProvider.propertyDateTimeOffset_NotNullable,
+                  PropertyProvider.propertyDuration_NotNullable, PropertyProvider.propertyGuid_NotNullable,
+                  PropertyProvider.propertyTimeOfDay_NotNullable /* TODO add propertyStream */));
 
     } else if (entityTypeName.equals(nameETCompAllPrim)) {
       return new EntityType()
@@ -181,11 +198,11 @@ public class EntityTypeProvider {
 
     } else if (entityTypeName.equals(nameETCompCollAllPrim)) {
       return new EntityType()
-          .setName("ETCompAllPrim")
+          .setName("ETCompCollAllPrim")
           .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
 
           .setProperties(
-              Arrays.asList(PropertyProvider.propertyInt16_NotNullable, 
+              Arrays.asList(PropertyProvider.propertyInt16_NotNullable,
                   PropertyProvider.propertyComplex_CTCollAllPrim));
 
     } else if (entityTypeName.equals(nameETCompComp)) {
@@ -205,7 +222,7 @@ public class EntityTypeProvider {
 
     } else if (entityTypeName.equals(nameETMedia)) {
       return new EntityType()
-          .setName("ETCompCollComp")
+          .setName("ETMedia")
           .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
           .setProperties(Arrays.asList(PropertyProvider.propertyInt16_NotNullable))
           .setHasStream(true);
@@ -232,9 +249,10 @@ public class EntityTypeProvider {
 
     } else if (entityTypeName.equals(nameETServerSidePaging)) {
       return new EntityType()
-          .setName("ETKeyTwoKeyComp")
+          .setName(nameETServerSidePaging.getName())
           .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
-          .setProperties(Arrays.asList(PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyString));
+          .setProperties(Arrays.asList(PropertyProvider.propertyInt16_NotNullable,
+              PropertyProvider.propertyString_NotNullable));
 
     } else if (entityTypeName.equals(nameETAllNullable)) {
       return new EntityType()
@@ -243,26 +261,32 @@ public class EntityTypeProvider {
           .setProperties(
               Arrays.asList(
                   new Property()
-                      .setName("PropertyKey").setType(PropertyProvider.nameInt16),
-                  PropertyProvider.propertyInt16,
-                  PropertyProvider.propertyString, PropertyProvider.propertyBoolean,
-                  PropertyProvider.propertyByte, PropertyProvider.propertySByte,
-                  PropertyProvider.propertyInt32, PropertyProvider.propertyInt64,
-                  PropertyProvider.propertySingle, PropertyProvider.propertyDouble,
-                  PropertyProvider.propertyDecimal, PropertyProvider.propertyBinary, PropertyProvider.propertyDate,
-                  PropertyProvider.propertyDateTimeOffset,
-                  PropertyProvider.propertyDuration, PropertyProvider.propertyGuid,
-                  PropertyProvider.propertyTimeOfDay /* TODO add propertyStream */,
-                  PropertyProvider.collPropertyString, PropertyProvider.collPropertyBoolean,
-                  PropertyProvider.collPropertyByte, PropertyProvider.collPropertySByte,
-                  PropertyProvider.collPropertyInt16,
-                  PropertyProvider.collPropertyInt32, PropertyProvider.collPropertyInt64,
-                  PropertyProvider.collPropertySingle, PropertyProvider.collPropertyDouble,
-                  PropertyProvider.collPropertyDecimal, PropertyProvider.collPropertyBinary,
-                  PropertyProvider.collPropertyDate,
-                  PropertyProvider.collPropertyDateTimeOffset,
-                  PropertyProvider.collPropertyDuration, PropertyProvider.collPropertyGuid,
-                  PropertyProvider.collPropertyTimeOfDay /* TODO add propertyStream */));
+                      .setName("PropertyKey").setType(PropertyProvider.nameInt16).setNullable(false),
+                  PropertyProvider.propertyInt16_ExplicitNullable, PropertyProvider.propertyString_ExplicitNullable,
+                  PropertyProvider.propertyBoolean_ExplicitNullable, PropertyProvider.propertyByte_ExplicitNullable,
+                  PropertyProvider.propertySByte_ExplicitNullable, PropertyProvider.propertyInt32_ExplicitNullable,
+                  PropertyProvider.propertyInt64_ExplicitNullable, PropertyProvider.propertySingle_ExplicitNullable,
+                  PropertyProvider.propertyDouble_ExplicitNullable, PropertyProvider.propertyDecimal_ExplicitNullable,
+                  PropertyProvider.propertyBinary_ExplicitNullable, PropertyProvider.propertyDate_ExplicitNullable,
+                  PropertyProvider.propertyDateTimeOffset_ExplicitNullable,
+                  PropertyProvider.propertyDuration_ExplicitNullable, PropertyProvider.propertyGuid_ExplicitNullable,
+                  PropertyProvider.propertyTimeOfDay_ExplicitNullable /* TODO add propertyStream */,
+                  PropertyProvider.collPropertyString_ExplicitNullable,
+                  PropertyProvider.collPropertyBoolean_ExplicitNullable,
+                  PropertyProvider.collPropertyByte_ExplicitNullable,
+                  PropertyProvider.collPropertySByte_ExplicitNullable,
+                  PropertyProvider.collPropertyInt16_ExplicitNullable,
+                  PropertyProvider.collPropertyInt32_ExplicitNullable,
+                  PropertyProvider.collPropertyInt64_ExplicitNullable,
+                  PropertyProvider.collPropertySingle_ExplicitNullable,
+                  PropertyProvider.collPropertyDouble_ExplicitNullable,
+                  PropertyProvider.collPropertyDecimal_ExplicitNullable,
+                  PropertyProvider.collPropertyBinary_ExplicitNullable,
+                  PropertyProvider.collPropertyDate_ExplicitNullable,
+                  PropertyProvider.collPropertyDateTimeOffset_ExplicitNullable,
+                  PropertyProvider.collPropertyDuration_ExplicitNullable,
+                  PropertyProvider.collPropertyGuid_ExplicitNullable,
+                  PropertyProvider.collPropertyTimeOfDay_ExplicitNullable /* TODO add propertyStream */));
 
     } else if (entityTypeName.equals(nameETKeyNav)) {
       return new EntityType()
@@ -280,7 +304,7 @@ public class EntityTypeProvider {
                   ))
           .setNavigationProperties(
               Arrays.asList(
-                  PropertyProvider.navPropertyETTwoKeyNavOne_ETTwoKeyNav,
+                  PropertyProvider.navPropertyETTwoKeyNavOne_ETTwoKeyNav_NotNullable,
                   PropertyProvider.collectionNavPropertyETTwoKeyNavMany_ETTwoKeyNav,
                   PropertyProvider.navPropertyETKeyNavOne_ETKeyNav,
                   PropertyProvider.collectionNavPropertyETKeyNavMany_ETKeyNav,
@@ -289,19 +313,13 @@ public class EntityTypeProvider {
                   ));
     } else if (entityTypeName.equals(nameETKeyPrimNav)) {
       return new EntityType()
-          .setName("ETKeyNav")
+          .setName("ETKeyPrimNav")
           .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
           .setProperties(Arrays.asList(
-              PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyString_NotNullable))
+              PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyString_ExplicitNullable))
           .setNavigationProperties(
               Arrays.asList(
-                  PropertyProvider.navPropertyETTwoKeyNavOne_ETTwoKeyNav,
-                  PropertyProvider.collectionNavPropertyETTwoKeyNavMany_ETTwoKeyNav,
-                  PropertyProvider.navPropertyETKeyNavOne_ETKeyNav,
-                  PropertyProvider.collectionNavPropertyETKeyNavMany_ETKeyNav,
-                  PropertyProvider.navPropertyETMediaOne_ETMedia,
-                  PropertyProvider.collectionNavPropertyETMediaMany_ETMedia
-                  ));
+                  PropertyProvider.navPropertyETKeyPrimNavOne_ETKeyPrimNav));
 
     } else if (entityTypeName.equals(nameETTwoKeyNav)) {
       return new EntityType()
@@ -311,9 +329,10 @@ public class EntityTypeProvider {
               new PropertyRef().setPropertyName("PropertyString")))
           .setProperties(
               Arrays.asList(
-                  PropertyProvider.propertyInt16, PropertyProvider.propertyString,
+                  PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyString_NotNullable,
                   PropertyProvider.propertyComplex_CTPrimComp_NotNullable,
-                  new Property().setName("PropertyComplexNav").setType(ComplexTypeProvider.nameCTBasePrimCompNav),
+                  new Property().setName("PropertyComplexNav").setType(ComplexTypeProvider.nameCTBasePrimCompNav)
+                      .setNullable(false),
                   PropertyProvider.propertyComplexEnum_CTPrimEnum_NotNullable,
                   PropertyProvider.collPropertyComplex_CTPrimComp,
                   new Property().setName("CollPropertyComplexNav").setType(ComplexTypeProvider.nameCTNavFiveProp)
@@ -337,27 +356,23 @@ public class EntityTypeProvider {
       return new EntityType()
           .setName("ETBaseTwoKeyNav")
           .setBaseType(nameETTwoKeyNav)
-          .setProperties(Arrays.asList(PropertyProvider.propertyDate))
+          .setProperties(Arrays.asList(PropertyProvider.propertyDate_ExplicitNullable))
           .setNavigationProperties(Arrays.asList(
               new NavigationProperty()
-                  .setName("NavPropertyETBaseTwoKeyNav")
+                  .setName("NavPropertyETBaseTwoKeyNavOne")
                   .setType(nameETBaseTwoKeyNav),
               new NavigationProperty()
-                  .setName("NavPropertyETTwoBaseTwoKeyNav")
-                  .setType(nameETTwoBaseTwoKeyNav)))
-          .setHasStream(true);
+                  .setName("NavPropertyETTwoBaseTwoKeyNavOne")
+                  .setType(nameETTwoBaseTwoKeyNav)));
 
     } else if (entityTypeName.equals(nameETTwoBaseTwoKeyNav)) {
       return new EntityType()
           .setName("ETTwoBaseTwoKeyNav")
           .setBaseType(nameETBaseTwoKeyNav)
           .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
-          .setProperties(Arrays.asList(PropertyProvider.propertyGuid))
+          .setProperties(Arrays.asList(PropertyProvider.propertyGuid_ExplicitNullable))
           .setNavigationProperties(Arrays.asList(
               new NavigationProperty()
-                  .setName("NavPropertyETBaseTwoKeyNavOne")
-                  .setType(nameETBaseTwoKeyNav),
-              new NavigationProperty()
                   .setName("NavPropertyETBaseTwoKeyNavMany")
                   .setType(nameETBaseTwoKeyNav)
                   .setCollection(true)
@@ -377,7 +392,7 @@ public class EntityTypeProvider {
                   .setPropertyName("PropertyComplexComplex/PropertyComplex/PropertyString")
                   .setAlias("KeyAlias3")))
           .setProperties(
-              Arrays.asList(PropertyProvider.propertyGuid, PropertyProvider.propertyComplex_CTTwoPrim,
+              Arrays.asList(PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyComplex_CTTwoPrim,
                   PropertyProvider.propertyComplexComplex_CTCompComp));
     } else if (entityTypeName.equals(nameETCompMixPrimCollComp)) {
       return new EntityType()

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6a3a4a1d/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/EnumTypeProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/EnumTypeProvider.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/EnumTypeProvider.java
index 0640a99..e843955 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/EnumTypeProvider.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/EnumTypeProvider.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 
 import org.apache.olingo.commons.api.ODataException;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeKind;
 import org.apache.olingo.server.api.edm.provider.EnumMember;
 import org.apache.olingo.server.api.edm.provider.EnumType;
 
@@ -33,6 +34,8 @@ public class EnumTypeProvider {
     if (enumTypeName.equals(nameENString)) {
       return new EnumType()
           .setName("ENString")
+          .setFlags(true)
+          .setUnderlyingType(EdmPrimitiveTypeKind.Int16.getFullQualifiedName())
           .setMembers(Arrays.asList(
               new EnumMember().setName("String1").setValue("1"),
               new EnumMember().setName("String2").setValue("2"),

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6a3a4a1d/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/FunctionProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/FunctionProvider.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/FunctionProvider.java
index f9e15ec..fe6fefb 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/FunctionProvider.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/FunctionProvider.java
@@ -112,21 +112,19 @@ public class FunctionProvider {
   public static final FullQualifiedName nameBFESTwoKeyNavRTESTwoKeyNav =
       new FullQualifiedName(SchemaProvider.nameSpace, "BFESTwoKeyNavRTESTwoKeyNav");
 
-  // TODO: warum BAET?
-  public static final FullQualifiedName nameBAETTwoKeyNavRTETTwoKeyNav =
-      new FullQualifiedName(SchemaProvider.nameSpace, "BAETTwoKeyNavRTETTwoKeyNav");
-
   // Unbound Functions
   public static final FullQualifiedName nameUFCRTCollCTTwoPrim =
       new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTCollCTTwoPrim");
   public static final FullQualifiedName nameUFCRTCollCTTwoPrimParam =
       new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTCollCTTwoPrimParam");
-  public static final FullQualifiedName nameUFCRTCollString = new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTCollString");
+  public static final FullQualifiedName nameUFCRTCollString = new FullQualifiedName(SchemaProvider.nameSpace,
+      "UFCRTCollString");
   public static final FullQualifiedName nameUFCRTCollStringTwoParam =
       new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTCollStringTwoParam");
   public static final FullQualifiedName nameUFCRTCTAllPrimTwoParam =
       new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTCTAllPrimTwoParam");
-  public static final FullQualifiedName nameUFCRTCTTwoPrim = new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTCTTwoPrim");
+  public static final FullQualifiedName nameUFCRTCTTwoPrim = new FullQualifiedName(SchemaProvider.nameSpace,
+      "UFCRTCTTwoPrim");
   public static final FullQualifiedName nameUFCRTCTTwoPrimParam =
       new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTCTTwoPrimParam");
   public static final FullQualifiedName nameUFCRTESMixPrimCollCompTwoParam =
@@ -135,8 +133,10 @@ public class FunctionProvider {
       new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTESTwoKeyNavParam");
   public static final FullQualifiedName nameUFCRTETAllPrimTwoParam =
       new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTETAllPrimTwoParam");
-  public static final FullQualifiedName nameUFCRTETKeyNav = new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTETKeyNav");
-  public static final FullQualifiedName nameUFCRTETMedia = new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTETMedia");
+  public static final FullQualifiedName nameUFCRTETKeyNav = new FullQualifiedName(SchemaProvider.nameSpace,
+      "UFCRTETKeyNav");
+  public static final FullQualifiedName nameUFCRTETMedia = new FullQualifiedName(SchemaProvider.nameSpace,
+      "UFCRTETMedia");
 
   public static final FullQualifiedName nameUFCRTETTwoKeyNavParam =
       new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTETTwoKeyNavParam");
@@ -144,7 +144,8 @@ public class FunctionProvider {
   public static final FullQualifiedName nameUFCRTETTwoKeyNavParamCTTwoPrim =
       new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTETTwoKeyNavParamCTTwoPrim");
 
-  public static final FullQualifiedName nameUFCRTString = new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTString");
+  public static final FullQualifiedName nameUFCRTString =
+      new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTString");
 
   public static final FullQualifiedName nameUFCRTStringTwoParam =
       new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTStringTwoParam");
@@ -154,6 +155,15 @@ public class FunctionProvider {
   public static final FullQualifiedName nameUFNRTInt16 =
       new FullQualifiedName(SchemaProvider.nameSpace, "UFNRTInt16");
 
+  public static final FullQualifiedName nameUFNRTCollCTNavFiveProp = new FullQualifiedName(SchemaProvider.nameSpace,
+      "UFNRTCollCTNavFiveProp");
+
+  public static final FullQualifiedName nameBFCESTwoKeyNavRTCTNavFiveProp = new FullQualifiedName(
+      SchemaProvider.nameSpace, "BFCESTwoKeyNavRTCTNavFiveProp");
+
+  public static final FullQualifiedName nameBFCESTwoKeyNavRTCollCTNavFiveProp = new FullQualifiedName(
+      SchemaProvider.nameSpace, "BFCESTwoKeyNavRTCollCTNavFiveProp");
+
   public List<Function> getFunctions(final FullQualifiedName functionName) throws ODataException {
 
     if (functionName.equals(nameUFNRTInt16)) {
@@ -162,7 +172,7 @@ public class FunctionProvider {
               .setName("UFNRTInt16")
               .setParameters(new ArrayList<Parameter>())
               .setReturnType(
-                  new ReturnType().setType(PropertyProvider.nameString))
+                  new ReturnType().setType(PropertyProvider.nameInt16))
           );
 
     } else if (functionName.equals(nameUFCRTETKeyNav)) {
@@ -172,7 +182,7 @@ public class FunctionProvider {
               .setParameters(new ArrayList<Parameter>())
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETKeyNav))
+                  new ReturnType().setType(EntityTypeProvider.nameETKeyNav).setNullable(false))
           );
 
     } else if (functionName.equals(nameUFCRTETTwoKeyNavParam)) {
@@ -180,10 +190,10 @@ public class FunctionProvider {
           new Function()
               .setName("UFCRTETTwoKeyNavParam")
               .setParameters(Arrays.asList(
-                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)))
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav)
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)
               )
           );
 
@@ -192,10 +202,11 @@ public class FunctionProvider {
           new Function()
               .setName("UFCRTETTwoKeyNavParamCTTwoPrim")
               .setParameters(Arrays.asList(
-                  new Parameter().setName("ParameterCTTwoPrim").setType(ComplexTypeProvider.nameCTTwoPrim)))
+                  new Parameter().setName("ParameterCTTwoPrim").setType(ComplexTypeProvider.nameCTTwoPrim)
+                      .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav)
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)
               )
           );
 
@@ -206,22 +217,24 @@ public class FunctionProvider {
               .setParameters(Arrays.asList(
                   new Parameter()
                       .setName("ParameterInt16")
-                      .setType(PropertyProvider.nameInt16)))
+                      .setType(PropertyProvider.nameInt16)
+                      .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(PropertyProvider.nameString)),
+                  new ReturnType().setType(PropertyProvider.nameString).setNullable(false)),
           new Function()
               .setName("UFCRTStringTwoParam")
               .setParameters(Arrays.asList(
                   new Parameter()
                       .setName("ParameterString")
-                      .setType(PropertyProvider.nameString),
+                      .setType(PropertyProvider.nameString)
+                      .setNullable(false),
                   new Parameter()
                       .setName("ParameterInt16")
-                      .setType(PropertyProvider.nameInt16)))
+                      .setType(PropertyProvider.nameInt16)
+                      .setNullable(false)))
               .setComposable(true)
-              .setReturnType(
-                  new ReturnType().setType(PropertyProvider.nameString))
+              .setReturnType(new ReturnType().setType(PropertyProvider.nameString).setNullable(false))
 
           );
 
@@ -232,10 +245,11 @@ public class FunctionProvider {
               .setParameters(Arrays.asList(
                   new Parameter()
                       .setName("ParameterInt16")
-                      .setType(PropertyProvider.nameInt16)))
+                      .setType(PropertyProvider.nameInt16)
+                      .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
           );
 
     } else if (functionName.equals(nameUFCRTString)) {
@@ -247,7 +261,7 @@ public class FunctionProvider {
               .setParameters(new ArrayList<Parameter>())
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(PropertyProvider.nameString)
+                  new ReturnType().setType(PropertyProvider.nameString).setNullable(false)
               )
           );
 
@@ -256,11 +270,11 @@ public class FunctionProvider {
           new Function()
               .setName("UFCRTCollStringTwoParam")
               .setParameters(Arrays.asList(
-                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString),
-                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)))
+                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(false),
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(PropertyProvider.nameString).setCollection(true))
+                  new ReturnType().setType(PropertyProvider.nameString).setCollection(true).setNullable(false))
           );
 
     } else if (functionName.equals(nameUFCRTCollString)) {
@@ -270,7 +284,7 @@ public class FunctionProvider {
               .setParameters(new ArrayList<Parameter>())
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(PropertyProvider.nameString).setCollection(true))
+                  new ReturnType().setType(PropertyProvider.nameString).setCollection(true).setNullable(false))
           );
 
     } else if (functionName.equals(nameUFCRTCTAllPrimTwoParam)) {
@@ -278,11 +292,11 @@ public class FunctionProvider {
           new Function()
               .setName("UFCRTCTAllPrimTwoParam")
               .setParameters(Arrays.asList(
-                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString),
-                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)))
+                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(false),
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(ComplexTypeProvider.nameCTAllPrim))
+                  new ReturnType().setType(ComplexTypeProvider.nameCTAllPrim).setNullable(false))
           );
 
     } else if (functionName.equals(nameUFCRTCTTwoPrimParam)) {
@@ -290,22 +304,22 @@ public class FunctionProvider {
           new Function()
               .setName("UFCRTCTTwoPrimParam")
               .setParameters(Arrays.asList(
-                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString),
-                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)))
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(false),
+                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(true)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim))
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setNullable(false))
           );
     } else if (functionName.equals(nameUFCRTCollCTTwoPrimParam)) {
       return Arrays.asList(
           new Function()
               .setName("UFCRTCollCTTwoPrimParam")
               .setParameters(Arrays.asList(
-                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString),
-                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)))
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(false),
+                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(true)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setCollection(true))
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setCollection(true).setNullable(false))
           );
 
     } else if (functionName.equals(nameUFCRTCTTwoPrim)) {
@@ -315,17 +329,17 @@ public class FunctionProvider {
               .setParameters(new ArrayList<Parameter>())
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim))
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setNullable(false))
           );
 
     } else if (functionName.equals(nameUFCRTCollCTTwoPrim)) {
       return Arrays.asList(
           new Function()
-              .setName("UFCRTCTTwoPrim")
-
+              .setName("UFCRTCollCTTwoPrim")
+              .setComposable(true)
               .setParameters(new ArrayList<Parameter>())
               .setReturnType(
-                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setCollection(true))
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setCollection(true).setNullable(false))
           );
 
     } else if (functionName.equals(nameUFCRTETMedia)) {
@@ -333,28 +347,9 @@ public class FunctionProvider {
           new Function()
               .setName("UFCRTETMedia")
               .setParameters(new ArrayList<Parameter>())
-              .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETMedia))
-          );
-
-    } else if (functionName.equals(nameUFCRTString)) {
-      return Arrays.asList(
-          new Function()
-              .setName("UFCRTString")
-              .setParameters(new ArrayList<Parameter>())
-              .setReturnType(new ReturnType()
-                  .setType(PropertyProvider.nameString)
-              )
-          );
-
-    } else if (functionName.equals(nameUFCRTCollCTTwoPrim)) {
-      return Arrays.asList(
-          new Function()
-              .setName("UFCRTCollCTTwoPrim")
               .setComposable(true)
-              .setParameters(new ArrayList<Parameter>())
               .setReturnType(
-                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setCollection(true))
+                  new ReturnType().setType(EntityTypeProvider.nameETMedia).setNullable(false))
           );
 
     } else if (functionName.equals(nameUFNRTESMixPrimCollCompTwoParam)) {
@@ -362,11 +357,12 @@ public class FunctionProvider {
           new Function()
               .setName("UFNRTESMixPrimCollCompTwoParam")
               .setParameters(Arrays.asList(
-                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString),
-                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)))
+                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(false),
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(false)))
               .setComposable(false)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETMixPrimCollComp).setCollection(true))
+                  new ReturnType().setType(EntityTypeProvider.nameETMixPrimCollComp).setCollection(true)
+                      .setNullable(false))
           );
 
     } else if (functionName.equals(nameUFCRTETAllPrimTwoParam)) {
@@ -374,11 +370,11 @@ public class FunctionProvider {
           new Function()
               .setName("UFCRTETAllPrimTwoParam")
               .setParameters(Arrays.asList(
-                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString),
-                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)))
+                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(false),
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETAllPrim))
+                  new ReturnType().setType(EntityTypeProvider.nameETAllPrim).setNullable(false))
           );
 
     } else if (functionName.equals(nameUFCRTESMixPrimCollCompTwoParam)) {
@@ -386,14 +382,22 @@ public class FunctionProvider {
           new Function()
               .setName("UFCRTESMixPrimCollCompTwoParam")
               .setParameters(Arrays.asList(
-                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString),
-                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)
+                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(false),
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(false)
                   ))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETMixPrimCollComp).setCollection(true))
+                  new ReturnType().setType(EntityTypeProvider.nameETMixPrimCollComp).setCollection(true)
+                      .setNullable(false))
           );
 
+    } else if (functionName.equals(nameUFNRTCollCTNavFiveProp)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFNRTCollCTNavFiveProp")
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTNavFiveProp).setCollection(true))
+          );
     } else if (functionName.equals(nameBFCESTwoKeyNavRTESTwoKeyNav)) {
       return Arrays
           .asList(
@@ -403,10 +407,11 @@ public class FunctionProvider {
                   .setParameters(
                       Arrays.asList(
                           new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                              .setCollection(true)))
+                              .setCollection(true).setNullable(false)))
                   .setComposable(true)
                   .setReturnType(
-                      new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)),
+                      new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                          .setNullable(false)),
 
               new Function()
                   .setName("BFCESTwoKeyNavRTESTwoKeyNav")
@@ -414,33 +419,36 @@ public class FunctionProvider {
                   .setParameters(
                       Arrays.asList(
                           new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                              .setCollection(true),
+                              .setCollection(true).setNullable(false),
                           new Parameter().setName("ParameterString").setType(PropertyProvider.nameString)
-                              .setCollection(false)))
+                              .setCollection(false).setNullable(false)))
                   .setComposable(true)
                   .setReturnType(
-                      new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)),
+                      new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                          .setNullable(false)),
               new Function()
                   .setName("BFCESTwoKeyNavRTESTwoKeyNav")
                   .setBound(true)
                   .setParameters(
                       Arrays.asList(
                           new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav)
-                              .setCollection(true)))
+                              .setCollection(true).setNullable(false)))
                   .setComposable(true)
                   .setReturnType(
-                      new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)),
+                      new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                          .setNullable(false)),
               new Function()
                   .setName("BFCESTwoKeyNavRTESTwoKeyNav")
                   .setBound(true)
                   .setParameters(
                       Arrays.asList(new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav)
-                          .setCollection(true),
+                          .setCollection(true).setNullable(false),
                           new Parameter().setName("ParameterString").setType(PropertyProvider.nameString)
-                              .setCollection(false)))
+                              .setCollection(false).setNullable(false)))
                   .setComposable(true)
                   .setReturnType(
-                      new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+                      new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                          .setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCStringRTESTwoKeyNav)) {
@@ -448,10 +456,10 @@ public class FunctionProvider {
           new Function().setName("BFCStringRTESTwoKeyNav")
               .setBound(true)
               .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(PropertyProvider.nameString)))
+                  new Parameter().setName("BindingParam").setType(PropertyProvider.nameString).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCETBaseTwoKeyNavRTETTwoKeyNav)) {
@@ -460,10 +468,11 @@ public class FunctionProvider {
               .setName("BFCETBaseTwoKeyNavRTETTwoKeyNav")
               .setBound(true)
               .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)))
+                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)
+                      .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav)
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)
               )
           );
 
@@ -474,10 +483,11 @@ public class FunctionProvider {
               .setBound(true)
               .setParameters(Arrays.asList(
                   new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)
-                      .setCollection(true)))
+                      .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true))
+                  new ReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true)
+                      .setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCESAllPrimRTCTAllPrim)) {
@@ -487,11 +497,11 @@ public class FunctionProvider {
               .setBound(true)
               .setParameters(
                   Arrays.asList(
-                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETAllPrim).setCollection(
-                          true)))
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETAllPrim)
+                          .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(ComplexTypeProvider.nameCTAllPrim))
+                  new ReturnType().setType(ComplexTypeProvider.nameCTAllPrim).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCESTwoKeyNavRTCTTwoPrim)) {
@@ -502,10 +512,10 @@ public class FunctionProvider {
               .setParameters(
                   Arrays.asList(
                       new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setCollection(true)))
+                          .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim))
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCESTwoKeyNavRTCollCTTwoPrim)) {
@@ -516,10 +526,10 @@ public class FunctionProvider {
               .setParameters(
                   Arrays.asList(
                       new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setCollection(true)))
+                          .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setCollection(true))
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setCollection(true).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCESTwoKeyNavRTString)) {
@@ -530,10 +540,10 @@ public class FunctionProvider {
               .setParameters(
                   Arrays.asList(
                       new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setCollection(true)))
+                          .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(PropertyProvider.nameString))
+                  new ReturnType().setType(PropertyProvider.nameString).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCESTwoKeyNavRTCollString)) {
@@ -544,10 +554,10 @@ public class FunctionProvider {
               .setParameters(
                   Arrays.asList(
                       new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setCollection(true)))
+                          .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(PropertyProvider.nameString).setCollection(true))
+                  new ReturnType().setType(PropertyProvider.nameString).setCollection(true).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCETTwoKeyNavRTESTwoKeyNav)) {
@@ -556,10 +566,11 @@ public class FunctionProvider {
               .setName("BFCETTwoKeyNavRTESTwoKeyNav")
               .setBound(true)
               .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)))
+                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                      .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCETBaseTwoKeyNavRTESTwoKeyNav)) {
@@ -567,11 +578,13 @@ public class FunctionProvider {
           new Function()
               .setName("BFCETBaseTwoKeyNavRTESTwoKeyNav")
               .setBound(true)
-              .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)))
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)
+                          .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCSINavRTESTwoKeyNav)) {
@@ -579,11 +592,13 @@ public class FunctionProvider {
           new Function()
               .setName("BFCSINavRTESTwoKeyNav")
               .setBound(true)
-              .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)))
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(
+                          false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCETBaseTwoKeyNavRTESBaseTwoKey)) {
@@ -591,11 +606,14 @@ public class FunctionProvider {
           new Function()
               .setName("BFCETBaseTwoKeyNavRTESBaseTwoKey")
               .setBound(true)
-              .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)))
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)
+                          .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true))
+                  new ReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true).setNullable(
+                      false))
           );
 
     } else if (functionName.equals(nameBFCCollStringRTESTwoKeyNav)) {
@@ -603,10 +621,13 @@ public class FunctionProvider {
           new Function()
               .setName("BFCCollStringRTESTwoKeyNav")
               .setBound(true)
-              .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(PropertyProvider.nameString).setCollection(true)))
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(PropertyProvider.nameString).setCollection(true)
+                          .setNullable(false)))
               .setComposable(true)
-              .setReturnType(new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCCTPrimCompRTESTwoKeyNav)) {
@@ -614,11 +635,13 @@ public class FunctionProvider {
           new Function()
               .setName("BFCCTPrimCompRTESTwoKeyNav")
               .setBound(true)
-              .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp)))
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp).setNullable(
+                          false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCCTPrimCompRTESBaseTwoKeyNav)) {
@@ -626,11 +649,14 @@ public class FunctionProvider {
           new Function()
               .setName("BFCCTPrimCompRTESBaseTwoKeyNav")
               .setBound(true)
-              .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp)))
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp).setNullable(
+                          false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true))
+                  new ReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true).setNullable(
+                      false))
           );
 
     } else if (functionName.equals(nameBFCCollCTPrimCompRTESAllPrim)) {
@@ -641,10 +667,10 @@ public class FunctionProvider {
               .setParameters(
                   Arrays.asList(
                       new Parameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp)
-                          .setCollection(true)))
+                          .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETAllPrim).setCollection(true))
+                  new ReturnType().setType(EntityTypeProvider.nameETAllPrim).setCollection(true).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCESTwoKeyNavRTTwoKeyNav)) {
@@ -655,10 +681,10 @@ public class FunctionProvider {
               .setParameters(
                   Arrays.asList(
                       new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setCollection(true)))
+                          .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav))
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCESKeyNavRTETKeyNav)) {
@@ -667,11 +693,13 @@ public class FunctionProvider {
           new Function()
               .setName("BFCESKeyNavRTETKeyNav")
               .setBound(true)
-              .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav).setCollection(true)))
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav).setCollection(
+                          true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETKeyNav))
+                  new ReturnType().setType(EntityTypeProvider.nameETKeyNav).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCETKeyNavRTETKeyNav)) {
@@ -680,10 +708,10 @@ public class FunctionProvider {
               .setName("BFCETKeyNavRTETKeyNav")
               .setBound(true)
               .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav)))
+                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETKeyNav))
+                  new ReturnType().setType(EntityTypeProvider.nameETKeyNav).setNullable(false))
           );
     } else if (functionName.equals(nameBFESTwoKeyNavRTESTwoKeyNav)) {
       return Arrays.asList(
@@ -693,9 +721,10 @@ public class FunctionProvider {
               .setParameters(
                   Arrays.asList(
                       new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setCollection(true)))
+                          .setCollection(true).setNullable(false)))
               .setComposable(true)
-              .setReturnType(new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
 
           );
 
@@ -704,11 +733,13 @@ public class FunctionProvider {
           new Function()
               .setName("BFCETTwoKeyNavRTETTwoKeyNav")
               .setBound(true)
-              .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)))
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(
+                          false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav))
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCETTwoKeyNavRTCTTwoPrim)) {
@@ -716,11 +747,40 @@ public class FunctionProvider {
           new Function()
               .setName("BFCETTwoKeyNavRTCTTwoPrim")
               .setBound(true)
-              .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)))
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(
+                          false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setNullable(false))
+          );
+    } else if (functionName.equals(nameBFCESTwoKeyNavRTCTNavFiveProp)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCESTwoKeyNavRTCTNavFiveProp")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                          .setCollection(true).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTNavFiveProp).setNullable(false))
+          );
+    } else if (functionName.equals(nameBFCESTwoKeyNavRTCollCTNavFiveProp)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCESTwoKeyNavRTCollCTNavFiveProp")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                          .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim))
+                  new ReturnType().setType(ComplexTypeProvider.nameCTNavFiveProp).setCollection(true)
+                      .setNullable(false))
           );
     } else if (functionName.equals(nameBFCESTwoKeyNavRTStringParam)) {
       return Arrays.asList(
@@ -730,11 +790,12 @@ public class FunctionProvider {
               .setParameters(
                   Arrays.asList(
                       new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setCollection(true),
-                      new Parameter().setName("ParameterComplex").setType(ComplexTypeProvider.nameCTTwoPrim)))
+                          .setCollection(true).setNullable(false),
+                      new Parameter().setName("ParameterComplex").setType(ComplexTypeProvider.nameCTTwoPrim)
+                          .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(PropertyProvider.nameString))
+                  new ReturnType().setType(PropertyProvider.nameString).setNullable(false))
           );
 
     } else if (functionName.equals(nameBFCESKeyNavRTETKeyNavParam)) {
@@ -742,49 +803,46 @@ public class FunctionProvider {
           new Function()
               .setName("BFCESKeyNavRTETKeyNavParam")
               .setBound(true)
-              .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav).setCollection(true),
-                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString)))
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav).setCollection(
+                          true).setNullable(false),
+                      new Parameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                          .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETKeyNav))
+                  new ReturnType().setType(EntityTypeProvider.nameETKeyNav).setNullable(false))
           );
     } else if (functionName.equals(nameBFCCTPrimCompRTETTwoKeyNavParam)) {
       return Arrays.asList(
           new Function()
               .setName("BFCCTPrimCompRTETTwoKeyNavParam")
               .setBound(true)
-              .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp),
-                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString)))
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp).setNullable(
+                          false),
+                      new Parameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                          .setNullable(false)))
               .setComposable(true)
               .setReturnType(new ReturnType()
-                  .setType(EntityTypeProvider.nameETTwoKeyNav)
+                  .setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)
               )
           );
-    } else if (functionName.equals(nameBAETTwoKeyNavRTETTwoKeyNav)) {
-      return Arrays.asList(
-          new Function()
-              .setName("BAETTwoKeyNavRTETTwoKeyNav")
-              .setBound(true)
-              .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(PropertyProvider.nameInt16).setCollection(true),
-                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(true)))
-              .setComposable(true)
-              .setReturnType(
-                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setCollection(true))
-          );
     } else if (functionName.equals(nameBFCCTPrimCompRTESTwoKeyNavParam)) {
       return Arrays.asList(
           new Function()
               .setName("BFCCTPrimCompRTESTwoKeyNavParam")
               .setBound(true)
-              .setParameters(Arrays.asList(
-                  new Parameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp),
-                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString)))
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp).setNullable(
+                          false),
+                      new Parameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                          .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
           );
     }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6a3a4a1d/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/PropertyProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/PropertyProvider.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/PropertyProvider.java
index a237ebd..6dc2399 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/PropertyProvider.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/PropertyProvider.java
@@ -54,112 +54,304 @@ public class PropertyProvider {
       .setName("CollPropertyBinary")
       .setType(nameBinary)
       .setCollection(true);
+  
+  public static final Property collPropertyBinary_ExplicitNullable = new Property()
+  .setName("CollPropertyBinary")
+  .setType(nameBinary)
+  .setNullable(true)
+  .setCollection(true);
 
   public static final Property collPropertyBoolean = new Property()
       .setName("CollPropertyBoolean")
       .setType(nameBoolean)
       .setCollection(true);
+  
+  public static final Property collPropertyBoolean_ExplicitNullable = new Property()
+  .setName("CollPropertyBoolean")
+  .setType(nameBoolean)
+  .setNullable(true)
+  .setCollection(true);
 
   public static final Property collPropertyByte = new Property()
       .setName("CollPropertyByte")
       .setType(nameByte)
       .setCollection(true);
 
+  public static final Property collPropertyByte_ExplicitNullable = new Property()
+  .setName("CollPropertyByte")
+  .setType(nameByte)
+  .setNullable(true)
+  .setCollection(true);
+  
   public static final Property collPropertyDate = new Property()
       .setName("CollPropertyDate")
       .setType(nameDate)
       .setCollection(true);
+  
+  public static final Property collPropertyDate_ExplicitNullable = new Property()
+  .setName("CollPropertyDate")
+  .setType(nameDate)
+  .setNullable(true)
+  .setCollection(true);
 
   public static final Property collPropertyDateTimeOffset = new Property()
       .setName("CollPropertyDateTimeOffset")
       .setType(nameDateTimeOffset)
       .setCollection(true);
+  
+  public static final Property collPropertyDateTimeOffset_ExplicitNullable = new Property()
+  .setName("CollPropertyDateTimeOffset")
+  .setType(nameDateTimeOffset)
+  .setNullable(true)
+  .setCollection(true);
 
   public static final Property collPropertyDecimal = new Property()
       .setName("CollPropertyDecimal")
       .setType(nameDecimal)
       .setCollection(true);
+  
+  public static final Property collPropertyDecimal_ExplicitNullable = new Property()
+  .setName("CollPropertyDecimal")
+  .setType(nameDecimal)
+  .setNullable(true)
+  .setCollection(true);
 
   public static final Property collPropertyDouble = new Property()
       .setName("CollPropertyDouble")
       .setType(nameDouble)
       .setCollection(true);
+  
+  public static final Property collPropertyDouble_ExplicitNullable = new Property()
+  .setName("CollPropertyDouble")
+  .setType(nameDouble)
+  .setNullable(true)
+  .setCollection(true);
 
   public static final Property collPropertyDuration = new Property()
       .setName("CollPropertyDuration")
       .setType(nameDuration)
       .setCollection(true);
+  
+  public static final Property collPropertyDuration_ExplicitNullable = new Property()
+  .setName("CollPropertyDuration")
+  .setType(nameDuration)
+  .setNullable(true)
+  .setCollection(true);
+  
   public static final Property collPropertyGuid = new Property()
       .setName("CollPropertyGuid")
       .setType(nameGuid)
       .setCollection(true);
+  
+  public static final Property collPropertyGuid_ExplicitNullable = new Property()
+  .setName("CollPropertyGuid")
+  .setType(nameGuid)
+  .setNullable(true)
+  .setCollection(true);
+  
   public static final Property collPropertyInt16 = new Property()
       .setName("CollPropertyInt16")
       .setType(nameInt16)
       .setCollection(true);
+  
+  public static final Property collPropertyInt16_ExplicitNullable = new Property()
+  .setName("CollPropertyInt16")
+  .setType(nameInt16)
+  .setNullable(true)
+  .setCollection(true);
+  
   public static final Property collPropertyInt32 = new Property()
       .setName("CollPropertyInt32")
       .setType(nameInt32)
       .setCollection(true);
+  
+  public static final Property collPropertyInt32_ExplicitNullable = new Property()
+  .setName("CollPropertyInt32")
+  .setType(nameInt32)
+  .setNullable(true)
+  .setCollection(true);
+  
   public static final Property collPropertyInt64 = new Property()
       .setName("CollPropertyInt64")
       .setType(nameInt64)
       .setCollection(true);
+  
+  public static final Property collPropertyInt64_ExplicitNullable = new Property()
+  .setName("CollPropertyInt64")
+  .setType(nameInt64)
+  .setNullable(true)
+  .setCollection(true);
 
   public static final Property collPropertySByte = new Property()
       .setName("CollPropertySByte")
       .setType(nameSByte)
       .setCollection(true);
 
+  public static final Property collPropertySByte_ExplicitNullable = new Property()
+  .setName("CollPropertySByte")
+  .setType(nameSByte)
+  .setNullable(true)
+  .setCollection(true);
+  
   public static final Property collPropertySingle = new Property()
       .setName("CollPropertySingle")
       .setType(nameSingle)
       .setCollection(true);
+  
+  public static final Property collPropertySingle_ExplicitNullable = new Property()
+  .setName("CollPropertySingle")
+  .setType(nameSingle)
+  .setNullable(true)
+  .setCollection(true);
 
   public static final Property collPropertyString = new Property()
       .setName("CollPropertyString")
       .setType(nameString)
       .setCollection(true);
+  
+  public static final Property collPropertyString_ExplicitNullable = new Property()
+  .setName("CollPropertyString")
+  .setType(nameString)
+  .setNullable(true)
+  .setCollection(true);
 
   public static final Property collPropertyTimeOfDay = new Property()
-      .setName("CollPropertyTimeOfDay")
-      .setType(nameTimeOfDay)
-      .setCollection(true);
+  .setName("CollPropertyTimeOfDay")
+  .setType(nameTimeOfDay)
+  .setCollection(true);
+  
+  public static final Property collPropertyTimeOfDay_ExplicitNullable = new Property()
+  .setName("CollPropertyTimeOfDay")
+  .setType(nameTimeOfDay)
+  .setNullable(true)
+  .setCollection(true);
 
   public static final Property propertyBinary = new Property()
       .setName("PropertyBinary")
       .setType(nameBinary);
+
+  public static final Property propertyBinary_NotNullable = new Property()
+      .setName("PropertyBinary")
+      .setType(nameBinary)
+      .setNullable(false);
+
+  public static final Property propertyBinary_ExplicitNullable = new Property()
+      .setName("PropertyBinary")
+      .setType(nameBinary)
+      .setNullable(true);
+
   public static final Property propertyBoolean = new Property()
       .setName("PropertyBoolean")
       .setType(nameBoolean);
+
+  public static final Property propertyBoolean_NotNullable = new Property()
+      .setName("PropertyBoolean")
+      .setType(nameBoolean)
+      .setNullable(false);
+
+  public static final Property propertyBoolean_ExplicitNullable = new Property()
+      .setName("PropertyBoolean")
+      .setType(nameBoolean)
+      .setNullable(true);
+
   public static final Property propertyByte = new Property()
       .setName("PropertyByte")
       .setType(nameByte);
 
+  public static final Property propertyByte_NotNullable = new Property()
+      .setName("PropertyByte")
+      .setType(nameByte)
+      .setNullable(false);
+
+  public static final Property propertyByte_ExplicitNullable = new Property()
+      .setName("PropertyByte")
+      .setType(nameByte)
+      .setNullable(true);
+
   public static final Property propertyDate = new Property()
       .setName("PropertyDate")
       .setType(nameDate);
 
+  public static final Property propertyDate_NotNullable = new Property()
+      .setName("PropertyDate")
+      .setType(nameDate)
+      .setNullable(false);
+
+  public static final Property propertyDate_ExplicitNullable = new Property()
+      .setName("PropertyDate")
+      .setType(nameDate)
+      .setNullable(true);
+
   public static final Property propertyDateTimeOffset = new Property()
       .setName("PropertyDateTimeOffset")
       .setType(nameDateTimeOffset);
 
+  public static final Property propertyDateTimeOffset_NotNullable = new Property()
+      .setName("PropertyDateTimeOffset")
+      .setType(nameDateTimeOffset)
+      .setNullable(false);
+
+  public static final Property propertyDateTimeOffset_ExplicitNullable = new Property()
+      .setName("PropertyDateTimeOffset")
+      .setType(nameDateTimeOffset)
+      .setNullable(true);
+
   public static final Property propertyDecimal = new Property()
       .setName("PropertyDecimal")
       .setType(nameDecimal);
 
+  public static final Property propertyDecimal_NotNullable = new Property()
+      .setName("PropertyDecimal")
+      .setType(nameDecimal)
+      .setNullable(false);
+
+  public static final Property propertyDecimal_ExplicitNullable = new Property()
+      .setName("PropertyDecimal")
+      .setType(nameDecimal)
+      .setNullable(true);
+
   public static final Property propertyDouble = new Property()
       .setName("PropertyDouble")
       .setType(nameDouble);
 
+  public static final Property propertyDouble_NotNullable = new Property()
+      .setName("PropertyDouble")
+      .setType(nameDouble)
+      .setNullable(false);
+
+  public static final Property propertyDouble_ExplicitNullable = new Property()
+      .setName("PropertyDouble")
+      .setType(nameDouble)
+      .setNullable(true);
+
   public static final Property propertyDuration = new Property()
       .setName("PropertyDuration")
       .setType(nameDuration);
 
+  public static final Property propertyDuration_NotNullable = new Property()
+      .setName("PropertyDuration")
+      .setType(nameDuration)
+      .setNullable(false);
+
+  public static final Property propertyDuration_ExplicitNullable = new Property()
+      .setName("PropertyDuration")
+      .setType(nameDuration)
+      .setNullable(true);
+
   public static final Property propertyGuid = new Property()
       .setName("PropertyGuid")
       .setType(nameGuid);
 
+  public static final Property propertyGuid_NotNullable = new Property()
+      .setName("PropertyGuid")
+      .setType(nameGuid)
+      .setNullable(false);
+
+  public static final Property propertyGuid_ExplicitNullable = new Property()
+      .setName("PropertyGuid")
+      .setType(nameGuid)
+      .setNullable(true);
+
   public static final Property propertyInt16 = new Property()
       .setName("PropertyInt16")
       .setType(nameInt16);
@@ -168,33 +360,96 @@ public class PropertyProvider {
       .setName("PropertyInt16")
       .setType(nameInt16)
       .setNullable(false);
+
+  public static final Property propertyInt16_ExplicitNullable = new Property()
+      .setName("PropertyInt16")
+      .setType(nameInt16)
+      .setNullable(true);
+
   public static final Property propertyInt32 = new Property()
       .setName("PropertyInt32")
       .setType(nameInt32);
 
+  public static final Property propertyInt32_NotNullable = new Property()
+      .setName("PropertyInt32")
+      .setType(nameInt32)
+      .setNullable(false);
+
+  public static final Property propertyInt32_ExplicitNullable = new Property()
+      .setName("PropertyInt32")
+      .setType(nameInt32)
+      .setNullable(true);
+
   public static final Property propertyInt64 = new Property()
       .setName("PropertyInt64")
       .setType(nameInt64);
 
+  public static final Property propertyInt64_NotNullable = new Property()
+      .setName("PropertyInt64")
+      .setType(nameInt64)
+      .setNullable(false);
+
+  public static final Property propertyInt64_ExplicitNullable = new Property()
+      .setName("PropertyInt64")
+      .setType(nameInt64)
+      .setNullable(true);
+
   public static final Property propertySByte = new Property()
       .setName("PropertySByte")
       .setType(nameSByte);
 
+  public static final Property propertySByte_NotNullable = new Property()
+      .setName("PropertySByte")
+      .setType(nameSByte)
+      .setNullable(false);
+
+  public static final Property propertySByte_ExplicitNullable = new Property()
+      .setName("PropertySByte")
+      .setType(nameSByte)
+      .setNullable(true);
+
   public static final Property propertySingle = new Property()
       .setName("PropertySingle")
       .setType(nameSingle);
 
+  public static final Property propertySingle_NotNullable = new Property()
+      .setName("PropertySingle")
+      .setType(nameSingle)
+      .setNullable(false);
+
+  public static final Property propertySingle_ExplicitNullable = new Property()
+      .setName("PropertySingle")
+      .setType(nameSingle)
+      .setNullable(true);
+
   public static final Property propertyString = new Property()
       .setName("PropertyString")
       .setType(nameString);
 
   public static final Property propertyString_NotNullable = new Property()
       .setName("PropertyString")
-      .setType(nameString);
+      .setType(nameString)
+      .setNullable(false);
+
+  public static final Property propertyString_ExplicitNullable = new Property()
+      .setName("PropertyString")
+      .setType(nameString)
+      .setNullable(true);
 
-  public static final Property propertyTimeOfDay = new Property().setName("PropertyTimeOfDay")
+  public static final Property propertyTimeOfDay = new Property()
+      .setName("PropertyTimeOfDay")
       .setType(nameTimeOfDay);
 
+  public static final Property propertyTimeOfDay_NotNullable = new Property()
+      .setName("PropertyTimeOfDay")
+      .setType(nameTimeOfDay)
+      .setNullable(false);
+
+  public static final Property propertyTimeOfDay_ExplicitNullable = new Property()
+      .setName("PropertyTimeOfDay")
+      .setType(nameTimeOfDay)
+      .setNullable(true);
+
   /*
    * TODO add propertyStream
    * Property propertyStream = new Property()
@@ -235,7 +490,8 @@ public class PropertyProvider {
 
   public static final Property propertyComplex_CTPrimComp_NotNullable = new Property()
       .setName("PropertyComplex")
-      .setType(ComplexTypeProvider.nameCTPrimComp);
+      .setType(ComplexTypeProvider.nameCTPrimComp)
+      .setNullable(false);
 
   public static final Property propertyComplex_CTTwoPrim = new Property()
       .setName("PropertyComplex")
@@ -251,7 +507,8 @@ public class PropertyProvider {
 
   public static final Property propertyComplexEnum_CTPrimEnum_NotNullable = new Property()
       .setName("PropertyComplexEnum")
-      .setType(ComplexTypeProvider.nameCTPrimEnum);
+      .setType(ComplexTypeProvider.nameCTPrimEnum)
+      .setNullable(false);
 
   public static final Property propertyComplexTwoPrim_CTTwoPrim = new Property()
       .setName("PropertyComplexTwoPrim")
@@ -259,8 +516,7 @@ public class PropertyProvider {
 
   public static final Property propertyMixedPrimCollComp_CTMixPrimCollComp = new Property()
       .setName("PropertyMixedPrimCollComp")
-      .setType(ComplexTypeProvider.nameCTMixPrimCollComp)
-      .setCollection(true);
+      .setType(ComplexTypeProvider.nameCTMixPrimCollComp);
 
   // Navigation Properties -------------------------------------------------------------------------------------------
   public static final NavigationProperty collectionNavPropertyETKeyNavMany_ETKeyNav = new NavigationProperty()
@@ -283,21 +539,47 @@ public class PropertyProvider {
       .setName("NavPropertyETTwoKeyNavOne")
       .setType(EntityTypeProvider.nameETTwoKeyNav);
 
+  public static final NavigationProperty collectionNavPropertyETTwoPrimMany_ETTwoPrim = new NavigationProperty()
+      .setName("NavPropertyETTwoPrimMany")
+      .setType(EntityTypeProvider.nameETTwoPrim)
+      .setCollection(true)
+      .setNullable(false);
+
+  public static final NavigationProperty collectionNavPropertyETAllPrimMany_ETAllPrim = new NavigationProperty()
+      .setName("NavPropertyETAllPrimMany")
+      .setType(EntityTypeProvider.nameETAllPrim)
+      .setCollection(true);
+
   public static final NavigationProperty navPropertyETKeyNavOne_ETKeyNav = new NavigationProperty()
       .setName("NavPropertyETKeyNavOne")
       .setType(EntityTypeProvider.nameETKeyNav);
+
   public static final NavigationProperty navPropertyETMediaOne_ETMedia = new NavigationProperty()
       .setName("NavPropertyETMediaOne")
       .setType(EntityTypeProvider.nameETMedia);
 
-  public static final NavigationProperty navPropertyETKeyPrimNavOne = new NavigationProperty()
+  public static final NavigationProperty navPropertyETKeyPrimNavOne_ETKeyPrimNav = new NavigationProperty()
       .setName("NavPropertyETKeyPrimNavOne")
       .setType(EntityTypeProvider.nameETKeyPrimNav);
 
+  public static final NavigationProperty navPropertyETTwoKeyNavOne_ETTwoKeyNav_NotNullable = new NavigationProperty()
+      .setName("NavPropertyETTwoKeyNavOne")
+      .setType(EntityTypeProvider.nameETTwoKeyNav)
+      .setNullable(false);
+
   public static final NavigationProperty navPropertyETTwoKeyNavOne_ETTwoKeyNav = new NavigationProperty()
       .setName("NavPropertyETTwoKeyNavOne")
       .setType(EntityTypeProvider.nameETTwoKeyNav);
 
+  public static final NavigationProperty navPropertyETTwoPrimOne_ETTwoPrim = new NavigationProperty()
+      .setName("NavPropertyETTwoPrimOne")
+      .setType(EntityTypeProvider.nameETTwoPrim)
+      .setNullable(false);
+
+  public static final NavigationProperty navPropertyETAllPrimOne_ETAllPrim = new NavigationProperty()
+      .setName("NavPropertyETAllPrimOne")
+      .setType(EntityTypeProvider.nameETAllPrim);
+
   // EnumProperties --------------------------------------------------------------------------------------------------
   public static final Property propertyEnumString_ENString = new Property()
       .setName("PropertyEnumString")