]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
DRYD-939: Ignore enclosing braces when parsing structured dates.
authorRay Lee <ray.lee@lyrasis.org>
Sun, 23 May 2021 04:52:58 +0000 (00:52 -0400)
committerRay Lee <ray.lee@lyrasis.org>
Sun, 23 May 2021 04:52:58 +0000 (00:52 -0400)
services/structureddate/structureddate/src/main/java/org/collectionspace/services/structureddate/antlr/ANTLRStructuredDateEvaluator.java
services/structureddate/structureddate/src/test/resources/test-dates.yaml

index 036343212777da8e043488aa9b4a0eabe5cfdc22..6328de05e5d5dd2005a12b0ce13cdafdff51778f 100644 (file)
@@ -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<Object>();
@@ -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);
index 6e34784d6f1147fdd4ff57eca3d6fc37e831a5bf..6b58ea5608f7a952844f3d18192df9466a2c95c5 100644 (file)
                                          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
 # -------------------------------------------------------------------------------------------------------