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 2015/11/17 09:21:31 UTC

[2/3] olingo-odata4 git commit: [OLINGO-801] support for non-primitive function parameters

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3fa2b3df/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/FunctionData.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/FunctionData.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/FunctionData.java
index d9d0ff1..c11aa7d 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/FunctionData.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/FunctionData.java
@@ -26,6 +26,7 @@ import java.util.Map;
 import org.apache.olingo.commons.api.data.ComplexValue;
 import org.apache.olingo.commons.api.data.Entity;
 import org.apache.olingo.commons.api.data.EntityCollection;
+import org.apache.olingo.commons.api.data.Parameter;
 import org.apache.olingo.commons.api.data.Property;
 import org.apache.olingo.commons.api.data.ValueType;
 import org.apache.olingo.commons.api.http.HttpStatusCode;
@@ -34,12 +35,12 @@ import org.apache.olingo.server.tecsvc.data.DataProvider.DataProviderException;
 public class FunctionData {
 
   protected static EntityCollection entityCollectionFunction(final String name,
-      final Map<String, Object> parameterValues, final Map<String, EntityCollection> data)
+      final Map<String, Parameter> parameters, final Map<String, EntityCollection> data)
       throws DataProviderException {
     if (name.equals("UFCRTCollETTwoKeyNavParam")) {
       final List<Entity> esTwoKeyNav = data.get("ESTwoKeyNav").getEntities();
       EntityCollection result = new EntityCollection();
-      final int endIndex = parameterValues.isEmpty() ? 0 : getParameterInt16(parameterValues);
+      final int endIndex = parameters.isEmpty() ? 0 : getParameterInt16(parameters);
       result.getEntities().addAll(
           esTwoKeyNav.subList(0,
               endIndex < 0 ? 0 : endIndex > esTwoKeyNav.size() ? esTwoKeyNav.size() : endIndex));
@@ -54,7 +55,7 @@ public class FunctionData {
     }
   }
 
-  protected static Entity entityFunction(final String name, final Map<String, Object> parameterValues,
+  protected static Entity entityFunction(final String name, final Map<String, Parameter> parameters,
       final Map<String, EntityCollection> data) throws DataProviderException {
     final List<Entity> esTwoKeyNav = data.get("ESTwoKeyNav").getEntities();
     if (name.equals("UFCRTETKeyNav")) {
@@ -62,12 +63,26 @@ public class FunctionData {
     } else if (name.equals("UFCRTETTwoKeyNav")) {
       return esTwoKeyNav.get(0);
     } else if (name.equals("UFCRTETTwoKeyNavParam")) {
-      final int index = parameterValues.isEmpty() ? 0 : getParameterInt16(parameterValues);
+      final int index = parameters.isEmpty() ? 0 : getParameterInt16(parameters);
       return index < 0 || index >= esTwoKeyNav.size() ? null : esTwoKeyNav.get(index);
     } else if (name.equals("UFCRTETMedia")) {
-      final int index = parameterValues.isEmpty() ? 1 : getParameterInt16(parameterValues);
+      final int index = parameters.isEmpty() ? 1 : getParameterInt16(parameters);
       final List<Entity> esMedia = data.get("ESMedia").getEntities();
       return index < 1 || index > esMedia.size() ? null : esMedia.get(index - 1);
+    } else if (name.equals("UFCRTETTwoKeyNavParamCTTwoPrim")) {
+      final List<Property> parameterProperties = parameters.get("ParameterCTTwoPrim").asComplex().getValue();
+      if (parameterProperties == null || parameterProperties.size() < 2) {
+        return null;
+      }
+      final Short parameterInt16 = (Short) parameterProperties.get(0).asPrimitive();
+      final String parameterString = (String) parameterProperties.get(1).asPrimitive();
+      for (final Entity entity : esTwoKeyNav) {
+        if (entity.getProperty("PropertyInt16").asPrimitive().equals(parameterInt16)
+            && entity.getProperty("PropertyString").asPrimitive().equals(parameterString)) {
+          return entity;
+        }
+      }
+      return null;
     } else {
       throw new DataProviderException("Function " + name + " is not yet implemented.",
           HttpStatusCode.NOT_IMPLEMENTED);
@@ -75,7 +90,7 @@ public class FunctionData {
   }
 
   @SuppressWarnings("unchecked")
-  protected static Property primitiveComplexFunction(final String name, final Map<String, Object> parameterValues,
+  protected static Property primitiveComplexFunction(final String name, final Map<String, Parameter> parameters,
       final Map<String, EntityCollection> data) throws DataProviderException {
     if (name.equals("UFNRTInt16")) {
       return DataCreator.createPrimitive(name, (short) 12345);
@@ -89,8 +104,8 @@ public class FunctionData {
           DataCreator.createPrimitive("PropertyString", "UFCRTCTTwoPrim string value"));
     } else if (name.equals("UFCRTCTTwoPrimParam")) {
       return DataCreator.createComplex(name,
-          DataCreator.createPrimitive("PropertyInt16", getParameterInt16(parameterValues)),
-          DataCreator.createPrimitive("PropertyString", getParameterString(parameterValues)));
+          DataCreator.createPrimitive("PropertyInt16", getParameterInt16(parameters)),
+          DataCreator.createPrimitive("PropertyString", getParameterString(parameters)));
     } else if (name.equals("UFCRTCollCTTwoPrim")) {
       return DataCreator.createComplexCollection(name,
           Arrays.asList(DataCreator.createPrimitive("PropertyInt16", (short) 16),
@@ -100,12 +115,12 @@ public class FunctionData {
           Arrays.asList(DataCreator.createPrimitive("PropertyInt16", 18),
               DataCreator.createPrimitive("PropertyString", "Test678")));
     } else if (name.equals("UFCRTStringTwoParam")) {
-      final String parameterString = getParameterString(parameterValues);
+      final String parameterString = getParameterString(parameters);
       // ParameterString is not provided
       if (parameterString == null) {
         return DataCreator.createPrimitive(name, null);
       } else {
-        final Short parameterInt16 = getParameterInt16(parameterValues);
+        final Short parameterInt16 = getParameterInt16(parameters);
         final StringBuilder builder = new StringBuilder();
         // if parameterInt16 <= 0 return an empty string
         for (short i = parameterInt16; i > 0; i--) {
@@ -119,8 +134,8 @@ public class FunctionData {
         return DataCreator.createPrimitive(name, builder.toString());
       }
     } else if (name.equals("UFCRTCollCTTwoPrimTwoParam")) {
-      final Short parameterInt16 = getParameterInt16(parameterValues);
-      final String parameterString = getParameterString(parameterValues);
+      final Short parameterInt16 = getParameterInt16(parameters);
+      final String parameterString = getParameterString(parameters);
       if (parameterString == null) {
         return DataCreator.createComplexCollection(name,
             Arrays.asList(DataCreator.createPrimitive("PropertyInt16", 1),
@@ -139,17 +154,31 @@ public class FunctionData {
         }
         return new Property(null, name, ValueType.COLLECTION_COMPLEX, complexValues);
       }
+    } else if (name.equals("UFNRTByteNineParam")) {
+      short count = 0;  // counts non-empty parameters
+      for (final Parameter parameter : parameters.values()) {
+        if (!(parameter.isNull()
+            || !parameter.isCollection()
+                && (parameter.isComplex() && parameter.asComplex().getValue().isEmpty()
+                    || parameter.isEntity() && ((Entity) parameter.getValue()).getProperties().isEmpty())
+            || parameter.isCollection()
+                && (parameter.isEntity() && ((EntityCollection) parameter.getValue()).getEntities().isEmpty()
+                    || parameter.asCollection().isEmpty()))) {
+          count++;
+        }
+      }
+      return DataCreator.createPrimitive(null, count);
     } else {
       throw new DataProviderException("Function " + name + " is not yet implemented.",
           HttpStatusCode.NOT_IMPLEMENTED);
     }
   }
 
-  private static Short getParameterInt16(final Map<String, Object> parameterValues) {
-    return (Short) parameterValues.get("ParameterInt16");
+  private static Short getParameterInt16(final Map<String, Parameter> parameters) {
+    return parameters.containsKey("ParameterInt16") ? (Short) parameters.get("ParameterInt16").getValue() : null;
   }
 
-  private static String getParameterString(final Map<String, Object> parameterValues) {
-    return (String) parameterValues.get("ParameterString");
+  private static String getParameterString(final Map<String, Parameter> parameters) {
+    return parameters.containsKey("ParameterString") ? (String) parameters.get("ParameterString").getValue() : null;
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3fa2b3df/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/ExpressionVisitorImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/ExpressionVisitorImpl.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/ExpressionVisitorImpl.java
index 95343fd..a2ff719 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/ExpressionVisitorImpl.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/ExpressionVisitorImpl.java
@@ -23,14 +23,20 @@ import java.util.Locale;
 
 import org.apache.olingo.commons.api.data.Entity;
 import org.apache.olingo.commons.api.data.Property;
+import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmEnumType;
+import org.apache.olingo.commons.api.edm.EdmFunction;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.EdmProperty;
 import org.apache.olingo.commons.api.edm.EdmType;
+import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 import org.apache.olingo.commons.api.http.HttpStatusCode;
+import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.ODataApplicationException;
 import org.apache.olingo.server.api.uri.UriInfoResource;
+import org.apache.olingo.server.api.uri.UriParameter;
 import org.apache.olingo.server.api.uri.UriResource;
+import org.apache.olingo.server.api.uri.UriResourceFunction;
 import org.apache.olingo.server.api.uri.UriResourceProperty;
 import org.apache.olingo.server.api.uri.queryoption.expression.BinaryOperatorKind;
 import org.apache.olingo.server.api.uri.queryoption.expression.Expression;
@@ -39,6 +45,7 @@ import org.apache.olingo.server.api.uri.queryoption.expression.ExpressionVisitor
 import org.apache.olingo.server.api.uri.queryoption.expression.Literal;
 import org.apache.olingo.server.api.uri.queryoption.expression.MethodKind;
 import org.apache.olingo.server.api.uri.queryoption.expression.UnaryOperatorKind;
+import org.apache.olingo.server.tecsvc.data.DataProvider;
 import org.apache.olingo.server.tecsvc.processor.queryoptions.expression.operand.TypedOperand;
 import org.apache.olingo.server.tecsvc.processor.queryoptions.expression.operand.UntypedOperand;
 import org.apache.olingo.server.tecsvc.processor.queryoptions.expression.operand.VisitorOperand;
@@ -50,10 +57,12 @@ public class ExpressionVisitorImpl implements ExpressionVisitor<VisitorOperand>
 
   private final Entity entity;
   private final UriInfoResource uriInfo;
+  private final Edm edm;
 
-  public ExpressionVisitorImpl(final Entity entity, final UriInfoResource uriInfo) {
+  public ExpressionVisitorImpl(final Entity entity, final UriInfoResource uriInfo, final Edm edm) {
     this.entity = entity;
     this.uriInfo = uriInfo;
+    this.edm = edm;
   }
 
   @Override
@@ -180,28 +189,44 @@ public class ExpressionVisitorImpl implements ExpressionVisitor<VisitorOperand>
 
     final List<UriResource> uriResourceParts = member.getUriResourceParts();
 
-    // UriResourceParts contains at least one UriResource
-    if (!(uriResourceParts.get(0) instanceof UriResourceProperty)) {
-      return throwNotImplemented();
-    }
-
-    EdmProperty currentEdmProperty = ((UriResourceProperty) uriResourceParts.get(0)).getProperty();
-    Property currentProperty = entity.getProperty(currentEdmProperty.getName());
-
-    for (int i = 1; i < uriResourceParts.size(); i++) {
-      if (currentProperty.isComplex()) {
-        currentEdmProperty = ((UriResourceProperty) uriResourceParts.get(i)).getProperty();
-        final List<Property> complex = currentProperty.asComplex().getValue();
-        for (final Property innerProperty : complex) {
-          if (innerProperty.getName().equals(currentEdmProperty.getName())) {
-            currentProperty = innerProperty;
-            break;
+    // UriResourceParts contains at least one UriResource.
+    final UriResource initialPart = uriResourceParts.get(0);
+    if (initialPart instanceof UriResourceProperty) {
+      EdmProperty currentEdmProperty = ((UriResourceProperty) initialPart).getProperty();
+      Property currentProperty = entity.getProperty(currentEdmProperty.getName());
+      for (int i = 1; i < uriResourceParts.size(); i++) {
+        if (currentProperty.isComplex()) {
+          currentEdmProperty = ((UriResourceProperty) uriResourceParts.get(i)).getProperty();
+          final List<Property> complex = currentProperty.asComplex().getValue();
+          for (final Property innerProperty : complex) {
+            if (innerProperty.getName().equals(currentEdmProperty.getName())) {
+              currentProperty = innerProperty;
+              break;
+            }
           }
         }
       }
-    }
+      return new TypedOperand(currentProperty.getValue(), currentEdmProperty.getType(), currentEdmProperty);
 
-    return new TypedOperand(currentProperty.getValue(), currentEdmProperty.getType(), currentEdmProperty);
+    } else if (initialPart instanceof UriResourceFunction) {
+      final EdmFunction function = ((UriResourceFunction) initialPart).getFunction();
+      if (uriResourceParts.size() > 1) {
+        return throwNotImplemented();
+      }
+      final EdmType type = function.getReturnType().getType();
+      final DataProvider dataProvider = new DataProvider(OData.newInstance(), edm);
+      final List<UriParameter> parameters = ((UriResourceFunction) initialPart).getParameters();
+      return new TypedOperand(
+        type.getKind() == EdmTypeKind.ENTITY ?
+            function.getReturnType().isCollection() ?
+                dataProvider.readFunctionEntityCollection(function, parameters, uriInfo) :
+                dataProvider.readFunctionEntity(function, parameters, uriInfo) :
+            dataProvider.readFunctionPrimitiveComplex(function, parameters, uriInfo),
+        type);
+
+    } else {
+      return throwNotImplemented();
+    }
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3fa2b3df/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/TypedOperand.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/TypedOperand.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/TypedOperand.java
index fc36f96..c9370b5 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/TypedOperand.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operand/TypedOperand.java
@@ -20,6 +20,7 @@ package org.apache.olingo.server.tecsvc.processor.queryoptions.expression.operan
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.util.Collection;
 import java.util.Locale;
 
 import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
@@ -48,10 +49,16 @@ public class TypedOperand extends VisitorOperand {
 
   @Override
   public TypedOperand asTypedOperand() throws ODataApplicationException {
-    if (!isNull() && value.getClass() != getDefaultType((EdmPrimitiveType) type)) {
-      return asTypedOperand((EdmPrimitiveType) type);
+    if (isNull()) {
+      return this;
+    } else if (type instanceof EdmPrimitiveType && !(value instanceof Collection)) {
+      return value.getClass() == getDefaultType((EdmPrimitiveType) type) ?
+          this :
+          asTypedOperand((EdmPrimitiveType) type);
+    } else {
+      throw new ODataApplicationException("A single primitive-type instance is expected.",
+          HttpStatusCode.BAD_REQUEST.getStatusCode(), Locale.ROOT);
     }
-    return this;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3fa2b3df/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/BinaryOperator.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/BinaryOperator.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/BinaryOperator.java
index 5c24127..a870f1a 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/BinaryOperator.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/expression/operation/BinaryOperator.java
@@ -37,7 +37,7 @@ import org.apache.olingo.server.tecsvc.processor.queryoptions.expression.primiti
 
 public class BinaryOperator {
   private static final int FACTOR_SECOND_INT = 1000;
-  private static final BigDecimal FACTOR_SECOND = new BigDecimal(1000);
+  private static final BigDecimal FACTOR_SECOND = BigDecimal.valueOf(FACTOR_SECOND_INT);
   private static final BigInteger EDM_SBYTE_MIN = BigInteger.valueOf(Byte.MIN_VALUE);
   private static final BigInteger EDN_SBYTE_MAX = BigInteger.valueOf(Byte.MAX_VALUE);
   private static final BigInteger EDM_BYTE_MIN = BigInteger.ZERO;
@@ -56,35 +56,29 @@ public class BinaryOperator {
   private static final int GREATER_THAN = 1;
 
   protected static final OData oData;
-  protected static final EdmPrimitiveType primString;
   protected static final EdmPrimitiveType primBoolean;
   protected static final EdmPrimitiveType primDateTimeOffset;
   protected static final EdmPrimitiveType primDate;
-  protected static final EdmPrimitiveType primTimeOfDay;
   protected static final EdmPrimitiveType primDuration;
   protected static final EdmPrimitiveType primSByte;
   protected static final EdmPrimitiveType primByte;
   protected static final EdmPrimitiveType primInt16;
   protected static final EdmPrimitiveType primInt32;
   protected static final EdmPrimitiveType primInt64;
-  protected static final EdmPrimitiveType primDecimal;
   protected static final EdmPrimitiveType primSingle;
   protected static final EdmPrimitiveType primDouble;
 
   static {
     oData = OData.newInstance();
-    primString = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.String);
     primBoolean = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Boolean);
     primDateTimeOffset = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.DateTimeOffset);
     primDate = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Date);
-    primTimeOfDay = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.TimeOfDay);
     primDuration = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Duration);
     primSByte = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.SByte);
     primByte = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Byte);
     primInt16 = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int16);
     primInt32 = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int32);
     primInt64 = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Int64);
-    primDecimal = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Decimal);
     primSingle = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Single);
     primDouble = oData.createPrimitiveTypeInstance(EdmPrimitiveTypeKind.Double);
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3fa2b3df/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/FilterHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/FilterHandler.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/FilterHandler.java
index 1a19016..b2bd405 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/FilterHandler.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/FilterHandler.java
@@ -53,7 +53,7 @@ public class FilterHandler {
 
       while (iter.hasNext()) {
         final VisitorOperand operand = filterOption.getExpression()
-            .accept(new ExpressionVisitorImpl(iter.next(), uriInfo));
+            .accept(new ExpressionVisitorImpl(iter.next(), uriInfo, edm));
         final TypedOperand typedOperand = operand.asTypedOperand();
 
         if (typedOperand.is(primBoolean)) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3fa2b3df/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/OrderByHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/OrderByHandler.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/OrderByHandler.java
index ddcf0af..ad1d2d5 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/OrderByHandler.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/queryoptions/options/OrderByHandler.java
@@ -70,9 +70,9 @@ public class OrderByHandler {
           try {
             final OrderByItem item = orderByOption.getOrders().get(i);
             final TypedOperand op1 =
-                item.getExpression().accept(new ExpressionVisitorImpl(e1, uriInfo)).asTypedOperand();
+                item.getExpression().accept(new ExpressionVisitorImpl(e1, uriInfo, edm)).asTypedOperand();
             final TypedOperand op2 =
-                item.getExpression().accept(new ExpressionVisitorImpl(e2, uriInfo)).asTypedOperand();
+                item.getExpression().accept(new ExpressionVisitorImpl(e2, uriInfo, edm)).asTypedOperand();
 
             if (op1.isNull() || op2.isNull()) {
               if (op1.isNull() && op2.isNull()) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3fa2b3df/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
index 9f91763..e9c879e 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ContainerProvider.java
@@ -25,6 +25,7 @@ import java.util.List;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.provider.CsdlActionImport;
 import org.apache.olingo.commons.api.edm.provider.CsdlAnnotation;
+import org.apache.olingo.commons.api.edm.provider.CsdlEdmProvider;
 import org.apache.olingo.commons.api.edm.provider.CsdlEntityContainer;
 import org.apache.olingo.commons.api.edm.provider.CsdlEntityContainerInfo;
 import org.apache.olingo.commons.api.edm.provider.CsdlEntitySet;
@@ -50,10 +51,7 @@ public class ContainerProvider {
   public static final String AIRT_TWO_PARAM = "AIRTTwoParam";
   public static final String AIRT_BYTE_NINE_PARAM = "AIRTByteNineParam";
 
-  CsdlEntityContainerInfo entityContainerInfoTest1 =
-      new CsdlEntityContainerInfo().setContainerName(nameContainer);
-
-  private EdmTechProvider prov;
+  private final CsdlEdmProvider prov;
 
   public ContainerProvider(final EdmTechProvider edmTechProvider) {
     prov = edmTechProvider;
@@ -61,12 +59,9 @@ public class ContainerProvider {
 
   public CsdlEntityContainerInfo getEntityContainerInfo(final FullQualifiedName entityContainerName)
       throws ODataException {
-    if (entityContainerName == null) {
-      return entityContainerInfoTest1;
-    } else if (entityContainerName.equals(nameContainer)) {
-      return entityContainerInfoTest1;
+    if (entityContainerName == null || entityContainerName.equals(nameContainer)) {
+      return new CsdlEntityContainerInfo().setContainerName(nameContainer);
     }
-
     return null;
   }
 
@@ -154,6 +149,7 @@ public class ContainerProvider {
     functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCollCTTwoPrimTwoParam"));
     functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FINRTCollCTNavFiveProp"));
     functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FICRTCollESKeyNavContParam"));
+    functionImports.add(prov.getFunctionImport(ContainerProvider.nameContainer, "FINRTByteNineParam"));
 
     return container;
   }
@@ -209,6 +205,7 @@ public class ContainerProvider {
                                 new CsdlConstantExpression(CsdlConstantExpression.ConstantExpressionType.String)
                                     .setValue("System Query Options: $expand, $select, "
                                         + "$format; Operations: Read, Update, Delete"))));
+
       } else if (name.equals("ESTwoPrim")) {
         return new CsdlEntitySet()
             .setName("ESTwoPrim")
@@ -411,7 +408,6 @@ public class ContainerProvider {
             .setType(EntityTypeProvider.nameETAllNullable);
 
       } else if (name.equals("ESKeyNav")) {
-
         return new CsdlEntitySet()
             .setName("ESKeyNav")
             .setType(EntityTypeProvider.nameETKeyNav)
@@ -466,8 +462,7 @@ public class ContainerProvider {
                     .setTarget("ESTwoKeyNav"),
                 new CsdlNavigationPropertyBinding()
                     .setPath("PropertyCompNav/com.corp.odata.test1.CTNavFiveProp/NavPropertyETTwoKeyNavMany")
-                    .setTarget("ESTwoKeyNav")
-                ));
+                    .setTarget("ESTwoKeyNav")));
 
       } else if (name.equals("ESTwoKeyNav")) {
         return new CsdlEntitySet()
@@ -521,8 +516,7 @@ public class ContainerProvider {
                     .setTarget("ESBaseTwoKeyNav"),
                 new CsdlNavigationPropertyBinding()
                     .setPath("NavPropertySINav")
-                    .setTarget("SINav")
-                ));
+                    .setTarget("SINav")));
 
       } else if (name.equals("ESKeyNavCont")) {
         return new CsdlEntitySet()
@@ -546,8 +540,7 @@ public class ContainerProvider {
                     .setTarget("ESKeyNav"),
                 new CsdlNavigationPropertyBinding()
                     .setPath("PropertyCompNavCont/NavPropertyETTwoKeyNavContOne/NavPropertyETKeyNavOne")
-                    .setTarget("ESKeyNav")
-                ));
+                    .setTarget("ESKeyNav")));
 
       } else if (name.equals("ESBaseTwoKeyNav")) {
         return new CsdlEntitySet()
@@ -556,8 +549,8 @@ public class ContainerProvider {
             .setNavigationPropertyBindings(Arrays.asList(
                 new CsdlNavigationPropertyBinding()
                     .setPath("NavPropertyETKeyNavMany")
-                    .setTarget("ESKeyNav"))
-            );
+                    .setTarget("ESKeyNav")));
+
       } else if (name.equals("ESTwoBaseTwoKeyNav")) {
         return new CsdlEntitySet()
             .setName("ESTwoBaseTwoKeyNav")
@@ -574,8 +567,8 @@ public class ContainerProvider {
             .setType(EntityTypeProvider.nameETFourKeyAlias);
 
       } else if (name.equals("ESMixEnumDefCollComp")) {
-        return new CsdlEntitySet().setName("ESMixEnumDefCollComp").setType(
-            EntityTypeProvider.nameETMixEnumDefCollComp);
+        return new CsdlEntitySet().setName("ESMixEnumDefCollComp")
+            .setType(EntityTypeProvider.nameETMixEnumDefCollComp);
       }
     }
 
@@ -732,12 +725,19 @@ public class ContainerProvider {
             .setFunction(FunctionProvider.nameUFCRTCollCTTwoPrim)
             .setIncludeInServiceDocument(true);
 
+      } else if (name.equals("FINRTByteNineParam")) {
+        return new CsdlFunctionImport()
+            .setName(name)
+            .setFunction(FunctionProvider.nameUFNRTByteNineParam)
+            .setIncludeInServiceDocument(true);
+
       } else if (name.equals("FICRTESMedia")) {
         return new CsdlFunctionImport()
             .setName(name)
             .setFunction(FunctionProvider.nameUFCRTETMedia)
             .setEntitySet(entityContainer.getFullQualifiedNameAsString() + "/ESMedia")
             .setIncludeInServiceDocument(true);
+
       } else if (name.equals("FICRTCollESMedia")) {
         return new CsdlFunctionImport()
             .setName(name)
@@ -806,7 +806,7 @@ public class ContainerProvider {
       if (name.equals("SI")) {
         return new CsdlSingleton()
             .setName("SI")
-            .setTitle("Simple Singelton")
+            .setTitle("Simple Singleton")
             .setType(EntityTypeProvider.nameETTwoPrim);
 
       } else if (name.equals("SINav")) {
@@ -822,8 +822,7 @@ public class ContainerProvider {
                     .setTarget("ESTwoKeyNav"),
                 new CsdlNavigationPropertyBinding()
                     .setPath("NavPropertyETKeyNavOne")
-                    .setTarget("ESKeyNav")
-                ));
+                    .setTarget("ESKeyNav")));
 
       } else if (name.equals("SIMedia")) {
         return new CsdlSingleton()

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3fa2b3df/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/FunctionProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/FunctionProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/FunctionProvider.java
index 73e218f..b60b954 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/FunctionProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/FunctionProvider.java
@@ -18,16 +18,15 @@
  */
 package org.apache.olingo.server.tecsvc.provider;
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
-import org.apache.olingo.commons.api.ex.ODataException;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.provider.CsdlFunction;
 import org.apache.olingo.commons.api.edm.provider.CsdlParameter;
 import org.apache.olingo.commons.api.edm.provider.CsdlReturnType;
+import org.apache.olingo.commons.api.ex.ODataException;
 
 public class FunctionProvider {
 
@@ -173,30 +172,32 @@ public class FunctionProvider {
   public static final FullQualifiedName nameUFNRTInt16 =
       new FullQualifiedName(SchemaProvider.NAMESPACE, "UFNRTInt16");
 
-  public static final FullQualifiedName nameUFNRTCollCTNavFiveProp = new FullQualifiedName(SchemaProvider.NAMESPACE,
-      "UFNRTCollCTNavFiveProp");
+  public static final FullQualifiedName nameUFNRTCollCTNavFiveProp =
+      new FullQualifiedName(SchemaProvider.NAMESPACE, "UFNRTCollCTNavFiveProp");
+
+  public static final FullQualifiedName nameUFNRTCollETMixPrimCollCompTwoParam =
+      new FullQualifiedName(SchemaProvider.NAMESPACE, "UFNRTCollETMixPrimCollCompTwoParam");
 
-  public static final FullQualifiedName nameUFNRTCollETMixPrimCollCompTwoParam = new FullQualifiedName(
-      SchemaProvider.NAMESPACE, "UFNRTCollETMixPrimCollCompTwoParam");
+  public static final FullQualifiedName nameUFNRTByteNineParam =
+      new FullQualifiedName(SchemaProvider.NAMESPACE, "UFNRTByteNineParam");
 
   public List<CsdlFunction> getFunctions(final FullQualifiedName functionName) throws ODataException {
 
     if (functionName.equals(nameUFNRTInt16)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName(functionName.getName())
               .setParameters(Collections.<CsdlParameter> emptyList())
               .setReturnType(new CsdlReturnType().setType(PropertyProvider.nameInt16)));
 
     } else if (functionName.equals(nameUFCRTETKeyNav)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFCRTETKeyNav")
-              .setParameters(new ArrayList<CsdlParameter>())
+              .setParameters(Collections.<CsdlParameter> emptyList())
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETKeyNav).setNullable(false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETKeyNav).setNullable(false)));
 
     } else if (functionName.equals(nameUFCRTETTwoKeyNav)) {
       return Collections.singletonList(
@@ -207,23 +208,20 @@ public class FunctionProvider {
               .setReturnType(
                   new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)));
     } else if (functionName.equals(nameUFCRTETTwoKeyNavParam)) {
-      return Arrays
-          .asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFCRTETTwoKeyNavParam")
-              .setParameters(Arrays.asList(
+              .setParameters(Collections.singletonList(
                   new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(false)))
               .setComposable(true)
-              .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)
-              )
+              .setReturnType(new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false))
           );
 
     } else if (functionName.equals(nameUFCRTETTwoKeyNavParamCTTwoPrim)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFCRTETTwoKeyNavParamCTTwoPrim")
-              .setParameters(Arrays.asList(
+              .setParameters(Collections.singletonList(
                   new CsdlParameter().setName("ParameterCTTwoPrim").setType(ComplexTypeProvider.nameCTTwoPrim)
                       .setNullable(false)))
               .setComposable(true)
@@ -236,7 +234,7 @@ public class FunctionProvider {
       return Arrays.asList(
           new CsdlFunction()
               .setName("UFCRTStringTwoParam")
-              .setParameters(Arrays.asList(
+              .setParameters(Collections.singletonList(
                   new CsdlParameter()
                       .setName("ParameterInt16")
                       .setType(PropertyProvider.nameInt16)
@@ -256,12 +254,10 @@ public class FunctionProvider {
                       .setType(PropertyProvider.nameInt16)
                       .setNullable(false)))
               .setComposable(true)
-              .setReturnType(new CsdlReturnType().setType(PropertyProvider.nameString).setNullable(true))
-
-          );
+              .setReturnType(new CsdlReturnType().setType(PropertyProvider.nameString).setNullable(true)));
 
     } else if (functionName.equals(nameUFCRTCollETTwoKeyNavParam)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName(functionName.getName())
               .setParameters(Collections.singletonList(
@@ -271,159 +267,170 @@ public class FunctionProvider {
                       .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(
-                      false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameUFCRTCollETKeyNavContParam)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFCRTCollETKeyNavContParam")
               .setBound(true)
               .setComposable(true)
-              .setParameters(Arrays.asList(
+              .setParameters(Collections.singletonList(
                   new CsdlParameter().setName("ParameterInt16")
                       .setNullable(false)
                       .setType(PropertyProvider.nameInt16)))
               .setReturnType(new CsdlReturnType().setType(EntityTypeProvider.nameETKeyNavCont)
                   .setCollection(true)
-                  .setNullable(false))
-          );
+                  .setNullable(false)));
 
     } else if (functionName.equals(nameUFCRTString)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFCRTString")
-
               .setComposable(true)
-              .setParameters(new ArrayList<CsdlParameter>())
+              .setParameters(Collections.<CsdlParameter> emptyList())
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(PropertyProvider.nameString).setNullable(false)
-              )
-          );
+                  new CsdlReturnType().setType(PropertyProvider.nameString).setNullable(false)));
 
     } else if (functionName.equals(nameUFCRTCollStringTwoParam)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFCRTCollStringTwoParam")
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(
-                          false),
-                      new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(
-                          false)))
+              .setParameters(Arrays.asList(
+                  new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                      .setNullable(false),
+                  new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)
+                      .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(PropertyProvider.nameString).setCollection(true).setNullable(false))
-          );
+                  new CsdlReturnType().setType(PropertyProvider.nameString).setCollection(true).setNullable(false)));
 
     } else if (functionName.equals(nameUFCRTCollString)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFCRTCollString")
-              .setParameters(new ArrayList<CsdlParameter>())
+              .setParameters(Collections.<CsdlParameter> emptyList())
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(PropertyProvider.nameString).setCollection(true).setNullable(false))
-          );
+                  new CsdlReturnType().setType(PropertyProvider.nameString).setCollection(true).setNullable(false)));
 
     } else if (functionName.equals(nameUFCRTCTAllPrimTwoParam)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFCRTCTAllPrimTwoParam")
               .setParameters(
                   Arrays.asList(
-                      new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(
-                          false),
-                      new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(
-                          false)))
+                      new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                          .setNullable(false),
+                      new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)
+                          .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTAllPrim).setNullable(false))
-          );
+                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTAllPrim).setNullable(false)));
 
     } else if (functionName.equals(nameUFNRTCollETMixPrimCollCompTwoParam)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFNRTCollETMixPrimCollCompTwoParam")
               .setParameters(
                   Arrays.asList(
-                      new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(
-                          false),
-                      new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(
-                          false)))
+                      new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                          .setNullable(false),
+                      new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)
+                          .setNullable(false)))
               .setComposable(false)
               .setBound(false)
               .setReturnType(
                   new CsdlReturnType().setType(ComplexTypeProvider.nameCTMixPrimCollComp)
                       .setNullable(false)
-                      .setCollection(true))
-          );
+                      .setCollection(true)));
+
+    } else if (functionName.equals(nameUFNRTByteNineParam)) {
+      return Collections.singletonList(
+          new CsdlFunction()
+              .setName(functionName.getName())
+              .setParameters(Arrays.asList(
+                  new CsdlParameter().setName("ParameterEnum").setType(EnumTypeProvider.nameENString),
+                  new CsdlParameter().setName("ParameterDef").setType(TypeDefinitionProvider.nameTDString),
+                  new CsdlParameter().setName("ParameterComp").setType(ComplexTypeProvider.nameCTTwoPrim),
+                  new CsdlParameter().setName("ParameterETTwoPrim").setType(EntityTypeProvider.nameETTwoPrim),
+                  new CsdlParameter().setName("CollParameterByte").setType(PropertyProvider.nameByte)
+                      .setCollection(true),
+                  new CsdlParameter().setName("CollParameterEnum").setType(EnumTypeProvider.nameENString)
+                      .setCollection(true),
+                  new CsdlParameter().setName("CollParameterDef").setType(TypeDefinitionProvider.nameTDString)
+                      .setCollection(true),
+                  new CsdlParameter().setName("CollParameterComp").setType(ComplexTypeProvider.nameCTTwoPrim)
+                      .setCollection(true),
+                  new CsdlParameter().setName("CollParameterETTwoPrim").setType(EntityTypeProvider.nameETTwoPrim)
+                      .setCollection(true)))
+              .setComposable(false)
+              .setBound(false)
+              .setReturnType(new CsdlReturnType().setType(PropertyProvider.nameByte)));
+
     } else if (functionName.equals(nameUFCRTCTTwoPrimTwoParam)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFCRTCTTwoPrimTwoParam")
               .setParameters(
                   Arrays.asList(
-                      new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(
-                          false),
-                      new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(
-                          false)))
+                      new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)
+                          .setNullable(false),
+                      new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                          .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setNullable(false))
-          );
+                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setNullable(false)));
+
     } else if (functionName.equals(nameUFCRTCollCTTwoPrimTwoParam)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFCRTCollCTTwoPrimTwoParam")
               .setParameters(
                   Arrays.asList(
-                      new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(
-                          false),
-                      new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(
-                          true)))
+                      new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)
+                          .setNullable(false),
+                      new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                          .setNullable(true)))
               .setComposable(true)
               .setReturnType(
                   new CsdlReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setCollection(true)
-                      .setNullable(false))
-          );
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameUFCRTCTTwoPrim)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFCRTCTTwoPrim")
-              .setParameters(new ArrayList<CsdlParameter>())
+              .setParameters(Collections.<CsdlParameter> emptyList())
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setNullable(false))
-          );
+                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setNullable(false)));
 
     } else if (functionName.equals(nameUFCRTCollCTTwoPrim)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFCRTCollCTTwoPrim")
               .setComposable(true)
-              .setParameters(new ArrayList<CsdlParameter>())
+              .setParameters(Collections.<CsdlParameter> emptyList())
               .setReturnType(
                   new CsdlReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setCollection(true)
-                      .setNullable(false))
-          );
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameUFCRTETMedia)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFCRTETMedia")
-              .setParameters(Arrays.asList(
-                  new CsdlParameter().setName("ParameterInt16").setNullable(false).setType(PropertyProvider.nameInt16)
-                  ))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("ParameterInt16").setNullable(false)
+                      .setType(PropertyProvider.nameInt16)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETMedia).setNullable(false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETMedia).setNullable(false)));
+
     } else if (functionName.equals(nameUFCRTCollETMedia)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName(functionName.getName())
               .setParameters(Collections.<CsdlParameter> emptyList())
@@ -432,410 +439,348 @@ public class FunctionProvider {
                   new CsdlReturnType().setType(EntityTypeProvider.nameETMedia).setCollection(true).setNullable(false)));
 
     } else if (functionName.equals(nameUFCRTCollETMixPrimCollCompTwoParam)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName(functionName.getName())
               .setParameters(
                   Arrays.asList(
-                      new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(
-                          false),
-                      new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(
-                          false)))
+                      new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                          .setNullable(false),
+                      new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)
+                          .setNullable(false)))
               .setComposable(false)
               .setReturnType(
                   new CsdlReturnType().setType(EntityTypeProvider.nameETMixPrimCollComp).setCollection(true)
-                      .setNullable(false))
-          );
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameUFCRTETAllPrimTwoParam)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFCRTETAllPrimTwoParam")
               .setParameters(
                   Arrays.asList(
-                      new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(
-                          false),
-                      new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(
-                          false)))
+                      new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                          .setNullable(false),
+                      new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)
+                          .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETAllPrim).setNullable(false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETAllPrim).setNullable(false)));
 
     } else if (functionName.equals(nameUFCRTESMixPrimCollCompTwoParam)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName(functionName.getName())
               .setParameters(
                   Arrays.asList(
-                      new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString).setNullable(
-                          false),
-                      new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16).setNullable(
-                          false)
-                      ))
+                      new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                          .setNullable(false),
+                      new CsdlParameter().setName("ParameterInt16").setType(PropertyProvider.nameInt16)
+                          .setNullable(false)))
               .setComposable(true)
               .setReturnType(
                   new CsdlReturnType().setType(EntityTypeProvider.nameETMixPrimCollComp).setCollection(true)
-                      .setNullable(false))
-          );
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameUFNRTCollCTNavFiveProp)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("UFNRTCollCTNavFiveProp")
               .setReturnType(
-                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTNavFiveProp).setCollection(true))
-          );
+                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTNavFiveProp).setCollection(true)));
+
     } else if (functionName.equals(nameBFCESTwoKeyNavRTESTwoKeyNav)) {
-      return Arrays
-          .asList(
-              new CsdlFunction()
-                  .setName("BFCESTwoKeyNavRTESTwoKeyNav")
-                  .setEntitySetPath("BindingParam/NavPropertyETTwoKeyNavMany")
-                  .setBound(true)
-                  .setParameters(
-                      Arrays.asList(
-                          new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                              .setCollection(true).setNullable(false)))
-                  .setComposable(true)
-                  .setReturnType(
-                      new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
-                          .setNullable(false)),
-
-              new CsdlFunction()
-                  .setName("BFCESTwoKeyNavRTESTwoKeyNav")
-                  .setBound(true)
-                  .setParameters(
-                      Arrays.asList(
-                          new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                              .setCollection(true).setNullable(false),
-                          new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString)
-                              .setCollection(false).setNullable(false)))
-                  .setComposable(true)
-                  .setReturnType(
-                      new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
-                          .setNullable(false)),
-              new CsdlFunction()
-                  .setName("BFCESTwoKeyNavRTESTwoKeyNav")
-                  .setBound(true)
-                  .setParameters(
-                      Arrays.asList(
-                          new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav)
-                              .setCollection(true).setNullable(false)))
-                  .setComposable(true)
-                  .setReturnType(
-                      new CsdlReturnType().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))
-          );
+      return Arrays.asList(
+          new CsdlFunction()
+              .setName("BFCESTwoKeyNavRTESTwoKeyNav")
+              .setEntitySetPath("BindingParam/NavPropertyETTwoKeyNavMany")
+              .setBound(true)
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                      .setCollection(true).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                      .setNullable(false)),
+
+          new CsdlFunction()
+              .setName("BFCESTwoKeyNavRTESTwoKeyNav")
+              .setBound(true)
+              .setParameters(Arrays.asList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                      .setCollection(true).setNullable(false),
+                  new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString)
+                      .setCollection(false).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                      .setNullable(false)),
+
+          new CsdlFunction()
+              .setName("BFCESTwoKeyNavRTESTwoKeyNav")
+              .setBound(true)
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav)
+                      .setCollection(true).setNullable(false)))
+              .setComposable(true)
+              .setReturnType(
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameBFCStringRTESTwoKeyNav)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction().setName("BFCStringRTESTwoKeyNav")
               .setBound(true)
