mirror of
https://github.com/apache/olingo-odata4.git
synced 2025-03-06 00:29:05 +00:00
[OLINGO-557] even better system query option validation
Change-Id: I1406a198e049020ec9f02f18203fd9dede48e2ac Signed-off-by: Christian Amend <chrisam@apache.org>
This commit is contained in:
parent
8a58a67800
commit
200dac0a2c
@ -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);
|
||||
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 int idx;
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -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 },
|
||||
|
Loading…
x
Reference in New Issue
Block a user