Skip to content

Model auto date groups#1

Merged
elliotgnn merged 33 commits into
implmentation-issue-10822from
model-auto-date-groups
Oct 17, 2025
Merged

Model auto date groups#1
elliotgnn merged 33 commits into
implmentation-issue-10822from
model-auto-date-groups

Conversation

@elliotgnn

@elliotgnn elliotgnn commented Oct 16, 2025

Copy link
Copy Markdown
Owner

This PR adds back end logic of Automatic Date Groups feature to JabRef. Users can create automatic groups by year, by year-month or by full date when the date field of entries are set. Membership is dynamic—no manual assignment. The following are the specifics of implementation for this PR.

  • DateGranularity enum: YEAR, MONTH, FULL_DATE.
  • DateGroup extends AbstractGroup: represents a single key like 2024, 2024-10, or 2024-10-14. Matching uses JabRef’s aliasing (date ↔ year/month/day).
  • AutomaticDateGroup : builds child DateGroups for all entries at the chosen granularity and merges identical keys.
    and also unit tests and integration tests in AutomaticDateGroupTest.

Steps to test

Automated test

running command
./gradlew :jablib:test --tests "org.jabref.model.groups.AutomaticDateGroupTest"

Mandatory checks

  • I own the copyright of the code submitted and I license it under the MIT license
  • I manually tested my changes in running JabRef (always required)
  • I added JUnit tests for changes (if applicable)
  • [/] I added screenshots in the PR description (if change is visible to the user)
  • I described the change in CHANGELOG.md in a way that is understandable for the average user (if change is visible to the user)
  • I checked the user documentation: Is the information available and up to date? If not, I created an issue at https://github.com/JabRef/user-documentation/issues or, even better, I submitted a pull request updating file(s) in https://github.com/JabRef/user-documentation/tree/main/en.

rgrace9 and others added 30 commits October 8, 2025 13:13
* Prevent brief flash of the default JavaFX (Modena) theme on startup

* Avoid spamming IndexOutOfBoundsException when the theme is updated at runtime

- IndexOutOfBoundsException keeps being thrown although the theme is applied correctly.
 By catching the exception, we avoid spamming the exception to user.

* Fix button-bar buttons truncating long text with ellipsis

* Update Changelog

* use clear

* Revert "Avoid spamming IndexOutOfBoundsException when the theme is updated at runtime"

This reverts commit 7361b5a.

* Update CHANGELOG.md

---------

Co-authored-by: Houssem Nasri <houssem.nasri@360t.com>
Co-authored-by: Siedlerchr <siedlerkiller@gmail.com>
* Add checkerframework to jablib

* Add ADR

* Refine

* Revise endorsement for nullness checking framework

Updated endorsement reference to JUnit 6 with a link.

* Migrate to Errorprone with NullAway

* Refine ADR

* Remove jakarta.inject dependency

* Add architecture test

* No eclipse jgit nullable annotations

* Fix architecture test

---------

Co-authored-by: Carl Christian Snethlage <calixtus@users.noreply.github.com>
Co-authored-by: Oliver Kopp <kopp.dev@gmail.com>
Co-authored-by: Christoph <siedlerkiller@gmail.com>
…abRef#14045)

* Merged scite metrics tab into the Citation Relations Tab (now called "Citations") and removed SciteTab from view in EntryEditor.

* Removed SciteTab.java and SciteTabViewModel.java. Moved fetchTallies method to new class ScienceAiFetcher.java. Moved SciteTallyModel to jabref.model.sciteTallies and renamed to TalliesResponse.

* Added info to CHANGELOG.md.

* CHANGELOG formatting.

* Updated CHANGELOG.md after PR comments. Moved URLs to URLs helper class. Added nicer styling to the Citations tab.

* Updated CHANGELOG.md after PR comments. Moved URLs to URLs helper class. Added nicer styling to the Citations tab.

* Added missing localization keys and removed obsolete localization keys.

* Added localization to citation tab labels

* Renamed labels in Citations tab and added a help button with a popup explaining the source and linking to the respective page.

* Updated Citation Metrics section to a single line

* Made Citation Metrics a single line. Also broke up its text into elements to have better separation.

* Removed labels in the Citations tab. The provided by buttons are now entirely in the Metrics line.

---------

Co-authored-by: Mitkens374 <michal.leso@student.tuke.sk>
…JabRef#14031)

* Changed ComboBox to SearchableComboBox in FieldFormatterCleanupsPanel

* Changed the combobox to a searchable combobox

