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

[23/40] [OLINGO-266] refactor ref module to server-ref

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/8ca9b3c6/lib/server-ref/src/main/java/org/apache/olingo/server/core/testutil/techprovider/EntityTypeProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-ref/src/main/java/org/apache/olingo/server/core/testutil/techprovider/EntityTypeProvider.java b/lib/server-ref/src/main/java/org/apache/olingo/server/core/testutil/techprovider/EntityTypeProvider.java
new file mode 100644
index 0000000..9072234
--- /dev/null
+++ b/lib/server-ref/src/main/java/org/apache/olingo/server/core/testutil/techprovider/EntityTypeProvider.java
@@ -0,0 +1,408 @@
+/*
+ * 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.server.core.testutil.techprovider;
+
+import java.util.Arrays;
+
+import org.apache.olingo.commons.api.ODataException;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.server.api.edm.provider.EntityType;
+import org.apache.olingo.server.api.edm.provider.NavigationProperty;
+import org.apache.olingo.server.api.edm.provider.Property;
+import org.apache.olingo.server.api.edm.provider.PropertyRef;
+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 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 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 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 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 nameETMedia = new FullQualifiedName(SchemaProvider.nameSpace, "ETMedia");
+  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");
+  public static final FullQualifiedName nameETTwoBaseTwoKeyNav =
+      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 nameETTwoPrim = new FullQualifiedName(SchemaProvider.nameSpace, "ETTwoPrim");
+
+  public EntityType getEntityType(final FullQualifiedName entityTypeName) throws ODataException {
+    if (entityTypeName.equals(nameETAllPrim)) {
+      return new EntityType()
+          .setName("ETAllPrim")
+          .setKey(Arrays.asList(
+              new PropertyRef().setPropertyName("PropertyInt16")))
+          .setProperties(Arrays.asList(
+              PropertyProvider.propertyInt16_NotNullable, 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 */))
+          .setNavigationProperties(Arrays.asList(PropertyProvider.navPropertyETTwoPrimOne_ETTwoPrim,
+              PropertyProvider.collectionNavPropertyETTwoPrimMany_ETTwoPrim));
+
+    } else if (entityTypeName.equals(nameETCollAllPrim)) {
+      return new EntityType()
+          .setName("ETCollAllPrim")
+          .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
+
+          .setProperties(
+              Arrays.asList(
+                  PropertyProvider.propertyInt16_NotNullable, 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 */));
+
+    } else if (entityTypeName.equals(nameETTwoPrim)) {
+      return new EntityType()
+          .setName("ETTwoPrim")
+          .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
+          .setProperties(Arrays.asList(
+              PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyString))
+          .setNavigationProperties(
+              Arrays.asList(PropertyProvider.navPropertyETAllPrimOne_ETAllPrim,
+                  PropertyProvider.collectionNavPropertyETAllPrimMany_ETAllPrim));
+
+    } else if (entityTypeName.equals(nameETMixPrimCollComp)) {
+      return new EntityType()
+          .setName("ETMixPrimCollComp")
+          .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
+          .setProperties(Arrays.asList(
+              PropertyProvider.propertyInt16_NotNullable, PropertyProvider.collPropertyString,
+              PropertyProvider.propertyComplex_CTTwoPrim, PropertyProvider.collPropertyComplex_CTTwoPrim));
+
+    } else if (entityTypeName.equals(nameETTwoKeyTwoPrim)) {
+      return new EntityType()
+          .setName("ETTwoKeyTwoPrim")
+          .setKey(Arrays.asList(
+              new PropertyRef().setPropertyName("PropertyInt16"),
+              new PropertyRef().setPropertyName("PropertyString")))
+          .setProperties(Arrays.asList(
+              PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyString));
+
+    } else if (entityTypeName.equals(nameETBaseTwoKeyTwoPrim)) {
+      return new EntityType()
+          .setName("ETBaseTwoKeyTwoPrim")
+          .setBaseType(nameETTwoKeyTwoPrim);
+
+    } else if (entityTypeName.equals(nameETTwoBaseTwoKeyTwoPrim)) {
+      return new EntityType()
+          .setName("ETTwoBaseTwoKeyTwoPrim")
+          .setBaseType(nameETTwoKeyTwoPrim);
+
+    } else if (entityTypeName.equals(nameETBase)) {
+      return new EntityType()
+          .setName("ETBase")
+          .setBaseType(nameETTwoPrim)
+          .setProperties(Arrays.asList(new Property()
+              .setName("AdditionalPropertyString_5")
+              .setType(PropertyProvider.nameString)));
+
+    } else if (entityTypeName.equals(nameETTwoBase)) {
+      return new EntityType()
+          .setName("ETTwoBase")
+          .setBaseType(nameETBase)
+          .setProperties(Arrays.asList(new Property()
+              .setName("AdditionalPropertyString_6")
+              .setType(PropertyProvider.nameString))
+          );
+
+    } else if (entityTypeName.equals(nameETAllKey)) {
+      return new EntityType()
+          .setName("ETAllKey")
+          .setKey(Arrays.asList(
+              new PropertyRef().setPropertyName("PropertyString"),
+              new PropertyRef().setPropertyName("PropertyBoolean"),
+              new PropertyRef().setPropertyName("PropertyByte"),
+              new PropertyRef().setPropertyName("PropertySByte"),
+              new PropertyRef().setPropertyName("PropertyInt16"),
+              new PropertyRef().setPropertyName("PropertyInt32"),
+              new PropertyRef().setPropertyName("PropertyInt64"),
+              new PropertyRef().setPropertyName("PropertyDecimal"),
+              new PropertyRef().setPropertyName("PropertyDate"),
+              new PropertyRef().setPropertyName("PropertyDateTimeOffset"),
+              new PropertyRef().setPropertyName("PropertyDuration"),
+              new PropertyRef().setPropertyName("PropertyGuid"),
+              new PropertyRef().setPropertyName("PropertyTimeOfDay")))
+          .setProperties(
+              Arrays.asList(
+                  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()
+          .setName("ETCompAllPrim")
+          .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
+          .setProperties(
+              Arrays.asList(PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyComplex_CTAllPrim));
+
+    } else if (entityTypeName.equals(nameETCompCollAllPrim)) {
+      return new EntityType()
+          .setName("ETCompCollAllPrim")
+          .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
+
+          .setProperties(
+              Arrays.asList(PropertyProvider.propertyInt16_NotNullable,
+                  PropertyProvider.propertyComplex_CTCollAllPrim));
+
+    } else if (entityTypeName.equals(nameETCompComp)) {
+      return new EntityType()
+          .setName("ETCompComp")
+          .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
+          .setProperties(
+              Arrays.asList(PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyComplex_CTCompComp));
+
+    } else if (entityTypeName.equals(nameETCompCollComp)) {
+      return new EntityType()
+          .setName("ETCompCollComp")
+          .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
+          .setProperties(
+              Arrays
+                  .asList(PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyComplex_CTCompCollComp));
+
+    } else if (entityTypeName.equals(nameETMedia)) {
+      return new EntityType()
+          .setName("ETMedia")
+          .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
+          .setProperties(Arrays.asList(PropertyProvider.propertyInt16_NotNullable))
+          .setHasStream(true);
+
+    } else if (entityTypeName.equals(nameETKeyTwoKeyComp)) {
+      return new EntityType()
+          .setName("ETKeyTwoKeyComp")
+          .setKey(Arrays.asList(
+              new PropertyRef()
+                  .setPropertyName("PropertyInt16"),
+              new PropertyRef()
+                  .setPropertyName("PropertyComplex/PropertyInt16")
+                  .setAlias("KeyAlias1"),
+              new PropertyRef()
+                  .setPropertyName("PropertyComplex/PropertyString")
+                  .setAlias("KeyAlias2"),
+              new PropertyRef()
+                  .setPropertyName("PropertyComplexComplex/PropertyComplex/PropertyString")
+                  .setAlias("KeyAlias3")))
+          .setProperties(
+              Arrays.asList(
+                  PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyComplex_CTTwoPrim,
+                  PropertyProvider.propertyComplexComplex_CTCompComp));
+
+    } else if (entityTypeName.equals(nameETServerSidePaging)) {
+      return new EntityType()
+          .setName(nameETServerSidePaging.getName())
+          .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
+          .setProperties(Arrays.asList(PropertyProvider.propertyInt16_NotNullable,
+              PropertyProvider.propertyString_NotNullable));
+
+    } else if (entityTypeName.equals(nameETAllNullable)) {
+      return new EntityType()
+          .setName("ETAllNullable")
+          .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyKey")))
+          .setProperties(
+              Arrays.asList(
+                  new Property()
+                      .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()
+          .setName("ETKeyNav")
+          .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
+          .setProperties(
+              Arrays.asList(
+                  PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyString_NotNullable,
+                  PropertyProvider.propertyComplex_CTNavFiveProp,
+                  PropertyProvider.propertyComplexAllPrim_CTAllPrim, PropertyProvider.propertyComplexTwoPrim_CTTwoPrim,
+                  PropertyProvider.collPropertyString, PropertyProvider.collPropertyInt16,
+                  PropertyProvider.collPropertyComplex_CTPrimComp,
+                  new Property()
+                      .setName("PropertyComplexComplex").setType(ComplexTypeProvider.nameCTCompNav)
+                  ))
+          .setNavigationProperties(
+              Arrays.asList(
+                  PropertyProvider.navPropertyETTwoKeyNavOne_ETTwoKeyNav_NotNullable,
+                  PropertyProvider.collectionNavPropertyETTwoKeyNavMany_ETTwoKeyNav,
+                  PropertyProvider.navPropertyETKeyNavOne_ETKeyNav,
+                  PropertyProvider.collectionNavPropertyETKeyNavMany_ETKeyNav,
+                  PropertyProvider.navPropertyETMediaOne_ETMedia,
+                  PropertyProvider.collectionNavPropertyETMediaMany_ETMedia
+                  ));
+    } else if (entityTypeName.equals(nameETKeyPrimNav)) {
+      return new EntityType()
+          .setName("ETKeyPrimNav")
+          .setKey(Arrays.asList(new PropertyRef().setPropertyName("PropertyInt16")))
+          .setProperties(Arrays.asList(
+              PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyString_ExplicitNullable))
+          .setNavigationProperties(
+              Arrays.asList(
+                  PropertyProvider.navPropertyETKeyPrimNavOne_ETKeyPrimNav));
+
+    } else if (entityTypeName.equals(nameETTwoKeyNav)) {
+      return new EntityType()
+          .setName("ETTwoKeyNav")
+          .setKey(Arrays.asList(
+              new PropertyRef().setPropertyName("PropertyInt16"),
+              new PropertyRef().setPropertyName("PropertyString")))
+          .setProperties(
+              Arrays.asList(
+                  PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyString_NotNullable,
+                  PropertyProvider.propertyComplex_CTPrimComp_NotNullable,
+                  new Property().setName("PropertyComplexNav").setType(ComplexTypeProvider.nameCTBasePrimCompNav)
+                      .setNullable(false),
+                  PropertyProvider.propertyComplexEnum_CTPrimEnum_NotNullable,
+                  PropertyProvider.collPropertyComplex_CTPrimComp,
+                  new Property().setName("CollPropertyComplexNav").setType(ComplexTypeProvider.nameCTNavFiveProp)
+                      .setCollection(true),
+                  PropertyProvider.collPropertyString, PropertyProvider.propertyComplexTwoPrim_CTTwoPrim,
+                  PropertyProvider.propertyEnumString_ENString
+                  ))
+          .setNavigationProperties(Arrays.asList(
+              new NavigationProperty()
+                  .setName("NavPropertyETKeyNavOne")
+                  .setType(nameETKeyNav)
+                  .setReferentialConstraints(Arrays.asList(
+                      new ReferentialConstraint()
+                          .setProperty("PropertyInt16")
+                          .setReferencedProperty("PropertyInt16"))),
+              PropertyProvider.collectionNavPropertyETKeyNavMany_ETKeyNav,
+              PropertyProvider.navPropertyETTwoKeyNavOne_ETTwoKeyNav,
+              PropertyProvider.collectionNavPropertyETTwoKeyNavMany_ETTwoKeyNav));
+
+    } else if (entityTypeName.equals(nameETBaseTwoKeyNav)) {
+      return new EntityType()
+          .setName("ETBaseTwoKeyNav")
+          .setBaseType(nameETTwoKeyNav)
+          .setProperties(Arrays.asList(PropertyProvider.propertyDate_ExplicitNullable))
+          .setNavigationProperties(Arrays.asList(
+              new NavigationProperty()
+                  .setName("NavPropertyETBaseTwoKeyNavOne")
+                  .setType(nameETBaseTwoKeyNav),
+              new NavigationProperty()
+                  .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_ExplicitNullable))
+          .setNavigationProperties(Arrays.asList(
+              new NavigationProperty()
+                  .setName("NavPropertyETBaseTwoKeyNavMany")
+                  .setType(nameETBaseTwoKeyNav)
+                  .setCollection(true)
+              ));
+
+    } else if (entityTypeName.equals(nameETFourKeyAlias)) {
+      return new EntityType()
+          .setName("ETFourKeyAlias")
+          .setKey(
+              Arrays.asList(
+                  new PropertyRef().setPropertyName("PropertyInt16"),
+                  new PropertyRef().setPath("PropertyComplex/PropertyInt16").setPropertyName("PropertyInt16").setAlias(
+                      "KeyAlias1"),
+                  new PropertyRef().setPath("PropertyComplex/PropertyString").setPropertyName("PropertyString")
+                      .setAlias("KeyAlias2"),
+                  new PropertyRef().setPath("PropertyComplexComplex/PropertyComplex/PropertyString").setPropertyName(
+                      "PropertyString").setAlias("KeyAlias3"))).setProperties(
+              Arrays.asList(PropertyProvider.propertyInt16_NotNullable, PropertyProvider.propertyComplex_CTTwoPrim,
+                  PropertyProvider.propertyComplexComplex_CTCompComp));
+    } else if (entityTypeName.equals(nameETCompMixPrimCollComp)) {
+      return new EntityType()
+          .setName("ETCompMixPrimCollComp")
+          .setKey(Arrays.asList(
+              new PropertyRef()
+                  .setPropertyName("PropertyInt16")))
+          .setProperties(
+              Arrays.asList(PropertyProvider.propertyInt16_NotNullable,
+                  PropertyProvider.propertyMixedPrimCollComp_CTMixPrimCollComp));
+    }
+
+    return null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/8ca9b3c6/lib/server-ref/src/main/java/org/apache/olingo/server/core/testutil/techprovider/EnumTypeProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-ref/src/main/java/org/apache/olingo/server/core/testutil/techprovider/EnumTypeProvider.java b/lib/server-ref/src/main/java/org/apache/olingo/server/core/testutil/techprovider/EnumTypeProvider.java
new file mode 100644
index 0000000..94ea6ea
--- /dev/null
+++ b/lib/server-ref/src/main/java/org/apache/olingo/server/core/testutil/techprovider/EnumTypeProvider.java
@@ -0,0 +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.server.core.testutil.techprovider;
+
+import java.util.Arrays;
+
+import org.apache.olingo.commons.api.ODataException;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.server.api.edm.provider.EnumMember;
+import org.apache.olingo.server.api.edm.provider.EnumType;
+
+public class EnumTypeProvider {
+
+  public static final FullQualifiedName nameENString = new FullQualifiedName(SchemaProvider.nameSpace, "ENString");
+
+  public EnumType getEnumType(final FullQualifiedName enumTypeName) throws ODataException {
+    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"),
+              new EnumMember().setName("String3").setValue("3")));
+    }
+
+    return null;
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/8ca9b3c6/lib/server-ref/src/main/java/org/apache/olingo/server/core/testutil/techprovider/FunctionProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-ref/src/main/java/org/apache/olingo/server/core/testutil/techprovider/FunctionProvider.java b/lib/server-ref/src/main/java/org/apache/olingo/server/core/testutil/techprovider/FunctionProvider.java
new file mode 100644
index 0000000..fe6fefb
--- /dev/null
+++ b/lib/server-ref/src/main/java/org/apache/olingo/server/core/testutil/techprovider/FunctionProvider.java
@@ -0,0 +1,852 @@
+/*
+ * 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.server.core.testutil.techprovider;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.olingo.commons.api.ODataException;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.server.api.edm.provider.Function;
+import org.apache.olingo.server.api.edm.provider.Parameter;
+import org.apache.olingo.server.api.edm.provider.ReturnType;
+
+public class FunctionProvider {
+
+  // Bound Functions
+  public static final FullQualifiedName nameBFCCollCTPrimCompRTESAllPrim =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCCollCTPrimCompRTESAllPrim");
+
+  public static final FullQualifiedName nameBFCCollStringRTESTwoKeyNav =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCCollStringRTESTwoKeyNav");
+
+  public static final FullQualifiedName nameBFCCTPrimCompRTESBaseTwoKeyNav =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCCTPrimCompRTESBaseTwoKeyNav");
+
+  public static final FullQualifiedName nameBFCCTPrimCompRTESTwoKeyNav =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCCTPrimCompRTESTwoKeyNav");
+
+  public static final FullQualifiedName nameBFCCTPrimCompRTESTwoKeyNavParam =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCCTPrimCompRTESTwoKeyNavParam");
+
+  public static final FullQualifiedName nameBFCCTPrimCompRTETTwoKeyNavParam =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCCTPrimCompRTETTwoKeyNavParam");
+
+  public static final FullQualifiedName nameBFCESAllPrimRTCTAllPrim =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCESAllPrimRTCTAllPrim");
+
+  public static final FullQualifiedName nameBFCESBaseTwoKeyNavRTESBaseTwoKey =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCESBaseTwoKeyNavRTESBaseTwoKey");
+
+  public static final FullQualifiedName nameBFCESKeyNavRTETKeyNav =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCESKeyNavRTETKeyNav");
+
+  public static final FullQualifiedName nameBFCESKeyNavRTETKeyNavParam =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCESKeyNavRTETKeyNavParam");
+
+  public static final FullQualifiedName nameBFCESTwoKeyNavRTCollCTTwoPrim =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCESTwoKeyNavRTCollCTTwoPrim");
+
+  public static final FullQualifiedName nameBFCESTwoKeyNavRTCollString =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCESTwoKeyNavRTCollString");
+
+  public static final FullQualifiedName nameBFCESTwoKeyNavRTCTTwoPrim =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCESTwoKeyNavRTCTTwoPrim");
+
+  public static final FullQualifiedName nameBFCESTwoKeyNavRTESTwoKeyNav =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCESTwoKeyNavRTESTwoKeyNav");
+
+  public static final FullQualifiedName nameBFCESTwoKeyNavRTString =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCESTwoKeyNavRTString");
+
+  public static final FullQualifiedName nameBFCESTwoKeyNavRTStringParam =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCESTwoKeyNavRTStringParam");
+
+  public static final FullQualifiedName nameBFCESTwoKeyNavRTTwoKeyNav =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCESTwoKeyNavRTTwoKeyNav");
+
+  public static final FullQualifiedName nameBFCETBaseTwoKeyNavRTESBaseTwoKey =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCETBaseTwoKeyNavRTESBaseTwoKey");
+
+  public static final FullQualifiedName nameBFCETBaseTwoKeyNavRTESTwoKeyNav =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCETBaseTwoKeyNavRTESTwoKeyNav");
+
+  public static final FullQualifiedName nameBFCETBaseTwoKeyNavRTETTwoKeyNav =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCETBaseTwoKeyNavRTETTwoKeyNav");
+
+  public static final FullQualifiedName nameBFCETKeyNavRTETKeyNav =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCETKeyNavRTETKeyNav");
+
+  public static final FullQualifiedName nameBFCETTwoKeyNavRTCTTwoPrim =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCETTwoKeyNavRTCTTwoPrim");
+
+  public static final FullQualifiedName nameBFCETTwoKeyNavRTESTwoKeyNav =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCETTwoKeyNavRTESTwoKeyNav");
+
+  public static final FullQualifiedName nameBFCETTwoKeyNavRTETTwoKeyNav =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCETTwoKeyNavRTETTwoKeyNav");
+
+  public static final FullQualifiedName nameBFCSINavRTESTwoKeyNav =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCSINavRTESTwoKeyNav");
+
+  public static final FullQualifiedName nameBFCStringRTESTwoKeyNav =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFCStringRTESTwoKeyNav");
+
+  public static final FullQualifiedName nameBFESTwoKeyNavRTESTwoKeyNav =
+      new FullQualifiedName(SchemaProvider.nameSpace, "BFESTwoKeyNavRTESTwoKeyNav");
+
+  // 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 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 nameUFCRTCTTwoPrimParam =
+      new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTCTTwoPrimParam");
+  public static final FullQualifiedName nameUFCRTESMixPrimCollCompTwoParam =
+      new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTESMixPrimCollCompTwoParam");
+  public static final FullQualifiedName nameUFCRTESTwoKeyNavParam =
+      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 nameUFCRTETTwoKeyNavParam =
+      new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTETTwoKeyNavParam");
+
+  public static final FullQualifiedName nameUFCRTETTwoKeyNavParamCTTwoPrim =
+      new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTETTwoKeyNavParamCTTwoPrim");
+
+  public static final FullQualifiedName nameUFCRTString =
+      new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTString");
+
+  public static final FullQualifiedName nameUFCRTStringTwoParam =
+      new FullQualifiedName(SchemaProvider.nameSpace, "UFCRTStringTwoParam");
+
+  public static final FullQualifiedName nameUFNRTESMixPrimCollCompTwoParam =
+      new FullQualifiedName(SchemaProvider.nameSpace, "UFNRTESMixPrimCollCompTwoParam");
+  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)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFNRTInt16")
+              .setParameters(new ArrayList<Parameter>())
+              .setReturnType(
+                  new ReturnType().setType(PropertyProvider.nameInt16))
+          );
+
+    } else if (functionName.equals(nameUFCRTETKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTETKeyNav")
+              .setParameters(new ArrayList<Parameter>())
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETKeyNav).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameUFCRTETTwoKeyNavParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTETTwoKeyNavParam")
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)
+              )
+          );
+
+    } else if (functionName.equals(nameUFCRTETTwoKeyNavParamCTTwoPrim)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTETTwoKeyNavParamCTTwoPrim")
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("ParameterCTTwoPrim").setType(ComplexTypeProvider.nameCTTwoPrim)
+                      .setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)
+              )
+          );
+
+    } else if (functionName.equals(nameUFCRTStringTwoParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTStringTwoParam")
+              .setParameters(Arrays.asList(
+                  new Parameter()
+                      .setName("ParameterInt16")
+                      .setType(PropertyProvider.nameInt16)
+                      .setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(PropertyProvider.nameString).setNullable(false)),
+          new Function()
+              .setName("UFCRTStringTwoParam")
+              .setParameters(Arrays.asList(
+                  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).setNullable(false))
+
+          );
+
+    } else if (functionName.equals(nameUFCRTESTwoKeyNavParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTESTwoKeyNavParam")
+              .setParameters(Arrays.asList(
+                  new Parameter()
+                      .setName("ParameterInt16")
+                      .setType(PropertyProvider.nameInt16)
+                      .setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameUFCRTString)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTString")
+
+              .setComposable(true)
+              .setParameters(new ArrayList<Parameter>())
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(PropertyProvider.nameString).setNullable(false)
+              )
+          );
+
+    } else if (functionName.equals(nameUFCRTCollStringTwoParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTCollStringTwoParam")
+              .setParameters(Arrays.asList(
+                  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).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameUFCRTCollString)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTCollString")
+              .setParameters(new ArrayList<Parameter>())
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(PropertyProvider.nameString).setCollection(true).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameUFCRTCTAllPrimTwoParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTCTAllPrimTwoParam")
+              .setParameters(Arrays.asList(
+                  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).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameUFCRTCTTwoPrimParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTCTTwoPrimParam")
+              .setParameters(Arrays.asList(
+                  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).setNullable(false))
+          );
+    } else if (functionName.equals(nameUFCRTCollCTTwoPrimParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTCollCTTwoPrimParam")
+              .setParameters(Arrays.asList(
+                  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).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameUFCRTCTTwoPrim)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTCTTwoPrim")
+              .setParameters(new ArrayList<Parameter>())
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setNullable(false))
+          );
+
+    } 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).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameUFCRTETMedia)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTETMedia")
+              .setParameters(new ArrayList<Parameter>())
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETMedia).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameUFNRTESMixPrimCollCompTwoParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFNRTESMixPrimCollCompTwoParam")
+              .setParameters(Arrays.asList(
+                  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)
+                      .setNullable(false))
+          );
+
+    } else if (functionName.equals(nameUFCRTETAllPrimTwoParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTETAllPrimTwoParam")
+              .setParameters(Arrays.asList(
+                  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).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameUFCRTESMixPrimCollCompTwoParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTESMixPrimCollCompTwoParam")
+              .setParameters(Arrays.asList(
+                  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)
+                      .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(
+              new Function()
+                  .setName("BFCESTwoKeyNavRTESTwoKeyNav")
+                  .setBound(true)
+                  .setParameters(
+                      Arrays.asList(
+                          new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                              .setCollection(true).setNullable(false)))
+                  .setComposable(true)
+                  .setReturnType(
+                      new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                          .setNullable(false)),
+
+              new Function()
+                  .setName("BFCESTwoKeyNavRTESTwoKeyNav")
+                  .setBound(true)
+                  .setParameters(
+                      Arrays.asList(
+                          new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                              .setCollection(true).setNullable(false),
+                          new Parameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                              .setCollection(false).setNullable(false)))
+                  .setComposable(true)
+                  .setReturnType(
+                      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).setNullable(false)))
+                  .setComposable(true)
+                  .setReturnType(
+                      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).setNullable(false),
+                          new Parameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                              .setCollection(false).setNullable(false)))
+                  .setComposable(true)
+                  .setReturnType(
+                      new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                          .setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCStringRTESTwoKeyNav)) {
+      return Arrays.asList(
+          new Function().setName("BFCStringRTESTwoKeyNav")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(PropertyProvider.nameString).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCETBaseTwoKeyNavRTETTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCETBaseTwoKeyNavRTETTwoKeyNav")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)
+                      .setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)
+              )
+          );
+
+    } else if (functionName.equals(nameBFCESBaseTwoKeyNavRTESBaseTwoKey)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCESBaseTwoKeyNavRTESBaseTwoKey")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)
+                      .setCollection(true).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true)
+                      .setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCESAllPrimRTCTAllPrim)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCESAllPrimRTCTAllPrim")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETAllPrim)
+                          .setCollection(true).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTAllPrim).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCESTwoKeyNavRTCTTwoPrim)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCESTwoKeyNavRTCTTwoPrim")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                          .setCollection(true).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCESTwoKeyNavRTCollCTTwoPrim)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCESTwoKeyNavRTCollCTTwoPrim")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                          .setCollection(true).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setCollection(true).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCESTwoKeyNavRTString)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCESTwoKeyNavRTString")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                          .setCollection(true).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(PropertyProvider.nameString).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCESTwoKeyNavRTCollString)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCESTwoKeyNavRTCollString")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                          .setCollection(true).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(PropertyProvider.nameString).setCollection(true).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCETTwoKeyNavRTESTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCETTwoKeyNavRTESTwoKeyNav")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                      .setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCETBaseTwoKeyNavRTESTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCETBaseTwoKeyNavRTESTwoKeyNav")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)
+                          .setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCSINavRTESTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCSINavRTESTwoKeyNav")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(
+                          false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCETBaseTwoKeyNavRTESBaseTwoKey)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCETBaseTwoKeyNavRTESBaseTwoKey")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)
+                          .setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true).setNullable(
+                      false))
+          );
+
+    } else if (functionName.equals(nameBFCCollStringRTESTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCCollStringRTESTwoKeyNav")
+              .setBound(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).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCCTPrimCompRTESTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCCTPrimCompRTESTwoKeyNav")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp).setNullable(
+                          false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCCTPrimCompRTESBaseTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCCTPrimCompRTESBaseTwoKeyNav")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp).setNullable(
+                          false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true).setNullable(
+                      false))
+          );
+
+    } else if (functionName.equals(nameBFCCollCTPrimCompRTESAllPrim)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCCollCTPrimCompRTESAllPrim")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp)
+                          .setCollection(true).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETAllPrim).setCollection(true).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCESTwoKeyNavRTTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCESTwoKeyNavRTTwoKeyNav")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                          .setCollection(true).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCESKeyNavRTETKeyNav)) {
+      return Arrays
+          .asList(
+          new Function()
+              .setName("BFCESKeyNavRTETKeyNav")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav).setCollection(
+                          true).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETKeyNav).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCETKeyNavRTETKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCETKeyNavRTETKeyNav")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETKeyNav).setNullable(false))
+          );
+    } else if (functionName.equals(nameBFESTwoKeyNavRTESTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFESTwoKeyNavRTESTwoKeyNav")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                          .setCollection(true).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(false))
+
+          );
+
+    } else if (functionName.equals(nameBFCETTwoKeyNavRTETTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCETTwoKeyNavRTETTwoKeyNav")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(
+                          false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCETTwoKeyNavRTCTTwoPrim)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCETTwoKeyNavRTCTTwoPrim")
+              .setBound(true)
+              .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.nameCTNavFiveProp).setCollection(true)
+                      .setNullable(false))
+          );
+    } else if (functionName.equals(nameBFCESTwoKeyNavRTStringParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCESTwoKeyNavRTStringParam")
+              .setBound(true)
+              .setParameters(
+                  Arrays.asList(
+                      new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                          .setCollection(true).setNullable(false),
+                      new Parameter().setName("ParameterComplex").setType(ComplexTypeProvider.nameCTTwoPrim)
+                          .setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(PropertyProvider.nameString).setNullable(false))
+          );
+
+    } else if (functionName.equals(nameBFCESKeyNavRTETKeyNavParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCESKeyNavRTETKeyNavParam")
+              .setBound(true)
+              .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).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).setNullable(
+                          false),
+                      new Parameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                          .setNullable(false)))
+              .setComposable(true)
+              .setReturnType(new ReturnType()
+                  .setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)
+              )
+          );
+    } else if (functionName.equals(nameBFCCTPrimCompRTESTwoKeyNavParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCCTPrimCompRTESTwoKeyNavParam")
+              .setBound(true)
+              .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).setNullable(false))
+          );
+    }
+
+    return null;
+  }
+
+}