From f60b92b2626fdf724ae512438606ea4d7af250ee Mon Sep 17 00:00:00 2001 From: Christian Gendreau Date: Wed, 14 Feb 2024 13:57:48 -0500 Subject: [PATCH] Added page related code --- dina-base-api/pom.xml | 2 +- ...AntlrBasedSimpleSearchFilterListener.java} | 23 ++++++++++++++++++- .../gc/aafc/dina/filter/AntlrGrammarTest.java | 5 +++- .../SimpleSearchFilter.g4 | 4 +++- 4 files changed, 30 insertions(+), 4 deletions(-) rename dina-base-api/src/main/java/ca/gc/aafc/dina/filter/{AntlBasedSimpleSearchFilterListener.java => AntlrBasedSimpleSearchFilterListener.java} (79%) diff --git a/dina-base-api/pom.xml b/dina-base-api/pom.xml index 2db648525..f06d38e9e 100644 --- a/dina-base-api/pom.xml +++ b/dina-base-api/pom.xml @@ -143,7 +143,7 @@ io.github.aafc-bicoe dina-filter - 0.115-SNAPSHOT + 0.118-SNAPSHOT io.github.aafc-bicoe diff --git a/dina-base-api/src/main/java/ca/gc/aafc/dina/filter/AntlBasedSimpleSearchFilterListener.java b/dina-base-api/src/main/java/ca/gc/aafc/dina/filter/AntlrBasedSimpleSearchFilterListener.java similarity index 79% rename from dina-base-api/src/main/java/ca/gc/aafc/dina/filter/AntlBasedSimpleSearchFilterListener.java rename to dina-base-api/src/main/java/ca/gc/aafc/dina/filter/AntlrBasedSimpleSearchFilterListener.java index 7b7b59432..d91e82977 100644 --- a/dina-base-api/src/main/java/ca/gc/aafc/dina/filter/AntlBasedSimpleSearchFilterListener.java +++ b/dina-base-api/src/main/java/ca/gc/aafc/dina/filter/AntlrBasedSimpleSearchFilterListener.java @@ -8,12 +8,15 @@ import ca.gc.aafc.dina.filter.simple.SimpleSearchFilterBaseListener; import ca.gc.aafc.dina.filter.simple.SimpleSearchFilterParser; -public class AntlBasedSimpleSearchFilterListener extends SimpleSearchFilterBaseListener { +public class AntlrBasedSimpleSearchFilterListener extends SimpleSearchFilterBaseListener { private final List components = new ArrayList<>(); private final List includes = new ArrayList<>(); private final List sortAttributes = new ArrayList<>(); + private Integer pageOffset; + private Integer pageLimit; + @Override public void exitFilter(SimpleSearchFilterParser.FilterContext ctx) { // more than 1 value means a OR @@ -32,6 +35,7 @@ public void exitFilter(SimpleSearchFilterParser.FilterContext ctx) { } } + @Override public void exitInclude(SimpleSearchFilterParser.IncludeContext ctx) { for(var attribute : ctx.propertyName()) { includes.add(attribute.getText()); @@ -45,6 +49,15 @@ public void exitSort(SimpleSearchFilterParser.SortContext ctx) { } } + @Override + public void exitPage(SimpleSearchFilterParser.PageContext ctx) { + if (ctx.getText().contains("offset")) { + pageOffset = Integer.valueOf(ctx.pageValue().getText()); + } else if (ctx.getText().contains("limit")) { + pageLimit = Integer.valueOf(ctx.pageValue().getText()); + } + } + /** * Build the FilterComponent object once the filter is parsed. * @return @@ -68,6 +81,14 @@ public List getSort() { return sortAttributes; } + public Integer getPageOffset() { + return pageOffset; + } + + public Integer getPageLimit() { + return pageLimit; + } + public Ops translateOperator(String op) { return switch (op) { case "EQ" -> Ops.EQ; diff --git a/dina-base-api/src/test/java/ca/gc/aafc/dina/filter/AntlrGrammarTest.java b/dina-base-api/src/test/java/ca/gc/aafc/dina/filter/AntlrGrammarTest.java index c01a580c1..df7bc829c 100644 --- a/dina-base-api/src/test/java/ca/gc/aafc/dina/filter/AntlrGrammarTest.java +++ b/dina-base-api/src/test/java/ca/gc/aafc/dina/filter/AntlrGrammarTest.java @@ -28,7 +28,7 @@ public void onFilterAsString_structureReturned() { ParseTree tree = parser.simpleFilter(); ParseTreeWalker walker = new ParseTreeWalker(); - AntlBasedSimpleSearchFilterListener listener= new AntlBasedSimpleSearchFilterListener(); + AntlrBasedSimpleSearchFilterListener listener= new AntlrBasedSimpleSearchFilterListener(); walker.walk(listener, tree); @@ -38,6 +38,9 @@ public void onFilterAsString_structureReturned() { assertEquals("position", listener.getSort().get(0)); assertEquals("-name", listener.getSort().get(1)); assertEquals("author.name", listener.getInclude().get(0)); + + assertEquals(5, listener.getPageOffset()); + assertEquals(1, listener.getPageLimit()); } } diff --git a/dina-filter/src/main/antlr4/ca.gc.aafc.dina.filter.simple/SimpleSearchFilter.g4 b/dina-filter/src/main/antlr4/ca.gc.aafc.dina.filter.simple/SimpleSearchFilter.g4 index 86d36aecc..331332273 100644 --- a/dina-filter/src/main/antlr4/ca.gc.aafc.dina.filter.simple/SimpleSearchFilter.g4 +++ b/dina-filter/src/main/antlr4/ca.gc.aafc.dina.filter.simple/SimpleSearchFilter.g4 @@ -8,7 +8,7 @@ filter: 'filter' '[' propertyName ']'( '[' comparison ']' )? '=' attributeValue sort: 'sort' '=' sortPropertyName ( ',' sortPropertyName )*; -page: 'page' '[' ( 'limit' | 'offset' ) ']' '=' INT; +page: 'page' '[' ( 'limit' | 'offset' ) ']' '=' pageValue; include: 'include' '=' propertyName ( ',' propertyName )*; @@ -28,6 +28,8 @@ attributeValue: ( | DASH | SYMBOLS)+; +pageValue: INT; + // lexer rules in order INT: [0-9]+; LETTERS: [a-zA-Z]+;