* Revert "Changed the combobox to a searchable combobox"

This reverts commit 348762b.

* changed combobox to a searchable combobox

* Added bugfix to CHANGELOG.md

* Corrected an issue number in CHANGELOG.md

* Revise CHANGELOG for recent updates and fixes

Updated CHANGELOG with new features, changes, fixes, and removals.

---------

Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com>
* JabRef#14058 - fix alphabetical ordering

* JabRef#14058 - update change log

* JabRef#14058 feedback - reorder
* Fix search query reset issue after entry deletion

- Add EntriesRemovedEvent listener to MainTableDataModel.SearchIndexListener
- Refresh search matches when entries are removed to prevent stale entries
- Ensure filtered list is properly updated after entry deletion
- Maintain search query state during entry manipulation operations

This fixes the issue where search results would show stale entries
after deleting entries from search results, making it appear as if
the search query was reset even though it remained in the search bar.

* Fix import order for EntriesRemovedEvent

- Move EntriesRemovedEvent import to correct alphabetical position
- Fixes checkstyle ImportOrder violation

* Update CHANGELOG with fixed issue description and link

---------

Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com>
* New translations jabref_en.properties (French)

* New translations jabref_en.properties (Spanish)

* New translations jabref_en.properties (German)

* New translations jabref_en.properties (Italian)

* New translations jabref_en.properties (Turkish)

* New translations jabref_en.properties (Chinese Simplified)

