diff --git a/CHANGELOG.md b/CHANGELOG.md index 93eef956b96a..57f38d54b315 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ Note that this project **does not** adhere to [Semantic Versioning](https://semv - We re-enabled the [Grobid](https://github.com/grobidOrg/grobid) citation fetcher again. It is now reachable via https. [#16668](https://github.com/JabRef/jabref/issues/16668) - We fixed an issue where the AI chat lost its scroll position when switching back to an entry. [#17172](https://github.com/JabRef/jabref/pull/17172) - We fixed an issue where pressing "+" in the "File" field with an automatically found file selected opened the "Add file link" dialog instead of linking the selected file. [#16938](https://github.com/JabRef/jabref/pull/16938) +- We fixed an issue where the consistency check listed the entry types in random order. [#779](https://github.com/JabRef/jabref-koppor/pull/779) - We fixed an issue where case-sensitive search (`=!`, `==!`, `=~!`) in linked files ignored the casing and matched text in any casing. [#13048](https://github.com/JabRef/jabref/issues/13048) ### Removed diff --git a/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckDialogViewModel.java b/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckDialogViewModel.java index 2b54c341269a..49d834fa6587 100644 --- a/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckDialogViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckDialogViewModel.java @@ -71,8 +71,7 @@ public ConsistencyCheckDialogViewModel(DialogService dialogService, .distinct() .toList(); - result.entryTypeToResultMap().entrySet().stream() - .sorted(Comparator.comparing(entry -> entry.getKey().getName())) + result.entryTypeToResultMap().entrySet() .forEach(Unchecked.consumer(this::writeMapEntry)); } diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index 33ed5d696347..2a8969fd6c3b 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -2,6 +2,7 @@ import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -88,6 +89,7 @@ List filterAndSortEntriesWithFieldDifferences(Set entries, S .toList(); } + /// @param entryTypeToResultMap ordered by the name of the entry type public record Result(Map entryTypeToResultMap) { } @@ -116,11 +118,14 @@ public Result check(BibDatabaseContext bibContext, BibEntryTypesManager bibEntry List entryTypeDefinitions = bibEntryTypesManager.getAllTypes(bibContext.getMode()).stream().toList(); - // Use LinkedHashMap to preserve the order of Bib(tex|latex)EntryTypeDefinitions.ALL + // Ordered by entry type name, so that all consumers (GUI, CLI output, language server) list the types in the same order Map resultMap = new LinkedHashMap<>(); + List>> entryTypesByName = entryTypeToFieldsInAnyEntryMap.entrySet().stream() + .sorted(Comparator.comparing(mapEntry -> mapEntry.getKey().getName())) + .toList(); int counter = 0; - for (Map.Entry> mapEntry : entryTypeToFieldsInAnyEntryMap.entrySet()) { + for (Map.Entry> mapEntry : entryTypesByName) { entriesGroupingProgress.accept(counter++, entryTypeToFieldsInAnyEntryMap.size()); EntryType entryType = mapEntry.getKey(); Set fieldsInAnyEntry = mapEntry.getValue(); diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultWriter.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultWriter.java index 4e4bafe72f06..c772cc8a0a35 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultWriter.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultWriter.java @@ -75,8 +75,7 @@ public BibliographyConsistencyCheckResultWriter(BibliographyConsistencyCheck.Res } public void writeFindings() throws IOException { - result.entryTypeToResultMap().entrySet().stream() - .sorted(Comparator.comparing(entry -> entry.getKey().getName())) + result.entryTypeToResultMap().entrySet() .forEach(Unchecked.consumer(this::writeMapEntry)); } diff --git a/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckTest.java b/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckTest.java index a0a1ed747753..6710e58ad6a8 100644 --- a/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckTest.java +++ b/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckTest.java @@ -5,6 +5,7 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; import org.jabref.model.database.BibDatabase; import org.jabref.model.database.BibDatabaseContext; @@ -427,6 +428,25 @@ void filteredFieldsAreIgnored() { "Differences only in filtered fields must be ignored"); } + @Test + void resultIsOrderedByEntryTypeName() { + List types = List.of(StandardEntryType.TechReport, StandardEntryType.Online, StandardEntryType.Misc, + StandardEntryType.InProceedings, StandardEntryType.Book, StandardEntryType.Article); + List entries = types.stream() + .flatMap(type -> Stream.of( + new BibEntry(type, type.getName() + "1").withField(StandardField.NOTE, "note"), + new BibEntry(type, type.getName() + "2"))) + .toList(); + + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck() + .check(new BibDatabaseContext(new BibDatabase(entries)), entryTypesManager, (_, _) -> { + }); + + assertEquals(List.of(StandardEntryType.Article, StandardEntryType.Book, StandardEntryType.InProceedings, + StandardEntryType.Misc, StandardEntryType.Online, StandardEntryType.TechReport), + List.copyOf(result.entryTypeToResultMap().keySet())); + } + @Test void nonFilteredFieldDifferenceIsReported() { BibEntry withAuthor = new BibEntry(StandardEntryType.Misc, "1")