From 78323079c8f0504a6e6df53a4c1da1a7edc0d71e Mon Sep 17 00:00:00 2001 From: cesarvh Date: Tue, 16 Oct 2018 19:40:01 -0700 Subject: [PATCH] UJ-2: Added Day Month Year Era format to parser --- .../structureddate/antlr/StructuredDate.g4 | 3 +- .../antlr/ANTLRStructuredDateEvaluator.java | 35 ++++++++++++++++--- .../src/test/resources/test-dates.yaml | 9 +++++ 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/services/structureddate/structureddate/src/main/antlr4/org/collectionspace/services/structureddate/antlr/StructuredDate.g4 b/services/structureddate/structureddate/src/main/antlr4/org/collectionspace/services/structureddate/antlr/StructuredDate.g4 index 430d6bea6..63fbdb664 100644 --- a/services/structureddate/structureddate/src/main/antlr4/org/collectionspace/services/structureddate/antlr/StructuredDate.g4 +++ b/services/structureddate/structureddate/src/main/antlr4/org/collectionspace/services/structureddate/antlr/StructuredDate.g4 @@ -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 ; 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 9b2cde1ef..52d15ae46 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 @@ -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); diff --git a/services/structureddate/structureddate/src/test/resources/test-dates.yaml b/services/structureddate/structureddate/src/test/resources/test-dates.yaml index d458de693..6ca1d7887 100644 --- a/services/structureddate/structureddate/src/test/resources/test-dates.yaml +++ b/services/structureddate/structureddate/src/test/resources/test-dates.yaml @@ -1106,6 +1106,15 @@ "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 # ------------------------------------------------------------------------------------------------------- -- 2.47.3