Search in sources :

Example 1 with SkipTopFilter

use of org.n52.shetland.filter.SkipTopFilter in project sensorweb-server-sta by 52North.

the class CollectionSer method serialize.

@Override
public void serialize(CollectionWrapper value, JsonGenerator gen, SerializerProvider provider) throws IOException {
    gen.writeStartObject();
    gen.writeNumberField("@iot.count", value.getTotalEntityCount());
    // We have multiple pages
    if (value.hasNextPage() && !value.getEntities().isEmpty()) {
        QueryOptions queryOptions = value.getEntities().get(0).getQueryOptions();
        long oldTop = queryOptions.getTopFilter().getValue();
        long oldSkip = queryOptions.hasSkipFilter() ? queryOptions.getSkipFilter().getValue() : 0L;
        // Replace old skip Filter with new one
        Set<FilterClause> allFilters = queryOptions.getAllFilters();
        allFilters.remove(queryOptions.getSkipFilter());
        allFilters.add(new SkipTopFilter(FilterConstants.SkipTopOperator.Skip, oldSkip + oldTop));
        gen.writeStringField("@iot.nextLink", value.getRequestURL() + "?" + new QueryOptions("", allFilters).toString());
    }
    gen.writeArrayFieldStart("value");
    for (ElementWithQueryOptions element : value.getEntities()) {
        provider.defaultSerializeValue(element, gen);
    }
    gen.writeEndArray();
    gen.writeEndObject();
}
Also used : SkipTopFilter(org.n52.shetland.filter.SkipTopFilter) FilterClause(org.n52.shetland.ogc.filter.FilterClause) ElementWithQueryOptions(org.n52.sta.serdes.util.ElementWithQueryOptions) ElementWithQueryOptions(org.n52.sta.serdes.util.ElementWithQueryOptions) QueryOptions(org.n52.shetland.oasis.odata.query.option.QueryOptions)

Example 2 with SkipTopFilter

use of org.n52.shetland.filter.SkipTopFilter in project arctic-sea by 52North.

the class SkipQueryOptionTest method testValidSkipOption.

@Test
public void testValidSkipOption() {
    int val = 1;
    SkipTopFilter filter;
    init(ODataConstants.QueryOptions.SKIP + EQ + val);
    filter = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getSkipFilter();
    Assertions.assertEquals(filter.getOperator(), FilterConstants.SkipTopOperator.Skip);
    Assertions.assertEquals(filter.getValue(), val);
    val = 0;
    init(ODataConstants.QueryOptions.SKIP + EQ + val);
    filter = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getSkipFilter();
    Assertions.assertEquals(filter.getOperator(), FilterConstants.SkipTopOperator.Skip);
    Assertions.assertEquals(filter.getValue(), val);
    val = 100000;
    init(ODataConstants.QueryOptions.SKIP + EQ + val);
    filter = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getSkipFilter();
    Assertions.assertEquals(filter.getOperator(), FilterConstants.SkipTopOperator.Skip);
    Assertions.assertEquals(filter.getValue(), val);
    long longval = Long.MAX_VALUE;
    init(ODataConstants.QueryOptions.SKIP + EQ + longval);
    filter = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getSkipFilter();
    Assertions.assertEquals(filter.getOperator(), FilterConstants.SkipTopOperator.Skip);
    Assertions.assertEquals(filter.getValue(), longval);
}
Also used : SkipTopFilter(org.n52.shetland.filter.SkipTopFilter) Test(org.junit.jupiter.api.Test)

Example 3 with SkipTopFilter

use of org.n52.shetland.filter.SkipTopFilter in project arctic-sea by 52North.

the class TopQueryOptionTest method testValidTopOption.

