]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
UJ-2: Added Day Month Year Era format to parser
authorcesarvh <cesarv.h@berkeley.edu>
Wed, 17 Oct 2018 02:40:01 +0000 (19:40 -0700)
committercesarvh <cesarv.h@berkeley.edu>
Tue, 19 Mar 2019 19:36:48 +0000 (12:36 -0700)
services/structureddate/structureddate/src/main/antlr4/org/collectionspace/services/structureddate/antlr/StructuredDate.g4
services/structureddate/structureddate/src/main/java/org/collectionspace/services/structureddate/antlr/ANTLRStructuredDateEvaluator.java
services/structureddate/structureddate/src/test/resources/test-dates.yaml

index 430d6bea65ccd8e6f16b1e115cba0c7b4fea6fca..63fbdb664689f5a2d68d7ed2e1545d5ad8cfbb3a 100644 (file)
@@ -91,7 +91,8 @@ century:               ( strCentury | numCentury ) era ;
 millennium:            nth MILLENNIUM era ;
 
 strDate:               strMonth ( numDayOfMonth | nth ) COMMA? numYear era;
-invStrDate:            era numYear COMMA? strMonth numDayOfMonth ;
+invStrDate:            era num COMMA? strMonth num
+|                      ( num | nth ) strMonth COMMA? num era ;
 strDayInMonthRange:    strMonth numDayOfMonth ( HYPHEN | DASH ) numDayOfMonth COMMA? numYear era ;
 monthInYearRange:      strMonth ( HYPHEN | DASH ) strMonth COMMA? numYear era ;
 nthQuarterInYearRange: nthQuarter ( HYPHEN | DASH ) nthQuarter COMMA? numYear era ;
index 9b2cde1ef39d685a1e1cf55b6b2c1111693203bd..52d15ae46ce8f51ed5e2abbd04a73ca94e035055 100644 (file)
@@ -456,11 +456,38 @@ public class ANTLRStructuredDateEvaluator extends StructuredDateBaseListener imp
 
                // Reorder the stack into a canonical ordering,
                // year-month-day-era.
+               Era era = null;
 
-               Integer dayOfMonth = (Integer) stack.pop();
-               Integer numMonth = (Integer) stack.pop();
-               Integer year = (Integer) stack.pop();
-               Era era = (Era) stack.pop();
+               boolean eraLast = stack.peek() instanceof Integer;
+
+               // Declare nums
+               Integer num1;
+               Integer num2;
+               Integer num3;
+
+               if (eraLast) {
+                       // Si           
+                       num1 = (Integer) stack.pop(); // year or day
+                       num2 = (Integer) stack.pop(); // month
+                       num3 = (Integer) stack.pop(); // year or day
+                       era = (Era) stack.pop(); // era...
+               } else {
+                       era = (Era) stack.pop(); // damn eras
+                       num1 = (Integer) stack.pop(); // year or day
+                       num2 = (Integer) stack.pop(); // month
+                       num3 = (Integer) stack.pop(); //  day
+               }
+
+               Integer dayOfMonth = num1;
+               Integer numMonth = num2;
+               Integer year = num3;
+               
+               if (DateUtils.isValidDate(num3, num2, num1, era)) {
+                       // Do nothing, already in the right format
+               } else if (DateUtils.isValidDate(num1, num2, num3, era)) {
+                       dayOfMonth = num3;
+                       year = num1;
+               }
 
                stack.push(year);
                stack.push(numMonth);
index d458de693a10e54fbbdb48c0658aebdf7c4c78d8..6ca1d78874582b57b3e0455f2298b27456b1106b 100644 (file)
   "3/4/2000?":                           # oneDisplayDate - with question mark
                                          earliestSingleDate: [2000,  3,  4, CE]
 
+  "13 april 1995":                           # oneDisplayDate - with question mark
+                                         earliestSingleDate: [1995,  4,  13, CE]
+
+  "13 apr 1995":                           # oneDisplayDate - with question mark
+                                         earliestSingleDate: [1995,  4,  13, CE]
+
+  "13th APRIL 1995":                           # oneDisplayDate - with question mark
+                                         earliestSingleDate: [1995,  4,  13, CE]
+
 # -------------------------------------------------------------------------------------------------------
 # Invalid dates
 # -------------------------------------------------------------------------------------------------------