Repository: olingo-odata4
Updated Branches:
  refs/heads/master 8a58a6780 -> 36219d325


[OLINGO-557] even better system query option validation

Change-Id: I1406a198e049020ec9f02f18203fd9dede48e2ac

Signed-off-by: Christian Amend <[email protected]>


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

Branch: refs/heads/master
Commit: 200dac0a2c0964037074096e02a683ba3e88a791
Parents: 8a58a67
Author: Klaus Straubinger <[email protected]>
Authored: Thu Mar 12 15:27:28 2015 +0100
Committer: Christian Amend <[email protected]>
Committed: Tue Mar 17 14:22:28 2015 +0100

----------------------------------------------------------------------
 .../server/core/uri/validator/UriValidator.java | 123 +++++++++----------
 .../core/uri/validator/UriValidatorTest.java    |  69 +++++------
 2 files changed, 85 insertions(+), 107 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/200dac0a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidator.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidator.java
 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidator.java
index e3e2c3c..0b3a5f9 100644
--- 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidator.java
+++ 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/uri/validator/UriValidator.java
@@ -21,8 +21,6 @@ package org.apache.olingo.server.core.uri.validator;
 import java.util.HashMap;
 import java.util.List;
 
-import org.apache.olingo.commons.api.edm.EdmAction;
-import org.apache.olingo.commons.api.edm.EdmActionImport;
 import org.apache.olingo.commons.api.edm.EdmFunction;
 import org.apache.olingo.commons.api.edm.EdmFunctionImport;
 import org.apache.olingo.commons.api.edm.EdmKeyPropertyRef;
