Skip to content
Closed
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .idea/codeStyles/Project.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,19 @@
import org.jabref.logic.bibtex.comparator.ComparisonResult;
import org.jabref.model.entry.types.StandardEntryType;

/// If the left entry type is misc then prefer the the right value
/// If
/// the
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rever the javadoc formatting here

/// left
/// entry
/// type
/// is
/// misc
/// then
/// prefer
/// the
/// the
/// right
/// value
public class EntryTypePlausibilityComparator implements FieldValuePlausibilityComparator {

// Only the factory may instantiate this
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package org.jabref.logic.bibtex.comparator.plausibility;

import java.util.Optional;

import org.jabref.logic.bibtex.comparator.ComparisonResult;
import org.jabref.model.entry.Month;

import org.jspecify.annotations.NullMarked;

@NullMarked
public class MonthPlausibilityComparator implements FieldValuePlausibilityComparator {

@Override
public ComparisonResult compare(String left, String right) {
Optional<Month> leftM = Month.parse(left);
Optional<Month> rightM = Month.parse(right);

if (leftM.isPresent() && rightM.isEmpty()) {
return ComparisonResult.LEFT_BETTER;
}
if (rightM.isPresent() && leftM.isEmpty()) {
return ComparisonResult.RIGHT_BETTER;
}
if (leftM.isEmpty() && rightM.isEmpty()) {
return ComparisonResult.UNDETERMINED;
}
if (!leftM.equals(rightM)) {
return ComparisonResult.UNDETERMINED;
}

Month leftMonth = leftM.get();
Month rightMonth = rightM.get();

boolean leftIsJabRef = left.equals(leftMonth.getJabRefFormat());
boolean rightIsJabRef = right.equals(rightMonth.getJabRefFormat());
if (leftIsJabRef && !rightIsJabRef) {
return ComparisonResult.LEFT_BETTER;
}
if (rightIsJabRef && !leftIsJabRef) {
return ComparisonResult.RIGHT_BETTER;
}

boolean leftIsShort = left.equalsIgnoreCase(leftMonth.getShortName());
boolean rightIsShort = right.equalsIgnoreCase(rightMonth.getShortName());
if (leftIsShort && !rightIsShort) {
return ComparisonResult.LEFT_BETTER;
}
if (rightIsShort && !leftIsShort) {
return ComparisonResult.RIGHT_BETTER;
}

boolean leftIsSimpleNum;
try {
leftIsSimpleNum = Integer.parseInt(left) == leftM.get().getNumber();
} catch (NumberFormatException e) {
leftIsSimpleNum = false;
}
boolean rightIsSimpleNum;
try {
rightIsSimpleNum = Integer.parseInt(right) == rightM.get().getNumber();
} catch (NumberFormatException e) {
rightIsSimpleNum = false;
}
if (leftIsSimpleNum && !rightIsSimpleNum) {
return ComparisonResult.LEFT_BETTER;
}
if (rightIsSimpleNum && !leftIsSimpleNum) {
return ComparisonResult.RIGHT_BETTER;
}
if (left.length() < right.length()) {
return ComparisonResult.LEFT_BETTER;
}
if (right.length() < left.length()) {
return ComparisonResult.RIGHT_BETTER;
}

return ComparisonResult.UNDETERMINED;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ public Optional<FieldValuePlausibilityComparator> getPlausibilityComparator(Fiel
if (field.getProperties().contains(FieldProperty.YEAR)) {
return Optional.of(new YearFieldValuePlausibilityComparator());
}
if (field.getProperties().contains(FieldProperty.MONTH)) {
return Optional.of(new MonthPlausibilityComparator());
}
if (InternalField.TYPE_HEADER == field) {
return Optional.of(new EntryTypePlausibilityComparator());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.jabref.logic.bibtex.comparator.plausibility;

import org.jabref.logic.bibtex.comparator.ComparisonResult;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

import static org.junit.jupiter.api.Assertions.assertEquals;

class MonthPlausibilityComparatorTest {
private final MonthPlausibilityComparator comparator = new MonthPlausibilityComparator();

@ParameterizedTest
@CsvSource(value = {"{Jun}, jun, RIGHT_BETTER", "Jun, #jun#, RIGHT_BETTER", "June, #jun#, RIGHT_BETTER", "June, 6, RIGHT_BETTER", "June, July, UNDETERMINED", "#jun#, #jul#, UNDETERMINED", "6, #jun#, RIGHT_BETTER", "June, #Apr#, UNDETERMINED", "June, July, UNDETERMINED", "NotAMonth, #jun#, RIGHT_BETTER", "NotAMonth, June, RIGHT_BETTER", ", #jun#, RIGHT_BETTER", "#jun#, , LEFT_BETTER", "06, 6, RIGHT_BETTER", "jan, jan, UNDETERMINED", "#JAN#, #jan#, RIGHT_BETTER"}, nullValues = {"null", "N/A", "EMPTY"})
void compare(String left, String right, ComparisonResult expected) {
assertEquals(expected, comparator.compare(left, right));
}
}
Loading