* New translations jabref_en.properties (Portuguese, Brazilian)
Co-authored-by: Ruslan <ruslanpopov1512@gmail.com>
Bumps [jablib/src/main/resources/csl-locales](https://github.com/citation-style-language/locales) from `8c149db` to `fbb76f6`.
- [Release notes](https://github.com/citation-style-language/locales/releases)
- [Commits](citation-style-language/locales@8c149db...fbb76f6)

---
updated-dependencies:
- dependency-name: jablib/src/main/resources/csl-locales
  dependency-version: fbb76f6129728a234c4e42ba598c7bbbedd73301
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [jablib/src/main/abbrv.jabref.org](https://github.com/JabRef/abbrv.jabref.org) from `fc3ef9e` to `176c06c`.
- [Release notes](https://github.com/JabRef/abbrv.jabref.org/releases)
- [Commits](JabRef/abbrv.jabref.org@fc3ef9e...176c06c)

---
updated-dependencies:
- dependency-name: jablib/src/main/abbrv.jabref.org
  dependency-version: 176c06c4727fa1005117ead24e8d5b9051e4f3ab
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ef#14075)

Bumps org.openrewrite.rewrite from 7.17.0 to 7.18.0.

---
updated-dependencies:
- dependency-name: org.openrewrite.rewrite
  dependency-version: 7.18.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>
…4074)

Bumps [org.openrewrite.recipe:rewrite-recipe-bom](https://github.com/openrewrite/rewrite-recipe-bom) from 3.15.0 to 3.16.0.
- [Release notes](https://github.com/openrewrite/rewrite-recipe-bom/releases)
- [Commits](openrewrite/rewrite-recipe-bom@v3.15.0...v3.16.0)

---
updated-dependencies:
- dependency-name: org.openrewrite.recipe:rewrite-recipe-bom
  dependency-version: 3.16.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>
Bumps org.cyclonedx.bom from 3.0.0 to 3.0.1.

---
updated-dependencies:
- dependency-name: org.cyclonedx.bom
  dependency-version: 3.0.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>
JabRef#14077)

Bumps [com.autonomousapps:dependency-analysis-gradle-plugin](https://github.com/autonomousapps/dependency-analysis-android-gradle-plugin) from 3.0.4 to 3.1.0.
- [Changelog](https://github.com/autonomousapps/dependency-analysis-gradle-plugin/blob/main/CHANGELOG.md)
- [Commits](autonomousapps/dependency-analysis-gradle-plugin@v3.0.4...v3.1.0)

---
updated-dependencies:
- dependency-name: com.autonomousapps:dependency-analysis-gradle-plugin
  dependency-version: 3.1.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>
* Revert "Fix eadr missing (JabRef#14043)"

This reverts commit 74dd1d8.

* Use 2.0.0 of e-adr

* Fix module issues

---------

Co-authored-by: Christoph <siedlerkiller@gmail.com>
* add fulltext

* Implement search based fetcher as well

* Implement search based fetcher as well

* Update jablib/src/main/java/org/jabref/logic/importer/fetcher/EuropePmcFetcher.java

Co-authored-by: Subhramit Basu <subhramit.bb@live.in>

* Update jablib/src/main/java/org/jabref/logic/importer/fetcher/EuropePmcFetcher.java

Co-authored-by: Subhramit Basu <subhramit.bb@live.in>

* Update jablib/src/main/java/org/jabref/logic/importer/fetcher/EuropePmcFetcher.java

Co-authored-by: Subhramit Basu <subhramit.bb@live.in>

* apply suggestions

* Fix failing SLR tests & extract date pattern constant

---------

Co-authored-by: Subhramit Basu <subhramit.bb@live.in>
…the status bar (JabRef#14053)

* changed initializeNotice() in AiChatComponent class / now should work properly / need to add test

* add test for checking if the value of ai model is changing

* changed CHANGELOG.md

* deleted System.out from AiChatComponent.java

* some changes in CHANGELOG.md

* another changes in CHANGELOG.md

* updates test for AiChatComponent class

* CHANGELOG.md changes

* edit CHANGELOG.md

* update for tests in AiChatComponentTest class / update for function computeNoticeText() in AiChatComponent class

* Fix submodules

* Fix submodules

* Update

* Update csl-locales

* Update submodules

* Fix submodules

* Update jabgui/src/test/java/org/jabref/gui/ai/components/aichat/AiChatComponentTest.java

Co-authored-by: Subhramit Basu <subhramit.bb@live.in>

* Update jabgui/src/test/java/org/jabref/gui/ai/components/aichat/AiChatComponentTest.java

Co-authored-by: Subhramit Basu <subhramit.bb@live.in>

* Update AiChatComponentTest.java

* Update AiChatComponentTest.java - make som cleanup changes

---------

Co-authored-by: Subhramit Basu <subhramit.bb@live.in>
* Add context menu for multi-file entries (JabRef#12567)

Extend the Entry Editor context menu to handle entries with multiple
linked files. This improves UX when managing more than one file per
entry and aligns behavior across single- and multi-file scenarios.

Changes:
- Add plural actions to StandardActions enum
- Rewrite ContextAction.execute() for multi-file cases
- Extend ContextMenuFactory to build multi-file items
- Rework MultiContextAction to operate on selections
- Introduce CopyMultipleFilesAction (new class)
- Update/add localization keys; tests pass
- Add unit tests: ContextActionTest, ContextMenuFactoryTest,
  MultiContextActionTest, CopyMultipleFilesActionTest
- Guard LinkedFileViewModel to avoid a JavaFX crash

Fixes JabRef#12567
Keywords: context menu, linked files, multi-selection, UI

* Apply OpenRewrite recipes

* Fixed test and optimized imports

* fixed library and space in catch block

* Runned rewrite, fixed catch block and optimize logic of test ContextMenuFactory

* Fix tests: initialize JavaFX toolkit; replace empty catch with meaningful check

* Fix tests: added space after {

* Trigger CI

* Trigger CI

* Update jabgui/src/test/java/org/jabref/gui/copyfiles/CopyMultipleFilesActionTest.java

Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com>

* refactor(gui/contextmenu): restore Strategy pattern for linked files menu

- Introduce ContextMenuBuilder + SingleSelectionMenuBuilder + MultiSelectionMenuBuilder
- Extract shared checks/openContainingFolders into SelectionChecks
- ContextMenuFactory delegates to strategies; no more branching by selection size
- LinkedFilesEditor initializes ContextMenuFactory once and just requests menus on right-click
- Replace plural menu commands with single StandardActions; multi-selection handled inside builders
- Fix NPE in ContextAction executable binding by removing null observables and binding menu disable state properly
- Remove obsolete MultiContextAction and its tests

Follow-ups:
- Convert hardcoded labels to i18n keys (Download file(s), Open folder(s), etc.)
- Consider removing *_FILES actions from enum if unused elsewhere
- Re-add unit tests around builders/factory (TestFX/JUnit5) once API stabilized

* feat(gui): multi-file context menu for linked files

- Introduce selection-aware builders (SingleSelectionMenuBuilder / MultiSelectionMenuBuilder) with SelectionChecks

- Wire into LinkedFilesEditor via ContextMenuFactory/ContextAction; proper enablement bindings

- Remove CopyMultipleFilesAction; update StandardActions and view models

- i18n updates for pluralized items and copy messages

- Tests for ContextAction/ContextMenuFactory/Single&MultiSelection builders/SelectionChecks

- Changelog + cleanup

Closes JabRef#12567

* Address review: Optional/map, non-null params, logger, tests, menus

* fixed tests

* Update jabgui/src/main/java/org/jabref/gui/copyfiles/CopySingleFileAction.java

Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com>

* Update jabgui/src/main/java/org/jabref/gui/copyfiles/CopySingleFileAction.java

Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com>

* wip: local changes before style sync

* Fix styles

* Final style and CI checks

* docs: sync http-server howto; jablib: sync jspecify @nullable from upstream

* Naming convention

* Fix LOGGER naming (convension)

* fixed submodules

* Fix submodules

* chore: reset submodules to upstream/main (csl-styles, csl-locales)

* Fix submodules

* Fix test classes

* Fix test classes V2 (forget to update MultiSelectionMenuBuilderTest and SelectionChecksTest)

* Apply JSpecify annotations

* Fixed bot's cases and fixed submodules

* Fix submodules

* Migrate to JSpecify annotations

* Fix wording

* Changed assert methods for readability

* interface ---< class, deleted variable

* Refactored ContextMenuFactoryTest for readability

* Added fixes, deleted SelectionChecks

* changelog fixed and localization

---------

Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com>
Co-authored-by: Christoph <siedlerkiller@gmail.com>
Co-authored-by: Carl Christian Snethlage <calixtus@users.noreply.github.com>
Bumps [jablib/src/main/resources/csl-styles](https://github.com/citation-style-language/styles) from `b61592e` to `7235025`.
- [Release notes](https://github.com/citation-style-language/styles/releases)
- [Commits](citation-style-language/styles@b61592e...7235025)

---
updated-dependencies:
- dependency-name: jablib/src/main/resources/csl-styles
  dependency-version: 723502506457f6b3a1b202c2debb8b8cf085098a
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Christoph <siedlerkiller@gmail.com>
* New translations jabref_en.properties (French)

* New translations jabref_en.properties (Spanish)

* New translations jabref_en.properties (Arabic)

* New translations jabref_en.properties (Danish)

* New translations jabref_en.properties (German)

* New translations jabref_en.properties (Greek)

* New translations jabref_en.properties (Finnish)

* New translations jabref_en.properties (Italian)

* New translations jabref_en.properties (Japanese)

* New translations jabref_en.properties (Korean)

* New translations jabref_en.properties (Dutch)

* New translations jabref_en.properties (Norwegian)

* New translations jabref_en.properties (Polish)

* New translations jabref_en.properties (Portuguese)

* New translations jabref_en.properties (Russian)

* New translations jabref_en.properties (Swedish)

* New translations jabref_en.properties (Turkish)

* New translations jabref_en.properties (Ukrainian)

* New translations jabref_en.properties (Chinese Simplified)

* New translations jabref_en.properties (Chinese Traditional)

* New translations jabref_en.properties (Vietnamese)

* New translations jabref_en.properties (Portuguese, Brazilian)

* New translations jabref_en.properties (Indonesian)

* New translations jabref_en.properties (Persian)

* New translations jabref_en.properties (Tagalog)
…c tests currently only group based on year not months
* JabRef#14088 prevent custom entry types with spaces

* JabRef#14088 update changelog

* JabRef#14088 resolve LocalizationConsistencyTest

* try rerun automated tests

* remove trailing
* New translations jabref_en.properties (French)

* New translations jabref_en.properties (Spanish)

* New translations jabref_en.properties (German)

* New translations jabref_en.properties (Italian)

* New translations jabref_en.properties (Japanese)

* New translations jabref_en.properties (Korean)

* New translations jabref_en.properties (Dutch)

* New translations jabref_en.properties (Russian)

* New translations jabref_en.properties (Turkish)

* New translations jabref_en.properties (Chinese Simplified)

* New translations jabref_en.properties (Portuguese, Brazilian)
@elliotgnn elliotgnn requested a review from XMJ3083 October 16, 2025 03:35
@elliotgnn elliotgnn self-assigned this Oct 16, 2025
@elliotgnn elliotgnn added the enhancement New feature or request label Oct 16, 2025

@XMJ3083 XMJ3083 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Considering that the issue has not been fully developed yet, manual black box testing has been temporarily suspended. The code looks good to me.

Sheng Wang added 3 commits October 16, 2025 19:11
@elliotgnn elliotgnn requested a review from XMJ3083 October 16, 2025 18:03
@elliotgnn elliotgnn merged commit 28e7783 into implmentation-issue-10822 Oct 17, 2025
49 of 51 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.