Merge branch 'RED-9322_RED-9036' into 'master'
RED-9322 & RED-9036: Closes RED-9322 See merge request redactmanager/redaction-service!427
This commit is contained in:
commit
6c36188689
@ -11,12 +11,15 @@ import java.time.format.DateTimeFormatter;
|
|||||||
import java.time.format.DateTimeFormatterBuilder;
|
import java.time.format.DateTimeFormatterBuilder;
|
||||||
import java.time.format.DateTimeParseException;
|
import java.time.format.DateTimeParseException;
|
||||||
import java.time.format.ResolverStyle;
|
import java.time.format.ResolverStyle;
|
||||||
|
import java.time.temporal.ChronoField;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.experimental.FieldDefaults;
|
import lombok.experimental.FieldDefaults;
|
||||||
@ -30,6 +33,7 @@ public class DateConverter {
|
|||||||
|
|
||||||
private static DateTimeFormatter DATE_TIME_FORMATTER;
|
private static DateTimeFormatter DATE_TIME_FORMATTER;
|
||||||
private static final List<Locale> LOCALES = Arrays.asList(Locale.UK, Locale.US);
|
private static final List<Locale> 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<Date> parseDate(String dateAsString) {
|
public Optional<Date> parseDate(String dateAsString) {
|
||||||
@ -96,7 +100,11 @@ public class DateConverter {
|
|||||||
while ((line = reader.readLine()) != null) {
|
while ((line = reader.readLine()) != null) {
|
||||||
String pattern = line.trim();
|
String pattern = line.trim();
|
||||||
if (!pattern.isEmpty()) {
|
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) {
|
} 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) {
|
private String removeTrailingDot(String dateAsString) {
|
||||||
|
|
||||||
String str = dateAsString;
|
String str = dateAsString;
|
||||||
|
|||||||
@ -1,41 +1,74 @@
|
|||||||
dd-MMM-yyyy
|
dd-MMM-yyyy
|
||||||
|
d-MMM-yyyy
|
||||||
dd MMM yyyy
|
dd MMM yyyy
|
||||||
|
d MMM yyyy
|
||||||
dd MMM yy
|
dd MMM yy
|
||||||
d MMM yy
|
d MMM yy
|
||||||
dd MM yyyy
|
dd MM yyyy
|
||||||
|
d MM yyyy
|
||||||
dd MMMM 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
|
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
|
MMM d, yyyy
|
||||||
|
dd['.'] MMM yyyy
|
||||||
d['.'] MMM yyyy
|
d['.'] MMM yyyy
|
||||||
d-MMM-yyyy
|
dd['th']['st']['nd']['rd'] 'of' MMMM, yyyy
|
||||||
d['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
|
MMMM d['th']['st']['nd']['rd'], yyyy
|
||||||
|
yyyy, MMMM dd
|
||||||
yyyy, MMMM d
|
yyyy, MMMM d
|
||||||
yyyy.MM.dd
|
yyyy.MM.dd
|
||||||
|
yyyy.MM.d
|
||||||
yyyyMMdd
|
yyyyMMdd
|
||||||
|
yyyyMMd
|
||||||
dd-MM-yy
|
dd-MM-yy
|
||||||
|
d-MM-yy
|
||||||
dd/MM/yy
|
dd/MM/yy
|
||||||
|
d/MM/yy
|
||||||
|
MMMM dd, yy
|
||||||
MMMM d, yy
|
MMMM d, yy
|
||||||
|
dd MMMM, yy
|
||||||
d MMMM, yy
|
d MMMM, yy
|
||||||
|
dd['th']['st']['nd']['rd'] MMM yyyy
|
||||||
d['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
|
MMM d['th']['st']['nd']['rd'], yy
|
||||||
yyyy-MMM-dd
|
yyyy-MMM-dd
|
||||||
|
yyyy-MMM-d
|
||||||
MMM-dd-yyyy
|
MMM-dd-yyyy
|
||||||
dd-MM-yyyy
|
MMM-d-yyyy
|
||||||
yyyy, MMMM dd
|
|
||||||
dd.MMM.yyyy
|
dd.MMM.yyyy
|
||||||
|
d.MMM.yyyy
|
||||||
dd.MMMM.yyyy
|
dd.MMMM.yyyy
|
||||||
|
d.MMMM.yyyy
|
||||||
dd.MMM.yy
|
dd.MMM.yy
|
||||||
|
d.MMM.yy
|
||||||
dd.MMMM.yy
|
dd.MMMM.yy
|
||||||
|
d.MMMM.yy
|
||||||
dd.MMM-yyyy
|
dd.MMM-yyyy
|
||||||
|
d.MMM-yyyy
|
||||||
dd.MMMM-yyyy
|
dd.MMMM-yyyy
|
||||||
|
d.MMMM-yyyy
|
||||||
dd. MMM yy
|
dd. MMM yy
|
||||||
|
d. MMM yy
|
||||||
|
dd['th']['st']['nd']['rd'] MMMM yy
|
||||||
d['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
|
d['th']['st']['nd']['rd'] MMMM yyyy
|
||||||
dd.MM.yy
|
dd.MM.yy
|
||||||
|
d.MM.yy
|
||||||
|
dd MMM. yyyy
|
||||||
|
d MMM. yyyy
|
||||||
|
yyyy MMM dd
|
||||||
|
yyyy MMM d
|
||||||
@ -8,6 +8,7 @@ import static org.mockito.Mockito.when;
|
|||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.time.OffsetDateTime;
|
import java.time.OffsetDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -165,12 +166,19 @@ public class DocumineFloraTest extends AbstractRedactionIntegrationTest {
|
|||||||
.get();
|
.get();
|
||||||
assertNotNull(experimentalDates);
|
assertNotNull(experimentalDates);
|
||||||
|
|
||||||
|
List<String> 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()
|
String dates = experimentalDates.getComponentValues()
|
||||||
.get(0).getValue();
|
.get(0).getValue();
|
||||||
String[] dateArray = dates.split(", ");
|
String[] dateArray = dates.split(", ");
|
||||||
boolean allEqual = true;
|
boolean allEqual = true;
|
||||||
for (String date : dateArray) {
|
for (String date : dateArray) {
|
||||||
if (!"10/01/2022".equals(date) && !"08/09/2024".equals(date)) {
|
if (!expectedDates.contains(date)) {
|
||||||
allEqual = false;
|
allEqual = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user