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:27 UTC

[08/17] [OLINGO-168] Refactor Tech Provider

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/59ef14f4/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
new file mode 100644
index 0000000..f9e15ec
--- /dev/null
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/FunctionProvider.java
@@ -0,0 +1,794 @@
+/*
+ * 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");
+
+  // 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 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 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.nameString))
+          );
+
+    } else if (functionName.equals(nameUFCRTETKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTETKeyNav")
+              .setParameters(new ArrayList<Parameter>())
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETKeyNav))
+          );
+
+    } else if (functionName.equals(nameUFCRTETTwoKeyNavParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTETTwoKeyNavParam")
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav)
+              )
+          );
+
+    } else if (functionName.equals(nameUFCRTETTwoKeyNavParamCTTwoPrim)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTETTwoKeyNavParamCTTwoPrim")
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("ParameterCTTwoPrim").setType(ComplexTypeProvider.nameCTTwoPrim)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav)
+              )
+          );
+
+    } else if (functionName.equals(nameUFCRTStringTwoParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTStringTwoParam")
+              .setParameters(Arrays.asList(
+                  new Parameter()
+                      .setName("ParameterInt16")
+                      .setType(PropertyProvider.nameInt16)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(PropertyProvider.nameString)),
+          new Function()
+              .setName("UFCRTStringTwoParam")
+              .setParameters(Arrays.asList(
+                  new Parameter()
+                      .setName("ParameterString")
+                      .setType(PropertyProvider.nameString),
+                  new Parameter()
+                      .setName("ParameterInt16")
+                      .setType(PropertyProvider.nameInt16)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(PropertyProvider.nameString))
+
+          );
+
+    } else if (functionName.equals(nameUFCRTESTwoKeyNavParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTESTwoKeyNavParam")
+              .setParameters(Arrays.asList(
+                  new Parameter()
+                      .setName("ParameterInt16")
+                      .setType(PropertyProvider.nameInt16)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+          );
+
+    } 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)
+              )
+          );
+
+    } else if (functionName.equals(nameUFCRTCollStringTwoParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTCollStringTwoParam")
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString),
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(PropertyProvider.nameString).setCollection(true))
+          );
+
+    } 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))
+          );
+
+    } else if (functionName.equals(nameUFCRTCTAllPrimTwoParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTCTAllPrimTwoParam")
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString),
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTAllPrim))
+          );
+
+    } else if (functionName.equals(nameUFCRTCTTwoPrimParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTCTTwoPrimParam")
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString),
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim))
+          );
+    } 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)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setCollection(true))
+          );
+
+    } else if (functionName.equals(nameUFCRTCTTwoPrim)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTCTTwoPrim")
+              .setParameters(new ArrayList<Parameter>())
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim))
+          );
+
+    } else if (functionName.equals(nameUFCRTCollCTTwoPrim)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTCTTwoPrim")
+
+              .setParameters(new ArrayList<Parameter>())
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setCollection(true))
+          );
+
+    } else if (functionName.equals(nameUFCRTETMedia)) {
+      return Arrays.asList(
+          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))
+          );
+
+    } else if (functionName.equals(nameUFNRTESMixPrimCollCompTwoParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFNRTESMixPrimCollCompTwoParam")
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString),
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)))
+              .setComposable(false)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETMixPrimCollComp).setCollection(true))
+          );
+
+    } else if (functionName.equals(nameUFCRTETAllPrimTwoParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTETAllPrimTwoParam")
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString),
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETAllPrim))
+          );
+
+    } else if (functionName.equals(nameUFCRTESMixPrimCollCompTwoParam)) {
+      return Arrays.asList(
+          new Function()
+              .setName("UFCRTESMixPrimCollCompTwoParam")
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString),
+                  new Parameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)
+                  ))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETMixPrimCollComp).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)))
+                  .setComposable(true)
+                  .setReturnType(
+                      new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)),
+
+              new Function()
+                  .setName("BFCESTwoKeyNavRTESTwoKeyNav")
+                  .setBound(true)
+                  .setParameters(
+                      Arrays.asList(
+                          new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                              .setCollection(true),
+                          new Parameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                              .setCollection(false)))
+                  .setComposable(true)
+                  .setReturnType(
+                      new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)),
+              new Function()
+                  .setName("BFCESTwoKeyNavRTESTwoKeyNav")
+                  .setBound(true)
+                  .setParameters(
+                      Arrays.asList(
+                          new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav)
+                              .setCollection(true)))
+                  .setComposable(true)
+                  .setReturnType(
+                      new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)),
+              new Function()
+                  .setName("BFCESTwoKeyNavRTESTwoKeyNav")
+                  .setBound(true)
+                  .setParameters(
+                      Arrays.asList(new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav)
+                          .setCollection(true),
+                          new Parameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                              .setCollection(false)))
+                  .setComposable(true)
+                  .setReturnType(
+                      new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+          );
+
+    } else if (functionName.equals(nameBFCStringRTESTwoKeyNav)) {
+      return Arrays.asList(
+          new Function().setName("BFCStringRTESTwoKeyNav")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(PropertyProvider.nameString)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+          );
+
+    } else if (functionName.equals(nameBFCETBaseTwoKeyNavRTETTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCETBaseTwoKeyNavRTETTwoKeyNav")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav)
+              )
+          );
+
+    } 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)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true))
+          );
+
+    } 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)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTAllPrim))
+          );
+
+    } 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)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim))
+          );
+
+    } 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)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setCollection(true))
+          );
+
+    } 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)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(PropertyProvider.nameString))
+          );
+
+    } 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)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(PropertyProvider.nameString).setCollection(true))
+          );
+
+    } else if (functionName.equals(nameBFCETTwoKeyNavRTESTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCETTwoKeyNavRTESTwoKeyNav")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+          );
+
+    } else if (functionName.equals(nameBFCETBaseTwoKeyNavRTESTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCETBaseTwoKeyNavRTESTwoKeyNav")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+          );
+
+    } else if (functionName.equals(nameBFCSINavRTESTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCSINavRTESTwoKeyNav")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+          );
+
+    } else if (functionName.equals(nameBFCETBaseTwoKeyNavRTESBaseTwoKey)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCETBaseTwoKeyNavRTESBaseTwoKey")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true))
+          );
+
+    } 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)))
+              .setComposable(true)
+              .setReturnType(new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+          );
+
+    } else if (functionName.equals(nameBFCCTPrimCompRTESTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCCTPrimCompRTESTwoKeyNav")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+          );
+
+    } else if (functionName.equals(nameBFCCTPrimCompRTESBaseTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCCTPrimCompRTESBaseTwoKeyNav")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true))
+          );
+
+    } 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)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETAllPrim).setCollection(true))
+          );
+
+    } 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)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav))
+          );
+
+    } 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)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETKeyNav))
+          );
+
+    } else if (functionName.equals(nameBFCETKeyNavRTETKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCETKeyNavRTETKeyNav")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETKeyNav))
+          );
+    } 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)))
+              .setComposable(true)
+              .setReturnType(new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+
+          );
+
+    } else if (functionName.equals(nameBFCETTwoKeyNavRTETTwoKeyNav)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCETTwoKeyNavRTETTwoKeyNav")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav))
+          );
+
+    } else if (functionName.equals(nameBFCETTwoKeyNavRTCTTwoPrim)) {
+      return Arrays.asList(
+          new Function()
+              .setName("BFCETTwoKeyNavRTCTTwoPrim")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new Parameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(ComplexTypeProvider.nameCTTwoPrim))
+          );
+    } 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),
+                      new Parameter().setName("ParameterComplex").setType(ComplexTypeProvider.nameCTTwoPrim)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(PropertyProvider.nameString))
+          );
+
+    } 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),
+                  new Parameter().setName("ParameterString").setType(PropertyProvider.nameString)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETKeyNav))
+          );
+    } 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)))
+              .setComposable(true)
+              .setReturnType(new ReturnType()
+                  .setType(EntityTypeProvider.nameETTwoKeyNav)
+              )
+          );
+    } 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)))
+              .setComposable(true)
+              .setReturnType(
+                  new ReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true))
+          );
+    }
+
+    return null;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/59ef14f4/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
new file mode 100644
index 0000000..a237ebd
--- /dev/null
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/PropertyProvider.java
@@ -0,0 +1,308 @@
+/*
+ * 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 org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeKind;
+import org.apache.olingo.server.api.edm.provider.NavigationProperty;
+import org.apache.olingo.server.api.edm.provider.Property;
+
+public class PropertyProvider {
+
+  // Primitive Type Names
+  public static final FullQualifiedName nameBinary = EdmPrimitiveTypeKind.Binary.getFullQualifiedName();
+  public static final FullQualifiedName nameBoolean = EdmPrimitiveTypeKind.Boolean.getFullQualifiedName();
+  public static final FullQualifiedName nameByte = EdmPrimitiveTypeKind.Byte.getFullQualifiedName();
+
+  public static final FullQualifiedName nameDate = EdmPrimitiveTypeKind.Date.getFullQualifiedName();
+  public static final FullQualifiedName nameDateTimeOffset =
+      EdmPrimitiveTypeKind.DateTimeOffset.getFullQualifiedName();
+
+  public static final FullQualifiedName nameDecimal = EdmPrimitiveTypeKind.Decimal.getFullQualifiedName();
+  public static final FullQualifiedName nameDouble = EdmPrimitiveTypeKind.Double.getFullQualifiedName();
+  public static final FullQualifiedName nameDuration = EdmPrimitiveTypeKind.Duration.getFullQualifiedName();
+
+  public static final FullQualifiedName nameGuid = EdmPrimitiveTypeKind.Guid.getFullQualifiedName();
+  public static final FullQualifiedName nameInt16 = EdmPrimitiveTypeKind.Int16.getFullQualifiedName();
+  public static final FullQualifiedName nameInt32 = EdmPrimitiveTypeKind.Int32.getFullQualifiedName();
+  public static final FullQualifiedName nameInt64 = EdmPrimitiveTypeKind.Int64.getFullQualifiedName();
+
+  public static final FullQualifiedName nameSByte = EdmPrimitiveTypeKind.SByte.getFullQualifiedName();
+  public static final FullQualifiedName nameSingle = EdmPrimitiveTypeKind.Single.getFullQualifiedName();
+
+  public static final FullQualifiedName nameString = EdmPrimitiveTypeKind.String.getFullQualifiedName();
+  public static final FullQualifiedName nameTimeOfDay = EdmPrimitiveTypeKind.TimeOfDay.getFullQualifiedName();
+
+  // Primitive Properties --------------------------------------------------------------------------------------------
+  public static final Property collPropertyBinary = new Property()
+      .setName("CollPropertyBinary")
+      .setType(nameBinary)
+      .setCollection(true);
+
+  public static final Property collPropertyBoolean = new Property()
+      .setName("CollPropertyBoolean")
+      .setType(nameBoolean)
+      .setCollection(true);
+
+  public static final Property collPropertyByte = new Property()
+      .setName("CollPropertyByte")
+      .setType(nameByte)
+      .setCollection(true);
+
+  public static final Property collPropertyDate = new Property()
+      .setName("CollPropertyDate")
+      .setType(nameDate)
+      .setCollection(true);
+
+  public static final Property collPropertyDateTimeOffset = new Property()
+      .setName("CollPropertyDateTimeOffset")
+      .setType(nameDateTimeOffset)
+      .setCollection(true);
+
+  public static final Property collPropertyDecimal = new Property()
+      .setName("CollPropertyDecimal")
+      .setType(nameDecimal)
+      .setCollection(true);
+
+  public static final Property collPropertyDouble = new Property()
+      .setName("CollPropertyDouble")
+      .setType(nameDouble)
+      .setCollection(true);
+
+  public static final Property collPropertyDuration = new Property()
+      .setName("CollPropertyDuration")
+      .setType(nameDuration)
+      .setCollection(true);
+  public static final Property collPropertyGuid = new Property()
+      .setName("CollPropertyGuid")
+      .setType(nameGuid)
+      .setCollection(true);
+  public static final Property collPropertyInt16 = new Property()
+      .setName("CollPropertyInt16")
+      .setType(nameInt16)
+      .setCollection(true);
+  public static final Property collPropertyInt32 = new Property()
+      .setName("CollPropertyInt32")
+      .setType(nameInt32)
+      .setCollection(true);
+  public static final Property collPropertyInt64 = new Property()
+      .setName("CollPropertyInt64")
+      .setType(nameInt64)
+      .setCollection(true);
+
+  public static final Property collPropertySByte = new Property()
+      .setName("CollPropertySByte")
+      .setType(nameSByte)
+      .setCollection(true);
+
+  public static final Property collPropertySingle = new Property()
+      .setName("CollPropertySingle")
+      .setType(nameSingle)
+      .setCollection(true);
+
+  public static final Property collPropertyString = new Property()
+      .setName("CollPropertyString")
+      .setType(nameString)
+      .setCollection(true);
+
+  public static final Property collPropertyTimeOfDay = new Property()
+      .setName("CollPropertyTimeOfDay")
+      .setType(nameTimeOfDay)
+      .setCollection(true);
+
+  public static final Property propertyBinary = new Property()
+      .setName("PropertyBinary")
+      .setType(nameBinary);
+  public static final Property propertyBoolean = new Property()
+      .setName("PropertyBoolean")
+      .setType(nameBoolean);
+  public static final Property propertyByte = new Property()
+      .setName("PropertyByte")
+      .setType(nameByte);
+
+  public static final Property propertyDate = new Property()
+      .setName("PropertyDate")
+      .setType(nameDate);
+
+  public static final Property propertyDateTimeOffset = new Property()
+      .setName("PropertyDateTimeOffset")
+      .setType(nameDateTimeOffset);
+
+  public static final Property propertyDecimal = new Property()
+      .setName("PropertyDecimal")
+      .setType(nameDecimal);
+
+  public static final Property propertyDouble = new Property()
+      .setName("PropertyDouble")
+      .setType(nameDouble);
+
+  public static final Property propertyDuration = new Property()
+      .setName("PropertyDuration")
+      .setType(nameDuration);
+
+  public static final Property propertyGuid = new Property()
+      .setName("PropertyGuid")
+      .setType(nameGuid);
+
+  public static final Property propertyInt16 = new Property()
+      .setName("PropertyInt16")
+      .setType(nameInt16);
+
+  public static final Property propertyInt16_NotNullable = new Property()
+      .setName("PropertyInt16")
+      .setType(nameInt16)
+      .setNullable(false);
+  public static final Property propertyInt32 = new Property()
+      .setName("PropertyInt32")
+      .setType(nameInt32);
+
+  public static final Property propertyInt64 = new Property()
+      .setName("PropertyInt64")
+      .setType(nameInt64);
+
+  public static final Property propertySByte = new Property()
+      .setName("PropertySByte")
+      .setType(nameSByte);
+
+  public static final Property propertySingle = new Property()
+      .setName("PropertySingle")
+      .setType(nameSingle);
+
+  public static final Property propertyString = new Property()
+      .setName("PropertyString")
+      .setType(nameString);
+
+  public static final Property propertyString_NotNullable = new Property()
+      .setName("PropertyString")
+      .setType(nameString);
+
+  public static final Property propertyTimeOfDay = new Property().setName("PropertyTimeOfDay")
+      .setType(nameTimeOfDay);
+
+  /*
+   * TODO add propertyStream
+   * Property propertyStream = new Property()
+   * .setName("PropertyStream")
+   * .setType(EdmStream.getFullQualifiedName());
+   */
+
+  // Complex Properties ----------------------------------------------------------------------------------------------
+  public static final Property collPropertyComplex_CTPrimComp = new Property()
+      .setName("CollPropertyComplex")
+      .setType(ComplexTypeProvider.nameCTPrimComp)
+      .setCollection(true);
+
+  public static final Property collPropertyComplex_CTTwoPrim = new Property()
+      .setName("CollPropertyComplex")
+      .setType(ComplexTypeProvider.nameCTTwoPrim)
+      .setCollection(true);
+
+  public static final Property propertyComplex_CTAllPrim = new Property()
+      .setName("PropertyComplex")
+      .setType(ComplexTypeProvider.nameCTAllPrim);
+
+  public static final Property propertyComplex_CTCollAllPrim = new Property()
+      .setName("PropertyComplex")
+      .setType(ComplexTypeProvider.nameCTCollAllPrim);
+
+  public static final Property propertyComplex_CTCompCollComp = new Property()
+      .setName("PropertyComplex")
+      .setType(ComplexTypeProvider.nameCTCompCollComp);
+
+  public static final Property propertyComplex_CTCompComp = new Property()
+      .setName("PropertyComplex")
+      .setType(ComplexTypeProvider.nameCTCompComp);
+
+  public static final Property propertyComplex_CTNavFiveProp = new Property()
+      .setName("PropertyComplex")
+      .setType(ComplexTypeProvider.nameCTNavFiveProp);
+
+  public static final Property propertyComplex_CTPrimComp_NotNullable = new Property()
+      .setName("PropertyComplex")
+      .setType(ComplexTypeProvider.nameCTPrimComp);
+
+  public static final Property propertyComplex_CTTwoPrim = new Property()
+      .setName("PropertyComplex")
+      .setType(ComplexTypeProvider.nameCTTwoPrim);
+
+  public static final Property propertyComplexAllPrim_CTAllPrim = new Property()
+      .setName("PropertyComplexAllPrim")
+      .setType(ComplexTypeProvider.nameCTAllPrim);
+
+  public static final Property propertyComplexComplex_CTCompComp = new Property()
+      .setName("PropertyComplexComplex")
+      .setType(ComplexTypeProvider.nameCTCompComp);
+
+  public static final Property propertyComplexEnum_CTPrimEnum_NotNullable = new Property()
+      .setName("PropertyComplexEnum")
+      .setType(ComplexTypeProvider.nameCTPrimEnum);
+
+  public static final Property propertyComplexTwoPrim_CTTwoPrim = new Property()
+      .setName("PropertyComplexTwoPrim")
+      .setType(ComplexTypeProvider.nameCTTwoPrim);
+
+  public static final Property propertyMixedPrimCollComp_CTMixPrimCollComp = new Property()
+      .setName("PropertyMixedPrimCollComp")
+      .setType(ComplexTypeProvider.nameCTMixPrimCollComp)
+      .setCollection(true);
+
+  // Navigation Properties -------------------------------------------------------------------------------------------
+  public static final NavigationProperty collectionNavPropertyETKeyNavMany_ETKeyNav = new NavigationProperty()
+      .setName("NavPropertyETKeyNavMany")
+      .setType(EntityTypeProvider.nameETKeyNav)
+      .setCollection(true);
+
+  public static final NavigationProperty collectionNavPropertyETMediaMany_ETMedia = new NavigationProperty()
+      .setName("NavPropertyETMediaMany")
+      .setType(EntityTypeProvider.nameETMedia)
+      .setCollection(true);
+
+  public static final NavigationProperty collectionNavPropertyETTwoKeyNavMany_ETTwoKeyNav = new NavigationProperty()
+      .setName("NavPropertyETTwoKeyNavMany")
+      .setType(EntityTypeProvider.nameETTwoKeyNav)
+      .setCollection(true)
+      .setPartner("NavPropertyETKeyNavOne");
+
+  public static final NavigationProperty collectionNavPropertyETTwoKeyNavOne_ETTwoKeyNav = new NavigationProperty()
+      .setName("NavPropertyETTwoKeyNavOne")
+      .setType(EntityTypeProvider.nameETTwoKeyNav);
+
+  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()
+      .setName("NavPropertyETKeyPrimNavOne")
+      .setType(EntityTypeProvider.nameETKeyPrimNav);
+
+  public static final NavigationProperty navPropertyETTwoKeyNavOne_ETTwoKeyNav = new NavigationProperty()
+      .setName("NavPropertyETTwoKeyNavOne")
+      .setType(EntityTypeProvider.nameETTwoKeyNav);
+
+  // EnumProperties --------------------------------------------------------------------------------------------------
+  public static final Property propertyEnumString_ENString = new Property()
+      .setName("PropertyEnumString")
+      .setType(EnumTypeProvider.nameENString);
+
+  // TypeDefinition Properties ---------------------------------------------------------------------------------------
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/59ef14f4/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/SchemaProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/SchemaProvider.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/SchemaProvider.java
new file mode 100644
index 0000000..6a0708f
--- /dev/null
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/SchemaProvider.java
@@ -0,0 +1,247 @@
+/*
+ * 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.List;
+
+import org.apache.olingo.commons.api.ODataException;
+import org.apache.olingo.server.api.edm.provider.Action;
+import org.apache.olingo.server.api.edm.provider.ActionImport;
+import org.apache.olingo.server.api.edm.provider.ComplexType;
+import org.apache.olingo.server.api.edm.provider.EntityContainer;
+import org.apache.olingo.server.api.edm.provider.EntitySet;
+import org.apache.olingo.server.api.edm.provider.EntityType;
+import org.apache.olingo.server.api.edm.provider.EnumType;
+import org.apache.olingo.server.api.edm.provider.Function;
+import org.apache.olingo.server.api.edm.provider.FunctionImport;
+import org.apache.olingo.server.api.edm.provider.Schema;
+import org.apache.olingo.server.api.edm.provider.Singleton;
+
+public class SchemaProvider {
+
+  private EdmTechProvider prov;
+
+  public static final String nameSpace = "com.sap.odata.test1";
+
+  public SchemaProvider(EdmTechProvider prov) {
+    this.prov = prov;
+  }
+
+  public List<Schema> getSchemas() throws ODataException {
+    List<Schema> schemas = new ArrayList<Schema>();
+    Schema schema = new Schema();
+    schema.setNamespace("com.sap.odata.test1");
+    schema.setAlias("Namespace1_Alias");
+    schemas.add(schema);
+    // EnumTypes
+    List<EnumType> enumTypes = new ArrayList<EnumType>();
+    schema.setEnumTypes(enumTypes);
+    enumTypes.add(prov.getEnumType(EnumTypeProvider.nameENString));
+    // EntityTypes
+    List<EntityType> entityTypes = new ArrayList<EntityType>();
+    schema.setEntityTypes(entityTypes);
+
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETAllPrim));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETCollAllPrim));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETTwoPrim));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETMixPrimCollComp));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETTwoKeyTwoPrim));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETBase));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETTwoBase));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETAllKey));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETCompAllPrim));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETCompCollAllPrim));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETCompComp));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETCompCollComp));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETMedia));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETFourKeyAlias));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETServerSidePaging));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETAllNullable));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETKeyNav));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETTwoKeyNav));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETBaseTwoKeyNav));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETTwoBaseTwoKeyNav));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETCompMixPrimCollComp));
+    entityTypes.add(prov.getEntityType(EntityTypeProvider.nameETKeyPrimNav));
+
+    // ComplexTypes
+    List<ComplexType> complexType = new ArrayList<ComplexType>();
+    schema.setComplexTypes(complexType);
+    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTPrim));
+    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTAllPrim));
+    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTCollAllPrim));
+    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTTwoPrim));
+    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTMixPrimCollComp));
+    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTBase));
+    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTTwoBase));
+    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTCompComp));
+    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTCompCollComp));
+    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTPrimComp));
+    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTNavFiveProp));
+    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTPrimEnum));
+    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTBasePrimCompNav));
+    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTTwoBasePrimCompNav));
+    complexType.add(prov.getComplexType(ComplexTypeProvider.nameCTCompNav));
+
+    // TypeDefinitions
+
+    // Actions
+    List<Action> actions = new ArrayList<Action>();
+    schema.setActions(actions);
+    actions.addAll(prov.getActions(ActionProvider.nameUARTPrimParam));
+    actions.addAll(prov.getActions(ActionProvider.nameUARTPrimCollParam));
+    actions.addAll(prov.getActions(ActionProvider.nameUARTCompParam));
+    actions.addAll(prov.getActions(ActionProvider.nameUARTCompCollParam));
+    actions.addAll(prov.getActions(ActionProvider.nameUARTETParam));
+    actions.addAll(prov.getActions(ActionProvider.nameUARTETCollAllPrimParam));
+    actions.addAll(prov.getActions(ActionProvider.nameBAETTwoKeyNavRTETTwoKeyNav));
+    actions.addAll(prov.getActions(ActionProvider.nameBAESAllPrimRTETAllPrim));
+    actions.addAll(prov.getActions(ActionProvider.nameBAESTwoKeyNavRTESTwoKeyNav));
+    actions.addAll(prov.getActions(ActionProvider.nameBAETBaseTwoKeyNavRTETBaseTwoKeyNav));
+    actions.addAll(prov.getActions(ActionProvider.nameBAETTwoBaseTwoKeyNavRTETBaseTwoKeyNav));
+
+    // Functions
+    List<Function> functions = new ArrayList<Function>();
+    schema.setFunctions(functions);
+
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFNRTInt16));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTETKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTETTwoKeyNavParam));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTETTwoKeyNavParamCTTwoPrim));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTStringTwoParam));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTESTwoKeyNavParam));
+    // TODO: check why it exists twice
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTString));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTCollStringTwoParam));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTCollString));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTCTAllPrimTwoParam));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTCTTwoPrimParam));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTCollCTTwoPrimParam));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTCTTwoPrim));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTCollCTTwoPrim));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTETMedia));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFNRTESMixPrimCollCompTwoParam));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTETAllPrimTwoParam));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameUFCRTESMixPrimCollCompTwoParam));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCESTwoKeyNavRTESTwoKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCStringRTESTwoKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCETBaseTwoKeyNavRTETTwoKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCESBaseTwoKeyNavRTESBaseTwoKey));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCESAllPrimRTCTAllPrim));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCESTwoKeyNavRTCTTwoPrim));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCESTwoKeyNavRTCollCTTwoPrim));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCESTwoKeyNavRTString));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCESTwoKeyNavRTCollString));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCETTwoKeyNavRTESTwoKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCETBaseTwoKeyNavRTESTwoKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCSINavRTESTwoKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCETBaseTwoKeyNavRTESBaseTwoKey));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCCollStringRTESTwoKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCCTPrimCompRTESTwoKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCCTPrimCompRTESBaseTwoKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCCollCTPrimCompRTESAllPrim));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCESTwoKeyNavRTTwoKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCESKeyNavRTETKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCETKeyNavRTETKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFESTwoKeyNavRTESTwoKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCETTwoKeyNavRTETTwoKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCETTwoKeyNavRTCTTwoPrim));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCESTwoKeyNavRTStringParam));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCESKeyNavRTETKeyNavParam));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCCTPrimCompRTETTwoKeyNavParam));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBAETTwoKeyNavRTETTwoKeyNav));
+    functions.addAll(prov.getFunctions(FunctionProvider.nameBFCCTPrimCompRTESTwoKeyNavParam));
+
+    // EntityContainer
+    EntityContainer container = new EntityContainer();
+    schema.setEntityContainer(container);
+    container.setName(ContainerProvider.nameContainer.getName());
+
+    // EntitySets
+    List<EntitySet> entitySets = new ArrayList<EntitySet>();
+    container.setEntitySets(entitySets);
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESAllPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCollAllPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESTwoPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESMixPrimCollComp"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESBase"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESTwoBase"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESTwoKeyTwoPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESBaseTwoKeyTwoPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESTwoBaseTwoKeyTwoPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESAllKey"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompAllPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompCollAllPrim"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompComp"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompCollComp"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESMedia"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESKeyTwoKeyComp"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESInvisible"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESServerSidePaging"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESAllNullable"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESKeyNav"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESTwoKeyNav"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESBaseTwoKeyNav"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESCompMixPrimCollComp"));
+    entitySets.add(prov.getEntitySet(ContainerProvider.nameContainer, "ESFourKeyAlias"));
+
+    // Singletons
+    List<Singleton> singletons = new ArrayList<Singleton>();
+    container.setSingletons(singletons);
+    singletons.add(prov.getSingleton(ContainerProvider.nameContainer, "SI"));
+    singletons.add(prov.getSingleton(ContainerProvider.nameContainer, "SINav"));
+    singletons.add(prov.getSingleton(ContainerProvider.nameContainer, "SIMedia"));
+
+    // ActionImports
+    List<ActionImport> actionImports = new ArrayList<ActionImport>();
+    container.setActionImports(actionImports);
+    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTPrimParam"));
+    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTPrimCollParam"));
+    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTCompParam"));
+    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTCompCollParam"));
+    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTETParam"));
+    actionImports.add(prov.getActionImport(ContainerProvider.nameContainer, "AIRTETCollAllPrimParam"));
+
+    // FunctionImports
+    List<FunctionImport> functionImports = new ArrayList<FunctionImport>();
+    container.setFunctionImports(functionImports);
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FINRTInt16"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FINInvisibleRTInt16"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FINInvisible2RTInt16"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTETKeyNav"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTETTwoKeyNavParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTStringTwoParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCollStringTwoParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCTAllPrimTwoParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTESMixPrimCollCompTwoParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FINRTESMixPrimCollCompTwoParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCollCTTwoPrim"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTETMedia"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCTTwoPrimParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCTTwoPrim"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCollString"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTString"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTESTwoKeyNavParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCollCTTwoPrimParam"));
+
+    return schemas;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/59ef14f4/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/TypeDefinitionProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/TypeDefinitionProvider.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/TypeDefinitionProvider.java
new file mode 100644
index 0000000..879affd
--- /dev/null
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/testutil/techprovider/TypeDefinitionProvider.java
@@ -0,0 +1,30 @@
+/*
+ * 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 org.apache.olingo.commons.api.edm.FullQualifiedName;
+import org.apache.olingo.server.api.edm.provider.TypeDefinition;
+
+public class TypeDefinitionProvider {
+
+  public TypeDefinition getTypeDefinition(FullQualifiedName typeDefinitionName) {
+    return null;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/59ef14f4/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/UriInfoImplTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/UriInfoImplTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/UriInfoImplTest.java
index 4474e07..a9d516d 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/UriInfoImplTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/UriInfoImplTest.java
@@ -36,8 +36,8 @@ import org.apache.olingo.server.api.uri.UriInfoResource;
 import org.apache.olingo.server.api.uri.UriInfoService;
 import org.apache.olingo.server.api.uri.queryoption.CustomQueryOption;
 import org.apache.olingo.server.core.edm.provider.EdmProviderImpl;
-import org.apache.olingo.server.core.testutil.EdmTechProvider;
 import org.apache.olingo.server.core.testutil.EdmTechTestProvider;
+import org.apache.olingo.server.core.testutil.techprovider.EntityTypeProvider;
 import org.apache.olingo.server.core.uri.queryoption.CountOptionImpl;
 import org.apache.olingo.server.core.uri.queryoption.CustomQueryOptionImpl;
 import org.apache.olingo.server.core.uri.queryoption.ExpandOptionImpl;
@@ -192,7 +192,7 @@ public class UriInfoImplTest {
   @Test
   public void testEntityTypeCast() {
     UriInfoImpl uriInfo = new UriInfoImpl();
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETKeyNav);
+    EdmEntityType entityType = edm.getEntityType(EntityTypeProvider.nameETKeyNav);
     assertNotNull(entityType);
 
     uriInfo.setEntityTypeCast(entityType);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/59ef14f4/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
index 0eb88e0..6cd6cf3 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/uri/UriResourceImplTest.java
@@ -40,8 +40,10 @@ import org.apache.olingo.server.core.edm.provider.EdmComplexTypeImpl;
 import org.apache.olingo.server.core.edm.provider.EdmEntitySetImpl;
 import org.apache.olingo.server.core.edm.provider.EdmProviderImpl;
 import org.apache.olingo.server.core.edm.provider.EdmSingletonImpl;
-import org.apache.olingo.server.core.testutil.EdmTechProvider;
 import org.apache.olingo.server.core.testutil.EdmTechTestProvider;
+import org.apache.olingo.server.core.testutil.techprovider.ActionProvider;
+import org.apache.olingo.server.core.testutil.techprovider.ComplexTypeProvider;
+import org.apache.olingo.server.core.testutil.techprovider.EntityTypeProvider;
 import org.apache.olingo.server.core.uri.queryoption.expression.ExpressionImpl;
 import org.apache.olingo.server.core.uri.queryoption.expression.LiteralImpl;
 import org.junit.Test;
@@ -72,10 +74,10 @@ public class UriResourceImplTest {
     assertEquals("", impl.toString());
 
     // action
-    EdmAction action = edm.getAction(EdmTechProvider.nameUARTETParam, null, null);
+    EdmAction action = edm.getAction(ActionProvider.nameUARTETParam, null, null);
     impl.setAction(action);
     assertEquals(action, impl.getAction());
-    assertEquals(EdmTechProvider.nameUARTETParam.getName(), impl.toString());
+    assertEquals(ActionProvider.nameUARTETParam.getName(), impl.toString());
 
     // action import
     impl = new UriResourceActionImpl();
@@ -125,7 +127,7 @@ public class UriResourceImplTest {
     UriResourceComplexPropertyImpl impl = new UriResourceComplexPropertyImpl();
     assertEquals(UriResourceKind.complexProperty, impl.getKind());
 
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETKeyNav);
+    EdmEntityType entityType = edm.getEntityType(EntityTypeProvider.nameETKeyNav);
     EdmProperty property = (EdmProperty) entityType.getProperty("PropertyComplex");
     impl.setProperty(property);
 
@@ -137,7 +139,7 @@ public class UriResourceImplTest {
     impl.getComplexType();
 
     EdmComplexTypeImpl complexTypeImplType =
-        (EdmComplexTypeImpl) edm.getComplexType(EdmTechProvider.nameCTBasePrimCompNav);
+        (EdmComplexTypeImpl) edm.getComplexType(ComplexTypeProvider.nameCTBasePrimCompNav);
 
     impl.setTypeFilter(complexTypeImplType);
     assertEquals(complexTypeImplType, impl.getTypeFilter());
@@ -151,7 +153,7 @@ public class UriResourceImplTest {
     UriResourcePrimitivePropertyImpl impl = new UriResourcePrimitivePropertyImpl();
     assertEquals(UriResourceKind.primitiveProperty, impl.getKind());
 
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETKeyNav);
+    EdmEntityType entityType = edm.getEntityType(EntityTypeProvider.nameETKeyNav);
     EdmProperty property = (EdmProperty) entityType.getProperty("PropertyInt16");
     impl.setProperty(property);
 
@@ -261,9 +263,9 @@ public class UriResourceImplTest {
     }
 
     Mock impl = new Mock();
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
-    EdmEntityType entityTypeBaseColl = edm.getEntityType(EdmTechProvider.nameETBaseTwoKeyNav);
-    EdmEntityType entityTypeBaseEntry = edm.getEntityType(EdmTechProvider.nameETTwoBaseTwoKeyNav);
+    EdmEntityType entityType = edm.getEntityType(EntityTypeProvider.nameETTwoKeyNav);
+    EdmEntityType entityTypeBaseColl = edm.getEntityType(EntityTypeProvider.nameETBaseTwoKeyNav);
+    EdmEntityType entityTypeBaseEntry = edm.getEntityType(EntityTypeProvider.nameETTwoBaseTwoKeyNav);
 
     impl.setType(entityType);
     assertEquals(entityType, impl.getType());
@@ -339,9 +341,9 @@ public class UriResourceImplTest {
     }
 
     Mock impl = new Mock();
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
-    EdmEntityType entityTypeBaseColl = edm.getEntityType(EdmTechProvider.nameETBaseTwoKeyNav);
-    edm.getEntityType(EdmTechProvider.nameETTwoBaseTwoKeyNav);
+    EdmEntityType entityType = edm.getEntityType(EntityTypeProvider.nameETTwoKeyNav);
+    EdmEntityType entityTypeBaseColl = edm.getEntityType(EntityTypeProvider.nameETBaseTwoKeyNav);
+    edm.getEntityType(EntityTypeProvider.nameETTwoBaseTwoKeyNav);
 
     impl.setType(entityType);
     assertEquals("mock", impl.toString());
@@ -361,7 +363,7 @@ public class UriResourceImplTest {
     UriResourceItImpl impl = new UriResourceItImpl();
     assertEquals(UriResourceKind.it, impl.getKind());
 
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
+    EdmEntityType entityType = edm.getEntityType(EntityTypeProvider.nameETTwoKeyNav);
     assertEquals("$it", impl.toString());
 
     impl.setType(entityType);
@@ -383,7 +385,7 @@ public class UriResourceImplTest {
     UriResourceNavigationPropertyImpl impl = new UriResourceNavigationPropertyImpl();
     assertEquals(UriResourceKind.navigationProperty, impl.getKind());
 
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
+    EdmEntityType entityType = edm.getEntityType(EntityTypeProvider.nameETTwoKeyNav);
     EdmNavigationProperty property = (EdmNavigationProperty) entityType.getProperty("NavPropertyETKeyNavMany");
     assertNotNull(property);
 
@@ -414,7 +416,7 @@ public class UriResourceImplTest {
     UriResourceRootImpl impl = new UriResourceRootImpl();
     assertEquals(UriResourceKind.root, impl.getKind());
 
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
+    EdmEntityType entityType = edm.getEntityType(EntityTypeProvider.nameETTwoKeyNav);
     assertEquals("$root", impl.toString());
 
     impl.setType(entityType);
@@ -437,7 +439,7 @@ public class UriResourceImplTest {
     assertEquals(UriResourceKind.singleton, impl.getKind());
 
     EdmSingletonImpl singleton = (EdmSingletonImpl) edm.getEntityContainer(null).getSingleton("SINav");
-    EdmEntityType entityTypeBaseColl = edm.getEntityType(EdmTechProvider.nameETBaseTwoKeyNav);
+    EdmEntityType entityTypeBaseColl = edm.getEntityType(EntityTypeProvider.nameETBaseTwoKeyNav);
     impl.setSingleton(singleton);
 
     assertEquals("SINav", impl.toString());
@@ -466,7 +468,7 @@ public class UriResourceImplTest {
     UriResourceLambdaVarImpl impl = new UriResourceLambdaVarImpl();
     assertEquals(UriResourceKind.lambdaVariable, impl.getKind());
 
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
+    EdmEntityType entityType = edm.getEntityType(EntityTypeProvider.nameETTwoKeyNav);
     impl.setType(entityType);
     impl.setVariableText("A");
 
@@ -482,7 +484,7 @@ public class UriResourceImplTest {
   public void testUriResourceStartingTypeFilterImpl() {
     UriResourceStartingTypeFilterImpl impl = new UriResourceStartingTypeFilterImpl();
 
-    EdmEntityType entityType = edm.getEntityType(EdmTechProvider.nameETTwoKeyNav);
+    EdmEntityType entityType = edm.getEntityType(EntityTypeProvider.nameETTwoKeyNav);
 
     impl.setType(entityType);
     assertEquals("com.sap.odata.test1.ETTwoKeyNav", impl.toString());