From 6c8095e96892933fb7649238a73410b6c032a550 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Fri, 14 Jun 2024 13:48:47 +0200 Subject: [PATCH] RED-9322 & RED-9036: --- .../v1/server/utils/DateConverter.java | 36 +++++++++++- .../src/main/resources/date_formats.txt | 53 ++++++++++++++---- .../v1/server/DocumineFloraTest.java | 10 +++- .../resources/files/dates/date_formats.pdf | Bin 2198 -> 36008 bytes 4 files changed, 87 insertions(+), 12 deletions(-) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/DateConverter.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/DateConverter.java index 8d7435a7..dd8b5618 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/DateConverter.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/DateConverter.java @@ -11,12 +11,15 @@ import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; import java.time.format.DateTimeParseException; import java.time.format.ResolverStyle; +import java.time.temporal.ChronoField; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Locale; import java.util.Objects; import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import lombok.AccessLevel; import lombok.experimental.FieldDefaults; @@ -30,6 +33,7 @@ public class DateConverter { private static DateTimeFormatter DATE_TIME_FORMATTER; private static final List LOCALES = Arrays.asList(Locale.UK, Locale.US); + private static int BASE_YEAR = 1950; // base year 1950 means, that "yy" will be interpreted in range 1950-2049 public Optional parseDate(String dateAsString) { @@ -96,7 +100,11 @@ public class DateConverter { while ((line = reader.readLine()) != null) { String pattern = line.trim(); if (!pattern.isEmpty()) { - builder.appendOptional(DateTimeFormatter.ofPattern(pattern, Locale.UK)); + if (hasTwoDigitsForYear(pattern)) { + builder.appendOptional(setBaseYear(pattern)); + } else { + builder.appendOptional(DateTimeFormatter.ofPattern(pattern, Locale.UK)); + } } } } catch (IOException e) { @@ -106,6 +114,32 @@ public class DateConverter { } + private boolean hasTwoDigitsForYear(String input) { + // Regex to match any string with exactly two 'y' characters + Pattern pattern = Pattern.compile("^[^y]*(y[^y]*){2}$"); + Matcher matcher = pattern.matcher(input); + + return matcher.matches(); + + } + + + private DateTimeFormatter setBaseYear(String pattern) { + + DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder(); + if (pattern.startsWith("yy")) { + String editedPattern = pattern.substring(2); + builder.appendValueReduced(ChronoField.YEAR_OF_ERA, 2, 2, BASE_YEAR).appendPattern(editedPattern).toFormatter(); + } else if (pattern.endsWith("yy")) { + String editedPattern = pattern.substring(0, pattern.length() - 2); + builder.appendPattern(editedPattern).appendValueReduced(ChronoField.YEAR_OF_ERA, 2, 2, BASE_YEAR).toFormatter(); + } else { + throw new RuntimeException("Date format not supported: " + pattern); + } + return builder.toFormatter(); + } + + private String removeTrailingDot(String dateAsString) { String str = dateAsString; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/resources/date_formats.txt b/redaction-service-v1/redaction-service-server-v1/src/main/resources/date_formats.txt index e0b40b5a..fedcb8b6 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/resources/date_formats.txt +++ b/redaction-service-v1/redaction-service-server-v1/src/main/resources/date_formats.txt @@ -1,41 +1,74 @@ dd-MMM-yyyy +d-MMM-yyyy dd MMM yyyy +d MMM yyyy dd MMM yy d MMM yy dd MM yyyy +d MM yyyy dd MMMM yyyy -MMMM dd, yyyy -dd.MM.yyyy -yyyy/MM/dd -yyyy-MM-dd -dd-MM-yyyy -MMMM d, yyyy d MMMM yyyy +MMMM dd, yyyy +MMMM d, yyyy +dd.MM.yyyy +d.MM.yyyy +yyyy/MM/dd +yyyy/MM/d +yyyy-MM-dd +yyyy-MM-d +dd-MM-yyyy +d-MM-yyyy +MMM dd, yyyy MMM d, yyyy +dd['.'] MMM yyyy d['.'] MMM yyyy -d-MMM-yyyy +dd['th']['st']['nd']['rd'] 'of' MMMM, yyyy d['th']['st']['nd']['rd'] 'of' MMMM, yyyy +MMMM dd['th']['st']['nd']['rd'], yyyy MMMM d['th']['st']['nd']['rd'], yyyy +yyyy, MMMM dd yyyy, MMMM d yyyy.MM.dd +yyyy.MM.d yyyyMMdd +yyyyMMd dd-MM-yy +d-MM-yy dd/MM/yy +d/MM/yy +MMMM dd, yy MMMM d, yy +dd MMMM, yy d MMMM, yy +dd['th']['st']['nd']['rd'] MMM yyyy d['th']['st']['nd']['rd'] MMM yyyy +MMM dd['th']['st']['nd']['rd'], yy MMM d['th']['st']['nd']['rd'], yy yyyy-MMM-dd +yyyy-MMM-d MMM-dd-yyyy -dd-MM-yyyy -yyyy, MMMM dd +MMM-d-yyyy dd.MMM.yyyy +d.MMM.yyyy dd.MMMM.yyyy +d.MMMM.yyyy dd.MMM.yy +d.MMM.yy dd.MMMM.yy +d.MMMM.yy dd.MMM-yyyy +d.MMM-yyyy dd.MMMM-yyyy +d.MMMM-yyyy dd. MMM yy +d. MMM yy +dd['th']['st']['nd']['rd'] MMMM yy d['th']['st']['nd']['rd'] MMMM yy +dd['th']['st']['nd']['rd'] MMMM yyyy d['th']['st']['nd']['rd'] MMMM yyyy -dd.MM.yy \ No newline at end of file +dd.MM.yy +d.MM.yy +dd MMM. yyyy +d MMM. yyyy +yyyy MMM dd +yyyy MMM d \ No newline at end of file diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/DocumineFloraTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/DocumineFloraTest.java index 739c6c30..cf1f7e98 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/DocumineFloraTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/DocumineFloraTest.java @@ -8,6 +8,7 @@ import static org.mockito.Mockito.when; import java.io.FileOutputStream; import java.io.IOException; import java.time.OffsetDateTime; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -165,12 +166,19 @@ public class DocumineFloraTest extends AbstractRedactionIntegrationTest { .get(); assertNotNull(experimentalDates); + List expectedDates = new ArrayList<>(); + expectedDates.add("10/01/2022"); + expectedDates.add("08/09/2024"); + expectedDates.add("03/01/2022"); + expectedDates.add("03/08/1992"); + expectedDates.add("27/02/1992"); + String dates = experimentalDates.getComponentValues() .get(0).getValue(); String[] dateArray = dates.split(", "); boolean allEqual = true; for (String date : dateArray) { - if (!"10/01/2022".equals(date) && !"08/09/2024".equals(date)) { + if (!expectedDates.contains(date)) { allEqual = false; break; } diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/dates/date_formats.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/dates/date_formats.pdf index 00abd9427d2aca79029cadc4b02740e9e11f169e..898539932cbe7a46b057b11d6357eca6f1114227 100644 GIT binary patch literal 36008 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 O6L8#;lInUI-2VsOUyC>Z literal 2198 zcmY!laBl4!6vllGGvveYc#%l2n(}WT16i`aY?7=_MHoh6W%_#U(|liMhO76?3$oFflN^ zW2oT;83YlA8EHvo;x<8Piq2oR{s&a78)03P*`li?6jWc zSdMDel@xxhjXGQ_=josCdh{>iVZf#%xrUVwmV4SWMN2(gIiX_>cVjb~QiMrL?FEmh zV_lN+HmMCJ3Qr=ZeLT3CX^F!jE=lf~gEF4m+>*NLH_SDAI=SFN-)7F_=Kd8mRTDJ? zoMt?oE07oFq5Xqs7`yu08s4Z7L_C zBtD%zneH24oK*a64}$8v%F;mfywvFxtUzS*8|s*L0B z(>s6qql(S*CFONiI7eVfhlYkkCK^LSL)660{iKNNp-}*b=A%pHp1P-f{CJDXgFN)u zxEd1*ji&FL-PyEoqLYWzbj64h0SE7R9J~{vs50IA@YY2NTQ!W$P1ma!x-ZB%PcA`QLr=w zv2d3(Mj+1zp?Yg=(Cw_-4g!CtHrj$|n4!p{ABn1K@9J&}^H^>5 z@Ao^8vREcnU6Gcw?`Pgv7JqJN;=l7eIilV9Ue0X4x5EQ=Z%S(Egc&MAD4$^nZNI)m`vd7UpubXKA%*n-5R*duXW;s zCGwU}?Y>Gb=SBFg^$t4~B4pUi&JuOeWE0Dz&Q+7m%_Ba?MB5t_EzePVec@aAPQ}&9%8fcl z{K}F;mZh}*5+doY`=Q#U)h6sn%T{o%7t;l~Ph zwoNYQJ705WOZ>s)Z8L=Y&hwZbk(k-($G4I%>(UCR3I3%Ey+hwO)P#QB^6rY{kLpe8 z7juGtD~Ufdxl%8r6n{j{^hS1T_c!^-`yWe|t^Sl-^iS;P|JS$t6?Gh*VM%=8WCNEfecXk>stH<+8F<^ib75SVvL7{oJ-X!%6x+mNpeC@Y>vCyHF(QQUT+tE{U+l##PZ|q}Ti6sz=OA?Dp UDvE%vHncD|;!;(0^>^a}03sn?%>V!Z