@Test
public void testValidTopOption() {
    int val = 1;
    SkipTopFilter filter;
    init(ODataConstants.QueryOptions.TOP + EQ + val);
    filter = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getTopFilter();
    Assertions.assertEquals(filter.getOperator(), FilterConstants.SkipTopOperator.Top);
    Assertions.assertEquals(filter.getValue(), val);
    val = 0;
    init(ODataConstants.QueryOptions.TOP + EQ + val);
    filter = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getTopFilter();
    Assertions.assertEquals(filter.getOperator(), FilterConstants.SkipTopOperator.Top);
    Assertions.assertEquals(filter.getValue(), val);
    val = 100000;
    init(ODataConstants.QueryOptions.TOP + EQ + val);
    filter = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getTopFilter();
    Assertions.assertEquals(filter.getOperator(), FilterConstants.SkipTopOperator.Top);
    Assertions.assertEquals(filter.getValue(), val);
    long longval = Long.MAX_VALUE;
    init(ODataConstants.QueryOptions.TOP + EQ + longval);
    filter = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getTopFilter();
    Assertions.assertEquals(filter.getOperator(), FilterConstants.SkipTopOperator.Top);
    Assertions.assertEquals(filter.getValue(), longval);
}
Also used : SkipTopFilter(org.n52.shetland.filter.SkipTopFilter) Test(org.junit.jupiter.api.Test)

Example 4 with SkipTopFilter

use of org.n52.shetland.filter.SkipTopFilter in project arctic-sea by 52North.

the class ExpandQueryOptionTest method complexExpandOption.

@Test
public void complexExpandOption() {
    init(ODataConstants.QueryOptions.EXPAND + EQ + "Observations($filter=result eq 1;$expand=FeatureOfInterest;$select=id;$orderby=id;" + "$skip=5;$top=10;$count=true),ObservedProperty");
    QueryOptions options = (QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor());
    Assertions.assertTrue(options.hasExpandFilter());
    Assertions.assertTrue(options.getExpandFilter() instanceof ExpandFilter);
    Set<ExpandItem> items = (options.getExpandFilter().getItems());
    Assertions.assertNotNull(items);
    Assertions.assertEquals(2, items.size());
    for (ExpandItem obs : items) {
        if (obs.getPath().equals("Observations")) {
            Assertions.assertEquals("Observations", obs.getPath());
            Assertions.assertTrue(obs.getQueryOptions().hasExpandFilter());
            Assertions.assertTrue(obs.getQueryOptions().hasFilterFilter());
            Assertions.assertTrue(obs.getQueryOptions().hasSelectFilter());
            Assertions.assertTrue(obs.getQueryOptions().hasOrderByFilter());
            Assertions.assertTrue(obs.getQueryOptions().hasSkipFilter());
            Assertions.assertTrue(obs.getQueryOptions().hasTopFilter());
            Assertions.assertTrue(obs.getQueryOptions().hasCountFilter());
            Set<FilterClause> filters = new HashSet<>();
            filters.add(new FilterFilter(new ComparisonExpr(FilterConstants.ComparisonOperator.PropertyIsEqualTo, new MemberExpr("result"), new NumericValueExpr("1"))));
            filters.add(new ExpandFilter(new ExpandItem("FeatureOfInterest", new QueryOptions("", null))));
            filters.add(new SelectFilter("id"));
            filters.add(new OrderByFilter(new OrderProperty("id")));
            filters.add(new SkipTopFilter(FilterConstants.SkipTopOperator.Skip, 5L));
            filters.add(new SkipTopFilter(FilterConstants.SkipTopOperator.Top, 10L));
            filters.add(new CountFilter(true));
            Assertions.assertEquals(new QueryOptions("", filters), obs.getQueryOptions());
        } else if (obs.getPath().equals("ObservedProperty")) {
            Assertions.assertEquals("ObservedProperty", obs.getPath());
            Assertions.assertNotNull(obs.getQueryOptions());
            Assertions.assertTrue(obs.getQueryOptions().hasTopFilter());
            Assertions.assertFalse(obs.getQueryOptions().hasExpandFilter());
            Assertions.assertFalse(obs.getQueryOptions().hasFilterFilter());
            Assertions.assertFalse(obs.getQueryOptions().hasSelectFilter());
            Assertions.assertFalse(obs.getQueryOptions().hasOrderByFilter());
            Assertions.assertFalse(obs.getQueryOptions().hasSkipFilter());
            Assertions.assertFalse(obs.getQueryOptions().hasCountFilter());
        } else {
            Assertions.fail("Did not find expected expandItem!");
        }
    }
}
Also used : ComparisonExpr(org.n52.svalbard.odata.core.expr.bool.ComparisonExpr) SkipTopFilter(org.n52.shetland.filter.SkipTopFilter) NumericValueExpr(org.n52.svalbard.odata.core.expr.arithmetic.NumericValueExpr) QueryOptions(org.n52.shetland.oasis.odata.query.option.QueryOptions) ExpandFilter(org.n52.shetland.filter.ExpandFilter) ExpandItem(org.n52.shetland.filter.ExpandItem) MemberExpr(org.n52.svalbard.odata.core.expr.MemberExpr) FilterClause(org.n52.shetland.ogc.filter.FilterClause) SelectFilter(org.n52.shetland.filter.SelectFilter) OrderProperty(org.n52.shetland.filter.OrderProperty) FilterFilter(org.n52.shetland.filter.FilterFilter) CountFilter(org.n52.shetland.filter.CountFilter) OrderByFilter(org.n52.shetland.filter.OrderByFilter) HashSet(java.util.HashSet) Test(org.junit.jupiter.api.Test)