-              .setParameters(Arrays.asList(
+              .setParameters(Collections.singletonList(
                   new CsdlParameter().setName("BindingParam").setType(PropertyProvider.nameString).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(
-                      false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameBFCETBaseTwoKeyNavRTETTwoKeyNav)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCETBaseTwoKeyNavRTETTwoKeyNav")
               .setBound(true)
-              .setParameters(Arrays.asList(
+              .setParameters(Collections.singletonList(
                   new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)
                       .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)
-              )
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)));
 
     } else if (functionName.equals(nameBFCESBaseTwoKeyNavRTESBaseTwoKey)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCESBaseTwoKeyNavRTESBaseTwoKey")
               .setBound(true)
-              .setParameters(Arrays.asList(
+              .setParameters(Collections.singletonList(
                   new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)
                       .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
                   new CsdlReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true)
-                      .setNullable(false))
-          );
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameBFNESAllPrimRTCTAllPrim)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFNESAllPrimRTCTAllPrim")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETAllPrim)
-                          .setCollection(true).setNullable(false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETAllPrim)
+                      .setCollection(true).setNullable(false)))
               .setComposable(false)
               .setReturnType(
-                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTAllPrim).setNullable(false))
-          );
+                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTAllPrim).setNullable(false)));
 
     } else if (functionName.equals(nameBFCESTwoKeyNavRTCTTwoPrim)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCESTwoKeyNavRTCTTwoPrim")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setCollection(true).setNullable(false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                      .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setNullable(false))
-          );
+                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setNullable(false)));
 
     } else if (functionName.equals(nameBFCESTwoKeyNavRTCollCTTwoPrim)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCESTwoKeyNavRTCollCTTwoPrim")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setCollection(true).setNullable(false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                      .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
                   new CsdlReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setCollection(true)
-                      .setNullable(false))
-          );
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameBFCESTwoKeyNavRTString)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCESTwoKeyNavRTString")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setCollection(true).setNullable(false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                      .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(PropertyProvider.nameString).setNullable(false))
-          );
+                  new CsdlReturnType().setType(PropertyProvider.nameString).setNullable(false)));
 
     } else if (functionName.equals(nameBFCESTwoKeyNavRTCollString)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCESTwoKeyNavRTCollString")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setCollection(true).setNullable(false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                      .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(PropertyProvider.nameString).setCollection(true).setNullable(false))
-          );
+                  new CsdlReturnType().setType(PropertyProvider.nameString).setCollection(true).setNullable(false)));
 
     } else if (functionName.equals(nameBFCETTwoKeyNavRTESTwoKeyNav)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCETTwoKeyNavRTESTwoKeyNav")
               .setEntitySetPath("BindingParam/NavPropertyETTwoKeyNavOne")
               .setBound(true)
-              .setParameters(Arrays.asList(
+              .setParameters(Collections.singletonList(
                   new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
                       .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(
-                      false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameBFCETBaseTwoKeyNavRTESTwoKeyNav)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCETBaseTwoKeyNavRTESTwoKeyNav")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)
-                          .setNullable(false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)
+                      .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(
-                      false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameBFCSINavRTESTwoKeyNav)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCSINavRTESTwoKeyNav")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setNullable(
-                              false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                          .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(
-                      false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameBFCETBaseTwoKeyNavRTESBaseTwoKey)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCETBaseTwoKeyNavRTESBaseTwoKey")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)
-                          .setNullable(false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETBaseTwoKeyNav)
+                      .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true).setNullable(
-                      false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true)
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameBFCCollStringRTESTwoKeyNav)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCCollStringRTESTwoKeyNav")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(PropertyProvider.nameString).setCollection(
-                          true)
-                          .setNullable(false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(PropertyProvider.nameString).setCollection(true)
+                      .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(
-                      false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameBFCCTPrimCompRTESTwoKeyNav)) {
       return Arrays.asList(
           new CsdlFunction()
               .setName("BFCCTPrimCompRTESTwoKeyNav")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp)
-                          .setNullable(
-                              false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp)
+                      .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(
-                      false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameBFCCTPrimCompRTESBaseTwoKeyNav)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCCTPrimCompRTESBaseTwoKeyNav")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp)
-                          .setNullable(
-                              false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp)
+                      .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true).setNullable(
-                      false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETBaseTwoKeyNav).setCollection(true)
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameBFCCollCTPrimCompRTESAllPrim)) {
-      return Arrays
-          .asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCCollCTPrimCompRTESAllPrim")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp)
-                          .setCollection(true).setNullable(false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp)
+                      .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETAllPrim).setCollection(true).setNullable(false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETAllPrim).setCollection(true)
+                      .setNullable(false)));
 
     } else if (functionName.equals(nameBFCESTwoKeyNavRTTwoKeyNav)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCESTwoKeyNavRTTwoKeyNav")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setCollection(true).setNullable(false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                      .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)));
 
     } else if (functionName.equals(nameBFCESKeyNavRTETKeyNav)) {
-      return Arrays
-          .asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCESKeyNavRTETKeyNav")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav)
-                          .setCollection(
-                              true).setNullable(false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav)
+                      .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETKeyNav).setNullable(false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETKeyNav).setNullable(false)));
 
     } else if (functionName.equals(nameBFCETKeyNavRTETKeyNav)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCETKeyNavRTETKeyNav")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav).setNullable(
-                          false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav)
+                      .setNullable(false)))
               .setComposable(true)
               .setEntitySetPath("BindingParam/NavPropertyETKeyNavOne")
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETKeyNav).setNullable(false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETKeyNav).setNullable(false)));
+
     } else if (functionName.equals(nameBFESTwoKeyNavRTESTwoKeyNav)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFESTwoKeyNavRTESTwoKeyNav")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setCollection(true).setNullable(false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                      .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(
-                      false))
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                      .setNullable(false)));
 
