Select better value in MultiMergeEntries dialog component (#15027)#15255
Conversation
Review Summary by QodoImprove field value selection in MultiMergeEntries dialog
WalkthroughsDescription• Use PlausibilityComparatorFactory to select more plausible field values during multi-entry merge • Add DateFieldPlausibilityComparator to prefer more specific dates over less specific ones • Prefer more complete author lists and valid dates over malformed ones • Add comprehensive test coverage for field value selection logic Diagramflowchart LR
A["MultiMergeEntriesViewModel"] -->|uses| B["PlausibilityComparatorFactory"]
B -->|provides| C["FieldValuePlausibilityComparator"]
C -->|includes| D["DateFieldPlausibilityComparator"]
C -->|includes| E["PersonNamesPlausibilityComparator"]
C -->|includes| F["YearFieldValuePlausibilityComparator"]
D -->|compares| G["Date Specificity"]
A -->|updates| H["Merged Entry Fields"]
File Changes1. jabgui/src/main/java/org/jabref/gui/mergeentries/multiwaymerge/MultiMergeEntriesViewModel.java
|
Code Review by Qodo
1. orElse("") used for flow
|
|
Hey @JunWang222! 👋 Thank you for contributing to JabRef! We have automated checks in place, based on which you will soon get feedback if any of them are failing. We also use Qodo for review assistance. It will update your pull request description with a review help and offer suggestions to improve the pull request. After all automated checks pass, a maintainer will also review your contribution. Once that happens, you can go through their comments in the "Files changed" tab and act on them, or reply to the conversation if you have further inputs. You can read about the whole pull request process in our contribution guide. Please ensure that your pull request is in line with our AI Usage Policy and make necessary disclosures. |
b2aa0f1 to
d5c6559
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
|
||
| import static org.junit.jupiter.api.Assertions.assertEquals; | ||
|
|
||
| class MultiMergeEntriesViewModelTest { |
There was a problem hiding this comment.
I guess most of the tests here can be converted to parameterized tests as well
There was a problem hiding this comment.
sounds good! I converted to parameterized tests and it's much easier to read now
|
|
||
| public class DateFieldPlausibilityComparator implements FieldValuePlausibilityComparator { | ||
|
|
||
| // Only the factory may instantiate this |
There was a problem hiding this comment.
Nitpick: link to the factory class
|
|
||
| ### Changed | ||
|
|
||
| - In the MultiMergeEntries dialog, the most plausible field value is now automatically selected when merging multiple entries (e.g. a more specific date over a less specific one, more authors over fewer). [#15027](https://github.com/JabRef/jabref/issues/15027) |
There was a problem hiding this comment.
While this description is complete, can you shorten it and start with "We + <verb in past>"
There was a problem hiding this comment.
sounds good! I changed the description with the new format
This comment has been minimized.
This comment has been minimized.
* Use PlausibilityComparatorFactory in MultiMergeEntriesViewModel to select the more plausible value when merging fields from multiple sources, instead of always keeping the first-seen value. * Add DateFieldPlausibilityComparator to prefer more specific dates.
1aadde1 to
3b4f7a8
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
Github currently has some issues with Actions and other services |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
✅ All tests passed ✅🏷️ Commit: 1da8c79 Learn more about TestLens at testlens.app. |
…) (JabRef#15255) * Select better value in MultiMergeEntries dialog component (JabRef#15027) * Use PlausibilityComparatorFactory in MultiMergeEntriesViewModel to select the more plausible value when merging fields from multiple sources, instead of always keeping the first-seen value. * Add DateFieldPlausibilityComparator to prefer more specific dates. * Add unit tests for DateFieldPlausibilityComparator * implement review comments * Fix trailing whitespace in MultiMergeEntriesViewModelTest * Trigger CI * CI: re-trigger * CI: re-trigger --------- Co-authored-by: Christoph <siedlerkiller@gmail.com>
* Close entry editor when last library is closed When no library tab is active, the entry editor remained visible. Added close() call in the activeTabProperty listener's else branch to handle the zero-libraries-open case. Fixes #13125 * Update CHANGELOG for #13125 * Fix case-insensitive DOI comparison in duplicate detection (#12967) * Chore(deps): Bump org.gradlex:java-module-dependencies in /build-logic (#15328) Bumps [org.gradlex:java-module-dependencies](https://github.com/gradlex-org/java-module-dependencies) from 1.12 to 1.12.1. - [Release notes](https://github.com/gradlex-org/java-module-dependencies/releases) - [Changelog](https://github.com/gradlex-org/java-module-dependencies/blob/main/CHANGELOG.md) - [Commits](gradlex-org/java-module-dependencies@v1.12...v1.12.1) --- updated-dependencies: - dependency-name: org.gradlex:java-module-dependencies dependency-version: 1.12.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Chore(deps): Bump org.openrewrite.rewrite from 7.26.0 to 7.28.1 (#15326) Bumps org.openrewrite.rewrite from 7.26.0 to 7.28.1. --- updated-dependencies: - dependency-name: org.openrewrite.rewrite dependency-version: 7.28.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Chore(deps): Bump org.mockito:mockito-core in /versions (#15330) Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.22.0 to 5.23.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](mockito/mockito@v5.22.0...v5.23.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-version: 5.23.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Chore(deps): Bump org.cyclonedx.bom from 3.2.0 to 3.2.1 (#15327) Bumps org.cyclonedx.bom from 3.2.0 to 3.2.1. --- updated-dependencies: - dependency-name: org.cyclonedx.bom dependency-version: 3.2.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Chore(deps): Bump com.squareup.okio:okio-jvm in /versions (#15329) Bumps [com.squareup.okio:okio-jvm](https://github.com/square/okio) from 3.16.4 to 3.17.0. - [Changelog](https://github.com/square/okio/blob/master/CHANGELOG.md) - [Commits](square/okio@parent-3.16.4...parent-3.17.0) --- updated-dependencies: - dependency-name: com.squareup.okio:okio-jvm dependency-version: 3.17.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> * New translations jabref_en.properties (Italian) (#15334) * RIS export SP/EP fields when pages contain Unicode en-dash or em-dash (#15315) * Extend the split regex to match en-dash and em-dash * Added tests --------- Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> * Remove object redundancy, miscellaneous refactoring (#15332) * Remove object redundancy, miscellaneous refactoring Signed-off-by: subhramit <subhramit.bb@live.in> * Use abbreviationRepository parameter Signed-off-by: subhramit <subhramit.bb@live.in> * Use less injections for journal abbreviations repository Signed-off-by: subhramit <subhramit.bb@live.in> * Indent Signed-off-by: subhramit <subhramit.bb@live.in> * Revert to codepoint --------- Signed-off-by: subhramit <subhramit.bb@live.in> Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> * Add drag-and-drop support for Citation Relations tab (#15181) * Add drag-and-drop support for Citation Relations tab - Implement drag detection in CitationRelationsTab to allow dragging entries - Add drag support to ViewModelListCellFactory - Fix NullPointerException in FrameDndHandler when dropping onto tabs without IDs - Fixes #15135 * Fix: correctly set drop completion status for entries * Fix: Add Unreleased section and moved changelog entries * Fix CHANGELOG formatting and upstream linter errors; removed empty groups * Fix code consistency for cr * Add explicit type * Consistency in CHANGELOG.md --------- Co-authored-by: Christoph <siedlerkiller@gmail.com> Co-authored-by: Carl Christian Snethlage <calixtus@users.noreply.github.com> * Update dependency org.eclipse.jgit:org.eclipse.jgit.pgm to v7.6.0.202603022253-r (#15335) * Chore(deps): Bump org.cyclonedx.bom from 3.2.1 to 3.2.2 (#15337) Bumps org.cyclonedx.bom from 3.2.1 to 3.2.2. --- updated-dependencies: - dependency-name: org.cyclonedx.bom dependency-version: 3.2.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Chore(deps): Bump org.eclipse.jgit:org.eclipse.jgit in /versions (#15338) Bumps [org.eclipse.jgit:org.eclipse.jgit](https://github.com/eclipse-jgit/jgit) from 7.5.0.202512021534-r to 7.6.0.202603022253-r. - [Commits](eclipse-jgit/jgit@v7.5.0.202512021534-r...v7.6.0.202603022253-r) --- updated-dependencies: - dependency-name: org.eclipse.jgit:org.eclipse.jgit dependency-version: 7.6.0.202603022253-r dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Add 'All' citation fetcher that aggregates results from all providers (#15292) * Add 'All' citation fetcher that aggregates and deduplicates results from all providers - Implements CitationFetcher as AllCitationFetcher aggregating CrossRef, OpenAlex, OpenCitations, and SemanticScholar - Deduplicates results using DuplicateCheck with BibDatabaseMode.BIBTEX - Returns maximum citation count across all providers - Tolerates individual provider failures gracefully - Adds ALL entry to CitationFetcherType enum and factory method - Covers behaviour with unit tests (failure tolerance, deduplication, max count) Closes #15029 * Add 'All' citation fetcher that aggregates results from all providers - Add ALL as first entry in CitationFetcherType enum - Implement AllCitationFetcher aggregating CrossRef, OpenAlex, OpenCitations, and SemanticScholar - Union results using DatabaseMerger with keyword separator from ImportFormatPreferences, as specified in the task - Return maximum citation count across all providers - Tolerate individual provider failures gracefully - Fix race condition in SearchCitationsRelationsService by marking citationFetcher and citationCountFetcher fields as volatile - Set ALL as the default citation fetcher in preferences - Add unit tests covering failure tolerance, deduplication, and max citation count Closes #15029 * Update CHANGELOG for issue #15029 * Address bot review: fix AllCitationFetcher and improve tests - Build provider list from CitationFetcherType enum (excluding ALL) to avoid duplicate list that can drift when new providers are added - Track anySuccess in fetch() and getCitationCount(); throw FetcherException when all providers fail instead of silently returning empty results - Emit WARN log when some providers fail but others succeed - Rename test variables to intent-revealing names - Fix citation count assertion to use assertEquals(Optional.of(20)) - Add tests for all-providers-fail and partial-failure scenarios * Trigger CI * Reformat AllCitationFetcher * Fix checkstyle: remove blank line at start of constructor block * Reverted back to semantic scholar ui preference * Revert default citation fetcher to SEMANTIC_SCHOLAR in EntryEditorPreferences * Re-trigger CI * Adapt tests to use real constructor with mocks, remove test constructor * fix unchecked excpetion --------- Co-authored-by: Siedlerchr <siedlerkiller@gmail.com> * Avoid error logs when search queries are incomplete (#15333) * Avoid error logs when search queries are incomplete Log the parsing error at debug level instead of error level. This prevents having unnecessary output when user is still entering input like "title =". * Update changelog for fixing incomplete search logging issue * Update changelog entry for incomplete search logging issue * Refine changelog entry for incomplete search logging issue * Chore(deps): Bump org.openrewrite.recipe:rewrite-recipe-bom from 3.24.0 to 3.25.0 (#15217) * Chore(deps): Bump org.openrewrite.recipe:rewrite-recipe-bom Bumps [org.openrewrite.recipe:rewrite-recipe-bom](https://github.com/openrewrite/rewrite-recipe-bom) from 3.24.0 to 3.25.0. - [Release notes](https://github.com/openrewrite/rewrite-recipe-bom/releases) - [Commits](openrewrite/rewrite-recipe-bom@v3.24.0...v3.25.0) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-recipe-bom dependency-version: 3.25.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * udpate plugin * update rewrite --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Siedlerchr <siedlerkiller@gmail.com> * Select better value in MultiMergeEntries dialog component (#15027) (#15255) * Select better value in MultiMergeEntries dialog component (#15027) * Use PlausibilityComparatorFactory in MultiMergeEntriesViewModel to select the more plausible value when merging fields from multiple sources, instead of always keeping the first-seen value. * Add DateFieldPlausibilityComparator to prefer more specific dates. * Add unit tests for DateFieldPlausibilityComparator * implement review comments * Fix trailing whitespace in MultiMergeEntriesViewModelTest * Trigger CI * CI: re-trigger * CI: re-trigger --------- Co-authored-by: Christoph <siedlerkiller@gmail.com> * Fix reset and import for PreviewPreferences (#15306) * Cleanups * Refactor PreviewPreferences for resetting and import * Some null checks and migrations * Fix wrong notnull * Fix import * Avoid addAll crash on immutable List * Add forgotten customPreviewLayout * Fix artifact from code iteration * Refactor for consistency * Fix artifact from code iteration * Enhance dummy fallback layout * Try to fix jbang * Apply IDE suggestions * Fix weird checkstyle behaviour * Add default styles * Fix migration tests * Add tests * Small cleanups --------- Co-authored-by: Carl Christian Snethlage <calixtus@users.noreply.github.com> * Fix javadoc markdown artifacts (#15309) * Closes #14897 This incorporates all the pending old Javadoc to Markdown changes required after merging #14891.The following files are changed: 1.AutoCompletionTextInputBinding.java 2.JabRefCliPreferences.java 3.SearchBasedParserFetcher.java 4.StartNewStudyAction.java 1. * 1. * Rsolved mix up of endregion and endRegion.Final one is endregion. 1.File changed-JabRefCliPreferences.java * Rsolved format issue related to line space.Files changed. 1.JabRefCliPreferences.java 2.SearchBasedParserFetcher.java * Files changed. 1.JabRefCliPreferences.java. The following changes are done:- 1.Added // endregion to maintain sync with region:AI And // region Push to application preferences and //region to Git 2.Changed region: to region 3.Changed region: Cleanup to previous ToDo: Cleanup 4.changed endRegion to end region 5.Adjusted dangling // endregion by merging Imported Preference tag(new one) with Other Preferences(old one) * Files changed. 1.JabRefCliPreferences.java. The following changes are done:- 1.Apply IntelliJ formatting * Update CHANGELOG for JabRef#12967 * Apply case-insensitive comparison only to DOI identifiers * Apply IntelliJ code formatting to DuplicateCheck and DuplicateCheckTest * Add tests for case-insensitive DOI duplicate detection * Fix case-insensitive DOI comparison in duplicate detection * fix formatting --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: subhramit <subhramit.bb@live.in> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> Co-authored-by: Christoph <siedlerkiller@gmail.com> Co-authored-by: Faneesh Juneja <willowstration@gmail.com> Co-authored-by: Subhramit Basu <subhramit.bb@live.in> Co-authored-by: Paul <thecoder777.github@gmail.com> Co-authored-by: Carl Christian Snethlage <calixtus@users.noreply.github.com> Co-authored-by: Mend Renovate <bot@renovateapp.com> Co-authored-by: Nishant Dasgupta <nishant.24bcs10451@sst.scaler.com> Co-authored-by: Mike Zhang <97817030+mikezhanghaozhe@users.noreply.github.com> Co-authored-by: JunWang222 <70090336+JunWang222@users.noreply.github.com> Co-authored-by: AbhijitBhowmick <94289124+AbhijitBhowmick@users.noreply.github.com>
…) (JabRef#15255) * Select better value in MultiMergeEntries dialog component (JabRef#15027) * Use PlausibilityComparatorFactory in MultiMergeEntriesViewModel to select the more plausible value when merging fields from multiple sources, instead of always keeping the first-seen value. * Add DateFieldPlausibilityComparator to prefer more specific dates. * Add unit tests for DateFieldPlausibilityComparator * implement review comments * Fix trailing whitespace in MultiMergeEntriesViewModelTest * Trigger CI * CI: re-trigger * CI: re-trigger --------- Co-authored-by: Christoph <siedlerkiller@gmail.com>
* Close entry editor when last library is closed When no library tab is active, the entry editor remained visible. Added close() call in the activeTabProperty listener's else branch to handle the zero-libraries-open case. Fixes JabRef#13125 * Update CHANGELOG for JabRef#13125 * Fix case-insensitive DOI comparison in duplicate detection (JabRef#12967) * Chore(deps): Bump org.gradlex:java-module-dependencies in /build-logic (JabRef#15328) Bumps [org.gradlex:java-module-dependencies](https://github.com/gradlex-org/java-module-dependencies) from 1.12 to 1.12.1. - [Release notes](https://github.com/gradlex-org/java-module-dependencies/releases) - [Changelog](https://github.com/gradlex-org/java-module-dependencies/blob/main/CHANGELOG.md) - [Commits](gradlex-org/java-module-dependencies@v1.12...v1.12.1) --- updated-dependencies: - dependency-name: org.gradlex:java-module-dependencies dependency-version: 1.12.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Chore(deps): Bump org.openrewrite.rewrite from 7.26.0 to 7.28.1 (JabRef#15326) Bumps org.openrewrite.rewrite from 7.26.0 to 7.28.1. --- updated-dependencies: - dependency-name: org.openrewrite.rewrite dependency-version: 7.28.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Chore(deps): Bump org.mockito:mockito-core in /versions (JabRef#15330) Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.22.0 to 5.23.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](mockito/mockito@v5.22.0...v5.23.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-version: 5.23.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Chore(deps): Bump org.cyclonedx.bom from 3.2.0 to 3.2.1 (JabRef#15327) Bumps org.cyclonedx.bom from 3.2.0 to 3.2.1. --- updated-dependencies: - dependency-name: org.cyclonedx.bom dependency-version: 3.2.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Chore(deps): Bump com.squareup.okio:okio-jvm in /versions (JabRef#15329) Bumps [com.squareup.okio:okio-jvm](https://github.com/square/okio) from 3.16.4 to 3.17.0. - [Changelog](https://github.com/square/okio/blob/master/CHANGELOG.md) - [Commits](square/okio@parent-3.16.4...parent-3.17.0) --- updated-dependencies: - dependency-name: com.squareup.okio:okio-jvm dependency-version: 3.17.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> * New translations jabref_en.properties (Italian) (JabRef#15334) * RIS export SP/EP fields when pages contain Unicode en-dash or em-dash (JabRef#15315) * Extend the split regex to match en-dash and em-dash * Added tests --------- Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> * Remove object redundancy, miscellaneous refactoring (JabRef#15332) * Remove object redundancy, miscellaneous refactoring Signed-off-by: subhramit <subhramit.bb@live.in> * Use abbreviationRepository parameter Signed-off-by: subhramit <subhramit.bb@live.in> * Use less injections for journal abbreviations repository Signed-off-by: subhramit <subhramit.bb@live.in> * Indent Signed-off-by: subhramit <subhramit.bb@live.in> * Revert to codepoint --------- Signed-off-by: subhramit <subhramit.bb@live.in> Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> * Add drag-and-drop support for Citation Relations tab (JabRef#15181) * Add drag-and-drop support for Citation Relations tab - Implement drag detection in CitationRelationsTab to allow dragging entries - Add drag support to ViewModelListCellFactory - Fix NullPointerException in FrameDndHandler when dropping onto tabs without IDs - Fixes JabRef#15135 * Fix: correctly set drop completion status for entries * Fix: Add Unreleased section and moved changelog entries * Fix CHANGELOG formatting and upstream linter errors; removed empty groups * Fix code consistency for cr * Add explicit type * Consistency in CHANGELOG.md --------- Co-authored-by: Christoph <siedlerkiller@gmail.com> Co-authored-by: Carl Christian Snethlage <calixtus@users.noreply.github.com> * Update dependency org.eclipse.jgit:org.eclipse.jgit.pgm to v7.6.0.202603022253-r (JabRef#15335) * Chore(deps): Bump org.cyclonedx.bom from 3.2.1 to 3.2.2 (JabRef#15337) Bumps org.cyclonedx.bom from 3.2.1 to 3.2.2. --- updated-dependencies: - dependency-name: org.cyclonedx.bom dependency-version: 3.2.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Chore(deps): Bump org.eclipse.jgit:org.eclipse.jgit in /versions (JabRef#15338) Bumps [org.eclipse.jgit:org.eclipse.jgit](https://github.com/eclipse-jgit/jgit) from 7.5.0.202512021534-r to 7.6.0.202603022253-r. - [Commits](eclipse-jgit/jgit@v7.5.0.202512021534-r...v7.6.0.202603022253-r) --- updated-dependencies: - dependency-name: org.eclipse.jgit:org.eclipse.jgit dependency-version: 7.6.0.202603022253-r dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Add 'All' citation fetcher that aggregates results from all providers (JabRef#15292) * Add 'All' citation fetcher that aggregates and deduplicates results from all providers - Implements CitationFetcher as AllCitationFetcher aggregating CrossRef, OpenAlex, OpenCitations, and SemanticScholar - Deduplicates results using DuplicateCheck with BibDatabaseMode.BIBTEX - Returns maximum citation count across all providers - Tolerates individual provider failures gracefully - Adds ALL entry to CitationFetcherType enum and factory method - Covers behaviour with unit tests (failure tolerance, deduplication, max count) Closes JabRef#15029 * Add 'All' citation fetcher that aggregates results from all providers - Add ALL as first entry in CitationFetcherType enum - Implement AllCitationFetcher aggregating CrossRef, OpenAlex, OpenCitations, and SemanticScholar - Union results using DatabaseMerger with keyword separator from ImportFormatPreferences, as specified in the task - Return maximum citation count across all providers - Tolerate individual provider failures gracefully - Fix race condition in SearchCitationsRelationsService by marking citationFetcher and citationCountFetcher fields as volatile - Set ALL as the default citation fetcher in preferences - Add unit tests covering failure tolerance, deduplication, and max citation count Closes JabRef#15029 * Update CHANGELOG for issue JabRef#15029 * Address bot review: fix AllCitationFetcher and improve tests - Build provider list from CitationFetcherType enum (excluding ALL) to avoid duplicate list that can drift when new providers are added - Track anySuccess in fetch() and getCitationCount(); throw FetcherException when all providers fail instead of silently returning empty results - Emit WARN log when some providers fail but others succeed - Rename test variables to intent-revealing names - Fix citation count assertion to use assertEquals(Optional.of(20)) - Add tests for all-providers-fail and partial-failure scenarios * Trigger CI * Reformat AllCitationFetcher * Fix checkstyle: remove blank line at start of constructor block * Reverted back to semantic scholar ui preference * Revert default citation fetcher to SEMANTIC_SCHOLAR in EntryEditorPreferences * Re-trigger CI * Adapt tests to use real constructor with mocks, remove test constructor * fix unchecked excpetion --------- Co-authored-by: Siedlerchr <siedlerkiller@gmail.com> * Avoid error logs when search queries are incomplete (JabRef#15333) * Avoid error logs when search queries are incomplete Log the parsing error at debug level instead of error level. This prevents having unnecessary output when user is still entering input like "title =". * Update changelog for fixing incomplete search logging issue * Update changelog entry for incomplete search logging issue * Refine changelog entry for incomplete search logging issue * Chore(deps): Bump org.openrewrite.recipe:rewrite-recipe-bom from 3.24.0 to 3.25.0 (JabRef#15217) * Chore(deps): Bump org.openrewrite.recipe:rewrite-recipe-bom Bumps [org.openrewrite.recipe:rewrite-recipe-bom](https://github.com/openrewrite/rewrite-recipe-bom) from 3.24.0 to 3.25.0. - [Release notes](https://github.com/openrewrite/rewrite-recipe-bom/releases) - [Commits](openrewrite/rewrite-recipe-bom@v3.24.0...v3.25.0) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-recipe-bom dependency-version: 3.25.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * udpate plugin * update rewrite --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Siedlerchr <siedlerkiller@gmail.com> * Select better value in MultiMergeEntries dialog component (JabRef#15027) (JabRef#15255) * Select better value in MultiMergeEntries dialog component (JabRef#15027) * Use PlausibilityComparatorFactory in MultiMergeEntriesViewModel to select the more plausible value when merging fields from multiple sources, instead of always keeping the first-seen value. * Add DateFieldPlausibilityComparator to prefer more specific dates. * Add unit tests for DateFieldPlausibilityComparator * implement review comments * Fix trailing whitespace in MultiMergeEntriesViewModelTest * Trigger CI * CI: re-trigger * CI: re-trigger --------- Co-authored-by: Christoph <siedlerkiller@gmail.com> * Fix reset and import for PreviewPreferences (JabRef#15306) * Cleanups * Refactor PreviewPreferences for resetting and import * Some null checks and migrations * Fix wrong notnull * Fix import * Avoid addAll crash on immutable List * Add forgotten customPreviewLayout * Fix artifact from code iteration * Refactor for consistency * Fix artifact from code iteration * Enhance dummy fallback layout * Try to fix jbang * Apply IDE suggestions * Fix weird checkstyle behaviour * Add default styles * Fix migration tests * Add tests * Small cleanups --------- Co-authored-by: Carl Christian Snethlage <calixtus@users.noreply.github.com> * Fix javadoc markdown artifacts (JabRef#15309) * Closes JabRef#14897 This incorporates all the pending old Javadoc to Markdown changes required after merging JabRef#14891.The following files are changed: 1.AutoCompletionTextInputBinding.java 2.JabRefCliPreferences.java 3.SearchBasedParserFetcher.java 4.StartNewStudyAction.java 1. * 1. * Rsolved mix up of endregion and endRegion.Final one is endregion. 1.File changed-JabRefCliPreferences.java * Rsolved format issue related to line space.Files changed. 1.JabRefCliPreferences.java 2.SearchBasedParserFetcher.java * Files changed. 1.JabRefCliPreferences.java. The following changes are done:- 1.Added // endregion to maintain sync with region:AI And // region Push to application preferences and //region to Git 2.Changed region: to region 3.Changed region: Cleanup to previous ToDo: Cleanup 4.changed endRegion to end region 5.Adjusted dangling // endregion by merging Imported Preference tag(new one) with Other Preferences(old one) * Files changed. 1.JabRefCliPreferences.java. The following changes are done:- 1.Apply IntelliJ formatting * Update CHANGELOG for JabRef#12967 * Apply case-insensitive comparison only to DOI identifiers * Apply IntelliJ code formatting to DuplicateCheck and DuplicateCheckTest * Add tests for case-insensitive DOI duplicate detection * Fix case-insensitive DOI comparison in duplicate detection * fix formatting --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: subhramit <subhramit.bb@live.in> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> Co-authored-by: Christoph <siedlerkiller@gmail.com> Co-authored-by: Faneesh Juneja <willowstration@gmail.com> Co-authored-by: Subhramit Basu <subhramit.bb@live.in> Co-authored-by: Paul <thecoder777.github@gmail.com> Co-authored-by: Carl Christian Snethlage <calixtus@users.noreply.github.com> Co-authored-by: Mend Renovate <bot@renovateapp.com> Co-authored-by: Nishant Dasgupta <nishant.24bcs10451@sst.scaler.com> Co-authored-by: Mike Zhang <97817030+mikezhanghaozhe@users.noreply.github.com> Co-authored-by: JunWang222 <70090336+JunWang222@users.noreply.github.com> Co-authored-by: AbhijitBhowmick <94289124+AbhijitBhowmick@users.noreply.github.com>
…) (JabRef#15255) * Select better value in MultiMergeEntries dialog component (JabRef#15027) * Use PlausibilityComparatorFactory in MultiMergeEntriesViewModel to select the more plausible value when merging fields from multiple sources, instead of always keeping the first-seen value. * Add DateFieldPlausibilityComparator to prefer more specific dates. * Add unit tests for DateFieldPlausibilityComparator * implement review comments * Fix trailing whitespace in MultiMergeEntriesViewModelTest * Trigger CI * CI: re-trigger * CI: re-trigger --------- Co-authored-by: Christoph <siedlerkiller@gmail.com>
* Close entry editor when last library is closed When no library tab is active, the entry editor remained visible. Added close() call in the activeTabProperty listener's else branch to handle the zero-libraries-open case. Fixes JabRef#13125 * Update CHANGELOG for JabRef#13125 * Fix case-insensitive DOI comparison in duplicate detection (JabRef#12967) * Chore(deps): Bump org.gradlex:java-module-dependencies in /build-logic (JabRef#15328) Bumps [org.gradlex:java-module-dependencies](https://github.com/gradlex-org/java-module-dependencies) from 1.12 to 1.12.1. - [Release notes](https://github.com/gradlex-org/java-module-dependencies/releases) - [Changelog](https://github.com/gradlex-org/java-module-dependencies/blob/main/CHANGELOG.md) - [Commits](gradlex-org/java-module-dependencies@v1.12...v1.12.1) --- updated-dependencies: - dependency-name: org.gradlex:java-module-dependencies dependency-version: 1.12.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Chore(deps): Bump org.openrewrite.rewrite from 7.26.0 to 7.28.1 (JabRef#15326) Bumps org.openrewrite.rewrite from 7.26.0 to 7.28.1. --- updated-dependencies: - dependency-name: org.openrewrite.rewrite dependency-version: 7.28.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Chore(deps): Bump org.mockito:mockito-core in /versions (JabRef#15330) Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.22.0 to 5.23.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](mockito/mockito@v5.22.0...v5.23.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-version: 5.23.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Chore(deps): Bump org.cyclonedx.bom from 3.2.0 to 3.2.1 (JabRef#15327) Bumps org.cyclonedx.bom from 3.2.0 to 3.2.1. --- updated-dependencies: - dependency-name: org.cyclonedx.bom dependency-version: 3.2.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Chore(deps): Bump com.squareup.okio:okio-jvm in /versions (JabRef#15329) Bumps [com.squareup.okio:okio-jvm](https://github.com/square/okio) from 3.16.4 to 3.17.0. - [Changelog](https://github.com/square/okio/blob/master/CHANGELOG.md) - [Commits](square/okio@parent-3.16.4...parent-3.17.0) --- updated-dependencies: - dependency-name: com.squareup.okio:okio-jvm dependency-version: 3.17.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> * New translations jabref_en.properties (Italian) (JabRef#15334) * RIS export SP/EP fields when pages contain Unicode en-dash or em-dash (JabRef#15315) * Extend the split regex to match en-dash and em-dash * Added tests --------- Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> * Remove object redundancy, miscellaneous refactoring (JabRef#15332) * Remove object redundancy, miscellaneous refactoring Signed-off-by: subhramit <subhramit.bb@live.in> * Use abbreviationRepository parameter Signed-off-by: subhramit <subhramit.bb@live.in> * Use less injections for journal abbreviations repository Signed-off-by: subhramit <subhramit.bb@live.in> * Indent Signed-off-by: subhramit <subhramit.bb@live.in> * Revert to codepoint --------- Signed-off-by: subhramit <subhramit.bb@live.in> Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> * Add drag-and-drop support for Citation Relations tab (JabRef#15181) * Add drag-and-drop support for Citation Relations tab - Implement drag detection in CitationRelationsTab to allow dragging entries - Add drag support to ViewModelListCellFactory - Fix NullPointerException in FrameDndHandler when dropping onto tabs without IDs - Fixes JabRef#15135 * Fix: correctly set drop completion status for entries * Fix: Add Unreleased section and moved changelog entries * Fix CHANGELOG formatting and upstream linter errors; removed empty groups * Fix code consistency for cr * Add explicit type * Consistency in CHANGELOG.md --------- Co-authored-by: Christoph <siedlerkiller@gmail.com> Co-authored-by: Carl Christian Snethlage <calixtus@users.noreply.github.com> * Update dependency org.eclipse.jgit:org.eclipse.jgit.pgm to v7.6.0.202603022253-r (JabRef#15335) * Chore(deps): Bump org.cyclonedx.bom from 3.2.1 to 3.2.2 (JabRef#15337) Bumps org.cyclonedx.bom from 3.2.1 to 3.2.2. --- updated-dependencies: - dependency-name: org.cyclonedx.bom dependency-version: 3.2.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Chore(deps): Bump org.eclipse.jgit:org.eclipse.jgit in /versions (JabRef#15338) Bumps [org.eclipse.jgit:org.eclipse.jgit](https://github.com/eclipse-jgit/jgit) from 7.5.0.202512021534-r to 7.6.0.202603022253-r. - [Commits](eclipse-jgit/jgit@v7.5.0.202512021534-r...v7.6.0.202603022253-r) --- updated-dependencies: - dependency-name: org.eclipse.jgit:org.eclipse.jgit dependency-version: 7.6.0.202603022253-r dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Add 'All' citation fetcher that aggregates results from all providers (JabRef#15292) * Add 'All' citation fetcher that aggregates and deduplicates results from all providers - Implements CitationFetcher as AllCitationFetcher aggregating CrossRef, OpenAlex, OpenCitations, and SemanticScholar - Deduplicates results using DuplicateCheck with BibDatabaseMode.BIBTEX - Returns maximum citation count across all providers - Tolerates individual provider failures gracefully - Adds ALL entry to CitationFetcherType enum and factory method - Covers behaviour with unit tests (failure tolerance, deduplication, max count) Closes JabRef#15029 * Add 'All' citation fetcher that aggregates results from all providers - Add ALL as first entry in CitationFetcherType enum - Implement AllCitationFetcher aggregating CrossRef, OpenAlex, OpenCitations, and SemanticScholar - Union results using DatabaseMerger with keyword separator from ImportFormatPreferences, as specified in the task - Return maximum citation count across all providers - Tolerate individual provider failures gracefully - Fix race condition in SearchCitationsRelationsService by marking citationFetcher and citationCountFetcher fields as volatile - Set ALL as the default citation fetcher in preferences - Add unit tests covering failure tolerance, deduplication, and max citation count Closes JabRef#15029 * Update CHANGELOG for issue JabRef#15029 * Address bot review: fix AllCitationFetcher and improve tests - Build provider list from CitationFetcherType enum (excluding ALL) to avoid duplicate list that can drift when new providers are added - Track anySuccess in fetch() and getCitationCount(); throw FetcherException when all providers fail instead of silently returning empty results - Emit WARN log when some providers fail but others succeed - Rename test variables to intent-revealing names - Fix citation count assertion to use assertEquals(Optional.of(20)) - Add tests for all-providers-fail and partial-failure scenarios * Trigger CI * Reformat AllCitationFetcher * Fix checkstyle: remove blank line at start of constructor block * Reverted back to semantic scholar ui preference * Revert default citation fetcher to SEMANTIC_SCHOLAR in EntryEditorPreferences * Re-trigger CI * Adapt tests to use real constructor with mocks, remove test constructor * fix unchecked excpetion --------- Co-authored-by: Siedlerchr <siedlerkiller@gmail.com> * Avoid error logs when search queries are incomplete (JabRef#15333) * Avoid error logs when search queries are incomplete Log the parsing error at debug level instead of error level. This prevents having unnecessary output when user is still entering input like "title =". * Update changelog for fixing incomplete search logging issue * Update changelog entry for incomplete search logging issue * Refine changelog entry for incomplete search logging issue * Chore(deps): Bump org.openrewrite.recipe:rewrite-recipe-bom from 3.24.0 to 3.25.0 (JabRef#15217) * Chore(deps): Bump org.openrewrite.recipe:rewrite-recipe-bom Bumps [org.openrewrite.recipe:rewrite-recipe-bom](https://github.com/openrewrite/rewrite-recipe-bom) from 3.24.0 to 3.25.0. - [Release notes](https://github.com/openrewrite/rewrite-recipe-bom/releases) - [Commits](openrewrite/rewrite-recipe-bom@v3.24.0...v3.25.0) --- updated-dependencies: - dependency-name: org.openrewrite.recipe:rewrite-recipe-bom dependency-version: 3.25.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> * udpate plugin * update rewrite --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Siedlerchr <siedlerkiller@gmail.com> * Select better value in MultiMergeEntries dialog component (JabRef#15027) (JabRef#15255) * Select better value in MultiMergeEntries dialog component (JabRef#15027) * Use PlausibilityComparatorFactory in MultiMergeEntriesViewModel to select the more plausible value when merging fields from multiple sources, instead of always keeping the first-seen value. * Add DateFieldPlausibilityComparator to prefer more specific dates. * Add unit tests for DateFieldPlausibilityComparator * implement review comments * Fix trailing whitespace in MultiMergeEntriesViewModelTest * Trigger CI * CI: re-trigger * CI: re-trigger --------- Co-authored-by: Christoph <siedlerkiller@gmail.com> * Fix reset and import for PreviewPreferences (JabRef#15306) * Cleanups * Refactor PreviewPreferences for resetting and import * Some null checks and migrations * Fix wrong notnull * Fix import * Avoid addAll crash on immutable List * Add forgotten customPreviewLayout * Fix artifact from code iteration * Refactor for consistency * Fix artifact from code iteration * Enhance dummy fallback layout * Try to fix jbang * Apply IDE suggestions * Fix weird checkstyle behaviour * Add default styles * Fix migration tests * Add tests * Small cleanups --------- Co-authored-by: Carl Christian Snethlage <calixtus@users.noreply.github.com> * Fix javadoc markdown artifacts (JabRef#15309) * Closes JabRef#14897 This incorporates all the pending old Javadoc to Markdown changes required after merging JabRef#14891.The following files are changed: 1.AutoCompletionTextInputBinding.java 2.JabRefCliPreferences.java 3.SearchBasedParserFetcher.java 4.StartNewStudyAction.java 1. * 1. * Rsolved mix up of endregion and endRegion.Final one is endregion. 1.File changed-JabRefCliPreferences.java * Rsolved format issue related to line space.Files changed. 1.JabRefCliPreferences.java 2.SearchBasedParserFetcher.java * Files changed. 1.JabRefCliPreferences.java. The following changes are done:- 1.Added // endregion to maintain sync with region:AI And // region Push to application preferences and //region to Git 2.Changed region: to region 3.Changed region: Cleanup to previous ToDo: Cleanup 4.changed endRegion to end region 5.Adjusted dangling // endregion by merging Imported Preference tag(new one) with Other Preferences(old one) * Files changed. 1.JabRefCliPreferences.java. The following changes are done:- 1.Apply IntelliJ formatting * Update CHANGELOG for JabRef#12967 * Apply case-insensitive comparison only to DOI identifiers * Apply IntelliJ code formatting to DuplicateCheck and DuplicateCheckTest * Add tests for case-insensitive DOI duplicate detection * Fix case-insensitive DOI comparison in duplicate detection * fix formatting --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: subhramit <subhramit.bb@live.in> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> Co-authored-by: Christoph <siedlerkiller@gmail.com> Co-authored-by: Faneesh Juneja <willowstration@gmail.com> Co-authored-by: Subhramit Basu <subhramit.bb@live.in> Co-authored-by: Paul <thecoder777.github@gmail.com> Co-authored-by: Carl Christian Snethlage <calixtus@users.noreply.github.com> Co-authored-by: Mend Renovate <bot@renovateapp.com> Co-authored-by: Nishant Dasgupta <nishant.24bcs10451@sst.scaler.com> Co-authored-by: Mike Zhang <97817030+mikezhanghaozhe@users.noreply.github.com> Co-authored-by: JunWang222 <70090336+JunWang222@users.noreply.github.com> Co-authored-by: AbhijitBhowmick <94289124+AbhijitBhowmick@users.noreply.github.com>
Select better value in MultiMergeEntries dialog component (#15027)
Use PlausibilityComparatorFactory in MultiMergeEntriesViewModel to select the more plausible value when merging fields from multiple sources, instead of always keeping the first-seen value. (a more specific date over a less specific one, more authors over fewer)
Add DateFieldPlausibilityComparator to prefer more specific dates.
Before the feature: the 2017-09-12 from OpenAlex was not selected

Current behavior: the 2017-09-12 from OpenAlex was is selected
Related issues and pull requests
Closes #15027
PR Description
Steps to test
Checklist
CHANGELOG.mdin a way that can be understood by the average user (if change is visible to the user)