Example 5 with SkipTopFilter

use of org.n52.shetland.filter.SkipTopFilter in project arctic-sea by 52North.

the class ExpandQueryOptionTest method testValidExpandOption.

@Test
public void testValidExpandOption() {
    String val, nested;
    ExpandFilter actual, reference;
    QueryOptions defaultQO = new QueryOptions("", null);
    Set<FilterClause> nestedFilters;
    // Simple
    val = "test";
    init(ODataConstants.QueryOptions.EXPAND + EQ + val);
    actual = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getExpandFilter();
    reference = new ExpandFilter(new ExpandItem(val, defaultQO));
    Assertions.assertEquals(reference, actual);
    // Resolve nested Expand
    val = "test";
    nested = "nested";
    init(ODataConstants.QueryOptions.EXPAND + EQ + val + "/" + nested);
    actual = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getExpandFilter();
    nestedFilters = new HashSet<>();
    nestedFilters.add(new ExpandFilter(new ExpandItem(nested, defaultQO)));
    reference = new ExpandFilter(new ExpandItem(val, new QueryOptions("", nestedFilters)));
    Assertions.assertEquals(reference, actual);
    // Expand with queryOptions
    val = "test";
    String queryOption = "($filter=id eq '2')";
    init(ODataConstants.QueryOptions.EXPAND + EQ + val + queryOption);
    actual = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getExpandFilter();
    nestedFilters = new HashSet<>();
    nestedFilters.add(new FilterFilter(new ComparisonExpr(FilterConstants.ComparisonOperator.PropertyIsEqualTo, new MemberExpr("id"), new StringValueExpr("2"))));
    reference = new ExpandFilter(new ExpandItem(val, new QueryOptions("", nestedFilters)));
    Assertions.assertEquals(reference, actual);
    // Expand with queryOptions
    val = "test";
    queryOption = "($top=52)";
    init(ODataConstants.QueryOptions.EXPAND + EQ + val + queryOption);
    actual = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getExpandFilter();
    nestedFilters = new HashSet<>();
    nestedFilters.add(new SkipTopFilter(FilterConstants.SkipTopOperator.Top, 52L));
    reference = new ExpandFilter(new ExpandItem(val, new QueryOptions("", nestedFilters)));
    Assertions.assertEquals(reference, actual);
    // Expand with queryOptions
    val = "test";
    queryOption = "($skip=52)";
    init(ODataConstants.QueryOptions.EXPAND + EQ + val + queryOption);
    actual = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getExpandFilter();
    nestedFilters = new HashSet<>();
    nestedFilters.add(new SkipTopFilter(FilterConstants.SkipTopOperator.Skip, 52L));
    reference = new ExpandFilter(new ExpandItem(val, new QueryOptions("", nestedFilters)));
    Assertions.assertEquals(reference, actual);
    // Expand with queryOptions
    val = "test";
    queryOption = "($select=id)";
    init(ODataConstants.QueryOptions.EXPAND + EQ + val + queryOption);
    actual = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getExpandFilter();
    nestedFilters = new HashSet<>();
    nestedFilters.add(new SelectFilter("id"));
    reference = new ExpandFilter(new ExpandItem(val, new QueryOptions("", nestedFilters)));
    Assertions.assertEquals(reference, actual);
    // Expand with queryOptions
    val = "test";
    queryOption = "($expand=nested)";
    init(ODataConstants.QueryOptions.EXPAND + EQ + val + queryOption);
    actual = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getExpandFilter();
    nestedFilters = new HashSet<>();
    nestedFilters.add(new ExpandFilter(new ExpandItem(nested, defaultQO)));
    reference = new ExpandFilter(new ExpandItem(val, new QueryOptions("", nestedFilters)));
    Assertions.assertEquals(reference, actual);
    // Expand with queryOptions
    val = "test";
    queryOption = "($orderby=id asc)";
    init(ODataConstants.QueryOptions.EXPAND + EQ + val + queryOption);
    actual = ((QueryOptions) parser.queryOptions().accept(new STAQueryOptionVisitor())).getExpandFilter();
    nestedFilters = new HashSet<>();
    nestedFilters.add(new OrderByFilter(new OrderProperty("id", FilterConstants.SortOrder.ASC)));
    reference = new ExpandFilter(new ExpandItem(val, new QueryOptions("", nestedFilters)));
    Assertions.assertEquals(reference, actual);
}
Also used : StringValueExpr(org.n52.svalbard.odata.core.expr.StringValueExpr) ComparisonExpr(org.n52.svalbard.odata.core.expr.bool.ComparisonExpr) SkipTopFilter(org.n52.shetland.filter.SkipTopFilter) QueryOptions(org.n52.shetland.oasis.odata.query.option.QueryOptions) ExpandFilter(org.n52.shetland.filter.ExpandFilter) ExpandItem(org.n52.shetland.filter.ExpandItem) MemberExpr(org.n52.svalbard.odata.core.expr.MemberExpr) FilterClause(org.n52.shetland.ogc.filter.FilterClause) SelectFilter(org.n52.shetland.filter.SelectFilter) OrderProperty(org.n52.shetland.filter.OrderProperty) FilterFilter(org.n52.shetland.filter.FilterFilter) OrderByFilter(org.n52.shetland.filter.OrderByFilter) Test(org.junit.jupiter.api.Test)

