[New] Allow to set if type is allowed in QueryParser

This commit is contained in:
Robert von Burg 2017-08-18 11:48:09 +02:00
parent 07ab2fa971
commit 3f28d9aa9f
4 changed files with 41 additions and 40 deletions

View File

@ -189,13 +189,13 @@ public abstract class QueryParser extends CompositeParser {
actions(); actions();
} }
public static ResourceQuery<Resource> parseToResourceQuery(String queryString, boolean withPrefix, public static ResourceQuery<Resource> parseToResourceQuery(String queryString, boolean withPrefix, boolean withAny,
boolean withAny) { boolean allowType) {
return parseToResourceQuery(new MapOfSets<>(), withPrefix, queryString, withAny); return parseToResourceQuery(new MapOfSets<>(), withPrefix, queryString, withAny, allowType);
} }
public static ResourceQuery<Resource> parseToResourceQuery(MapOfSets<String, String> bagParamSet, public static ResourceQuery<Resource> parseToResourceQuery(MapOfSets<String, String> bagParamSet,
boolean withPrefix, String queryString, boolean withAny) { boolean withPrefix, String queryString, boolean withAny, boolean allowType) {
QueryParser parser = new QueryParser(new ResourceQuery<>()) { QueryParser parser = new QueryParser(new ResourceQuery<>()) {
@Override @Override
public MapOfSets<String, String> getBagParamSet() { public MapOfSets<String, String> getBagParamSet() {
@ -209,7 +209,7 @@ public abstract class QueryParser extends CompositeParser {
@Override @Override
public boolean allowType() { public boolean allowType() {
return true; return allowType;
} }
}; };
Result result = parser.parse(queryString); Result result = parser.parse(queryString);
@ -222,12 +222,13 @@ public abstract class QueryParser extends CompositeParser {
return query; return query;
} }
public static OrderQuery<Order> parseToOrderQuery(String queryString, boolean withPrefix, boolean withAny) { public static OrderQuery<Order> parseToOrderQuery(String queryString, boolean withPrefix, boolean withAny,
return parseToOrderQuery(new MapOfSets<>(), withPrefix, queryString, withAny); boolean allowType) {
return parseToOrderQuery(new MapOfSets<>(), withPrefix, queryString, withAny, allowType);
} }
public static OrderQuery<Order> parseToOrderQuery(MapOfSets<String, String> bagParamSet, boolean withPrefix, public static OrderQuery<Order> parseToOrderQuery(MapOfSets<String, String> bagParamSet, boolean withPrefix,
String queryString, boolean withAny) { String queryString, boolean withAny, boolean allowType) {
QueryParser parser = new QueryParser(new OrderQuery<>()) { QueryParser parser = new QueryParser(new OrderQuery<>()) {
@Override @Override
public MapOfSets<String, String> getBagParamSet() { public MapOfSets<String, String> getBagParamSet() {
@ -241,7 +242,7 @@ public abstract class QueryParser extends CompositeParser {
@Override @Override
public boolean allowType() { public boolean allowType() {
return true; return allowType;
} }
}; };
Result result = parser.parse(queryString); Result result = parser.parse(queryString);
@ -254,13 +255,13 @@ public abstract class QueryParser extends CompositeParser {
return query; return query;
} }
public static ActivityQuery<Activity> parseToActivityQuery(String queryString, boolean withPrefix, public static ActivityQuery<Activity> parseToActivityQuery(String queryString, boolean withPrefix, boolean withAny,
boolean withAny) { boolean allowType) {
return parseToActivityQuery(new MapOfSets<>(), withPrefix, queryString, withAny); return parseToActivityQuery(new MapOfSets<>(), withPrefix, queryString, withAny, allowType);
} }
public static ActivityQuery<Activity> parseToActivityQuery(MapOfSets<String, String> bagParamSet, public static ActivityQuery<Activity> parseToActivityQuery(MapOfSets<String, String> bagParamSet,
boolean withPrefix, String queryString, boolean withAny) { boolean withPrefix, String queryString, boolean withAny, boolean allowType) {
QueryParser parser = new QueryParser(new ActivityQuery<>()) { QueryParser parser = new QueryParser(new ActivityQuery<>()) {
@Override @Override
public MapOfSets<String, String> getBagParamSet() { public MapOfSets<String, String> getBagParamSet() {
@ -274,7 +275,7 @@ public abstract class QueryParser extends CompositeParser {
@Override @Override
public boolean allowType() { public boolean allowType() {
return true; return allowType;
} }
}; };
Result result = parser.parse(queryString); Result result = parser.parse(queryString);

View File

@ -388,7 +388,7 @@ public class Inspector {
List<Resource> resources = new ArrayList<>(); List<Resource> resources = new ArrayList<>();
// parse the query string // parse the query string
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery(queryData.getQuery(), true, true); ResourceQuery<Resource> query = QueryParser.parseToResourceQuery(queryData.getQuery(), true, true, false);
// set navigation to requested type // set navigation to requested type
query.setNavigation(new StrolchTypeNavigation(type)); query.setNavigation(new StrolchTypeNavigation(type));
@ -438,7 +438,7 @@ public class Inspector {
List<Order> orders = new ArrayList<>(); List<Order> orders = new ArrayList<>();
// parse the query string // parse the query string
OrderQuery<Order> query = QueryParser.parseToOrderQuery(queryData.getQuery(), true, true); OrderQuery<Order> query = QueryParser.parseToOrderQuery(queryData.getQuery(), true, true, false);
query.setNavigation(new StrolchTypeNavigation(type)); query.setNavigation(new StrolchTypeNavigation(type));
// query the data // query the data
@ -472,7 +472,7 @@ public class Inspector {
List<Activity> activities = new ArrayList<>(); List<Activity> activities = new ArrayList<>();
// parse the query string // parse the query string
ActivityQuery<Activity> query = QueryParser.parseToActivityQuery(queryData.getQuery(), true, true); ActivityQuery<Activity> query = QueryParser.parseToActivityQuery(queryData.getQuery(), true, true, false);
query.setNavigation(new StrolchTypeNavigation(type)); query.setNavigation(new StrolchTypeNavigation(type));
// query the data // query the data
@ -944,7 +944,7 @@ public class Inspector {
RemoveOrderService svc = new RemoveOrderService(); RemoveOrderService svc = new RemoveOrderService();
LocatorArgument arg = svc.getArgumentInstance(); LocatorArgument arg = svc.getArgumentInstance();
arg.locator = Resource.locatorFor(type, id); arg.locator = Order.locatorFor(type, id);
arg.realm = realm; arg.realm = realm;
ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg); ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg);
@ -961,7 +961,7 @@ public class Inspector {
RemoveActivityService svc = new RemoveActivityService(); RemoveActivityService svc = new RemoveActivityService();
LocatorArgument arg = svc.getArgumentInstance(); LocatorArgument arg = svc.getArgumentInstance();
arg.locator = Resource.locatorFor(type, id); arg.locator = Activity.locatorFor(type, id);
arg.realm = realm; arg.realm = realm;
ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg); ServiceResult result = RestfulStrolchComponent.getInstance().getServiceHandler().doService(cert, svc, arg);

View File

@ -60,7 +60,7 @@ public class ModelQuery {
List<Resource> resources = new ArrayList<>(); List<Resource> resources = new ArrayList<>();
// parse the query string // parse the query string
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery(queryData.getQuery(), true, true); ResourceQuery<Resource> query = QueryParser.parseToResourceQuery(queryData.getQuery(), true, true, true);
// query the data // query the data
long dataSetSize = 0L; long dataSetSize = 0L;
@ -115,7 +115,7 @@ public class ModelQuery {
List<Order> orders = new ArrayList<>(); List<Order> orders = new ArrayList<>();
// parse the query string // parse the query string
OrderQuery<Order> query = QueryParser.parseToOrderQuery(queryData.getQuery(), true, true); OrderQuery<Order> query = QueryParser.parseToOrderQuery(queryData.getQuery(), true, true, true);
// query the data // query the data
long dataSetSize = 0L; long dataSetSize = 0L;
@ -171,7 +171,7 @@ public class ModelQuery {
List<Activity> activities = new ArrayList<>(); List<Activity> activities = new ArrayList<>();
// parse the query string // parse the query string
ActivityQuery<Activity> query = QueryParser.parseToActivityQuery(queryData.getQuery(), true, true); ActivityQuery<Activity> query = QueryParser.parseToActivityQuery(queryData.getQuery(), true, true, true);
// query the data // query the data
long dataSetSize = 0L; long dataSetSize = 0L;

View File

@ -23,56 +23,56 @@ public class QueryParserTest {
@Test @Test
public void shouldIgnoreGibberish() { public void shouldIgnoreGibberish() {
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("sdf dfg3 !sdf", true, false); ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("sdf dfg3 !sdf", true, false, true);
assertFalse(query.hasNavigation()); assertFalse(query.hasNavigation());
assertFalse(query.hasSelection()); assertFalse(query.hasSelection());
} }
@Test @Test
public void shouldParseEmpty1() { public void shouldParseEmpty1() {
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("", false, false); ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("", false, false, true);
assertFalse(query.hasNavigation()); assertFalse(query.hasNavigation());
assertFalse(query.hasSelection()); assertFalse(query.hasSelection());
} }
@Test @Test
public void shouldParseEmpty2() { public void shouldParseEmpty2() {
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("", true, false); ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("", true, false, true);
assertFalse(query.hasNavigation()); assertFalse(query.hasNavigation());
assertFalse(query.hasSelection()); assertFalse(query.hasSelection());
} }
@Test @Test
public void shouldParseEmptyId() { public void shouldParseEmptyId() {
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("id:", true, false); ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("id:", true, false, true);
assertFalse(query.hasNavigation()); assertFalse(query.hasNavigation());
assertFalse(query.hasSelection()); assertFalse(query.hasSelection());
} }
@Test @Test
public void shouldParseEmptyName() { public void shouldParseEmptyName() {
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("name:", true, false); ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("name:", true, false, true);
assertFalse(query.hasNavigation()); assertFalse(query.hasNavigation());
assertFalse(query.hasSelection()); assertFalse(query.hasSelection());
} }
@Test @Test
public void shouldParseEmptyType() { public void shouldParseEmptyType() {
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("type:", true, false); ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("type:", true, false, true);
assertFalse(query.hasNavigation()); assertFalse(query.hasNavigation());
assertFalse(query.hasSelection()); assertFalse(query.hasSelection());
} }
@Test @Test
public void shouldParseEmptyIdNameType() { public void shouldParseEmptyIdNameType() {
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("id: name: type:", true, false); ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("id: name: type:", true, false, true);
assertFalse(query.hasNavigation()); assertFalse(query.hasNavigation());
assertFalse(query.hasSelection()); assertFalse(query.hasSelection());
} }
@Test @Test
public void shouldParseId() { public void shouldParseId() {
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("id:asd", true, false); ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("id:asd", true, false, true);
OrSelection or = (OrSelection) query.getSelection(); OrSelection or = (OrSelection) query.getSelection();
List<Selection> selections = or.getSelections(); List<Selection> selections = or.getSelections();
assertEquals(1, selections.size()); assertEquals(1, selections.size());
@ -86,7 +86,7 @@ public class QueryParserTest {
@Test @Test
public void shouldParseIds() { public void shouldParseIds() {
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("id:asd id:bbb", true, false); ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("id:asd id:bbb", true, false, true);
OrSelection or = (OrSelection) query.getSelection(); OrSelection or = (OrSelection) query.getSelection();
List<Selection> selections = or.getSelections(); List<Selection> selections = or.getSelections();
assertEquals(1, selections.size()); assertEquals(1, selections.size());
@ -101,7 +101,7 @@ public class QueryParserTest {
@Test @Test
public void shouldParseName() { public void shouldParseName() {
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("name:asd", true, false); ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("name:asd", true, false, true);
OrSelection or = (OrSelection) query.getSelection(); OrSelection or = (OrSelection) query.getSelection();
List<Selection> selections = or.getSelections(); List<Selection> selections = or.getSelections();
assertEquals(1, selections.size()); assertEquals(1, selections.size());
@ -112,7 +112,7 @@ public class QueryParserTest {
@Test @Test
public void shouldParseNames() { public void shouldParseNames() {
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("name:asd name:bbb", true, false); ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("name:asd name:bbb", true, false, true);
OrSelection or = (OrSelection) query.getSelection(); OrSelection or = (OrSelection) query.getSelection();
List<Selection> selections = or.getSelections(); List<Selection> selections = or.getSelections();
assertEquals(2, selections.size()); assertEquals(2, selections.size());
@ -126,7 +126,7 @@ public class QueryParserTest {
@Test @Test
public void shouldParseType() { public void shouldParseType() {
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("type:asd", true, false); ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("type:asd", true, false, true);
assertFalse(query.hasSelection()); assertFalse(query.hasSelection());
assertTrue(query.hasNavigation()); assertTrue(query.hasNavigation());
StrolchTypeNavigation navigation = (StrolchTypeNavigation) query.getNavigation(); StrolchTypeNavigation navigation = (StrolchTypeNavigation) query.getNavigation();
@ -135,7 +135,7 @@ public class QueryParserTest {
@Test @Test
public void shouldReplaceMultipleType() { public void shouldReplaceMultipleType() {
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("type:asd type:fff", true, false); ResourceQuery<Resource> query = QueryParser.parseToResourceQuery("type:asd type:fff", true, false, true);
assertFalse(query.hasSelection()); assertFalse(query.hasSelection());
assertTrue(query.hasNavigation()); assertTrue(query.hasNavigation());
StrolchTypeNavigation navigation = (StrolchTypeNavigation) query.getNavigation(); StrolchTypeNavigation navigation = (StrolchTypeNavigation) query.getNavigation();
@ -145,7 +145,7 @@ public class QueryParserTest {
@Test @Test
public void shouldParseIdNameType() { public void shouldParseIdNameType() {
ResourceQuery<Resource> query = QueryParser ResourceQuery<Resource> query = QueryParser
.parseToResourceQuery("id:foo name:bar type:asd date:1970-01-01T01:00:00.000+01:00", true, false); .parseToResourceQuery("id:foo name:bar type:asd date:1970-01-01T01:00:00.000+01:00", true, false, true);
OrSelection or = (OrSelection) query.getSelection(); OrSelection or = (OrSelection) query.getSelection();
List<Selection> selections = or.getSelections(); List<Selection> selections = or.getSelections();
assertEquals(2, selections.size()); assertEquals(2, selections.size());
@ -157,7 +157,7 @@ public class QueryParserTest {
@Test @Test
public void shouldParseWithWhitespace() { public void shouldParseWithWhitespace() {
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery(" id:foo name:bar type:asd \t ", true, ResourceQuery<Resource> query = QueryParser.parseToResourceQuery(" id:foo name:bar type:asd \t ", true,
false); false, true);
OrSelection or = (OrSelection) query.getSelection(); OrSelection or = (OrSelection) query.getSelection();
List<Selection> selections = or.getSelections(); List<Selection> selections = or.getSelections();
assertEquals(2, selections.size()); assertEquals(2, selections.size());
@ -173,7 +173,7 @@ public class QueryParserTest {
maps.addElement("parameters", "date"); maps.addElement("parameters", "date");
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery(maps, true, ResourceQuery<Resource> query = QueryParser.parseToResourceQuery(maps, true,
"type:asd id:asd email:bla@dsfdfg.ch date:1970-01-01T01:00:00.000+01:00", false); "type:asd id:asd email:bla@dsfdfg.ch date:1970-01-01T01:00:00.000+01:00", false, true);
assertTrue(query.hasNavigation()); assertTrue(query.hasNavigation());
OrSelection or = (OrSelection) query.getSelection(); OrSelection or = (OrSelection) query.getSelection();
List<Selection> selections = or.getSelections(); List<Selection> selections = or.getSelections();
@ -200,7 +200,7 @@ public class QueryParserTest {
maps.addElement("parameters", "date"); maps.addElement("parameters", "date");
ResourceQuery<Resource> query = QueryParser.parseToResourceQuery(maps, false, ResourceQuery<Resource> query = QueryParser.parseToResourceQuery(maps, false,
"asd bla@dsfdfg.ch 1970-01-01T01:00:00.000+01:00", false); "asd bla@dsfdfg.ch 1970-01-01T01:00:00.000+01:00", false, true);
assertFalse(query.hasNavigation()); assertFalse(query.hasNavigation());
OrSelection or = (OrSelection) query.getSelection(); OrSelection or = (OrSelection) query.getSelection();
List<Selection> selections = or.getSelections(); List<Selection> selections = or.getSelections();