You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2013/09/24 14:42:36 UTC

[09/51] [partial] Refactored project structure

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/FilterParserImpl.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/FilterParserImpl.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/FilterParserImpl.java
deleted file mode 100644
index eb5ecb1..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/FilterParserImpl.java
+++ /dev/null
@@ -1,918 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ******************************************************************************/
-package org.apache.olingo.odata2.core.uri.expression;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.olingo.odata2.api.edm.EdmComplexType;
-import org.apache.olingo.odata2.api.edm.EdmEntityType;
-import org.apache.olingo.odata2.api.edm.EdmException;
-import org.apache.olingo.odata2.api.edm.EdmSimpleType;
-import org.apache.olingo.odata2.api.edm.EdmSimpleTypeKind;
-import org.apache.olingo.odata2.api.edm.EdmStructuralType;
-import org.apache.olingo.odata2.api.edm.EdmType;
-import org.apache.olingo.odata2.api.edm.EdmTyped;
-import org.apache.olingo.odata2.api.uri.expression.BinaryExpression;
-import org.apache.olingo.odata2.api.uri.expression.BinaryOperator;
-import org.apache.olingo.odata2.api.uri.expression.CommonExpression;
-import org.apache.olingo.odata2.api.uri.expression.ExpressionKind;
-import org.apache.olingo.odata2.api.uri.expression.ExpressionParserException;
-import org.apache.olingo.odata2.api.uri.expression.FilterExpression;
-import org.apache.olingo.odata2.api.uri.expression.LiteralExpression;
-import org.apache.olingo.odata2.api.uri.expression.MethodExpression;
-import org.apache.olingo.odata2.api.uri.expression.MethodOperator;
-import org.apache.olingo.odata2.api.uri.expression.UnaryExpression;
-import org.apache.olingo.odata2.api.uri.expression.UnaryOperator;
-import org.apache.olingo.odata2.core.edm.EdmBoolean;
-import org.apache.olingo.odata2.core.edm.EdmSimpleTypeFacadeImpl;
-
-/**
- *  
- */
-public class FilterParserImpl implements FilterParser {
-  /* do the static initialization */
-  protected static Map<String, InfoBinaryOperator> availableBinaryOperators;
-  protected static Map<String, InfoMethod> availableMethods;
-  protected static Map<String, InfoUnaryOperator> availableUnaryOperators;
-
-  static {
-    initAvailTables();
-  }
-
-  /* instance attributes */
-  protected EdmEntityType resourceEntityType = null;
-  protected TokenList tokenList = null;
-  protected String curExpression;
-
-  /**
-   * Creates a new FilterParser implementation
-   * @param resourceEntityType EntityType of the resource on which the filter is applied
-   */
-  public FilterParserImpl(final EdmEntityType resourceEntityType) {
-    this.resourceEntityType = resourceEntityType;
-  }
-
-  @Override
-  public FilterExpression parseFilterString(final String filterExpression) throws ExpressionParserException,
-      ExpressionParserInternalError {
-    return parseFilterString(filterExpression, false);
-  }
-
-  public FilterExpression parseFilterString(final String filterExpression, final boolean allowOnlyBinary)
-      throws ExpressionParserException, ExpressionParserInternalError {
-    CommonExpression node = null;
-    curExpression = filterExpression;
-    try {
-      // Throws TokenizerException and FilterParserException. FilterParserException is caught somewhere above
-      tokenList = new Tokenizer(filterExpression).tokenize();
-      if (!tokenList.hasTokens()) {
-        return new FilterExpressionImpl(filterExpression);
-      }
-    } catch (TokenizerException tokenizerException) {
-      // Tested with TestParserExceptions.TestPMparseFilterString
-      throw FilterParserExceptionImpl.createERROR_IN_TOKENIZER(tokenizerException, curExpression);
-    }
-
-    try {
-      CommonExpression nodeLeft = readElement(null);
-      node = readElements(nodeLeft, 0);
-    } catch (ExpressionParserException filterParserException) {
-      // Add empty filterTree to Exception
-      // Tested for original throw point
-      filterParserException.setFilterTree(new FilterExpressionImpl(filterExpression));
-      throw filterParserException;
-    }
-
-    // Post check
-    if (tokenList.tokenCount() > tokenList.currentToken) // this indicates that not all tokens have been read
-    {
-      // Tested with TestParserExceptions.TestPMparseFilterString
-      throw FilterParserExceptionImpl.createINVALID_TRAILING_TOKEN_DETECTED_AFTER_PARSING(tokenList
-          .elementAt(tokenList.currentToken), filterExpression);
-    }
-
-    // Create and return filterExpression node
-    if ((allowOnlyBinary == true) && (node.getEdmType() != null)
-        && (node.getEdmType() != EdmSimpleTypeKind.Boolean.getEdmSimpleTypeInstance())) {
-      // Tested with TestParserExceptions.testAdditionalStuff CASE 9
-      throw FilterParserExceptionImpl.createTYPE_EXPECTED_AT(EdmBoolean.getInstance(), node.getEdmType(), 1,
-          curExpression);
-    }
-
-    return new FilterExpressionImpl(filterExpression, node);
-  }
-
-  protected CommonExpression readElements(final CommonExpression leftExpression, final int priority)
-      throws ExpressionParserException, ExpressionParserInternalError {
-    CommonExpression leftNode = leftExpression;
-    CommonExpression rightNode;
-    BinaryExpression binaryNode;
-
-    ActualBinaryOperator operator = readBinaryOperator();
-    ActualBinaryOperator nextOperator;
-
-    while ((operator != null) && (operator.getOP().getPriority() >= priority)) {
-      tokenList.next(); // eat the operator
-      rightNode = readElement(leftNode, operator); // throws FilterParserException, FilterParserInternalError
-      if (rightNode == null) {
-        // Tested with TestParserExceptions.testAdditionalStuff CASE 10
-        throw FilterParserExceptionImpl.createEXPRESSION_EXPECTED_AFTER_POS(operator.getToken().getPosition()
-            + operator.getToken().getUriLiteral().length(), curExpression);
-      }
-      nextOperator = readBinaryOperator();
-
-      // It must be "while" because for example in "Filter=a or c eq d and e eq f"
-      // after reading the "eq" operator the "and" operator must be consumed too. This is due to the fact that "and" has
-      // a higher priority than "or"
-      while ((nextOperator != null) && (nextOperator.getOP().getPriority() > operator.getOP().getPriority())) {
-        // recurse until the a binary operator with a lower priority is detected
-        rightNode = readElements(rightNode, nextOperator.getOP().getPriority());
-        nextOperator = readBinaryOperator();
-      }
-
-      // Although the member operator is also a binary operator, there is some special handling in the filterTree
-      if (operator.getOP().getOperator() == BinaryOperator.PROPERTY_ACCESS) {
-        binaryNode = new MemberExpressionImpl(leftNode, rightNode);
-      } else {
-        binaryNode = new BinaryExpressionImpl(operator.getOP(), leftNode, rightNode, operator.getToken());
-      }
-
-      try {
-        validateBinaryOperatorTypes(binaryNode);
-      } catch (ExpressionParserException expressionException) {
-        // Extend the error information
-        // Tested for original throw point
-        expressionException.setFilterTree(binaryNode);
-        throw expressionException;
-      }
-
-      leftNode = binaryNode;
-      operator = readBinaryOperator();
-    }
-
-    // Add special handling for expressions like $filter=notsupportedfunction('a')
-    // If this special handling is not in place the error text would be
-    // -->Invalid token "(" detected after parsing at position 21 in "notsupportedfunction('a')".
-    // with this special handling we ensure that the error text would be
-
-    Token token = tokenList.lookToken();
-    if (token != null) {
-      if ((leftNode.getKind() == ExpressionKind.PROPERTY) && (tokenList.lookToken().getKind() == TokenKind.OPENPAREN)) {
-        // Tested with TestParserExceptions.testAdditionalStuff CASE 2
-        throw FilterParserExceptionImpl.createINVALID_METHOD_CALL(leftNode, tokenList.lookPrevToken(), curExpression);
-      }
-    }
-
-    return leftNode;
-  }
-
-  /**
-   * Reads the content between parenthesis. Its is expected that the current token is of kind
-   * {@link TokenKind#OPENPAREN} because it MUST be check in the calling method ( when read the method name and the '('
-   * is read).
-   * @return An expression which reflects the content within the parenthesis
-   * @throws ExpressionParserException
-   * While reading the elements in the parenthesis an error occurred
-   * @throws TokenizerMessage
-   * The next token did not match the expected token
-   */
-  protected CommonExpression readParenthesis() throws ExpressionParserException, ExpressionParserInternalError {
-    // The existing of a '(' is verified BEFORE this method is called --> so it's a internal error
-    Token openParenthesis = tokenList.expectToken(TokenKind.OPENPAREN, true);
-
-    CommonExpression firstExpression = readElement(null);
-    CommonExpression parenthesisExpression = readElements(firstExpression, 0);
-
-    // check for ')'
-    try {
-      tokenList.expectToken(TokenKind.CLOSEPAREN); // TokenizerMessage
-    } catch (TokenizerExpectError e) {
-      // Internal parsing error, even if there are no more token (then there should be a different exception).
-      // Tested with TestParserExceptions.TestPMreadParenthesis
-      throw FilterParserExceptionImpl.createMISSING_CLOSING_PHARENTHESIS(openParenthesis.getPosition(), curExpression,
-          e);
-    }
-    return parenthesisExpression;
-  }
-
-  /**
-   * Read the parameters of a method expression
-   * @param methodInfo
-   * Signature information about the method whose parameters should be read
-   * @param methodExpression
-   * Method expression to which the read parameters are added
-   * @return
-   * The method expression input parameter
-   * @throws ExpressionParserException
-   * @throws ExpressionParserInternalError
-   * @throws TokenizerExpectError
-   * The next token did not match the expected token
-   */
-  protected MethodExpression readParameters(final InfoMethod methodInfo, final MethodExpressionImpl methodExpression,
-      final Token methodToken) throws ExpressionParserException, ExpressionParserInternalError {
-    CommonExpression expression;
-    boolean expectAnotherExpression = false;
-    boolean readComma = true;
-
-    // The existing of a '(' is verified BEFORE this method is called --> so it's a internal error
-    Token openParenthesis = tokenList.expectToken(TokenKind.OPENPAREN, true); // throws FilterParserInternalError
-
-    Token token = tokenList.lookToken();
-    if (token == null) {
-      // Tested with TestParserExceptions.TestPMreadParameters CASE 1 e.g. "$filter=concat("
-      throw FilterParserExceptionImpl.createEXPRESSION_EXPECTED_AFTER_POS(openParenthesis, curExpression);
-    }
-
-    while (token.getKind() != TokenKind.CLOSEPAREN) {
-      if (readComma == false) {
-        // Tested with TestParserExceptions.TestPMreadParameters CASE 12 e.g. "$filter=concat('a' 'b')"
-        throw FilterParserExceptionImpl.createCOMMA_OR_CLOSING_PHARENTHESIS_EXPECTED_AFTER_POS(tokenList
-            .lookPrevToken(), curExpression);
-      }
-      expression = readElement(null);
-      if (expression != null) {
-        expression = readElements(expression, 0);
-      }
-
-      if ((expression == null) && (expectAnotherExpression == true)) {
-        // Tested with TestParserExceptions.TestPMreadParameters CASE 4 e.g. "$filter=concat(,"
-        throw FilterParserExceptionImpl.createEXPRESSION_EXPECTED_AFTER_POS(token, curExpression);
-      } else if (expression != null) {// parameter list may be empty
-        methodExpression.appendParameter(expression);
-      }
-
-      token = tokenList.lookToken();
-      if (token == null) {
-        // Tested with TestParserExceptions.TestPMreadParameters CASE 2 e.g. "$filter=concat(123"
-        throw FilterParserExceptionImpl.createCOMMA_OR_CLOSING_PHARENTHESIS_EXPECTED_AFTER_POS(tokenList
-            .lookPrevToken(), curExpression);
-      }
-
-      if (token.getKind() == TokenKind.COMMA) {
-        expectAnotherExpression = true;
-        if (expression == null) {
-          // Tested with TestParserExceptions.TestPMreadParameters CASE 3 e.g. "$filter=concat(,"
-          throw FilterParserExceptionImpl.createEXPRESSION_EXPECTED_AT_POS(token, curExpression);
-        }
-
-        tokenList.expectToken(",", true);
-        readComma = true;
-      } else {
-        readComma = false;
-      }
-    }
-
-    // because the while loop above only exits if a ')' has been found it is an
-    // internal error if there is not ')'
-    tokenList.expectToken(TokenKind.CLOSEPAREN, true);
-
-    // ---check parameter count
-    int count = methodExpression.getParameters().size();
-    if ((methodInfo.getMinParameter() > -1) && (count < methodInfo.getMinParameter())) {
-      // Tested with TestParserExceptions.TestPMreadParameters CASE 12
-      throw FilterParserExceptionImpl.createMETHOD_WRONG_ARG_COUNT(methodExpression, methodToken, curExpression);
-    }
-
-    if ((methodInfo.getMaxParameter() > -1) && (count > methodInfo.getMaxParameter())) {
-      // Tested with TestParserExceptions.TestPMreadParameters CASE 15
-      throw FilterParserExceptionImpl.createMETHOD_WRONG_ARG_COUNT(methodExpression, methodToken, curExpression);
-    }
-
-    return methodExpression;
-  }
-
-  protected CommonExpression readElement(final CommonExpression leftExpression) throws ExpressionParserException,
-      ExpressionParserInternalError {
-    return readElement(leftExpression, null);
-  }
-
-  /**
-   * Reads: Unary operators, Methods, Properties, ...
-   * but not binary operators which are handelt in {@link #readElements(CommonExpression, int)}
-   * @param leftExpression
-   * Used while parsing properties. In this case ( e.g. parsing "a/b") the property "a" ( as leftExpression of "/") is
-   * relevant
-   * to verify whether the property "b" exists inside the edm
-   * @return a CommonExpression
-   * @throws ExpressionParserException
-   * @throws ExpressionParserInternalError
-   * @throws TokenizerMessage
-   */
-  protected CommonExpression
-      readElement(final CommonExpression leftExpression, final ActualBinaryOperator leftOperator)
-          throws ExpressionParserException, ExpressionParserInternalError {
-    CommonExpression node = null;
-    Token token;
-    Token lookToken;
-    lookToken = tokenList.lookToken();
-    if (lookToken == null) {
-      return null;
-    }
-
-    switch (lookToken.getKind()) {
-    case OPENPAREN:
-      node = readParenthesis();
-      return node;
-    case CLOSEPAREN: // ')' finishes a parenthesis (it is no extra token)" +
-    case COMMA: // . " ','  is a separator for function parameters (it is no extra token)" +
-      return null;
-    default:
-      // continue
-    }
-
-    // -->Check if the token is a unary operator
-    InfoUnaryOperator unaryOperator = isUnaryOperator(lookToken);
-    if (unaryOperator != null) {
-      return readUnaryoperator(lookToken, unaryOperator);
-    }
-
-    // ---expect the look ahead token
-    token = tokenList.expectToken(lookToken.getUriLiteral(), true);
-    lookToken = tokenList.lookToken();
-
-    // -->Check if the token is a method
-    // To avoid name clashes between method names and property names we accept here only method names if a "(" follows.
-    // Hence the parser accepts a property named "concat"
-    InfoMethod methodOperator = isMethod(token, lookToken);
-    if (methodOperator != null) {
-      return readMethod(token, methodOperator);
-    }
-
-    // -->Check if token is a terminal
-    // is a terminal e.g. a Value like an EDM.String 'hugo' or 125L or 1.25D"
-    if (token.getKind() == TokenKind.SIMPLE_TYPE) {
-      LiteralExpression literal = new LiteralExpressionImpl(token.getUriLiteral(), token.getJavaLiteral());
-      return literal;
-    }
-
-    // -->Check if token is a property, e.g. "name" or "address"
-    if (token.getKind() == TokenKind.LITERAL) {
-      PropertyExpressionImpl property = new PropertyExpressionImpl(token.getUriLiteral(), token.getJavaLiteral());
-      validateEdmProperty(leftExpression, property, token, leftOperator);
-      return property;
-    }
-
-    // not Tested, should not occur
-    throw ExpressionParserInternalError.createCOMMON();
-  }
-
-  protected CommonExpression readUnaryoperator(final Token lookToken, final InfoUnaryOperator unaryOperator)
-      throws ExpressionParserException, ExpressionParserInternalError {
-    tokenList.expectToken(lookToken.getUriLiteral(), true);
-
-    CommonExpression operand = readElement(null);
-    UnaryExpression unaryExpression = new UnaryExpressionImpl(unaryOperator, operand);
-    validateUnaryOperatorTypes(unaryExpression); // throws ExpressionInvalidOperatorTypeException
-
-    return unaryExpression;
-  }
-
-  protected CommonExpression readMethod(final Token token, final InfoMethod methodOperator)
-      throws ExpressionParserException, ExpressionParserInternalError {
-    MethodExpressionImpl method = new MethodExpressionImpl(methodOperator);
-
-    readParameters(methodOperator, method, token);
-    validateMethodTypes(method, token); // throws ExpressionInvalidOperatorTypeException
-
-    return method;
-  }
-
-  protected ActualBinaryOperator readBinaryOperator() {
-    InfoBinaryOperator operator = null;
-    Token token = tokenList.lookToken();
-    if (token == null) {
-      return null;
-    }
-    if ((token.getKind() == TokenKind.SYMBOL) && (token.getUriLiteral().equals("/"))) {
-      operator = availableBinaryOperators.get(token.getUriLiteral());
-    } else if (token.getKind() == TokenKind.LITERAL) {
-      operator = availableBinaryOperators.get(token.getUriLiteral());
-    }
-
-    if (operator == null) {
-      return null;
-    }
-
-    return new ActualBinaryOperator(operator, token);
-  }
-
-  /**
-   * Check if a token is a UnaryOperator ( e.g. "not" or "-" )
-   * 
-   * @param token Token to be checked
-   * 
-   * @return
-   * <li>An instance of {@link InfoUnaryOperator} containing information about the specific unary operator</li>
-   * <li><code>null</code> if the token is not an unary operator</li>
-   */
-  protected InfoUnaryOperator isUnaryOperator(final Token token) {
-    if ((token.getKind() == TokenKind.LITERAL) || (token.getKind() == TokenKind.SYMBOL)) {
-      InfoUnaryOperator operator = availableUnaryOperators.get(token.getUriLiteral());
-      return operator;
-    }
-    return null;
-  }
-
-  protected InfoMethod isMethod(final Token token, final Token lookToken) {
-    if ((lookToken != null) && (lookToken.getKind() == TokenKind.OPENPAREN)) {
-      return availableMethods.get(token.getUriLiteral());
-    }
-    return null;
-  }
-
-  protected void validateEdmProperty(final CommonExpression leftExpression, final PropertyExpressionImpl property,
-      final Token propertyToken, final ActualBinaryOperator actBinOp) throws ExpressionParserException,
-      ExpressionParserInternalError {
-
-    // Exist if no edm provided
-    if (resourceEntityType == null) {
-      return;
-    }
-
-    if (leftExpression == null) {
-      // e.g. "$filter=city eq 'Hong Kong'" --> "city" is checked against the resource entity type of the last URL
-      // segment
-      validateEdmPropertyOfStructuredType(resourceEntityType, property, propertyToken);
-      return;
-    }
-    // e.g. "$filter='Hong Kong' eq address/city" --> city is "checked" against the type of the property "address".
-    // "address" itself must be a (navigation)property of the resource entity type of the last URL segment AND
-    // "address" must have a structural edm type
-    EdmType parentType = leftExpression.getEdmType(); // parentType point now to the type of property "address"
-
-    if ((actBinOp != null) && (actBinOp.operator.getOperator() != BinaryOperator.PROPERTY_ACCESS)) {
-      validateEdmPropertyOfStructuredType(resourceEntityType, property, propertyToken);
-      return;
-    } else {
-      if ((leftExpression.getKind() != ExpressionKind.PROPERTY) && 
-          (leftExpression.getKind() != ExpressionKind.MEMBER)) {
-        if (actBinOp != null) {
-          // Tested with TestParserExceptions.TestPMvalidateEdmProperty CASE 6
-          throw FilterParserExceptionImpl.createLEFT_SIDE_NOT_A_PROPERTY(actBinOp.token, curExpression);
-        } else {
-          // not Tested, should not occur
-          throw ExpressionParserInternalError.createCOMMON();
-        }
-
-      }
-    }
-
-    if (parentType instanceof EdmEntityType) {
-      // e.g. "$filter='Hong Kong' eq navigationProp/city" --> "navigationProp" is a navigation property with a entity
-      // type
-      validateEdmPropertyOfStructuredType((EdmStructuralType) parentType, property, propertyToken);
-    } else if (parentType instanceof EdmComplexType) {
-      // e.g. "$filter='Hong Kong' eq address/city" --> "address" is a property with a complex type
-      validateEdmPropertyOfStructuredType((EdmStructuralType) parentType, property, propertyToken);
-    } else {
-      // e.g. "$filter='Hong Kong' eq name/city" --> "name is of type String"
-      // Tested with TestParserExceptions.TestPMvalidateEdmProperty CASE 5
-      throw FilterParserExceptionImpl.createLEFT_SIDE_NOT_STRUCTURAL_TYPE(parentType, property, propertyToken,
-          curExpression);
-    }
-
-    return;
-  }
-
-  protected void validateEdmPropertyOfStructuredType(final EdmStructuralType parentType,
-      final PropertyExpressionImpl property, final Token propertyToken) throws ExpressionParserException,
-      ExpressionParserInternalError {
-    try {
-      String propertyName = property.getUriLiteral();
-      EdmTyped edmProperty = parentType.getProperty(propertyName);
-
-      if (edmProperty != null) {
-        property.setEdmProperty(edmProperty);
-        property.setEdmType(edmProperty.getType());
-      } else {
-        // Tested with TestParserExceptions.TestPMvalidateEdmProperty CASE 3
-        throw FilterParserExceptionImpl.createPROPERTY_NAME_NOT_FOUND_IN_TYPE(parentType, property, propertyToken,
-            curExpression);
-      }
-
-    } catch (EdmException e) {
-      // not Tested, should not occur
-      throw ExpressionParserInternalError.createERROR_ACCESSING_EDM(e);
-    }
-  }
-
-  /*
-   * protected void validateEdmPropertyOfComplexType1(EdmComplexType parentType, PropertyExpressionImpl property, Token
-   * propertyToken) throws FilterParserException, FilterParserInternalError
-   * {
-   * try {
-   * String propertyName = property.getUriLiteral();
-   * EdmTyped edmProperty = parentType.getProperty(propertyName);
-   * 
-   * if (edmProperty != null)
-   * {
-   * property.setEdmProperty(edmProperty);
-   * property.setEdmType(edmProperty.getType());
-   * }
-   * else
-   * {
-   * //Tested with TestParserExceptions.TestPMvalidateEdmProperty CASE 3
-   * throw FilterParserExceptionImpl.createPROPERTY_NAME_NOT_FOUND_IN_TYPE(parentType, property, propertyToken,
-   * curExpression);
-   * }
-   * 
-   * } catch (EdmException e) {
-   * // not Tested, should not occur
-   * throw FilterParserInternalError.createERROR_ACCESSING_EDM(e);
-   * }
-   * }
-   * 
-   * protected void validateEdmPropertyOfEntityType1(EdmEntityType parentType, PropertyExpressionImpl property, Token
-   * propertyToken) throws FilterParserException, FilterParserInternalError
-   * {
-   * try {
-   * String propertyName = property.getUriLiteral();
-   * EdmTyped edmProperty = parentType.getProperty(propertyName);
-   * 
-   * if (edmProperty != null)
-   * {
-   * property.setEdmProperty(edmProperty);
-   * property.setEdmType(edmProperty.getType());
-   * }
-   * else
-   * {
-   * //Tested with TestParserExceptions.TestPMvalidateEdmProperty CASE 1
-   * throw FilterParserExceptionImpl.createPROPERTY_NAME_NOT_FOUND_IN_TYPE(parentType, property, propertyToken,
-   * curExpression);
-   * }
-   * 
-   * } catch (EdmException e) {
-   * // not Tested, should not occur
-   * throw FilterParserInternalError.createERROR_ACCESSING_EDM(e);
-   * }
-   * }
-   */
-
-  protected void validateUnaryOperatorTypes(final UnaryExpression unaryExpression) 
-      throws ExpressionParserInternalError {
-    InfoUnaryOperator unOpt = availableUnaryOperators.get(unaryExpression.getOperator().toUriLiteral());
-    EdmType operandType = unaryExpression.getOperand().getEdmType();
-
-    if ((operandType == null) && (resourceEntityType == null)) {
-      return;
-    }
-
-    List<EdmType> actualParameterTypes = new ArrayList<EdmType>();
-    actualParameterTypes.add(operandType);
-
-    ParameterSet parameterSet = unOpt.validateParameterSet(actualParameterTypes);
-    if (parameterSet != null) {
-      unaryExpression.setEdmType(parameterSet.getReturnType());
-    }
-  }
-
-  protected void validateBinaryOperatorTypes(final BinaryExpression binaryExpression) throws ExpressionParserException,
-      ExpressionParserInternalError {
-    InfoBinaryOperator binOpt = availableBinaryOperators.get(binaryExpression.getOperator().toUriLiteral());
-
-    List<EdmType> actualParameterTypes = new ArrayList<EdmType>();
-    EdmType operand = binaryExpression.getLeftOperand().getEdmType();
-
-    if ((operand == null) && (resourceEntityType == null)) {
-      return;
-    }
-    actualParameterTypes.add(operand);
-
-    operand = binaryExpression.getRightOperand().getEdmType();
-
-    if ((operand == null) && (resourceEntityType == null)) {
-      return;
-    }
-    actualParameterTypes.add(operand);
-
-    ParameterSet parameterSet = binOpt.validateParameterSet(actualParameterTypes);
-    if (parameterSet == null) {
-      BinaryExpressionImpl binaryExpressionImpl = (BinaryExpressionImpl) binaryExpression;
-
-      // Tested with TestParserExceptions.TestPMvalidateBinaryOperator
-      throw FilterParserExceptionImpl.createINVALID_TYPES_FOR_BINARY_OPERATOR(binaryExpression.getOperator(),
-          binaryExpression.getLeftOperand().getEdmType(), binaryExpression.getRightOperand().getEdmType(),
-          binaryExpressionImpl.getToken(), curExpression);
-    }
-    binaryExpression.setEdmType(parameterSet.getReturnType());
-  }
-
-  protected void validateMethodTypes(final MethodExpression methodExpression, final Token methodToken)
-      throws ExpressionParserException, ExpressionParserInternalError {
-    InfoMethod methOpt = availableMethods.get(methodExpression.getUriLiteral());
-
-    List<EdmType> actualParameterTypes = new ArrayList<EdmType>();
-
-    // If there are no parameter then don't perform a type check
-    if (methodExpression.getParameters().size() == 0) {
-      return;
-    }
-
-    for (CommonExpression parameter : methodExpression.getParameters()) {
-      // If there is not at parsing time its not possible to determine the type of eg myPropertyName.
-      // Since this should not cause validation errors null type node arguments are leading to bypass
-      // the validation
-      if ((parameter.getEdmType() == null) && (resourceEntityType == null)) {
-        return;
-      }
-      actualParameterTypes.add(parameter.getEdmType());
-    }
-
-    ParameterSet parameterSet = methOpt.validateParameterSet(actualParameterTypes);
-    // If there is not returntype then the input parameter
-    if (parameterSet == null) {
-      // Tested with TestParserExceptions.testPMvalidateMethodTypes CASE 1
-      throw FilterParserExceptionImpl.createMETHOD_WRONG_INPUT_TYPE((MethodExpressionImpl) methodExpression,
-          methodToken, curExpression);
-    }
-    methodExpression.setEdmType(parameterSet.getReturnType());
-  }
-
-  static void initAvailTables() {
-    Map<String, InfoBinaryOperator> lAvailableBinaryOperators = new HashMap<String, InfoBinaryOperator>();
-    Map<String, InfoMethod> lAvailableMethods = new HashMap<String, InfoMethod>();
-    Map<String, InfoUnaryOperator> lAvailableUnaryOperators = new HashMap<String, InfoUnaryOperator>();
-
-    // create type validators
-    // InputTypeValidator typeValidatorPromotion = new InputTypeValidator.TypePromotionValidator();
-    ParameterSetCombination combination = null;
-    // create type helpers
-    EdmSimpleType boolean_ = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Boolean);
-    EdmSimpleType sbyte = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.SByte);
-    EdmSimpleType byte_ = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Byte);
-    EdmSimpleType int16 = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Int16);
-    EdmSimpleType int32 = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Int32);
-    EdmSimpleType int64 = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Int64);
-    EdmSimpleType single = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Single);
-    EdmSimpleType double_ = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Double);
-    EdmSimpleType decimal = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Decimal);
-    EdmSimpleType string = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.String);
-    EdmSimpleType time = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Time);
-    EdmSimpleType datetime = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.DateTime);
-    EdmSimpleType datetimeoffset = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.DateTimeOffset);
-    EdmSimpleType guid = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Guid);
-    EdmSimpleType binary = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Binary);
-
-    // ---Memeber member access---
-    lAvailableBinaryOperators.put("/", new InfoBinaryOperator(BinaryOperator.PROPERTY_ACCESS, "Primary", 100,
-        new ParameterSetCombination.PSCReturnTypeEqLastParameter()));// todo fix this
-
-    // ---Multiplicative---
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(sbyte, sbyte, sbyte));
-    combination.add(new ParameterSet(byte_, byte_, byte_));
-    combination.add(new ParameterSet(int16, int16, int16));
-    combination.add(new ParameterSet(int32, int32, int32));
-    combination.add(new ParameterSet(int64, int64, int64));
-    combination.add(new ParameterSet(single, single, single));
-    combination.add(new ParameterSet(double_, double_, double_));
-
-    combination.add(new ParameterSet(decimal, decimal, decimal));
-
-    lAvailableBinaryOperators.put(BinaryOperator.MUL.toUriLiteral(), new InfoBinaryOperator(BinaryOperator.MUL,
-        "Multiplicative", 60, combination));
-    lAvailableBinaryOperators.put(BinaryOperator.DIV.toUriLiteral(), new InfoBinaryOperator(BinaryOperator.DIV,
-        "Multiplicative", 60, combination));
-    lAvailableBinaryOperators.put(BinaryOperator.MODULO.toUriLiteral(), new InfoBinaryOperator(BinaryOperator.MODULO,
-        "Multiplicative", 60, combination));
-
-    // ---Additive---
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(sbyte, sbyte, sbyte));
-    combination.add(new ParameterSet(byte_, byte_, byte_));
-    combination.add(new ParameterSet(int16, int16, int16));
-    combination.add(new ParameterSet(int32, int32, int32));
-    combination.add(new ParameterSet(int64, int64, int64));
-    combination.add(new ParameterSet(single, single, single));
-    combination.add(new ParameterSet(double_, double_, double_));
-    combination.add(new ParameterSet(decimal, decimal, decimal));
-
-    lAvailableBinaryOperators.put(BinaryOperator.ADD.toUriLiteral(), new InfoBinaryOperator(BinaryOperator.ADD,
-        "Additive", 50, combination));
-    lAvailableBinaryOperators.put(BinaryOperator.SUB.toUriLiteral(), new InfoBinaryOperator(BinaryOperator.SUB,
-        "Additive", 50, combination));
-
-    // ---Relational---
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(boolean_, string, string));
-    combination.add(new ParameterSet(boolean_, time, time));
-    combination.add(new ParameterSet(boolean_, datetime, datetime));
-    combination.add(new ParameterSet(boolean_, datetimeoffset, datetimeoffset));
-    combination.add(new ParameterSet(boolean_, guid, guid));
-    combination.add(new ParameterSet(boolean_, sbyte, sbyte));
-    combination.add(new ParameterSet(boolean_, byte_, byte_));
-    combination.add(new ParameterSet(boolean_, int16, int16));
-    combination.add(new ParameterSet(boolean_, int32, int32));
-    combination.add(new ParameterSet(boolean_, int64, int64));
-    combination.add(new ParameterSet(boolean_, single, single));
-    combination.add(new ParameterSet(boolean_, double_, double_));
-    combination.add(new ParameterSet(boolean_, decimal, decimal));
-    combination.add(new ParameterSet(boolean_, binary, binary));
-
-    lAvailableBinaryOperators.put(BinaryOperator.LT.toUriLiteral(), new InfoBinaryOperator(BinaryOperator.LT,
-        "Relational", 40, combination));
-    lAvailableBinaryOperators.put(BinaryOperator.GT.toUriLiteral(), new InfoBinaryOperator(BinaryOperator.GT,
-        "Relational", 40, combination));
-    lAvailableBinaryOperators.put(BinaryOperator.GE.toUriLiteral(), new InfoBinaryOperator(BinaryOperator.GE,
-        "Relational", 40, combination));
-    lAvailableBinaryOperators.put(BinaryOperator.LE.toUriLiteral(), new InfoBinaryOperator(BinaryOperator.LE,
-        "Relational", 40, combination));
-
-    // ---Equality---
-    // combination = new ParameterSetCombination.PSCflex();
-    combination.addFirst(new ParameterSet(boolean_, boolean_, boolean_));
-    /*
-     * combination.add(new ParameterSet(boolean_, string, string));
-     * combination.add(new ParameterSet(boolean_, time, time));
-     * combination.add(new ParameterSet(boolean_, datetime, datetime));
-     * combination.add(new ParameterSet(boolean_, datetimeoffset, datetimeoffset));
-     * combination.add(new ParameterSet(boolean_, guid, guid));
-     * combination.add(new ParameterSet(boolean_, sbyte, sbyte));
-     * combination.add(new ParameterSet(boolean_, byte_, byte_));
-     * combination.add(new ParameterSet(boolean_, int16, int16));
-     * combination.add(new ParameterSet(boolean_, int32, int32));
-     * combination.add(new ParameterSet(boolean_, int64, int64));
-     * combination.add(new ParameterSet(boolean_, single, single));
-     * combination.add(new ParameterSet(boolean_, double_, double_));
-     * combination.add(new ParameterSet(boolean_, decimal, decimal));
-     * combination.add(new ParameterSet(boolean_, binary, binary));
-     */
-
-    lAvailableBinaryOperators.put(BinaryOperator.EQ.toUriLiteral(), new InfoBinaryOperator(BinaryOperator.EQ,
-        "Equality", 30, combination));
-    lAvailableBinaryOperators.put(BinaryOperator.NE.toUriLiteral(), new InfoBinaryOperator(BinaryOperator.NE,
-        "Equality", 30, combination));
-
-    // "---Conditinal AND---
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(boolean_, boolean_, boolean_));
-
-    lAvailableBinaryOperators.put(BinaryOperator.AND.toUriLiteral(), new InfoBinaryOperator(BinaryOperator.AND,
-        "Conditinal", 20, combination));
-
-    // ---Conditinal OR---
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(boolean_, boolean_, boolean_));
-
-    lAvailableBinaryOperators.put(BinaryOperator.OR.toUriLiteral(), new InfoBinaryOperator(BinaryOperator.OR,
-        "Conditinal", 10, combination));
-
-    // endswith
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(boolean_, string, string));
-    lAvailableMethods.put(MethodOperator.ENDSWITH.toUriLiteral(), new InfoMethod(MethodOperator.ENDSWITH, 2, 2,
-        combination));
-
-    // indexof
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(int32, string, string));
-    lAvailableMethods.put(MethodOperator.INDEXOF.toUriLiteral(), new InfoMethod(MethodOperator.INDEXOF, 2, 2,
-        combination));
-
-    // startswith
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(boolean_, string, string));
-    lAvailableMethods.put(MethodOperator.STARTSWITH.toUriLiteral(), new InfoMethod(MethodOperator.STARTSWITH, 2, 2,
-        combination));
-
-    // tolower
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(string, string));
-    lAvailableMethods.put(MethodOperator.TOLOWER.toUriLiteral(), new InfoMethod(MethodOperator.TOLOWER, combination));
-
-    // toupper
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(string, string));
-    lAvailableMethods.put(MethodOperator.TOUPPER.toUriLiteral(), new InfoMethod(MethodOperator.TOUPPER, combination));
-
-    // trim
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(string, string));
-    lAvailableMethods.put(MethodOperator.TRIM.toUriLiteral(), new InfoMethod(MethodOperator.TRIM, combination));
-
-    // substring
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(string, string, int32));
-    combination.add(new ParameterSet(string, string, int32, int32));
-    lAvailableMethods.put(MethodOperator.SUBSTRING.toUriLiteral(), new InfoMethod(MethodOperator.SUBSTRING, 1, -1,
-        combination));
-
-    // substringof
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(boolean_, string, string));
-    lAvailableMethods.put(MethodOperator.SUBSTRINGOF.toUriLiteral(), new InfoMethod(MethodOperator.SUBSTRINGOF, 1, -1,
-        combination));
-
-    // concat
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(string, string, string).setFurtherType(string));
-    lAvailableMethods.put(MethodOperator.CONCAT.toUriLiteral(), new InfoMethod(MethodOperator.CONCAT, 2, -1,
-        combination));
-
-    // length
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(int32, string));
-    lAvailableMethods.put(MethodOperator.LENGTH.toUriLiteral(), new InfoMethod(MethodOperator.LENGTH, combination));
-
-    // year
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(int32, datetime));
-    lAvailableMethods.put(MethodOperator.YEAR.toUriLiteral(), new InfoMethod(MethodOperator.YEAR, combination));
-
-    // month
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(int32, datetime));
-    lAvailableMethods.put(MethodOperator.MONTH.toUriLiteral(), new InfoMethod(MethodOperator.MONTH, combination));
-
-    // day
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(int32, datetime));
-    lAvailableMethods.put(MethodOperator.DAY.toUriLiteral(), new InfoMethod(MethodOperator.DAY, combination));
-
-    // hour
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(int32, datetime));
-    combination.add(new ParameterSet(int32, time));
-    combination.add(new ParameterSet(int32, datetimeoffset));
-    lAvailableMethods.put(MethodOperator.HOUR.toUriLiteral(), new InfoMethod(MethodOperator.HOUR, combination));
-
-    // minute
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(int32, datetime));
-    combination.add(new ParameterSet(int32, time));
-    combination.add(new ParameterSet(int32, datetimeoffset));
-    lAvailableMethods.put(MethodOperator.MINUTE.toUriLiteral(), new InfoMethod(MethodOperator.MINUTE, combination));
-
-    // second
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(int32, datetime));
-    combination.add(new ParameterSet(int32, time));
-    combination.add(new ParameterSet(int32, datetimeoffset));
-    lAvailableMethods.put(MethodOperator.SECOND.toUriLiteral(), new InfoMethod(MethodOperator.SECOND, combination));
-
-    // round
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(decimal, decimal));
-    combination.add(new ParameterSet(double_, double_));
-    lAvailableMethods.put(MethodOperator.ROUND.toUriLiteral(), new InfoMethod(MethodOperator.ROUND, combination));
-
-    // ceiling
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(decimal, decimal));
-    combination.add(new ParameterSet(double_, double_));
-    lAvailableMethods.put(MethodOperator.CEILING.toUriLiteral(), new InfoMethod(MethodOperator.CEILING, combination));
-
-    // floor
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(decimal, decimal));
-    combination.add(new ParameterSet(double_, double_));
-    lAvailableMethods.put(MethodOperator.FLOOR.toUriLiteral(), new InfoMethod(MethodOperator.FLOOR, combination));
-
-    // ---unary---
-
-    // minus
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(sbyte, sbyte));
-    combination.add(new ParameterSet(byte_, byte_));
-    combination.add(new ParameterSet(int16, int16));
-    combination.add(new ParameterSet(int32, int32));
-    combination.add(new ParameterSet(int64, int64));
-    combination.add(new ParameterSet(single, single));
-    combination.add(new ParameterSet(double_, double_));
-    combination.add(new ParameterSet(decimal, decimal));
-
-    // minus
-    lAvailableUnaryOperators.put(UnaryOperator.MINUS.toUriLiteral(), new InfoUnaryOperator(UnaryOperator.MINUS,
-        "minus", combination));
-
-    // not
-    combination = new ParameterSetCombination.PSCflex();
-    combination.add(new ParameterSet(boolean_, boolean_));
-    lAvailableUnaryOperators.put(UnaryOperator.NOT.toUriLiteral(), new InfoUnaryOperator(UnaryOperator.NOT, "not",
-        combination));
-
-    availableBinaryOperators = Collections.unmodifiableMap(lAvailableBinaryOperators);
-    availableMethods = Collections.unmodifiableMap(lAvailableMethods);
-    availableUnaryOperators = Collections.unmodifiableMap(lAvailableUnaryOperators);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InfoBinaryOperator.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InfoBinaryOperator.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InfoBinaryOperator.java
deleted file mode 100644
index 47958b3..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InfoBinaryOperator.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ******************************************************************************/
-package org.apache.olingo.odata2.core.uri.expression;
-
-import java.util.List;
-
-import org.apache.olingo.odata2.api.edm.EdmType;
-import org.apache.olingo.odata2.api.uri.expression.BinaryOperator;
-
-/**
- * Describes a binary operator which is allowed in OData expressions
- * 
- */
-class InfoBinaryOperator {
-  private BinaryOperator operator;
-  private String category;
-  private String syntax;
-  private int priority;
-  ParameterSetCombination combination;
-
-  public InfoBinaryOperator(final BinaryOperator operator, final String category, final int priority,
-      final ParameterSetCombination combination) {
-    this.operator = operator;
-    this.category = category;
-    syntax = operator.toUriLiteral();
-    this.priority = priority;
-    this.combination = combination;
-  }
-
-  public String getCategory() {
-    return category;
-  }
-
-  public String getSyntax() {
-    return syntax;
-  }
-
-  public BinaryOperator getOperator() {
-    return operator;
-  }
-
-  public int getPriority() {
-    return priority;
-  }
-
-  public ParameterSet validateParameterSet(final List<EdmType> actualParameterTypes)
-      throws ExpressionParserInternalError {
-    return combination.validate(actualParameterTypes);
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InfoMethod.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InfoMethod.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InfoMethod.java
deleted file mode 100644
index 400cbd0..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InfoMethod.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ******************************************************************************/
-package org.apache.olingo.odata2.core.uri.expression;
-
-import java.util.List;
-
-import org.apache.olingo.odata2.api.edm.EdmType;
-import org.apache.olingo.odata2.api.uri.expression.MethodOperator;
-
-/**
- * Describes a method expression which is allowed in OData expressions
- * 
- */
-class InfoMethod {
-
-  public MethodOperator method;
-  public String syntax;
-  public int minParameter;
-  public int maxParameter;
-  ParameterSetCombination combination;
-
-  public InfoMethod(final MethodOperator method, final ParameterSetCombination combination) {
-    this.method = method;
-    syntax = method.toUriLiteral();
-    minParameter = 1;
-    maxParameter = 1;
-    this.combination = combination;
-  }
-
-  public InfoMethod(final MethodOperator method, final int minParameters, final int maxParameters,
-      final ParameterSetCombination combination) {
-    this.method = method;
-    syntax = method.toUriLiteral();
-    minParameter = minParameters;
-    maxParameter = maxParameters;
-    this.combination = combination;
-  }
-
-  public InfoMethod(final MethodOperator method, final String string, final int minParameters, final int maxParameters,
-      final ParameterSetCombination combination) {
-    this.method = method;
-    syntax = string;
-    minParameter = minParameters;
-    maxParameter = maxParameters;
-    this.combination = combination;
-  }
-
-  public MethodOperator getMethod() {
-    return method;
-  }
-
-  public String getSyntax() {
-    return syntax;
-  }
-
-  public int getMinParameter() {
-    return minParameter;
-  }
-
-  public int getMaxParameter() {
-    return maxParameter;
-  }
-
-  public ParameterSet validateParameterSet(final List<EdmType> actualParameterTypes)
-      throws ExpressionParserInternalError {
-    return combination.validate(actualParameterTypes);
-  }
-
-  /**
-   * Returns the EdmType of the returned value of a Method
-   * If a method may have different return types (depending on the input type) null will be returned.
-   */
-  public EdmType getReturnType() {
-    return combination.getReturnType();
-
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InfoUnaryOperator.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InfoUnaryOperator.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InfoUnaryOperator.java
deleted file mode 100644
index de8bf86..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InfoUnaryOperator.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ******************************************************************************/
-package org.apache.olingo.odata2.core.uri.expression;
-
-import java.util.List;
-
-import org.apache.olingo.odata2.api.edm.EdmType;
-import org.apache.olingo.odata2.api.uri.expression.UnaryOperator;
-
-/**
- * Describes a unary operator which is allowed in OData expressions
- * 
- */
-class InfoUnaryOperator {
-  UnaryOperator operator;
-  private String category;
-  private String syntax;
-  ParameterSetCombination combination;
-
-  public InfoUnaryOperator(final UnaryOperator operator, final String category,
-      final ParameterSetCombination combination) {
-    this.operator = operator;
-    this.category = category;
-    syntax = operator.toUriLiteral();
-    this.combination = combination;
-  }
-
-  public String getCategory() {
-    return category;
-  }
-
-  public String getSyntax() {
-    return syntax;
-  }
-
-  public UnaryOperator getOperator() {
-    return operator;
-  }
-
-  public ParameterSet validateParameterSet(final List<EdmType> actualParameterTypes)
-      throws ExpressionParserInternalError {
-    return combination.validate(actualParameterTypes);
-  }
-
-  /**
-   * Returns the EdmType of the returned value of a Method
-   * If a method may have different return types (depending on the input type) null will be returned.
-   */
-  /*
-   * public EdmType getReturnType()
-   * {
-   * int parameterCount = allowedParameterTypes.size();
-   * if (parameterCount == 0)
-   * return null;
-   * 
-   * if (parameterCount == 1)
-   * return allowedParameterTypes.get(0).getReturnType();
-   * 
-   * //There are more than 1 possible return type, check if they are equal, if not return null.
-   * EdmType returnType = allowedParameterTypes.get(0).getReturnType();
-   * for (int i = 1; i < parameterCount; i++)
-   * if (returnType != allowedParameterTypes.get(i))
-   * return null;
-   * 
-   * return returnType;
-   * }
-   */
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InputTypeValidator.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InputTypeValidator.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InputTypeValidator.java
deleted file mode 100644
index e3e2d19..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/InputTypeValidator.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ******************************************************************************/
-package org.apache.olingo.odata2.core.uri.expression;
-
-import java.util.List;
-
-import org.apache.olingo.odata2.api.edm.EdmType;
-
-public interface InputTypeValidator {
-
-  public EdmType validateParameterSet(List<ParameterSet> allowedParameterTypes, List<EdmType> actualParameterTypes)
-      throws ExpressionParserInternalError;
-
-  public static class TypePromotionValidator implements InputTypeValidator {
-
-    @Override
-    public EdmType validateParameterSet(final List<ParameterSet> allowedParameterTypes,
-        final List<EdmType> actualParameterTypes) throws ExpressionParserInternalError {
-      // first check for exact parameter combination
-      for (ParameterSet parameterSet : allowedParameterTypes) {
-        boolean s = parameterSet.equals(actualParameterTypes, false);
-        if (s) {
-          return parameterSet.getReturnType();
-        }
-      }
-
-      // first check for parameter combination with promotion
-      for (ParameterSet parameterSet : allowedParameterTypes) {
-        boolean s = parameterSet.equals(actualParameterTypes, true);
-        if (s) {
-          return parameterSet.getReturnType();
-        }
-      }
-      return null;
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/JsonVisitor.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/JsonVisitor.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/JsonVisitor.java
deleted file mode 100644
index d1f4b98..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/JsonVisitor.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ******************************************************************************/
-package org.apache.olingo.odata2.core.uri.expression;
-
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.List;
-
-import org.apache.olingo.odata2.api.edm.Edm;
-import org.apache.olingo.odata2.api.edm.EdmException;
-import org.apache.olingo.odata2.api.edm.EdmLiteral;
-import org.apache.olingo.odata2.api.edm.EdmType;
-import org.apache.olingo.odata2.api.edm.EdmTyped;
-import org.apache.olingo.odata2.api.uri.expression.BinaryExpression;
-import org.apache.olingo.odata2.api.uri.expression.BinaryOperator;
-import org.apache.olingo.odata2.api.uri.expression.CommonExpression;
-import org.apache.olingo.odata2.api.uri.expression.ExpressionVisitor;
-import org.apache.olingo.odata2.api.uri.expression.FilterExpression;
-import org.apache.olingo.odata2.api.uri.expression.LiteralExpression;
-import org.apache.olingo.odata2.api.uri.expression.MemberExpression;
-import org.apache.olingo.odata2.api.uri.expression.MethodExpression;
-import org.apache.olingo.odata2.api.uri.expression.MethodOperator;
-import org.apache.olingo.odata2.api.uri.expression.OrderByExpression;
-import org.apache.olingo.odata2.api.uri.expression.OrderExpression;
-import org.apache.olingo.odata2.api.uri.expression.PropertyExpression;
-import org.apache.olingo.odata2.api.uri.expression.SortOrder;
-import org.apache.olingo.odata2.api.uri.expression.UnaryExpression;
-import org.apache.olingo.odata2.api.uri.expression.UnaryOperator;
-import org.apache.olingo.odata2.core.ep.util.JsonStreamWriter;
-
-/**
- *  
- */
-public class JsonVisitor implements ExpressionVisitor {
-
-  @Override
-  public Object visitFilterExpression(final FilterExpression filterExpression, final String expressionString,
-      final Object expression) {
-    return expression;
-  }
-
-  @Override
-  public Object visitBinary(final BinaryExpression binaryExpression, final BinaryOperator operator,
-      final Object leftSide, final Object rightSide) {
-    try {
-      StringWriter writer = new StringWriter();
-      JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
-      jsonStreamWriter.beginObject().namedStringValueRaw("nodeType", binaryExpression.getKind().toString()).separator()
-          .namedStringValue("operator", operator.toUriLiteral()).separator().namedStringValueRaw("type",
-              getType(binaryExpression)).separator().name("left").unquotedValue(leftSide.toString()).separator().name(
-              "right").unquotedValue(rightSide.toString()).endObject();
-      writer.flush();
-      return writer.toString();
-    } catch (final IOException e) {
-      return null;
-    }
-  }
-
-  @Override
-  public Object visitOrderByExpression(final OrderByExpression orderByExpression, final String expressionString,
-      final List<Object> orders) {
-    try {
-      StringWriter writer = new StringWriter();
-      JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
-      jsonStreamWriter.beginObject().namedStringValueRaw("nodeType", "order collection").separator().name("orders")
-          .beginArray();
-      boolean first = true;
-      for (final Object order : orders) {
-        if (first) {
-          first = false;
-        } else {
-          jsonStreamWriter.separator();
-        }
-        jsonStreamWriter.unquotedValue(order.toString());
-      }
-      jsonStreamWriter.endArray().endObject();
-      writer.flush();
-      return writer.toString();
-    } catch (final IOException e) {
-      return null;
-    }
-  }
-
-  @Override
-  public Object visitOrder(final OrderExpression orderExpression, final Object filterResult, 
-      final SortOrder sortOrder) {
-    try {
-      StringWriter writer = new StringWriter();
-      JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
-      jsonStreamWriter.beginObject().namedStringValueRaw("nodeType", orderExpression.getKind().toString()).separator()
-          .namedStringValueRaw("sortorder", sortOrder.toString()).separator().name("expression").unquotedValue(
-              filterResult.toString()).endObject();
-      writer.flush();
-      return writer.toString();
-    } catch (final IOException e) {
-      return null;
-    }
-  }
-
-  @Override
-  public Object visitLiteral(final LiteralExpression literal, final EdmLiteral edmLiteral) {
-    try {
-      StringWriter writer = new StringWriter();
-      JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
-      jsonStreamWriter.beginObject().namedStringValueRaw("nodeType", literal.getKind().toString()).separator()
-          .namedStringValueRaw("type", getType(literal)).separator().namedStringValue("value", edmLiteral.getLiteral())
-          .endObject();
-      writer.flush();
-      return writer.toString();
-    } catch (final IOException e) {
-      return null;
-    }
-  }
-
-  @Override
-  public Object visitMethod(final MethodExpression methodExpression, final MethodOperator method,
-      final List<Object> parameters) {
-    try {
-      StringWriter writer = new StringWriter();
-      JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
-      jsonStreamWriter.beginObject().namedStringValueRaw("nodeType", methodExpression.getKind().toString()).separator()
-          .namedStringValueRaw("operator", method.toUriLiteral()).separator().namedStringValueRaw("type",
-              getType(methodExpression)).separator().name("parameters").beginArray();
-      boolean first = true;
-      for (Object parameter : parameters) {
-        if (first) {
-          first = false;
-        } else {
-          jsonStreamWriter.separator();
-        }
-        jsonStreamWriter.unquotedValue(parameter.toString());
-      }
-      jsonStreamWriter.endArray().endObject();
-      writer.flush();
-      return writer.toString();
-    } catch (final IOException e) {
-      return null;
-    }
-  }
-
-  @Override
-  public Object visitMember(final MemberExpression memberExpression, final Object path, final Object property) {
-    try {
-      StringWriter writer = new StringWriter();
-      JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
-      jsonStreamWriter.beginObject().namedStringValueRaw("nodeType", memberExpression.getKind().toString()).separator()
-          .namedStringValueRaw("type", getType(memberExpression)).separator().name("source").unquotedValue(
-              path.toString()).separator().name("path").unquotedValue(property.toString()).endObject();
-      writer.flush();
-      return writer.toString();
-    } catch (final IOException e) {
-      return null;
-    }
-  }
-
-  @Override
-  public Object visitProperty(final PropertyExpression propertyExpression, final String uriLiteral,
-      final EdmTyped edmProperty) {
-    try {
-      StringWriter writer = new StringWriter();
-      JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
-      jsonStreamWriter.beginObject().namedStringValueRaw("nodeType", propertyExpression.getKind().toString())
-          .separator().namedStringValue("name", uriLiteral).separator().namedStringValueRaw("type",
-              getType(propertyExpression)).endObject();
-      writer.flush();
-      return writer.toString();
-    } catch (final IOException e) {
-      return null;
-    }
-  }
-
-  @Override
-  public Object visitUnary(final UnaryExpression unaryExpression, final UnaryOperator operator, final Object operand) {
-    try {
-      StringWriter writer = new StringWriter();
-      JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
-      jsonStreamWriter.beginObject().namedStringValueRaw("nodeType", unaryExpression.getKind().toString()).separator()
-          .namedStringValueRaw("operator", operator.toUriLiteral()).separator().namedStringValueRaw("type",
-              getType(unaryExpression)).separator().name("operand").unquotedValue(operand.toString()).endObject();
-      writer.flush();
-      return writer.toString();
-    } catch (final IOException e) {
-      return null;
-    }
-  }
-
-  private static String getType(final CommonExpression expression) {
-    try {
-      final EdmType type = expression.getEdmType();
-      return type == null ? null : type.getNamespace() + Edm.DELIMITER + type.getName();
-    } catch (final EdmException e) {
-      return "EdmException occurred: " + e.getMessage();
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/LiteralExpressionImpl.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/LiteralExpressionImpl.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/LiteralExpressionImpl.java
deleted file mode 100644
index f08b46b..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/LiteralExpressionImpl.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ******************************************************************************/
-package org.apache.olingo.odata2.core.uri.expression;
-
-import org.apache.olingo.odata2.api.edm.EdmLiteral;
-import org.apache.olingo.odata2.api.edm.EdmType;
-import org.apache.olingo.odata2.api.uri.expression.CommonExpression;
-import org.apache.olingo.odata2.api.uri.expression.ExpressionKind;
-import org.apache.olingo.odata2.api.uri.expression.ExpressionVisitor;
-import org.apache.olingo.odata2.api.uri.expression.LiteralExpression;
-
-public class LiteralExpressionImpl implements LiteralExpression {
-
-  private EdmType edmType;
-  private EdmLiteral edmLiteral;
-  private String uriLiteral;
-
-  public LiteralExpressionImpl(final String uriLiteral, final EdmLiteral javaLiteral) {
-    this.uriLiteral = uriLiteral;
-    edmLiteral = javaLiteral;
-    edmType = edmLiteral.getType();
-  }
-
-  @Override
-  public EdmType getEdmType() {
-    return edmType;
-  }
-
-  @Override
-  public CommonExpression setEdmType(final EdmType edmType) {
-    this.edmType = edmType;
-    return this;
-  }
-
-  @Override
-  public ExpressionKind getKind() {
-    return ExpressionKind.LITERAL;
-  }
-
-  @Override
-  public String getUriLiteral() {
-    return uriLiteral;
-  }
-
-  @Override
-  public Object accept(final ExpressionVisitor visitor) {
-    Object ret = visitor.visitLiteral(this, edmLiteral);
-    return ret;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/MemberExpressionImpl.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/MemberExpressionImpl.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/MemberExpressionImpl.java
deleted file mode 100644
index ae9e6cc..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/MemberExpressionImpl.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ******************************************************************************/
-package org.apache.olingo.odata2.core.uri.expression;
-
-import org.apache.olingo.odata2.api.edm.EdmType;
-import org.apache.olingo.odata2.api.exception.ODataApplicationException;
-import org.apache.olingo.odata2.api.uri.expression.BinaryExpression;
-import org.apache.olingo.odata2.api.uri.expression.BinaryOperator;
-import org.apache.olingo.odata2.api.uri.expression.CommonExpression;
-import org.apache.olingo.odata2.api.uri.expression.ExceptionVisitExpression;
-import org.apache.olingo.odata2.api.uri.expression.ExpressionKind;
-import org.apache.olingo.odata2.api.uri.expression.ExpressionVisitor;
-import org.apache.olingo.odata2.api.uri.expression.MemberExpression;
-
-/**
- *  
- */
-public class MemberExpressionImpl implements BinaryExpression, MemberExpression {
-  CommonExpression path;
-  CommonExpression property;
-  EdmType edmType;
-
-  public MemberExpressionImpl(final CommonExpression path, final CommonExpression property) {
-    this.path = path;
-    this.property = property;
-    edmType = property.getEdmType();
-  }
-
-  @Override
-  public CommonExpression getPath() {
-    return path;
-  }
-
-  @Override
-  public CommonExpression getProperty() {
-    return property;
-  }
-
-  @Override
-  public EdmType getEdmType() {
-    return edmType;
-  }
-
-  @Override
-  public CommonExpression setEdmType(final EdmType edmType) {
-    this.edmType = edmType;
-    return this;
-  }
-
-  @Override
-  public BinaryOperator getOperator() {
-    return BinaryOperator.PROPERTY_ACCESS;
-  }
-
-  @Override
-  public ExpressionKind getKind() {
-    return ExpressionKind.MEMBER;
-  }
-
-  @Override
-  public String getUriLiteral() {
-    return BinaryOperator.PROPERTY_ACCESS.toUriLiteral();
-  }
-
-  @Override
-  public Object accept(final ExpressionVisitor visitor) throws ExceptionVisitExpression, ODataApplicationException {
-    Object retSource = path.accept(visitor);
-    Object retPath = property.accept(visitor);
-
-    Object ret = visitor.visitMember(this, retSource, retPath);
-    return ret;
-  }
-
-  @Override
-  public CommonExpression getLeftOperand() {
-    return path;
-  }
-
-  @Override
-  public CommonExpression getRightOperand() {
-    return property;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/MethodExpressionImpl.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/MethodExpressionImpl.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/MethodExpressionImpl.java
deleted file mode 100644
index 24ce1e6..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/MethodExpressionImpl.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ******************************************************************************/
-package org.apache.olingo.odata2.core.uri.expression;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.olingo.odata2.api.edm.EdmType;
-import org.apache.olingo.odata2.api.exception.ODataApplicationException;
-import org.apache.olingo.odata2.api.uri.expression.CommonExpression;
-import org.apache.olingo.odata2.api.uri.expression.ExceptionVisitExpression;
-import org.apache.olingo.odata2.api.uri.expression.ExpressionKind;
-import org.apache.olingo.odata2.api.uri.expression.ExpressionVisitor;
-import org.apache.olingo.odata2.api.uri.expression.MethodExpression;
-import org.apache.olingo.odata2.api.uri.expression.MethodOperator;
-
-/**
- *  
- */
-public class MethodExpressionImpl implements MethodExpression {
-
-  private InfoMethod infoMethod;
-  private EdmType returnType;
-  private List<CommonExpression> actualParameters;
-
-  public MethodExpressionImpl(final InfoMethod infoMethod) {
-    this.infoMethod = infoMethod;
-    returnType = infoMethod.getReturnType();
-    actualParameters = new ArrayList<CommonExpression>();
-  }
-
-  @Override
-  public EdmType getEdmType() {
-    return returnType;
-  }
-
-  @Override
-  public CommonExpression setEdmType(final EdmType edmType) {
-    returnType = edmType;
-    return this;
-  }
-
-  @Override
-  public MethodOperator getMethod() {
-    return infoMethod.getMethod();
-  }
-
-  public InfoMethod getMethodInfo() {
-    return infoMethod;
-  }
-
-  @Override
-  public List<CommonExpression> getParameters() {
-    return actualParameters;
-  }
-
-  @Override
-  public int getParameterCount() {
-    return actualParameters.size();
-  }
-
-  /**
-   * @param expression
-   * @return A self reference for method chaining"
-   */
-  public MethodExpressionImpl appendParameter(final CommonExpression expression) {
-    actualParameters.add(expression);
-    return this;
-  }
-
-  @Override
-  public ExpressionKind getKind() {
-    return ExpressionKind.METHOD;
-  }
-
-  @Override
-  public String getUriLiteral() {
-    return infoMethod.getSyntax();
-  }
-
-  @Override
-  public Object accept(final ExpressionVisitor visitor) throws ExceptionVisitExpression, ODataApplicationException {
-    ArrayList<Object> retParameters = new ArrayList<Object>();
-    for (CommonExpression parameter : actualParameters) {
-      Object retParameter = parameter.accept(visitor);
-      retParameters.add(retParameter);
-    }
-
-    Object ret = visitor.visitMethod(this, getMethod(), retParameters);
-    return ret;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/OrderByExpressionImpl.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/OrderByExpressionImpl.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/OrderByExpressionImpl.java
deleted file mode 100644
index ad9b5d8..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/OrderByExpressionImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ******************************************************************************/
-package org.apache.olingo.odata2.core.uri.expression;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.olingo.odata2.api.edm.EdmType;
-import org.apache.olingo.odata2.api.exception.ODataApplicationException;
-import org.apache.olingo.odata2.api.uri.expression.CommonExpression;
-import org.apache.olingo.odata2.api.uri.expression.ExceptionVisitExpression;
-import org.apache.olingo.odata2.api.uri.expression.ExpressionKind;
-import org.apache.olingo.odata2.api.uri.expression.ExpressionVisitor;
-import org.apache.olingo.odata2.api.uri.expression.OrderByExpression;
-import org.apache.olingo.odata2.api.uri.expression.OrderExpression;
-
-/**
- *  
- */
-public class OrderByExpressionImpl implements OrderByExpression {
-  private String orderbyString;
-
-  List<OrderExpression> orders;
-
-  public OrderByExpressionImpl(final String orderbyString) {
-    this.orderbyString = orderbyString;
-    orders = new ArrayList<OrderExpression>();
-  }
-
-  @Override
-  public String getExpressionString() {
-    return orderbyString;
-  }
-
-  @Override
-  public List<OrderExpression> getOrders() {
-    return orders;
-  }
-
-  @Override
-  public int getOrdersCount() {
-    return orders.size();
-  }
-
-  public void addOrder(final OrderExpression orderNode) {
-    orders.add(orderNode);
-  }
-
-  @Override
-  public ExpressionKind getKind() {
-    return ExpressionKind.ORDERBY;
-  }
-
-  @Override
-  public EdmType getEdmType() {
-    return null;
-  }
-
-  @Override
-  public CommonExpression setEdmType(final EdmType edmType) {
-    return this;
-  }
-
-  @Override
-  public String getUriLiteral() {
-    return orderbyString;
-  }
-
-  @Override
-  public Object accept(final ExpressionVisitor visitor) throws ExceptionVisitExpression, ODataApplicationException {
-    ArrayList<Object> retParameters = new ArrayList<Object>();
-    for (OrderExpression order : orders) {
-      Object retParameter = order.accept(visitor);
-      retParameters.add(retParameter);
-    }
-
-    Object ret = visitor.visitOrderByExpression(this, orderbyString, retParameters);
-    return ret;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/OrderByParser.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/OrderByParser.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/OrderByParser.java
deleted file mode 100644
index 4c194db..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/OrderByParser.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ******************************************************************************/
-package org.apache.olingo.odata2.core.uri.expression;
-
-import org.apache.olingo.odata2.api.exception.ODataMessageException;
-import org.apache.olingo.odata2.api.uri.expression.ExpressionParserException;
-import org.apache.olingo.odata2.api.uri.expression.OrderByExpression;
-
-/**
- * Interface which defines a method for parsing a $orderby expression to allow different parser implementations
- * <p>
- * The current expression parser supports expressions as defined in the OData specification 2.0 with the following
- * restrictions
- * - the methods "cast", "isof" and "replace" are not supported
- * 
- * The expression parser can be used with providing an Entity Data Model (EDM) an without providing it.
- * <p>When a EDM is provided the expression parser will be as strict as possible. That means:
- * <li>All properties used in the expression must be defined inside the EDM</li>
- * <li>The types of EDM properties will be checked against the lists of allowed type per method, binary- and unary
- * operator</li>
- * </p>
- * <p>If no EDM is provided the expression parser performs a lax validation
- * <li>The properties used in the expression are not looked up inside the EDM and the type of the expression node
- * representing the
- * property will be "null"</li>
- * <li>Expression node with EDM-types which are "null" are not considered during the parameter type validation, to the
- * return type of the parent expression node will
- * also become "null"</li>
- * 
- * 
- */
-public interface OrderByParser {
-  /**
-   * Parses a $orderby expression string and creates an $orderby expression tree
-   * @param orderByExpression
-   * The $orderby expression string ( for example "name asc" ) to be parsed
-   * @return
-   * The $orderby expression tree
-   * @throws ExpressionParserException
-   * Exception thrown due to errors while parsing the $orderby expression string
-   * @throws ODataMessageException
-   * Used for extensibility
-   */
-  abstract OrderByExpression parseOrderByString(String orderByExpression) throws ExpressionParserException,
-      ODataMessageException;
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57599da6/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/OrderByParserImpl.java
----------------------------------------------------------------------
diff --git a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/OrderByParserImpl.java b/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/OrderByParserImpl.java
deleted file mode 100644
index 6cda554..0000000
--- a/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/OrderByParserImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ******************************************************************************/
-package org.apache.olingo.odata2.core.uri.expression;
-
-import org.apache.olingo.odata2.api.edm.EdmEntityType;
-import org.apache.olingo.odata2.api.uri.expression.CommonExpression;
-import org.apache.olingo.odata2.api.uri.expression.ExpressionParserException;
-import org.apache.olingo.odata2.api.uri.expression.OrderByExpression;
-import org.apache.olingo.odata2.api.uri.expression.SortOrder;
-
-public class OrderByParserImpl extends FilterParserImpl implements OrderByParser {
-  public OrderByParserImpl(final EdmEntityType resourceEntityType) {
-    super(resourceEntityType);
-  }
-
-  @Override
-  public OrderByExpression parseOrderByString(final String orderByExpression) throws ExpressionParserException,
-      ExpressionParserInternalError {
-    curExpression = orderByExpression;
-    OrderByExpressionImpl orderCollection = new OrderByExpressionImpl(curExpression);
-
-    try {
-      tokenList = new Tokenizer(orderByExpression).tokenize(); // throws TokenizerMessage
-    } catch (TokenizerException tokenizerException) {
-      throw FilterParserExceptionImpl.createERROR_IN_TOKENIZER(tokenizerException, curExpression);
-    }
-
-    while (true) {
-      CommonExpression node = null;
-      try {
-        CommonExpression nodeLeft = readElement(null);
-        node = readElements(nodeLeft, 0);
-      } catch (ExpressionParserException expressionException) {
-        expressionException.setFilterTree(orderCollection);
-        throw expressionException;
-      }
-
-      OrderExpressionImpl orderNode = new OrderExpressionImpl(node);
-
-      // read the sort order
-      Token token = tokenList.lookToken();
-      if (token == null) {
-        orderNode.setSortOrder(SortOrder.asc);
-      } else if ((token.getKind() == TokenKind.LITERAL) && (token.getUriLiteral().equals("asc"))) {
-        orderNode.setSortOrder(SortOrder.asc);
-        tokenList.next();
-        token = tokenList.lookToken();
-      } else if ((token.getKind() == TokenKind.LITERAL) && (token.getUriLiteral().equals("desc"))) {
-        orderNode.setSortOrder(SortOrder.desc);
-        tokenList.next();
-        token = tokenList.lookToken();
-      } else if (token.getKind() == TokenKind.COMMA) {
-        orderNode.setSortOrder(SortOrder.asc);
-      } else {
-        // Tested with TestParserExceptions.TestOPMparseOrderByString CASE 1
-        throw FilterParserExceptionImpl.createINVALID_SORT_ORDER(token, curExpression);
-      }
-
-      orderCollection.addOrder(orderNode);
-
-      // ls_token may be a ',' or empty.
-      if (token == null) {
-        break;
-      } else if (token.getKind() == TokenKind.COMMA) {
-        Token oldToken = token;
-        tokenList.next();
-        token = tokenList.lookToken();
-
-        if (token == null) {
-          // Tested with TestParserExceptions.TestOPMparseOrderByString CASE 2
-          throw FilterParserExceptionImpl.createEXPRESSION_EXPECTED_AFTER_POS(oldToken, curExpression);
-        }
-      } else { // e.g. in case $orderby=String asc a
-
-        throw FilterParserExceptionImpl.createCOMMA_OR_END_EXPECTED_AT_POS(token, curExpression);
-      }
-
-    }
-    return orderCollection;
-  }
-}