From: Ray Lee Date: Sun, 23 May 2021 04:52:58 +0000 (-0400) Subject: DRYD-939: Ignore enclosing braces when parsing structured dates. X-Git-Url: https://git.aero2k.de/?a=commitdiff_plain;h=aa78a345ffc23b0e90812d28682f216f70dfa052;p=tmp%2Fjakarta-migration.git DRYD-939: Ignore enclosing braces when parsing structured dates. --- diff --git a/services/structureddate/structureddate/src/main/java/org/collectionspace/services/structureddate/antlr/ANTLRStructuredDateEvaluator.java b/services/structureddate/structureddate/src/main/java/org/collectionspace/services/structureddate/antlr/ANTLRStructuredDateEvaluator.java index 036343212..6328de05e 100644 --- a/services/structureddate/structureddate/src/main/java/org/collectionspace/services/structureddate/antlr/ANTLRStructuredDateEvaluator.java +++ b/services/structureddate/structureddate/src/main/java/org/collectionspace/services/structureddate/antlr/ANTLRStructuredDateEvaluator.java @@ -118,6 +118,24 @@ public class ANTLRStructuredDateEvaluator extends StructuredDateBaseListener imp } + /** + * Normalizes a display date for evaluation. + * - Remove leading and trailing whitespace + * - Remove leading and trailing braces + * - Convert to lowercase + * + * @param displayDate + * @return The normalized display date + */ + protected String normalizeDisplayDate(String displayDate) { + String normalDisplayDate = + displayDate + .replaceAll("^[\\[\\(\\{\\s]+|[\\]\\)\\}\\s]+$", "") + .toLowerCase(); + + return normalDisplayDate; + } + @Override public StructuredDateInternal evaluate(String displayDate) throws StructuredDateFormatException { stack = new Stack(); @@ -125,8 +143,8 @@ public class ANTLRStructuredDateEvaluator extends StructuredDateBaseListener imp result = new StructuredDateInternal(); result.setDisplayDate(displayDate); - // Instantiate a parser from the lowercased display date, so that parsing will be case insensitive - ANTLRInputStream inputStream = new ANTLRInputStream(displayDate.toLowerCase()); + // Instantiate a parser from the normalized display date. + ANTLRInputStream inputStream = new ANTLRInputStream(normalizeDisplayDate(displayDate)); StructuredDateLexer lexer = new StructuredDateLexer(inputStream); CommonTokenStream tokenStream = new CommonTokenStream(lexer); StructuredDateParser parser = new StructuredDateParser(tokenStream); diff --git a/services/structureddate/structureddate/src/test/resources/test-dates.yaml b/services/structureddate/structureddate/src/test/resources/test-dates.yaml index 6e34784d6..6b58ea560 100644 --- a/services/structureddate/structureddate/src/test/resources/test-dates.yaml +++ b/services/structureddate/structureddate/src/test/resources/test-dates.yaml @@ -1277,6 +1277,27 @@ earliestSingleDate: [1995, 4, 13, CE] latestDate: [2019, 4, 18, CE] + '(1997)': # enclosing parens + earliestSingleDate: [1997, 1, 1, CE] + latestDate: [1997, 12, 31, CE] + + '( 1997 )': # enclosing parens + earliestSingleDate: [1997, 1, 1, CE] + latestDate: [1997, 12, 31, CE] + + '[1997]': # enclosing square brackets + earliestSingleDate: [1997, 1, 1, CE] + latestDate: [1997, 12, 31, CE] + + '{1997}': # enclosing curly brackets + earliestSingleDate: [1997, 1, 1, CE] + latestDate: [1997, 12, 31, CE] + + ' ([1997 }]] )': # enclosing mixed brackets + earliestSingleDate: [1997, 1, 1, CE] + latestDate: [1997, 12, 31, CE] + + # ------------------------------------------------------------------------------------------------------- # Invalid dates # -------------------------------------------------------------------------------------------------------