You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ko...@apache.org on 2014/01/23 12:30:43 UTC

[12/12] git commit: [OLINGO-63] Uri Parser: Add support for II

[OLINGO-63] Uri Parser: Add support for  II


Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/commit/7955eadf
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/tree/7955eadf
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/diff/7955eadf

Branch: refs/heads/master
Commit: 7955eadf027d02d45b64d83901a6b9ec1d6c509d
Parents: 4954467
Author: Sven Kobler <sv...@sap.com>
Authored: Wed Dec 18 11:23:48 2013 +0100
Committer: Sven Kobler <sv...@sap.com>
Committed: Thu Jan 23 12:28:34 2014 +0100

----------------------------------------------------------------------
 .../core/edm/provider/EdmProviderImpl.java      |    1 +
 .../olingo/odata4/producer/api/uri/UriInfo.java |   19 +-
 .../odata4/producer/api/uri/UriInfoAll.java     |   24 +
 .../odata4/producer/api/uri/UriInfoBatch.java   |    2 +-
 .../producer/api/uri/UriInfoCrossjoin.java      |   28 +
 .../producer/api/uri/UriInfoEntityId.java       |   48 +
 .../odata4/producer/api/uri/UriInfoKind.java    |    3 +-
 .../producer/api/uri/UriInfoMetadata.java       |   28 +
 .../producer/api/uri/UriInfoResource.java       |   64 +
 .../odata4/producer/api/uri/UriInfoService.java |   23 +
 .../odata4/producer/api/uri/UriParameter.java   |   30 +
 .../odata4/producer/api/uri/UriPathInfo.java    |   30 -
 .../producer/api/uri/UriPathInfoKind.java       |   24 -
 .../producer/api/uri/UriResourceAction.java     |   35 +
 .../odata4/producer/api/uri/UriResourceAll.java |   26 +
 .../odata4/producer/api/uri/UriResourceAny.java |   26 +
 .../api/uri/UriResourceComplexProperty.java     |   28 +
 .../producer/api/uri/UriResourceCount.java      |   24 +
 .../producer/api/uri/UriResourceEntitySet.java  |   40 +
 .../producer/api/uri/UriResourceFunction.java   |   47 +
 .../odata4/producer/api/uri/UriResourceIt.java  |   32 +
 .../producer/api/uri/UriResourceKind.java       |   26 +
 .../producer/api/uri/UriResourceNavigation.java |   33 +
 .../producer/api/uri/UriResourcePart.java       |   24 +
 .../producer/api/uri/UriResourcePartTyped.java  |   28 +
 .../producer/api/uri/UriResourceProperty.java   |   25 +
 .../odata4/producer/api/uri/UriResourceRef.java |   24 +
 .../producer/api/uri/UriResourceRoot.java       |   27 +
 .../api/uri/UriResourceSimpleProperty.java      |   24 +
 .../producer/api/uri/UriResourceSingleton.java  |   28 +
 .../producer/api/uri/UriResourceValue.java      |   24 +
 .../olingo/odata4/producer/api/uri/UriType.java |   83 -
 .../producer/api/uri/optiontree/OptionNode.java |   76 +
 .../api/uri/optiontree/OptionProperty.java      |   27 +
 .../api/uri/queryoption/AliasQueryOption.java   |   26 +
 .../api/uri/queryoption/CustomQueryOption.java  |   23 +
 .../uri/queryoption/ExceptionVisitExpand.java   |   28 +
 .../api/uri/queryoption/ExpandItem.java         |   47 +
 .../api/uri/queryoption/ExpandOption.java       |   25 +
 .../api/uri/queryoption/ExpandVisitor.java      |   36 +
 .../api/uri/queryoption/FilterOption.java       |   25 +
 .../api/uri/queryoption/FormatOption.java       |   24 +
 .../producer/api/uri/queryoption/IdOption.java  |   23 +
 .../api/uri/queryoption/InlineCountOption.java  |   23 +
 .../api/uri/queryoption/LevelExpandOption.java  |   27 +
 .../api/uri/queryoption/OrderByItem.java        |   34 +
 .../api/uri/queryoption/OrderByOption.java      |   27 +
 .../api/uri/queryoption/QueryOption.java        |   26 +
 .../api/uri/queryoption/SearchOption.java       |   26 +
 .../api/uri/queryoption/SelectItem.java         |   43 +
 .../api/uri/queryoption/SelectOption.java       |   27 +
 .../api/uri/queryoption/SkipOption.java         |   25 +
 .../api/uri/queryoption/SkipTokenOption.java    |   26 +
 .../api/uri/queryoption/SortOrderEnum.java      |   20 +
 .../api/uri/queryoption/SystemQueryOption.java  |   25 +
 .../uri/queryoption/SystemQueryOptionEnum.java  |   45 +
 .../producer/api/uri/queryoption/TopOption.java |   23 +
 .../api/uri/queryoption/VisitableExpand.java    |   48 +
 .../expression/BinaryExpression.java            |   29 +
 .../uri/queryoption/expression/Expression.java  |   23 +
 .../uri/queryoption/expression/LambdaRef.java   |   25 +
 .../api/uri/queryoption/expression/Literal.java |   25 +
 .../api/uri/queryoption/expression/Member.java  |   29 +
 .../uri/queryoption/expression/MethodCall.java  |   31 +
 .../expression/SupportedBinaryOperators.java    |   56 +
 .../expression/SupportedMethodCalls.java        |   55 +
 .../expression/SupportedUnaryOperators.java     |   44 +
 .../uri/queryoption/expression/TypeLiteral.java |   29 +
 .../queryoption/expression/UnaryOperator.java   |   27 +
 .../uri/queryoption/search/SearchBinary.java    |   28 +
 .../queryoption/search/SearchExpression.java    |   23 +
 .../api/uri/queryoption/search/SearchTerm.java  |   23 +
 .../api/uri/queryoption/search/SearchUnary.java |   23 +
 .../search/SupportedSearchBinaryOperators.java  |   44 +
 .../search/SupportedSearchUnaryOperators.java   |   43 +
 .../odata4/producer/core/uri/antlr/UriLexer.g4  |   38 +-
 .../odata4/producer/core/uri/antlr/UriParser.g4 |  188 +-
 .../producer/core/uri/ErrorCollector.java       |  145 ++
 .../odata4/producer/core/uri/ErrorHandler.java  |   55 -
 .../producer/core/uri/ExpandSegmentCount.java   |   25 +
 .../producer/core/uri/ExpandSegmentIt.java      |   25 +
 .../producer/core/uri/ExpandSegmentRef.java     |   25 +
 .../odata4/producer/core/uri/ParserAdapter.java |   29 +-
 .../producer/core/uri/SystemQueryParameter.java |   43 -
 .../odata4/producer/core/uri/UriInfoImpl.java   |  270 ++-
 .../producer/core/uri/UriInfoImplAll.java       |   28 -
 .../producer/core/uri/UriInfoImplBatch.java     |   27 -
 .../producer/core/uri/UriInfoImplCrossjoin.java |   27 -
 .../producer/core/uri/UriInfoImplEntity.java    |   28 -
 .../producer/core/uri/UriInfoImplMetadata.java  |   27 -
 .../producer/core/uri/UriInfoImplPath.java      |   81 -
 .../producer/core/uri/UriKeyPredicateList.java  |   47 -
 .../producer/core/uri/UriParameterImpl.java     |   71 +
 .../producer/core/uri/UriParameterlist.java     |   43 -
 .../producer/core/uri/UriParseTreeVisitor.java  | 1614 ++++++++++++++++++
 .../producer/core/uri/UriParserException.java   |   13 +-
 .../odata4/producer/core/uri/UriParserImpl.java |  580 -------
 .../core/uri/UriParserSemanticException.java    |   39 +
 .../core/uri/UriParserSyntaxException.java      |   36 +
 .../core/uri/UriPathInfoActionImpl.java         |   49 -
 .../core/uri/UriPathInfoEntitySetImpl.java      |   48 -
 .../core/uri/UriPathInfoFunctionImpl.java       |   64 -
 .../odata4/producer/core/uri/UriPathInfoIT.java |   53 -
 .../producer/core/uri/UriPathInfoImpl.java      |  202 ---
 .../core/uri/UriPathInfoNavEntitySet.java       |   43 -
 .../core/uri/UriPathInfoSingletonImpl.java      |   44 -
 .../core/uri/UriResourceActionImpl.java         |   75 +
 .../producer/core/uri/UriResourceAllImpl.java   |   67 +
 .../producer/core/uri/UriResourceAnyImpl.java   |   67 +
 .../uri/UriResourceComplexPropertyImpl.java     |   65 +
 .../producer/core/uri/UriResourceCountImpl.java |   30 +
 .../core/uri/UriResourceEntitySetImpl.java      |   74 +
 .../core/uri/UriResourceFunctionImpl.java       |  110 ++
 .../core/uri/UriResourceImplKeyPred.java        |   75 +
 .../producer/core/uri/UriResourceImplTyped.java |   43 +
 .../producer/core/uri/UriResourceItImpl.java    |   83 +
 .../uri/UriResourceNavigationPropertyImpl.java  |   72 +
 .../producer/core/uri/UriResourcePartImpl.java  |   39 +
 .../core/uri/UriResourcePropertyImpl.java       |   54 +
 .../producer/core/uri/UriResourceRefImpl.java   |   34 +
 .../producer/core/uri/UriResourceRootImpl.java  |   32 +
 .../core/uri/UriResourceSimplePropertyImpl.java |   59 +
 .../core/uri/UriResourceSingletonImpl.java      |   54 +
 .../producer/core/uri/UriResourceValueImpl.java |   35 +
 .../producer/core/uri/expression/Alias.java     |   35 -
 .../producer/core/uri/expression/Binary.java    |   50 -
 .../expression/ExceptionVisitExpression.java    |   28 -
 .../core/uri/expression/Expression.java         |   25 -
 .../core/uri/expression/ExpressionVisitor.java  |   36 -
 .../producer/core/uri/expression/Literal.java   |   34 -
 .../producer/core/uri/expression/Member.java    |   54 -
 .../core/uri/expression/MethodCall.java         |   46 -
 .../expression/SupportedBinaryOperators.java    |   56 -
 .../uri/expression/SupportedMethodCalls.java    |   48 -
 .../uri/expression/SupportedUnaryOperators.java |   44 -
 .../core/uri/expression/UnaryOperator.java      |   40 -
 .../producer/core/uri/expression/Visitable.java |   50 -
 .../uri/queryoption/AliasQueryOptionImpl.java   |   42 +
 .../uri/queryoption/CustomQueryOptionImpl.java  |   26 +
 .../core/uri/queryoption/ExpandItemImpl.java    |  193 +++
 .../core/uri/queryoption/ExpandOptionImpl.java  |   61 +
 .../core/uri/queryoption/ExpandSegment.java     |   55 +
 .../producer/core/uri/queryoption/Filter.java   |   36 -
 .../core/uri/queryoption/FilterOptionImpl.java  |   46 +
 .../core/uri/queryoption/FormatOptionImpl.java  |   43 +
 .../core/uri/queryoption/IdOptionImpl.java      |   48 +
 .../core/uri/queryoption/InlineCountImpl.java   |   48 +
 .../core/uri/queryoption/LevelOption.java       |   23 +
 .../core/uri/queryoption/LevelOptionImpl.java   |   54 +
 .../core/uri/queryoption/OrderByImpl.java       |   51 +
 .../core/uri/queryoption/OrderByOptionImpl.java |   51 +
 .../core/uri/queryoption/QueryOption.java       |   23 -
 .../core/uri/queryoption/QueryOptionImpl.java   |   47 +
 .../core/uri/queryoption/SearchOptionImpl.java  |   40 +
 .../uri/queryoption/SelectItemOptionImpl.java   |  225 +++
 .../core/uri/queryoption/SelectOptionImpl.java  |   50 +
 .../core/uri/queryoption/SkipOptionImpl.java    |   49 +
 .../uri/queryoption/SkipTokenOptionImpl.java    |   52 +
 .../core/uri/queryoption/SystemQueryOption.java |   23 -
 .../uri/queryoption/SystemQueryOptionImpl.java  |   49 +
 .../core/uri/queryoption/TopOptionImpl.java     |   50 +
 .../uri/queryoption/expression/AliasImpl.java   |   34 +
 .../uri/queryoption/expression/BinaryImpl.java  |   67 +
 .../expression/ExceptionVisitExpression.java    |   28 +
 .../queryoption/expression/ExpressionImpl.java  |   31 +
 .../expression/ExpressionVisitor.java           |   40 +
 .../queryoption/expression/LambdaRefImpl.java   |   44 +
 .../uri/queryoption/expression/LiteralImpl.java |   42 +
 .../uri/queryoption/expression/MemberImpl.java  |   54 +
 .../queryoption/expression/MethodCallImpl.java  |   66 +
 .../queryoption/expression/TypeLiteralImpl.java |   45 +
 .../expression/UnaryOperatorImpl.java           |   54 +
 .../expression/VisitableExression.java          |   54 +
 .../producer/core/testutil/EdmTechProvider.java | 1201 +++++++------
 .../producer/core/testutil/ExpandToText.java    |   68 +
 .../core/testutil/FilterTreeToText.java         |   34 +-
 .../producer/core/testutil/FilterValidator.java |  146 +-
 .../producer/core/testutil/ParserValidator.java |  293 +---
 .../producer/core/testutil/TokenValidator.java  |  136 +-
 .../producer/core/testutil/TokenWriter.java     |   60 -
 .../core/testutil/UriLexerWithTrace.java        |    4 +-
 .../core/testutil/UriResourcePathValidator.java |  224 ++-
 .../producer/core/testutil/UriValidator.java    |  139 ++
 .../producer/core/testutil/Validator.java       |   23 +
 .../core/uri/antlr/TestByAbapResourcePath.java  |  870 ++++++++++
 .../producer/core/uri/antlr/TestLexer.java      |   59 +-
 .../producer/core/uri/antlr/TestParser.java     |  525 +++---
 .../core/uri/antlr/TestUriParserImpl.java       |  987 ++++++++---
 188 files changed, 10653 insertions(+), 3971 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-commons-core/src/main/java/org/apache/olingo/odata4/commons/core/edm/provider/EdmProviderImpl.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-commons-core/src/main/java/org/apache/olingo/odata4/commons/core/edm/provider/EdmProviderImpl.java b/odata4-lib/odata4-commons-core/src/main/java/org/apache/olingo/odata4/commons/core/edm/provider/EdmProviderImpl.java