Aggregations

SkipTopFilter (org.n52.shetland.filter.SkipTopFilter)5 Test (org.junit.jupiter.api.Test)4 QueryOptions (org.n52.shetland.oasis.odata.query.option.QueryOptions)3 FilterClause (org.n52.shetland.ogc.filter.FilterClause)3 ExpandFilter (org.n52.shetland.filter.ExpandFilter)2 ExpandItem (org.n52.shetland.filter.ExpandItem)2 FilterFilter (org.n52.shetland.filter.FilterFilter)2 OrderByFilter (org.n52.shetland.filter.OrderByFilter)2 OrderProperty (org.n52.shetland.filter.OrderProperty)2 SelectFilter (org.n52.shetland.filter.SelectFilter)2 MemberExpr (org.n52.svalbard.odata.core.expr.MemberExpr)2 ComparisonExpr (org.n52.svalbard.odata.core.expr.bool.ComparisonExpr)2 HashSet (java.util.HashSet)1 CountFilter (org.n52.shetland.filter.CountFilter)1 ElementWithQueryOptions (org.n52.sta.serdes.util.ElementWithQueryOptions)1 StringValueExpr (org.n52.svalbard.odata.core.expr.StringValueExpr)1 NumericValueExpr (org.n52.svalbard.odata.core.expr.arithmetic.NumericValueExpr)1