-          );
     } else if (functionName.equals(nameBFCESKeyNavRTESTwoKeyNav)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCESKeyNavRTESTwoKeyNav")
               .setEntitySetPath("BindingParam/NavPropertyETTwoKeyNavMany")
@@ -852,67 +797,59 @@ public class FunctionProvider {
               .setReturnType(new CsdlReturnType()
                   .setNullable(false)
                   .setType(EntityTypeProvider.nameETTwoKeyNav)
-                  .setCollection(true))
-          );
+                  .setCollection(true)));
 
     } else if (functionName.equals(nameBFCETTwoKeyNavRTETTwoKeyNav)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCETTwoKeyNavRTETTwoKeyNav")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setNullable(
-                              false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                      .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)));
 
     } else if (functionName.equals(nameBFCETTwoKeyNavRTCTTwoPrim)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCETTwoKeyNavRTCTTwoPrim")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setNullable(
-                              false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                      .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setNullable(false))
-          );
+                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTTwoPrim).setNullable(false)));
+
     } else if (functionName.equals(nameBFCESTwoKeyNavRTCTNavFiveProp)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCESTwoKeyNavRTCTNavFiveProp")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setCollection(true).setNullable(false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                      .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTNavFiveProp).setNullable(false))
-          );
+                  new CsdlReturnType().setType(ComplexTypeProvider.nameCTNavFiveProp).setNullable(false)));
+
     } else if (functionName.equals(nameBFCESTwoKeyNavRTCollCTNavFiveProp)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCESTwoKeyNavRTCollCTNavFiveProp")
               .setBound(true)
-              .setParameters(
-                  Arrays.asList(
-                      new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
-                          .setCollection(true).setNullable(false)))
+              .setParameters(Collections.singletonList(
+                  new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETTwoKeyNav)
+                      .setCollection(true).setNullable(false)))
               .setComposable(true)
               .setReturnType(
                   new CsdlReturnType().setType(ComplexTypeProvider.nameCTNavFiveProp).setCollection(true)
-                      .setNullable(false))
-          );
+                      .setNullable(false)));
+
     } else if (functionName.equals(nameBFCESTwoKeyNavRTStringParam)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCESTwoKeyNavRTStringParam")
               .setBound(true)
@@ -924,59 +861,53 @@ public class FunctionProvider {
                           .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(PropertyProvider.nameString).setNullable(false))
-          );
+                  new CsdlReturnType().setType(PropertyProvider.nameString).setNullable(false)));
 
     } else if (functionName.equals(nameBFCESKeyNavRTETKeyNavParam)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCESKeyNavRTETKeyNavParam")
               .setBound(true)
               .setParameters(
                   Arrays.asList(
                       new CsdlParameter().setName("BindingParam").setType(EntityTypeProvider.nameETKeyNav)
-                          .setCollection(
-                              true).setNullable(false),
+                          .setCollection(true).setNullable(false),
                       new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString)
                           .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETKeyNav).setNullable(false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETKeyNav).setNullable(false)));