index 71f2cc9..f6a82b8 100644
--- a/odata4-lib/odata4-commons-core/src/main/java/org/apache/olingo/odata4/commons/core/edm/provider/EdmProviderImpl.java
+++ b/odata4-lib/odata4-commons-core/src/main/java/org/apache/olingo/odata4/commons/core/edm/provider/EdmProviderImpl.java
@@ -179,6 +179,7 @@ public class EdmProviderImpl extends EdmImpl {
           for (Function function : functions) {
             if (function.isBound() == false) {
               List<Parameter> parameters = function.getParameters();
+              // TODO add check for parameters == null;
               if (parameterNames.size() == parameters.size()) {
                 List<String> functionParameterNames = new ArrayList<String>();
                 for (Parameter parameter : parameters) {

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfo.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfo.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfo.java
index 66bd8e5..5a01c97 100644
--- a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfo.java
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfo.java
@@ -19,6 +19,23 @@
 
 package org.apache.olingo.odata4.producer.api.uri;
 
-public interface UriInfo {
+public interface UriInfo extends
+    UriInfoService, UriInfoAll, UriInfoBatch, UriInfoCrossjoin,
+    UriInfoEntityId, UriInfoMetadata, UriInfoResource {
+  
+  public UriInfoService asUriInfoService();
+
+  public UriInfoAll asUriInfoAll();
+
+  public UriInfoBatch asUriInfoBatch();
+
+  public UriInfoCrossjoin asUriInfoCrossjoin();
+
+  public UriInfoEntityId asUriInfoEntityId();
+
+  public UriInfoMetadata asUriInfoMetadata();
+
+  public UriInfoResource asUriInfoResource();
+
   public UriInfoKind getKind();
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoAll.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoAll.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoAll.java
new file mode 100644
index 0000000..aab9524
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoAll.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+public interface UriInfoAll  {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoBatch.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoBatch.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoBatch.java
index 13b6673..accdffe 100644
--- a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoBatch.java
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoBatch.java
@@ -19,6 +19,6 @@
 
 package org.apache.olingo.odata4.producer.api.uri;
 
-public interface UriInfoBatch {
+public interface UriInfoBatch   {
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoCrossjoin.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoCrossjoin.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoCrossjoin.java
new file mode 100644
index 0000000..fa7d86b
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoCrossjoin.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * 
+ * 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.odata4.producer.api.uri;
+
+import java.util.List;
+
+public interface UriInfoCrossjoin {
+
+  List<String> getEntitySetNames();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoEntityId.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoEntityId.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoEntityId.java
new file mode 100644
index 0000000..2afacb3
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoEntityId.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.edm.EdmEntityType;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.CustomQueryOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.ExpandOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.FormatOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.IdOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.SelectOption;
+
+/**
+ * Indicates a URL access to an single Entity
+ */
+public interface UriInfoEntityId {
+  
+  public List<CustomQueryOption> getCustomQueryOptions();
+
+  public EdmEntityType getEntityTypeCast();
+
+  public ExpandOption getExpandOption();
+
+  public FormatOption getFormatOption();
+
+  public IdOption getIdOption();
+
+  public SelectOption getSelectOption();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoKind.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoKind.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoKind.java
index 79b676b..ee82688 100644
--- a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoKind.java
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoKind.java
@@ -20,6 +20,5 @@
 package org.apache.olingo.odata4.producer.api.uri;
 
 public enum UriInfoKind {
-  batch,entity, metadata, all, crossjoin, path;
-
+  all, batch, crossjoin, entityId, metadata, resource, service;
 }

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoMetadata.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoMetadata.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoMetadata.java
new file mode 100644
index 0000000..cf73412
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoMetadata.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+import org.apache.olingo.odata4.producer.api.uri.queryoption.FormatOption;
+
+public interface UriInfoMetadata {
+  public String getContext();
+
+  public FormatOption getFormatOption();
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoResource.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoResource.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoResource.java
new file mode 100644
index 0000000..9be2b1c
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoResource.java
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.producer.api.uri.queryoption.CustomQueryOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.ExpandOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.FilterOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.FormatOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.IdOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.InlineCountOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.OrderByOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.SearchOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.SelectOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.SkipOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.SkipTokenOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.TopOption;
+
+public interface UriInfoResource {
+
+  List<CustomQueryOption> getCustomQueryOptions();
+
+  ExpandOption getExpandOption();
+
+  FilterOption getFilterOption();
+
+  FormatOption getFormatOption();
+
+  IdOption getIdOption();
+
+  InlineCountOption getInlineCountOption();
+
+  OrderByOption getOrderByOption();
+
+  SearchOption getSearchOption();
+
+  SelectOption getSelectOption();
+
+  SkipOption getSkipOption();
+
+  SkipTokenOption getSkipTokenOption();
+
+  TopOption getTopOption();
+
+  List<UriResourcePart> getUriResourceParts();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoService.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoService.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoService.java
new file mode 100644
index 0000000..7286904
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriInfoService.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+public interface UriInfoService {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriParameter.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriParameter.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriParameter.java
new file mode 100644
index 0000000..c4deb50
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriParameter.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ******************************************************************************/
+package org.apache.olingo.odata4.producer.api.uri;
+
+import org.apache.olingo.odata4.producer.api.uri.queryoption.expression.Expression;
+
+public interface UriParameter {
+
+  public  String getAlias();
+  public  String getText();
+  public  Expression getExression();
+  public  String getName();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriPathInfo.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriPathInfo.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriPathInfo.java
deleted file mode 100644
index f3d17a4..0000000
--- a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriPathInfo.java
+++ /dev/null
@@ -1,30 +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.odata4.producer.api.uri;
-
-import org.apache.olingo.odata4.commons.api.edm.EdmEntityContainer;
-
-public interface UriPathInfo {
-  public UriPathInfoKind getKind();
-
-  public EdmEntityContainer getEntityContainer();
-
-  public boolean isCollection();
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriPathInfoKind.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriPathInfoKind.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriPathInfoKind.java
deleted file mode 100644
index 27bb8b9..0000000
--- a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriPathInfoKind.java
+++ /dev/null
@@ -1,24 +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.odata4.producer.api.uri;
-
-public enum UriPathInfoKind {
-  entitySet, navEntitySet, singleton, action, function, it;
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceAction.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceAction.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceAction.java
new file mode 100644
index 0000000..321d143
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceAction.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+import org.apache.olingo.odata4.commons.api.edm.EdmAction;
+import org.apache.olingo.odata4.commons.api.edm.EdmActionImport;
+
+public interface UriResourceAction extends UriResourcePartTyped {
+
+  EdmAction getAction();
+
+  /**
+   * Convenience method which return the {@link EdmActionImport} which was used in
+   * the resource path to define the {@link EdmAction}.
+   * @return
+   */
+  EdmActionImport getActionImport();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceAll.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceAll.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceAll.java
new file mode 100644
index 0000000..95c0e00
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceAll.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+import org.apache.olingo.odata4.producer.api.uri.queryoption.expression.Expression;
+
+public interface UriResourceAll extends UriResourcePartTyped {
+  public String getLamdaVariable();
+  public Expression getExpression();
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceAny.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceAny.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceAny.java
new file mode 100644
index 0000000..2405cbf
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceAny.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+import org.apache.olingo.odata4.producer.api.uri.queryoption.expression.Expression;
+
+public interface UriResourceAny extends UriResourcePartTyped {
+  public String getLamdaVariable();
+  public Expression getExpression();
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceComplexProperty.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceComplexProperty.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceComplexProperty.java
new file mode 100644
index 0000000..ce7d614
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceComplexProperty.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+import org.apache.olingo.odata4.commons.api.edm.EdmComplexType;
+
+public interface UriResourceComplexProperty extends UriResourceProperty {
+  EdmComplexType getComplexType();
+
+  EdmComplexType getComplexTypeFilter();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceCount.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceCount.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceCount.java
new file mode 100644
index 0000000..d4be146
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceCount.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+
+public interface UriResourceCount extends UriResourcePart {
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceEntitySet.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceEntitySet.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceEntitySet.java
new file mode 100644
index 0000000..349e45e
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceEntitySet.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.edm.EdmEntitySet;
+import org.apache.olingo.odata4.commons.api.edm.EdmEntityType;
+import org.apache.olingo.odata4.commons.api.edm.EdmType;
+
+public interface UriResourceEntitySet extends UriResourcePartTyped {
+
+  
+  EdmEntitySet getEntitySet();
+
+  EdmEntityType getEntityType();
+
+  List<UriParameter> getKeyPredicates();
+
+  EdmType getTypeFilterOnCollection();
+
+  EdmType getTypeFilterOnEntry();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceFunction.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceFunction.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceFunction.java
new file mode 100644
index 0000000..45d2b31
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceFunction.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ******************************************************************************/
+package org.apache.olingo.odata4.producer.api.uri;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.edm.EdmFunction;
+import org.apache.olingo.odata4.commons.api.edm.EdmFunctionImport;
+import org.apache.olingo.odata4.commons.api.edm.EdmType;
+
+public interface UriResourceFunction extends UriResourcePartTyped {
+
+
+  EdmFunction getFunction();
+
+  /**
+   * Convenience method which return the {@link EdmFunctionImport} which was used in
+   * the resource path to define the {@link EdmFunction}.
+   * @return
+   */
+  EdmFunctionImport getFunctionImport();
+
+  List<UriParameter> getKeyPredicates();
+
+  List<UriParameter> getParameters();
+
+  EdmType getTypeFilterOnCollection();
+
+  EdmType getTypeFilterOnEntry();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceIt.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceIt.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceIt.java
new file mode 100644
index 0000000..cd86f1d
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceIt.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+import org.apache.olingo.odata4.commons.api.edm.EdmType;
+
+/**
+ * Class indicating the $it reference. $it may be used within filter to
+ * refer to the last EDM object reference in the resource path.
+ */
+public interface UriResourceIt extends UriResourcePartTyped {
+  
+  EdmType getTypeFilterOnCollection();
+  EdmType getTypeFilterOnEntry();
+  boolean isExplicitIt();
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceKind.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceKind.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceKind.java
new file mode 100644
index 0000000..3acf57e
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceKind.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 
+ * 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.odata4.producer.api.uri;
+
+public enum UriResourceKind {
+  action, entitySet, function, it, singleton, navigationProperty,
+  simpleProperty, complexProperty, value, count, ref, root, lamdaAll, lamdaAny
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceNavigation.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceNavigation.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceNavigation.java
new file mode 100644
index 0000000..de80fd9
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceNavigation.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.commons.api.edm.EdmNavigationProperty;
+import org.apache.olingo.odata4.commons.api.edm.EdmType;
+
+public interface UriResourceNavigation extends UriResourcePartTyped {
+  
+  List<UriParameter> getKeyPredicates();
+  EdmNavigationProperty getNavigationProperty();
+  
+  EdmType getTypeFilterOnCollection();
+  EdmType getTypeFilterOnEntry();
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourcePart.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourcePart.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourcePart.java
new file mode 100644
index 0000000..0a3312a
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourcePart.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+
+public interface UriResourcePart {
+  UriResourceKind getKind();
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourcePartTyped.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourcePartTyped.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourcePartTyped.java
new file mode 100644
index 0000000..a44093d
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourcePartTyped.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * 
+ * 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.odata4.producer.api.uri;
+
+import org.apache.olingo.odata4.commons.api.edm.EdmType;
+
+public interface UriResourcePartTyped extends UriResourcePart {
+  EdmType getType();
+
+  boolean isCollection();
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceProperty.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceProperty.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceProperty.java
new file mode 100644
index 0000000..04cbbf1
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceProperty.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+import org.apache.olingo.odata4.commons.api.edm.EdmProperty;
+
+public interface UriResourceProperty extends UriResourcePartTyped {
+  EdmProperty getProperty();
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceRef.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceRef.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceRef.java
new file mode 100644
index 0000000..bb80032
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceRef.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+
+public interface UriResourceRef extends UriResourcePart {
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceRoot.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceRoot.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceRoot.java
new file mode 100644
index 0000000..02ad4b9
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceRoot.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+/**
+ * Class indicating the $root reference. $root may be used within filter to
+ * refer to the current OData service
+ */
+public interface UriResourceRoot extends UriResourcePart {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceSimpleProperty.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceSimpleProperty.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceSimpleProperty.java
new file mode 100644
index 0000000..8730e05
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceSimpleProperty.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+
+public interface UriResourceSimpleProperty extends UriResourceProperty{
+  
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceSingleton.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceSingleton.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceSingleton.java
new file mode 100644
index 0000000..b34295d
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceSingleton.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+import org.apache.olingo.odata4.commons.api.edm.EdmSingleton;
+import org.apache.olingo.odata4.commons.api.edm.EdmType;
+
+public interface UriResourceSingleton extends UriResourcePartTyped {
+  EdmType getEntityType();
+
+  EdmSingleton getSingleton();
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceValue.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceValue.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceValue.java
new file mode 100644
index 0000000..d5c8734
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriResourceValue.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri;
+
+
+public interface UriResourceValue extends UriResourcePart {
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriType.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriType.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriType.java
deleted file mode 100644
index a06a712..0000000
--- a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/UriType.java
+++ /dev/null
@@ -1,83 +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.odata4.producer.api.uri;
-
-public enum UriType {
-  TYPE_ENTITY_SET,
-  TYPE_ENTITY_SET_COUNT,
-  TYPE_MEDIA_REFERENCE,
-  TYPE_REFERENCE_COLLECTION,
-  /*
-   * Singleton
-   */
-  TYPE_ENTITY,
-  TYPE_MEDIA_STREAM,
-  TYPE_REFERENCE,
-
-  /*
-   * Property Path
-   */
-  TYPE_PROPERTY_PRIMITIVE,
-  TYPE_PROPERTY_PRIMITIVE_COLLECTION,
-  TYPE_PROPERTY_PRIMITIVE_VALUE,
-  TYPE_PROPERTY_COMPLEX,
-
-  /*
-   * Crossjoin
-   */
-  TYPE_CROSSJOIN,
-
-  /*
-   * $all
-   */
-  TYPE_SERVICE_ALL,
-  /*
-   * ActionImport
-   */
-  TYPE_AI_ENTITY,
-  /*
-   * FunctionImport
-   */
-  TYPE_FI_ENTITY,
-  TYPE_FI_ENTITY_SET,
-  TYPE_FI_ENTITY_SET_COUNT,
-  TYPE_FI_PROPERTY_PRIMITIVE,
-  TYPE_FI_PROPERTY_PRIMITIVE_COLL,
-  TYPE_FI_PROPERTY_PRIMITIVE_COLL_COUNT,
-  TYPE_FI_PROPERTY_COMPLEX,
-  TYPE_FI_PROPERTY_COMPLEX_COLL,
-  TYPE_FI_PROPERTY_COMPLEX_COLL_COUNT,
-  /*
-   * BoundFunction
-   */
-  TYPE_BF_ENTITY,
-  TYPE_BF_ENTITY_SET,
-  TYPE_BF_PROP_PRIM,
-  TYPE_BF_PROP_COMP,
-  TYPE_BF_PROP_COMP_COLL,
-  TYPE_BF_PROP_PRIM_COLL,
-  /*
-   * BoundAction
-   */
-  TYPE_BA_ENTITY_SET,
-  TYPE_BA_ENTITY,
-  TYPE_BA_PROP_PRIM,
-  TYPE_BA_PROP_PRIM_COLL,
-  TYPE_BA_PROP_COMP;
-}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/optiontree/OptionNode.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/optiontree/OptionNode.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/optiontree/OptionNode.java
new file mode 100644
index 0000000..31f541d
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/optiontree/OptionNode.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri.optiontree;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.producer.api.uri.UriResourceProperty;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.FilterOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.InlineCountOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.OrderByOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.SearchOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.SkipOption;
+import org.apache.olingo.odata4.producer.api.uri.queryoption.TopOption;
+
+/**
+ * Contains the merged $expand and $select options
+ */
+public interface OptionNode {
+
+  /**
+   * Contains the list of non navigation properties which should serialized at this expand level.
+   */
+  List<UriResourceProperty> getPropertyChainList();
+
+  List<OptionProperty> getExpandetNavigationProperties();
+
+  /**
+   * Contains the filter which should be applied to this expand level.
+   */
+  FilterOption getFilter();
+
+  /**
+   * Contains the search information which should be applied to this expand level.
+   */
+  SearchOption getSearch();
+
+  /**
+   * Contains the orderBy information which should be applied to this expand level.
+   */
+  OrderByOption getOrderBy();
+
+  /**
+   * Contains the information about how many output entities should be skipped at this
+   * expand level.
+   */
+  SkipOption getSkip();
+
+  /**
+   * Contains the information about how many output items should be serialized at this
+   * expand level.
+   */
+  TopOption getTop();
+
+  /**
+   * Contains the information whether the number of output items should be serialized
+   * at this expand level
+   */
+  InlineCountOption getInlineCount();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/optiontree/OptionProperty.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/optiontree/OptionProperty.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/optiontree/OptionProperty.java
new file mode 100644
index 0000000..bc9c8e2
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/optiontree/OptionProperty.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri.optiontree;
+
+import org.apache.olingo.odata4.commons.api.edm.EdmNavigationProperty;
+
+public interface OptionProperty {
+  EdmNavigationProperty getNavigationProperty();
+
+  OptionNode getOptionNode();
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/AliasQueryOption.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/AliasQueryOption.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/AliasQueryOption.java
new file mode 100644
index 0000000..d9fc828
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/AliasQueryOption.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri.queryoption;
+
+import org.apache.olingo.odata4.producer.api.uri.queryoption.expression.Expression;
+
+public interface AliasQueryOption extends QueryOption {
+  public Expression getAliasValue();
+  
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/CustomQueryOption.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/CustomQueryOption.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/CustomQueryOption.java
new file mode 100644
index 0000000..cbc395b
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/CustomQueryOption.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri.queryoption;
+
+public interface CustomQueryOption extends QueryOption {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/ExceptionVisitExpand.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/ExceptionVisitExpand.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/ExceptionVisitExpand.java
new file mode 100644
index 0000000..433f5f0
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/ExceptionVisitExpand.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri.queryoption;
+
+public class ExceptionVisitExpand extends Exception {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 822365726050299076L;
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/ExpandItem.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/ExpandItem.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/ExpandItem.java
new file mode 100644
index 0000000..55d6b80
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/ExpandItem.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ******************************************************************************/
+package org.apache.olingo.odata4.producer.api.uri.queryoption;
+
+import java.util.List;
+
+import org.apache.olingo.odata4.producer.api.uri.UriResourceProperty;
+
+public interface ExpandItem {
+  boolean isStar();
+
+  List<UriResourceProperty> getPropertyChainList();
+
+  LevelExpandOption getLevel();
+
+  FilterOption getFilter();
+
+  SearchOption getSearch();
+
+  OrderByOption getOrderBy();
+
+  SkipOption getSkip();
+
+  TopOption getTop();
+
+  InlineCountOption getInlineCount();
+
+  SelectOption getSelect();
+
+  ExpandOption getExpand();
+}

http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata4/blob/7955eadf/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/ExpandOption.java
----------------------------------------------------------------------
diff --git a/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/ExpandOption.java b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/ExpandOption.java
new file mode 100644
index 0000000..5ccefd8
--- /dev/null
+++ b/odata4-lib/odata4-producer-api/src/main/java/org/apache/olingo/odata4/producer/api/uri/queryoption/ExpandOption.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * 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.odata4.producer.api.uri.queryoption;
+
+import java.util.List;
+
+public interface ExpandOption extends SystemQueryOption {
+  List<ExpandItem> getExpandItems();
+}