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 },