+
     } else if (functionName.equals(nameBFCCTPrimCompRTETTwoKeyNavParam)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCCTPrimCompRTETTwoKeyNavParam")
               .setBound(true)
               .setParameters(
                   Arrays.asList(
                       new CsdlParameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp)
-                          .setNullable(
-                              false),
+                          .setNullable(false),
                       new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString)
                           .setNullable(false)))
               .setComposable(true)
               .setReturnType(new CsdlReturnType()
-                  .setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)
-              )
-          );
+                  .setType(EntityTypeProvider.nameETTwoKeyNav).setNullable(false)));
+
     } else if (functionName.equals(nameBFCCTPrimCompRTESTwoKeyNavParam)) {
-      return Arrays.asList(
+      return Collections.singletonList(
           new CsdlFunction()
               .setName("BFCCTPrimCompRTESTwoKeyNavParam")
               .setBound(true)
               .setParameters(
                   Arrays.asList(
                       new CsdlParameter().setName("BindingParam").setType(ComplexTypeProvider.nameCTPrimComp)
-                          .setNullable(
-                              false),
+                          .setNullable(false),
                       new CsdlParameter().setName("ParameterString").setType(PropertyProvider.nameString)
                           .setNullable(false)))
               .setComposable(true)
               .setReturnType(
-                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true).setNullable(
-                      false))
-          );
+                  new CsdlReturnType().setType(EntityTypeProvider.nameETTwoKeyNav).setCollection(true)
+                      .setNullable(false)));
     }
 
     return null;