66import java .util .regex .Pattern ;
77
88import org .jabref .logic .integrity .YearChecker ;
9+ import org .jabref .model .strings .StringUtil ;
910
1011public class YearFieldValuePlausibilityComparator extends FieldValuePlausibilityComparator {
1112
@@ -21,28 +22,50 @@ public class YearFieldValuePlausibilityComparator extends FieldValuePlausibility
2122
2223 @ Override
2324 public ComparisonResult compare (String leftValue , String rightValue ) {
24- YearChecker checker = new YearChecker ();
25+ boolean isLeftBlank = StringUtil .isBlank (leftValue );
26+ boolean isRightBlank = StringUtil .isBlank (rightValue );
27+ if (isLeftBlank && !isRightBlank ) {
28+ return ComparisonResult .RIGHT_BETTER ;
29+ } else if (isRightBlank && !isLeftBlank ) {
30+ return ComparisonResult .LEFT_BETTER ;
31+ } else if (isLeftBlank && isRightBlank ) {
32+ return ComparisonResult .UNDETERMINED ;
33+ }
2534
26- boolean leftValid = checker . checkValue ( leftValue ). isEmpty ();
35+ // left and right values are not blank.
2736
28- if (leftValid ) {
29- Optional <Integer > leftYear = extractYear (leftValue );
30- Optional <Integer > rightYear = extractYear (rightValue );
37+ boolean leftValueCorrectlyFormatted = YearChecker .isValueCorrectlyFormatted (leftValue );
38+ boolean rightValueCorrectlyFormatted = YearChecker .isValueCorrectlyFormatted (rightValue );
39+ if (leftValueCorrectlyFormatted && !rightValueCorrectlyFormatted ) {
40+ return ComparisonResult .LEFT_BETTER ;
41+ } else if (rightValueCorrectlyFormatted && !leftValueCorrectlyFormatted ) {
42+ return ComparisonResult .RIGHT_BETTER ;
43+ } else if (!leftValueCorrectlyFormatted && !rightValueCorrectlyFormatted ) {
44+ return ComparisonResult .UNDETERMINED ;
45+ }
3146
32- boolean leftYearInRange = ( leftYear . get () >= 1800 ) && ( leftYear . get () <= Year . now (). getValue () + 2 );
47+ // left and right values are correctly formatted.
3348
34- if (leftYearInRange ) {
35- int diff = Math .abs (leftYear .get () - rightYear .get ());
36- if (diff > 10 ) {
37- return rightYear .get () > leftYear .get ()
38- ? ComparisonResult .RIGHT_BETTER
39- : ComparisonResult .LEFT_BETTER ;
40- }
41- return ComparisonResult .UNDETERMINED ; // years are close, undetermined
42- }
49+ Integer leftYear = extractYear (leftValue ).get ();
50+ Integer rightYear = extractYear (rightValue ).get ();
51+ boolean leftYearInRange = (leftYear >= 1800 ) && (leftYear <= Year .now ().getValue () + 2 );
52+ boolean rightYearInRange = (rightYear >= 1800 ) && (rightYear <= Year .now ().getValue () + 2 );
53+ if (leftYearInRange && !rightYearInRange ) {
54+ return ComparisonResult .LEFT_BETTER ;
55+ } else if (rightYearInRange && !leftYearInRange ) {
4356 return ComparisonResult .RIGHT_BETTER ;
44- }
45- return ComparisonResult .RIGHT_BETTER ;
57+ } else if (!leftYearInRange && !rightYearInRange ) {
58+ return ComparisonResult .UNDETERMINED ;
59+ }
60+
61+ int diff = Math .abs (leftYear - rightYear );
62+ if (diff > 10 ) {
63+ return rightYear > leftYear
64+ ? ComparisonResult .RIGHT_BETTER
65+ : ComparisonResult .LEFT_BETTER ;
66+ }
67+
68+ return ComparisonResult .UNDETERMINED ; // years are close, undetermined
4669 }
4770
4871 /**
0 commit comments