@@ -49,41 +47,40 @@ public class UriValidator {
 
   //@formatter:off (Eclipse formatter)
   //CHECKSTYLE:OFF (Maven checkstyle)
-  private boolean[][] decisionMatrix =
+  private final boolean[][] decisionMatrix =
       {
-          /*                                          0-FILTER 1-FORMAT 
2-EXPAND 3-ID     4-COUNT  5-ORDERBY 6-SEARCH 7-SELECT 8-SKIP   9-SKIPTOKEN 
10-LEVELS 11-TOP */
-          /*                              all  0 */ { true ,   true ,   true , 
  false,   true ,   true ,    true ,   true ,   true ,   true ,      true ,    
false },
-          /*                            batch  1 */ { false,   false,   false, 
  false,   false,   false,    false,   false,   false,   false,      false,    
false },
-          /*                        crossjoin  2 */ { true ,   true ,   true , 
  false,   true ,   true ,    true ,   true ,   true ,   true ,      true ,    
true  },
-          /*                         entityId  3 */ { false,   true ,   true , 
  true ,   false,   false,    false,   true ,   false,   false,      true ,    
false },
-          /*                         metadata  4 */ { false,   true ,   false, 
  false,   false,   false,    false,   false,   false,   false,      false,    
false },
-          /*                         resource  5 */ { false,   true ,   false, 
  false,   false,   false,    false,   false,   false,   false,      false,    
false },
-          /*                          service  6 */ { false,   true ,   false, 
  false,   false,   false,    false,   false,   false,   false,      false,    
false },
-          /*                        entitySet  7 */ { true ,   true ,   true , 
  false,   true ,   true ,    true ,   true ,   true ,   true ,      true ,    
true  },
-          /*                   entitySetCount  8 */ { true,    false,   false, 
  false,   false,   false,    true,    false,   false,   false,      false,    
false },
-          /*                           entity  9 */ { false,   true ,   true , 
  false,   false,   false,    false,   true ,   false,   false,      true ,    
false },
-          /*                      mediaStream 10 */ { false,   true ,   false, 
  false,   false,   false,    false,   false,   false,   false,      false,    
false },
-          /*                       references 11 */ { true ,   true ,   false, 
  false,   false,   true ,    true ,   false,   true ,   true ,      false,    
true  },
-          /*                        reference 12 */ { false,   true ,   false, 
  false,   false,   false,    false,   false,   false,   false,      false,    
false },
-          /*                  propertyComplex 13 */ { false,   true ,   true , 
  false,   false,   false,    false,   true ,   false,   false,      true ,    
false },
-          /*        propertyComplexCollection 14 */ { true ,   true ,   true , 
  false,   true ,   true ,    false,   false,   true ,   true ,      true ,    
true  },
-          /*   propertyComplexCollectionCount 15 */ { true,    false,   false, 
  false,   false,   false,    true,    false,   false,   false,      false,    
false },
-          /*                propertyPrimitive 16 */ { false,   true ,   false, 
  false,   false,   false,    false,   false,   false,   false,      false,    
false },
-          /*      propertyPrimitiveCollection 17 */ { true ,   true ,   false, 
  false,   false,   true ,    false,   false,   true ,   true ,      false,    
true  },
-          /* propertyPrimitiveCollectionCount 18 */ { true,    false,   false, 
  false,   false,   false,    true,    false,   false,   false,      false,    
false },
-          /*           propertyPrimitiveValue 19 */ { false,   true ,   false, 
  false,   false,   false,    false,   false,   false,   false,      false,    
false },                    
+          /*                                          0-FILTER 1-FORMAT 
2-EXPAND 3-ID     4-COUNT  5-ORDERBY 6-SEARCH 7-SELECT 8-SKIP   9-SKIPTOKEN 
10-TOP */
+          /*                              all  0 */ { true ,   true ,   true , 
  false,   true ,   true ,    true ,   true ,   true ,   true ,      true  },
+          /*                            batch  1 */ { false,   false,   false, 
  false,   false,   false,    false,   false,   false,   false,      false },
+          /*                        crossjoin  2 */ { true ,   true ,   true , 
  false,   true ,   true ,    true ,   true ,   true ,   true ,      true  },
+          /*                         entityId  3 */ { false,   true ,   true , 
  true ,   false,   false,    false,   true ,   false,   false,      false },
+          /*                         metadata  4 */ { false,   true ,   false, 
  false,   false,   false,    false,   false,   false,   false,      false },
+          /*                          service  5 */ { false,   true ,   false, 
  false,   false,   false,    false,   false,   false,   false,      false },
+          /*                        entitySet  6 */ { true ,   true ,   true , 
  false,   true ,   true ,    true ,   true ,   true ,   true ,      true  },
+          /*                   entitySetCount  7 */ { true ,   false,   false, 
  false,   false,   false,    true,    false,   false,   false,      false },
+          /*                           entity  8 */ { false,   true ,   true , 
  false,   false,   false,    false,   true ,   false,   false,      false },
+          /*                      mediaStream  9 */ { false,   false,   false, 
  false,   false,   false,    false,   false,   false,   false,      false },
+          /*                       references 10 */ { true ,   true ,   false, 
  false,   false,   true ,    true ,   false,   true ,   true ,      true  },
+          /*                        reference 11 */ { false,   true ,   false, 
  false,   false,   false,    false,   false,   false,   false,      false },
+          /*                  propertyComplex 12 */ { false,   true ,   true , 
  false,   false,   false,    false,   true ,   false,   false,      false },
+          /*        propertyComplexCollection 13 */ { true ,   true ,   true , 
  false,   true ,   true ,    false,   true ,   true ,   true ,      true  },
+          /*   propertyComplexCollectionCount 14 */ { true ,   false,   false, 
  false,   false,   false,    true,    false,   false,   false,      false },
+          /*                propertyPrimitive 15 */ { false,   true ,   false, 
  false,   false,   false,    false,   false,   false,   false,      false },
+          /*      propertyPrimitiveCollection 16 */ { true ,   true ,   false, 
  false,   true ,   true ,    false,   false,   true ,   true ,      true  },
+          /* propertyPrimitiveCollectionCount 17 */ { true ,   false,   false, 
  false,   false,   false,    true,    false,   false,   false,      false },
+          /*           propertyPrimitiveValue 18 */ { false,   true ,   false, 
  false,   false,   false,    false,   false,   false,   false,      false },
+          /*                             none 19 */ { false,   true ,   false, 
  false,   false,   false,    false,   false,   false,   false,      false }
       };
 
-  private boolean[][] decisionMatrixForHttpMethod =
+  private final boolean[][] decisionMatrixForHttpMethod =
     {
-        /*                                          0-FILTER 1-FORMAT 2-EXPAND 
3-ID     4-COUNT  5-ORDERBY 6-SEARCH 7-SELECT 8-SKIP   9-SKIPTOKEN 10-LEVELS 
11-TOP */
-        /*                              GET  0 */ { true ,   true ,   true ,   
true,    true ,   true ,    true ,   true ,   true ,   true ,      true ,    
true },
-        /*                             POST  0 */ { true ,   false ,  true ,   
false,   false ,  true ,    false ,  true ,   false ,  false ,     true ,    
false },
-        /*                              PUT  0 */ { false ,  false ,  false ,  
false,   false ,  false ,   false ,  false ,  false ,  false ,     false ,   
false },
-        /*                           DELETE  0 */ { false ,  false ,  false ,  
false,   false ,  false,    false ,  false,   false ,  false ,     false,    
false },
-        /*                            PATCH  0 */ { false ,  false ,  false ,  
false,   false ,  false ,   false ,  false ,  false ,  false ,     false ,   
false },
+        /*                                          0-FILTER 1-FORMAT 2-EXPAND 
3-ID     4-COUNT  5-ORDERBY 6-SEARCH 7-SELECT 8-SKIP   9-SKIPTOKEN 10-TOP */
+        /*                              GET  0 */ { true ,   true ,   true ,   
true,    true ,   true ,    true ,   true ,   true ,   true ,      true  },
+        /*                             POST  0 */ { true ,   false ,  true ,   
false,   false ,  true ,    false ,  true ,   false ,  false ,     false },
+        /*                              PUT  0 */ { false ,  false ,  false ,  
false,   false ,  false ,   false ,  false ,  false ,  false ,     false },
+        /*                           DELETE  0 */ { false ,  false ,  false ,  
false,   false ,  false,    false ,  false,   false ,  false ,     false },
+        /*                            PATCH  0 */ { false ,  false ,  false ,  
false,   false ,  false ,   false ,  false ,  false ,  false ,     false }
     };
-
   //CHECKSTYLE:ON
   //@formatter:on
 
@@ -93,23 +90,23 @@ public class UriValidator {
     crossjoin(2),
     entityId(3),
     metadata(4),
-    resource(5),
-    service(6),
-    entitySet(7),
-    entitySetCount(8),
-    entity(9),
-    mediaStream(10),
-    references(11),
-    reference(12),
-    propertyComplex(13),
-    propertyComplexCollection(14),
-    propertyComplexCollectionCount(15),
-    propertyPrimitive(16),
-    propertyPrimitiveCollection(17),
-    propertyPrimitiveCollectionCount(18),
-    propertyPrimitiveValue(19);
-
-    private int idx;
+    service(5),
+    entitySet(6),
+    entitySetCount(7),
+    entity(8),
+    mediaStream(9),
+    references(10),
+    reference(11),
+    propertyComplex(12),
+    propertyComplexCollection(13),
+    propertyComplexCollectionCount(14),
+    propertyPrimitive(15),
+    propertyPrimitiveCollection(16),
+    propertyPrimitiveCollectionCount(17),
+    propertyPrimitiveValue(18),
+    none(19);
+
+    private final int idx;
 
     RowIndexForUriType(final int i) {
       idx = i;
@@ -131,10 +128,9 @@ public class UriValidator {
     select(7),
     skip(8),
     skiptoken(9),
-    levels(10),
-    top(11);
+    top(10);
 
-    private int idx;
+    private final int idx;
 
     ColumnIndex(final int i) {
       idx = i;
@@ -143,7 +139,6 @@ public class UriValidator {
     public int getIndex() {
       return idx;
     }
-
   }
 
   private enum RowIndexForHttpMethod {
@@ -162,7 +157,6 @@ public class UriValidator {
     public int getIndex() {
       return idx;
     }
-
   }
 
   public UriValidator() {
@@ -209,9 +203,6 @@ public class UriValidator {
     case SKIPTOKEN:
       idx = ColumnIndex.skiptoken;
       break;
-    case LEVELS:
-      idx = ColumnIndex.levels;
-      break;
     case TOP:
       idx = ColumnIndex.top;
       break;
@@ -324,14 +315,6 @@ public class UriValidator {
       idx = function.getReturnType().getType().getKind() == EdmTypeKind.ENTITY 
?
           RowIndexForUriType.mediaStream : 
RowIndexForUriType.propertyPrimitiveValue;
       break;
-    case action:
-      UriResourceAction uriAction = (UriResourceAction) secondLastPathSegment;
-      final EdmActionImport actionImport = uriAction.getActionImport();
-      final EdmAction action = actionImport == null ?
-          uriAction.getAction() : actionImport.getUnboundAction();
-      idx = action.getReturnType().getType().getKind() == EdmTypeKind.ENTITY ?
-          RowIndexForUriType.mediaStream : 
RowIndexForUriType.propertyPrimitiveValue;
-      break;
     default:
       throw new UriValidationException("Unexpected kind in path segment before 
$value: "
           + secondLastPathSegment.getKind(), 
UriValidationException.MessageKeys.UNALLOWED_KIND_BEFORE_VALUE,
@@ -377,6 +360,8 @@ public class UriValidator {
           RowIndexForUriType.entitySet : RowIndexForUriType.entity;
       break;
     case PRIMITIVE:
+    case ENUM:
+    case DEFINITION:
       idx = rt.isCollection() ? RowIndexForUriType.propertyPrimitiveCollection 
: RowIndexForUriType.propertyPrimitive;
       break;
     case COMPLEX:
@@ -415,13 +400,18 @@ public class UriValidator {
   }
 
   private RowIndexForUriType rowIndexForAction(final UriResource 
lastPathSegment) throws UriValidationException {
-    RowIndexForUriType idx;
     final EdmReturnType rt = ((UriResourceAction) 
lastPathSegment).getAction().getReturnType();
+    if (rt == null) {
+      return RowIndexForUriType.none;
+    }
+    RowIndexForUriType idx;
     switch (rt.getType().getKind()) {
     case ENTITY:
       idx = rt.isCollection() ? RowIndexForUriType.entitySet : 
RowIndexForUriType.entity;
       break;
     case PRIMITIVE:
+    case ENUM:
+    case DEFINITION:
       idx = rt.isCollection() ? RowIndexForUriType.propertyPrimitiveCollection 
: RowIndexForUriType.propertyPrimitive;
       break;
     case COMPLEX:
@@ -431,7 +421,6 @@ public class UriValidator {
       throw new UriValidationException("Unsupported action return type: " + 
rt.getType().getKind(),
           UriValidationException.MessageKeys.UNSUPPORTED_ACTION_RETURN_TYPE, 
rt.getType().getKind().toString());
     }
-
     return idx;
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/200dac0a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/validator/UriValidatorTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/validator/UriValidatorTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/validator/UriValidatorTest.java
index 9151c12..14fdcf1 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/validator/UriValidatorTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/uri/validator/UriValidatorTest.java
@@ -75,21 +75,20 @@ public class UriValidatorTest {
   private static final String QO_SELECT = "$select=*";
   private static final String QO_SKIP = "$skip=3";
   private static final String QO_SKIPTOKEN = "$skiptoken=123";
-  private static final String QO_LEVELS = "$expand=*($levels=1)";
   private static final String QO_TOP = "$top=1";
 
   private String[][] urisWithValidSystemQueryOptions = {
       { URI_ALL, QO_FILTER }, { URI_ALL, QO_FORMAT }, { URI_ALL, QO_EXPAND }, 
{ URI_ALL, QO_COUNT },
       { URI_ALL, QO_ORDERBY }, /* { URI_ALL, QO_SEARCH }, */{ URI_ALL, 
QO_SELECT }, { URI_ALL, QO_SKIP },
-      { URI_ALL, QO_SKIPTOKEN }, { URI_ALL, QO_LEVELS },
+      { URI_ALL, QO_SKIPTOKEN }, { URI_ALL, QO_TOP },
 
       { URI_CROSSJOIN, QO_FILTER }, { URI_CROSSJOIN, QO_FORMAT },
       { URI_CROSSJOIN, QO_EXPAND }, { URI_CROSSJOIN, QO_COUNT }, { 
URI_CROSSJOIN, QO_ORDERBY },
       /* { URI_CROSSJOIN, QO_SEARCH }, */{ URI_CROSSJOIN, QO_SELECT }, { 
URI_CROSSJOIN, QO_SKIP },
-      { URI_CROSSJOIN, QO_SKIPTOKEN }, { URI_CROSSJOIN, QO_LEVELS }, { 
URI_CROSSJOIN, QO_TOP },
+      { URI_CROSSJOIN, QO_SKIPTOKEN }, { URI_CROSSJOIN, QO_TOP },
 
       { URI_ENTITY_ID, QO_ID, QO_FORMAT }, { URI_ENTITY_ID, QO_ID }, { 
URI_ENTITY_ID, QO_ID, QO_EXPAND },
-      { URI_ENTITY_ID, QO_ID, QO_SELECT }, { URI_ENTITY_ID, QO_ID, QO_LEVELS },
+      { URI_ENTITY_ID, QO_ID, QO_SELECT },
 
       { URI_METADATA, QO_FORMAT },
 
@@ -97,15 +96,12 @@ public class UriValidatorTest {
 
       { URI_ENTITY_SET, QO_FILTER }, { URI_ENTITY_SET, QO_FORMAT }, { 
URI_ENTITY_SET, QO_EXPAND },
       { URI_ENTITY_SET, QO_COUNT }, { URI_ENTITY_SET, QO_ORDERBY }, /* { 
URI_ENTITY_SET, QO_SEARCH }, */
-      { URI_ENTITY_SET, QO_SELECT },
-      { URI_ENTITY_SET, QO_SKIP }, { URI_ENTITY_SET, QO_SKIPTOKEN }, { 
URI_ENTITY_SET, QO_LEVELS },
+      { URI_ENTITY_SET, QO_SELECT }, { URI_ENTITY_SET, QO_SKIP }, { 
URI_ENTITY_SET, QO_SKIPTOKEN },
       { URI_ENTITY_SET, QO_TOP },
 
       { URI_ENTITY_SET_COUNT, QO_FILTER }, /* { URI_ENTITY_SET_COUNT, 
QO_SEARCH }, */
 
-      { URI_ENTITY, QO_FORMAT }, { URI_ENTITY, QO_EXPAND }, { URI_ENTITY, 
QO_SELECT }, { URI_ENTITY, QO_LEVELS },
-
-      { URI_MEDIA_STREAM, QO_FORMAT },
+      { URI_ENTITY, QO_FORMAT }, { URI_ENTITY, QO_EXPAND }, { URI_ENTITY, 
QO_SELECT },
 
       { URI_REFERENCES, QO_FILTER }, { URI_REFERENCES, QO_FORMAT }, { 
URI_REFERENCES, QO_ORDERBY },
       /* { URI_REFERENCES, QO_SEARCH }, */{ URI_REFERENCES, QO_SKIP }, { 
URI_REFERENCES, QO_SKIPTOKEN },
@@ -114,21 +110,21 @@ public class UriValidatorTest {
       { URI_REFERENCE, QO_FORMAT },
 
       { URI_PROPERTY_COMPLEX, QO_FORMAT }, { URI_PROPERTY_COMPLEX, QO_SELECT 
}, { URI_PROPERTY_COMPLEX, QO_EXPAND },
-      { URI_PROPERTY_COMPLEX, QO_LEVELS },
 
       { URI_PROPERTY_COMPLEX_COLLECTION, QO_FILTER }, { 
URI_PROPERTY_COMPLEX_COLLECTION, QO_FORMAT },
       { URI_PROPERTY_COMPLEX_COLLECTION, QO_EXPAND }, { 
URI_PROPERTY_COMPLEX_COLLECTION, QO_COUNT },
+      { URI_PROPERTY_COMPLEX_COLLECTION, QO_ORDERBY }, { 
URI_PROPERTY_COMPLEX_COLLECTION, QO_SELECT },
       { URI_PROPERTY_COMPLEX_COLLECTION, QO_SKIP }, { 
URI_PROPERTY_COMPLEX_COLLECTION, QO_SKIPTOKEN },
-      { URI_PROPERTY_COMPLEX_COLLECTION, QO_LEVELS }, { 
URI_PROPERTY_COMPLEX_COLLECTION, QO_TOP },
-      { URI_PROPERTY_COMPLEX_COLLECTION, QO_ORDERBY },
+      { URI_PROPERTY_COMPLEX_COLLECTION, QO_TOP },
 
       { URI_PROPERTY_COMPLEX_COLLECTION_COUNT, QO_FILTER }, /* { 
URI_PROPERTY_COMPLEX_COLLECTION_COUNT, QO_SEARCH }, */
 
       { URI_PROPERTY_PRIMITIVE, QO_FORMAT },
 
       { URI_PROPERTY_PRIMITIVE_COLLECTION, QO_FILTER }, { 
URI_PROPERTY_PRIMITIVE_COLLECTION, QO_FORMAT },
-      { URI_PROPERTY_PRIMITIVE_COLLECTION, QO_ORDERBY }, { 
URI_PROPERTY_PRIMITIVE_COLLECTION, QO_SKIP },
-      { URI_PROPERTY_PRIMITIVE_COLLECTION, QO_SKIPTOKEN }, { 
URI_PROPERTY_PRIMITIVE_COLLECTION, QO_TOP },
+      { URI_PROPERTY_PRIMITIVE_COLLECTION, QO_COUNT }, { 
URI_PROPERTY_PRIMITIVE_COLLECTION, QO_ORDERBY },
+      { URI_PROPERTY_PRIMITIVE_COLLECTION, QO_SKIP }, { 
URI_PROPERTY_PRIMITIVE_COLLECTION, QO_SKIPTOKEN },
+      { URI_PROPERTY_PRIMITIVE_COLLECTION, QO_TOP },
 
       { URI_PROPERTY_PRIMITIVE_COLLECTION_COUNT, QO_FILTER },
       /* { URI_PROPERTY_PRIMITIVE_COLLECTION_COUNT, QO_SEARCH }, */
@@ -136,25 +132,21 @@ public class UriValidatorTest {
       { URI_PROPERTY_PRIMITIVE_VALUE, QO_FORMAT },
 
       { URI_SINGLETON, QO_FORMAT }, { URI_SINGLETON, QO_EXPAND }, { 
URI_SINGLETON, QO_SELECT },
-      { URI_SINGLETON, QO_LEVELS },
 
       { URI_NAV_ENTITY, QO_FORMAT }, { URI_NAV_ENTITY, QO_EXPAND }, { 
URI_NAV_ENTITY, QO_SELECT },
-      { URI_NAV_ENTITY, QO_LEVELS },
 
       { URI_NAV_ENTITY_SET, QO_FILTER }, { URI_NAV_ENTITY_SET, QO_FORMAT }, { 
URI_NAV_ENTITY_SET, QO_EXPAND },
       { URI_NAV_ENTITY_SET, QO_COUNT }, { URI_NAV_ENTITY_SET, QO_ORDERBY },
       /* { URI_NAV_ENTITY_SET, QO_SEARCH }, */{ URI_NAV_ENTITY_SET, QO_SELECT 
}, { URI_NAV_ENTITY_SET, QO_SKIP },
-      { URI_NAV_ENTITY_SET, QO_SKIPTOKEN }, { URI_NAV_ENTITY_SET, QO_LEVELS }, 
{ URI_NAV_ENTITY_SET, QO_TOP },
+      { URI_NAV_ENTITY_SET, QO_SKIPTOKEN }, { URI_NAV_ENTITY_SET, QO_TOP },
 
       { URI_FI_ENTITY_SET, QO_FILTER }, { URI_FI_ENTITY_SET, QO_FORMAT }, { 
URI_FI_ENTITY_SET, QO_EXPAND },
       { URI_FI_ENTITY_SET, QO_COUNT }, { URI_FI_ENTITY_SET, QO_ORDERBY }, /* { 
URI_FI_ENTITY_SET, QO_SEARCH }, */
       { URI_FI_ENTITY_SET, QO_SELECT }, { URI_FI_ENTITY_SET, QO_SKIP }, { 
URI_FI_ENTITY_SET, QO_SKIPTOKEN },
-      { URI_FI_ENTITY_SET, QO_LEVELS }, { URI_FI_ENTITY_SET, QO_TOP },
+      { URI_FI_ENTITY_SET, QO_TOP },
 
       { URI_FI_ENTITY, QO_FORMAT }, { URI_FI_ENTITY, QO_EXPAND }, { 
URI_FI_ENTITY, QO_SELECT },
-      { URI_FI_ENTITY, QO_LEVELS },
       { URI_FI_ENTITY_SET_KEY, QO_FORMAT }, { URI_FI_ENTITY_SET_KEY, QO_EXPAND 
}, { URI_FI_ENTITY_SET_KEY, QO_SELECT },
-      { URI_FI_ENTITY_SET_KEY, QO_LEVELS },
 
       { "FINRTInt16()", QO_FORMAT },
       { "FICRTCollString()", QO_FORMAT },
@@ -169,11 +161,11 @@ public class UriValidatorTest {
   };
 
   private String[][] urisWithNonValidSystemQueryOptions = {
-      { URI_ALL, QO_ID }, { URI_ALL, QO_TOP },
+      { URI_ALL, QO_ID },
 
       { URI_BATCH, QO_FILTER }, { URI_BATCH, QO_FORMAT }, { URI_BATCH, QO_ID 
}, { URI_BATCH, QO_EXPAND },
       { URI_BATCH, QO_COUNT }, { URI_BATCH, QO_ORDERBY }, /* { URI_BATCH, 
QO_SEARCH }, */{ URI_BATCH, QO_SELECT },
-      { URI_BATCH, QO_SKIP }, { URI_BATCH, QO_SKIPTOKEN }, { URI_BATCH, 
QO_LEVELS }, { URI_BATCH, QO_TOP },
+      { URI_BATCH, QO_SKIP }, { URI_BATCH, QO_SKIPTOKEN }, { URI_BATCH, QO_TOP 
},
 
       { URI_CROSSJOIN, QO_ID },
 
@@ -185,11 +177,11 @@ public class UriValidatorTest {
       { URI_METADATA, QO_FILTER }, { URI_METADATA, QO_ID }, { URI_METADATA, 
QO_EXPAND },
       { URI_METADATA, QO_COUNT }, { URI_METADATA, QO_ORDERBY }, /* { 
URI_METADATA, QO_SEARCH }, */
       { URI_METADATA, QO_SELECT }, { URI_METADATA, QO_SKIP }, { URI_METADATA, 
QO_SKIPTOKEN },
-      { URI_METADATA, QO_LEVELS }, { URI_METADATA, QO_TOP },
+      { URI_METADATA, QO_TOP },
 
       { URI_SERVICE, QO_FILTER }, { URI_SERVICE, QO_ID }, { URI_SERVICE, 
QO_EXPAND }, { URI_SERVICE, QO_COUNT },
       { URI_SERVICE, QO_ORDERBY }, /* { URI_SERVICE, QO_SEARCH }, */{ 
URI_SERVICE, QO_SELECT },
-      { URI_SERVICE, QO_SKIP }, { URI_SERVICE, QO_SKIPTOKEN }, { URI_SERVICE, 
QO_LEVELS }, { URI_SERVICE, QO_TOP },
+      { URI_SERVICE, QO_SKIP }, { URI_SERVICE, QO_SKIPTOKEN }, { URI_SERVICE, 
QO_TOP },
 
       { URI_ENTITY_SET, QO_ID },
 
@@ -197,62 +189,59 @@ public class UriValidatorTest {
       { URI_ENTITY_SET_COUNT, QO_EXPAND }, { URI_ENTITY_SET_COUNT, QO_COUNT },
       { URI_ENTITY_SET_COUNT, QO_ORDERBY },
       { URI_ENTITY_SET_COUNT, QO_SELECT }, { URI_ENTITY_SET_COUNT, QO_SKIP }, 
{ URI_ENTITY_SET_COUNT, QO_SKIPTOKEN },
-      { URI_ENTITY_SET_COUNT, QO_LEVELS }, { URI_ENTITY_SET_COUNT, QO_TOP },
+      { URI_ENTITY_SET_COUNT, QO_TOP },
 
       { URI_ENTITY, QO_FILTER }, { URI_ENTITY, QO_ID }, { URI_ENTITY, QO_COUNT 
}, /* { URI_ENTITY, QO_ORDERBY }, */
       /* { URI_ENTITY, QO_SEARCH }, */{ URI_ENTITY, QO_SKIP }, { URI_ENTITY, 
QO_SKIPTOKEN }, { URI_ENTITY, QO_TOP },
 
-      { URI_MEDIA_STREAM, QO_FILTER }, { URI_MEDIA_STREAM, QO_ID }, { 
URI_MEDIA_STREAM, QO_EXPAND },
-      { URI_MEDIA_STREAM, QO_COUNT }, { URI_MEDIA_STREAM, QO_ORDERBY }, /* { 
URI_MEDIA_STREAM, QO_SEARCH }, */
-      { URI_MEDIA_STREAM, QO_SELECT }, { URI_MEDIA_STREAM, QO_SKIP }, { 
URI_MEDIA_STREAM, QO_SKIPTOKEN },
-      { URI_MEDIA_STREAM, QO_LEVELS }, { URI_MEDIA_STREAM, QO_TOP },
+      { URI_MEDIA_STREAM, QO_FILTER }, { URI_MEDIA_STREAM, QO_FORMAT }, { 
URI_MEDIA_STREAM, QO_ID },
+      { URI_MEDIA_STREAM, QO_EXPAND }, { URI_MEDIA_STREAM, QO_COUNT }, { 
URI_MEDIA_STREAM, QO_ORDERBY },
+      /* { URI_MEDIA_STREAM, QO_SEARCH }, */ { URI_MEDIA_STREAM, QO_SELECT }, 
{ URI_MEDIA_STREAM, QO_SKIP },
+      { URI_MEDIA_STREAM, QO_SKIPTOKEN }, { URI_MEDIA_STREAM, QO_TOP },
 
       { URI_REFERENCES, QO_ID }, { URI_REFERENCES, QO_EXPAND }, { 
URI_REFERENCES, QO_COUNT },
-      { URI_REFERENCES, QO_SELECT }, { URI_REFERENCES, QO_LEVELS },
+      { URI_REFERENCES, QO_SELECT },
 
       { URI_REFERENCE, QO_FILTER }, { URI_REFERENCE, QO_ID }, { URI_REFERENCE, 
QO_EXPAND },
       { URI_REFERENCE, QO_COUNT }, { URI_REFERENCE, QO_ORDERBY }, /* { 
URI_REFERENCE, QO_SEARCH }, */
       { URI_REFERENCE, QO_SELECT }, { URI_REFERENCE, QO_SKIP }, { 
URI_REFERENCE, QO_SKIPTOKEN },
-      { URI_REFERENCE, QO_LEVELS }, { URI_REFERENCE, QO_TOP },
+      { URI_REFERENCE, QO_TOP },
 
       { URI_PROPERTY_COMPLEX, QO_FILTER }, { URI_PROPERTY_COMPLEX, QO_ID }, { 
URI_PROPERTY_COMPLEX, QO_COUNT },
       { URI_PROPERTY_COMPLEX, QO_ORDERBY }, /* { URI_PROPERTY_COMPLEX, 
QO_SEARCH }, */
       { URI_PROPERTY_COMPLEX, QO_SKIP }, { URI_PROPERTY_COMPLEX, QO_SKIPTOKEN 
}, { URI_PROPERTY_COMPLEX, QO_TOP },
 
       { URI_PROPERTY_COMPLEX_COLLECTION, QO_ID },
-      /* { URI_PROPERTY_COMPLEX_COLLECTION, QO_SEARCH }, */{ 
URI_PROPERTY_COMPLEX_COLLECTION, QO_SELECT },
+      /* { URI_PROPERTY_COMPLEX_COLLECTION, QO_SEARCH }, */
 
       { URI_PROPERTY_COMPLEX_COLLECTION_COUNT, QO_FORMAT },
       { URI_PROPERTY_COMPLEX_COLLECTION_COUNT, QO_ID }, { 
URI_PROPERTY_COMPLEX_COLLECTION_COUNT, QO_EXPAND },
       { URI_PROPERTY_COMPLEX_COLLECTION_COUNT, QO_COUNT }, { 
URI_PROPERTY_COMPLEX_COLLECTION_COUNT, QO_ORDERBY },
       { URI_PROPERTY_COMPLEX_COLLECTION_COUNT, QO_SELECT },
       { URI_PROPERTY_COMPLEX_COLLECTION_COUNT, QO_SKIP }, { 
URI_PROPERTY_COMPLEX_COLLECTION_COUNT, QO_SKIPTOKEN },
-      { URI_PROPERTY_COMPLEX_COLLECTION_COUNT, QO_LEVELS }, { 
URI_PROPERTY_COMPLEX_COLLECTION_COUNT, QO_TOP },
+      { URI_PROPERTY_COMPLEX_COLLECTION_COUNT, QO_TOP },
 
       { URI_PROPERTY_PRIMITIVE, QO_FILTER }, { URI_PROPERTY_PRIMITIVE, QO_ID 
}, { URI_PROPERTY_PRIMITIVE, QO_EXPAND },
       { URI_PROPERTY_PRIMITIVE, QO_COUNT }, { URI_PROPERTY_PRIMITIVE, 
QO_ORDERBY },
       /* { URI_PROPERTY_PRIMITIVE, QO_SEARCH }, */{ URI_PROPERTY_PRIMITIVE, 
QO_SELECT },
       { URI_PROPERTY_PRIMITIVE, QO_SKIP }, { URI_PROPERTY_PRIMITIVE, 
QO_SKIPTOKEN },
-      { URI_PROPERTY_PRIMITIVE, QO_LEVELS }, { URI_PROPERTY_PRIMITIVE, QO_TOP 
},
+      { URI_PROPERTY_PRIMITIVE, QO_TOP },
 
       { URI_PROPERTY_PRIMITIVE_COLLECTION, QO_ID }, { 
URI_PROPERTY_PRIMITIVE_COLLECTION, QO_EXPAND },
-      { URI_PROPERTY_PRIMITIVE_COLLECTION, QO_COUNT }, /* { 
URI_PROPERTY_PRIMITIVE_COLLECTION, QO_SEARCH }, */
-      { URI_PROPERTY_PRIMITIVE_COLLECTION, QO_SELECT }, { 
URI_PROPERTY_PRIMITIVE_COLLECTION, QO_LEVELS },
+      /* { URI_PROPERTY_PRIMITIVE_COLLECTION, QO_SEARCH }, */ { 
URI_PROPERTY_PRIMITIVE_COLLECTION, QO_SELECT },
 
       { URI_PROPERTY_PRIMITIVE_COLLECTION_COUNT, QO_FORMAT },
       { URI_PROPERTY_PRIMITIVE_COLLECTION_COUNT, QO_ID }, { 
URI_PROPERTY_PRIMITIVE_COLLECTION_COUNT, QO_EXPAND },
       { URI_PROPERTY_PRIMITIVE_COLLECTION_COUNT, QO_COUNT },
       { URI_PROPERTY_PRIMITIVE_COLLECTION_COUNT, QO_ORDERBY },
       { URI_PROPERTY_PRIMITIVE_COLLECTION_COUNT, QO_SELECT }, { 
URI_PROPERTY_PRIMITIVE_COLLECTION_COUNT, QO_SKIP },
-      { URI_PROPERTY_PRIMITIVE_COLLECTION_COUNT, QO_SKIPTOKEN },
-      { URI_PROPERTY_PRIMITIVE_COLLECTION_COUNT, QO_LEVELS }, { 
URI_PROPERTY_PRIMITIVE_COLLECTION_COUNT, QO_TOP },
+      { URI_PROPERTY_PRIMITIVE_COLLECTION_COUNT, QO_SKIPTOKEN }, { 
URI_PROPERTY_PRIMITIVE_COLLECTION_COUNT, QO_TOP },
 
       { URI_PROPERTY_PRIMITIVE_VALUE, QO_FILTER }, { 
URI_PROPERTY_PRIMITIVE_VALUE, QO_ID },
       { URI_PROPERTY_PRIMITIVE_VALUE, QO_EXPAND }, { 
URI_PROPERTY_PRIMITIVE_VALUE, QO_COUNT },
       { URI_PROPERTY_PRIMITIVE_VALUE, QO_ORDERBY },/* { 
URI_PROPERTY_PRIMITIVE_VALUE, QO_SEARCH }, */
       { URI_PROPERTY_PRIMITIVE_VALUE, QO_SELECT }, { 
URI_PROPERTY_PRIMITIVE_VALUE, QO_SKIP },
-      { URI_PROPERTY_PRIMITIVE_VALUE, QO_SKIPTOKEN }, { 
URI_PROPERTY_PRIMITIVE_VALUE, QO_LEVELS },
-      { URI_PROPERTY_PRIMITIVE_VALUE, QO_TOP },
+      { URI_PROPERTY_PRIMITIVE_VALUE, QO_SKIPTOKEN }, { 
URI_PROPERTY_PRIMITIVE_VALUE, QO_TOP },
 
       { URI_SINGLETON, QO_FILTER }, { URI_SINGLETON, QO_ID }, { URI_SINGLETON, 
QO_COUNT },
       { URI_SINGLETON, QO_ORDERBY }, /* { URI_SINGLETON, QO_SEARCH }, */{ 
URI_SINGLETON, QO_SKIP },

Reply via email to