From e66f5be7d82c7a7618fe327fe958ec57a25ea598 Mon Sep 17 00:00:00 2001 From: Dominik Voigt Date: Thu, 14 Jan 2021 22:25:34 +0100 Subject: [PATCH] Add date fields (#7334) Co-authored-by: Oliver Kopp --- CHANGELOG.md | 3 + .../org/jabref/cli/ArgumentProcessor.java | 4 +- src/main/java/org/jabref/gui/JabRefGUI.java | 2 +- .../gui/StartLiteratureReviewAction.java | 2 +- .../jabref/gui/UpdateTimestampListener.java | 5 +- .../org/jabref/gui/collab/ChangeScanner.java | 2 +- .../gui/externalfiles/ImportHandler.java | 2 +- .../org/jabref/gui/importer/ImportAction.java | 2 +- .../importer/actions/OpenDatabaseAction.java | 2 +- .../jabref/gui/preferences/GeneralTab.fxml | 29 +- .../gui/preferences/GeneralTabView.java | 26 +- .../gui/preferences/GeneralTabViewModel.java | 82 +----- .../texparser/ParseLatexDialogViewModel.java | 2 +- .../org/jabref/logic/crawler/Crawler.java | 5 +- .../jabref/logic/crawler/StudyRepository.java | 10 +- .../ExternalFilesContentImporter.java | 7 +- .../logic/importer/ImportFormatReader.java | 8 +- .../jabref/logic/importer/OpenDatabase.java | 17 +- .../preferences/TimestampPreferences.java | 47 ++-- .../texparser/TexBibEntriesResolver.java | 7 +- .../org/jabref/logic/util/UpdateField.java | 36 +-- .../TimeStampToDateAddAndModify.java | 83 ++++++ .../java/org/jabref/model/entry/Date.java | 4 +- .../model/entry/field/StandardField.java | 5 +- .../jabref/preferences/JabRefPreferences.java | 28 +- src/main/resources/l10n/JabRef_en.properties | 9 +- .../gui/UpdateTimestampListenerTest.java | 21 +- .../org/jabref/logic/crawler/CrawlerTest.java | 4 + .../LibraryEntryToFetcherConverterTest.java | 5 +- .../logic/crawler/StudyRepositoryTest.java | 12 +- .../ImportFormatReaderIntegrationTest.java | 6 +- .../ImportFormatReaderTestParameterless.java | 6 +- .../logic/importer/OpenDatabaseTest.java | 20 +- .../logic/texparser/LatexParserTest.java | 12 +- .../texparser/TexBibEntriesResolverTest.java | 16 +- .../TimeStampToDateAddAndModifyTest.java | 255 ++++++++++++++++++ 36 files changed, 529 insertions(+), 257 deletions(-) create mode 100644 src/main/java/org/jabref/migrations/TimeStampToDateAddAndModify.java create mode 100644 src/test/java/org/jabref/migrations/TimeStampToDateAddAndModifyTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 2461ebd1e28..eb1b8112630 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,9 +15,12 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We added the extension support and the external application support (For Texshow, Texmaker and LyX) to the flatpak [#7248](https://github.com/JabRef/jabref/pull/7248) - We added some symbols and keybindings to the context menu in the entry editor. [#7268](https://github.com/JabRef/jabref/pull/7268) - We added keybindings for setting and clearing the read status. [#7264](https://github.com/JabRef/jabref/issues/7264) +- We added two new fields to track the creation and most recent modification date and time for each entry. [koppor#130](https://github.com/koppor/jabref/issues/130) ### Changed +- The content of the field `timestamp` is migrated to `creationdate`. In case one configured "udpate timestampe", it is migrated to `modificationdate`. [koppor#130](https://github.com/koppor/jabref/issues/130) + ### Fixed - We fixed an issue where the "Normalize page numbers" formatter did not replace en-dashes or em-dashes with a hyphen-minus sign. [#7239](https://github.com/JabRef/jabref/issues/7239) diff --git a/src/main/java/org/jabref/cli/ArgumentProcessor.java b/src/main/java/org/jabref/cli/ArgumentProcessor.java index e52c15bf966..cddb291b07f 100644 --- a/src/main/java/org/jabref/cli/ArgumentProcessor.java +++ b/src/main/java/org/jabref/cli/ArgumentProcessor.java @@ -144,7 +144,7 @@ private static Optional importFile(Path file, String importFormat) // * means "guess the format": System.out.println(Localization.lang("Importing in unknown format") + ": " + file); - ImportFormatReader.UnknownFormatImport importResult = Globals.IMPORT_FORMAT_READER.importUnknownFormat(file, new DummyFileUpdateMonitor()); + ImportFormatReader.UnknownFormatImport importResult = Globals.IMPORT_FORMAT_READER.importUnknownFormat(file, Globals.prefs.getTimestampPreferences(), new DummyFileUpdateMonitor()); System.out.println(Localization.lang("Format used") + ": " + importResult.format); return Optional.of(importResult.parserResult); @@ -321,7 +321,7 @@ private List importAndOpenFiles() { boolean bibExtension = aLeftOver.toLowerCase(Locale.ENGLISH).endsWith("bib"); ParserResult pr = new ParserResult(); if (bibExtension) { - pr = OpenDatabase.loadDatabase(aLeftOver, Globals.prefs.getImportFormatPreferences(), Globals.getFileUpdateMonitor()); + pr = OpenDatabase.loadDatabase(aLeftOver, Globals.prefs.getImportFormatPreferences(), Globals.prefs.getTimestampPreferences(), Globals.getFileUpdateMonitor()); } if (!bibExtension || (pr.isEmpty())) { diff --git a/src/main/java/org/jabref/gui/JabRefGUI.java b/src/main/java/org/jabref/gui/JabRefGUI.java index ed62b405ad5..bf6dce8c2fe 100644 --- a/src/main/java/org/jabref/gui/JabRefGUI.java +++ b/src/main/java/org/jabref/gui/JabRefGUI.java @@ -275,7 +275,7 @@ private void openLastEditedDatabases() { } ParserResult parsedDatabase = OpenDatabase.loadDatabase(fileName, - Globals.prefs.getImportFormatPreferences(), Globals.getFileUpdateMonitor()); + Globals.prefs.getImportFormatPreferences(), Globals.prefs.getTimestampPreferences(), Globals.getFileUpdateMonitor()); if (parsedDatabase.isEmpty()) { LOGGER.error(Localization.lang("Error opening file") + " '" + dbFile.getPath() + "'"); diff --git a/src/main/java/org/jabref/gui/StartLiteratureReviewAction.java b/src/main/java/org/jabref/gui/StartLiteratureReviewAction.java index f6db57b4727..ef2cf84a69f 100644 --- a/src/main/java/org/jabref/gui/StartLiteratureReviewAction.java +++ b/src/main/java/org/jabref/gui/StartLiteratureReviewAction.java @@ -58,7 +58,7 @@ public void execute() { } final Crawler crawler; try { - crawler = new Crawler(studyDefinitionFile.get(), new GitHandler(studyDefinitionFile.get().getParent()), fileUpdateMonitor, importFormatPreferneces, savePreferences, new BibEntryTypesManager()); + crawler = new Crawler(studyDefinitionFile.get(), new GitHandler(studyDefinitionFile.get().getParent()), fileUpdateMonitor, importFormatPreferneces, savePreferences, preferencesService.getTimestampPreferences(), new BibEntryTypesManager()); } catch (IOException | ParseException | GitAPIException e) { LOGGER.error("Error during reading of study definition file.", e); dialogService.showErrorDialogAndWait(Localization.lang("Error during reading of study definition file."), e); diff --git a/src/main/java/org/jabref/gui/UpdateTimestampListener.java b/src/main/java/org/jabref/gui/UpdateTimestampListener.java index 7af68d7a415..0efc6878d2b 100644 --- a/src/main/java/org/jabref/gui/UpdateTimestampListener.java +++ b/src/main/java/org/jabref/gui/UpdateTimestampListener.java @@ -1,6 +1,7 @@ package org.jabref.gui; import org.jabref.model.entry.event.EntryChangedEvent; +import org.jabref.model.entry.field.StandardField; import org.jabref.preferences.PreferencesService; import com.google.common.eventbus.Subscribe; @@ -17,8 +18,8 @@ class UpdateTimestampListener { @Subscribe public void listen(EntryChangedEvent event) { - if (preferencesService.getTimestampPreferences().shouldIncludeTimestamps()) { - event.getBibEntry().setField(preferencesService.getTimestampPreferences().getTimestampField(), + if (preferencesService.getTimestampPreferences().shouldAddModificationDate()) { + event.getBibEntry().setField(StandardField.MODIFICATIONDATE, preferencesService.getTimestampPreferences().now()); } } diff --git a/src/main/java/org/jabref/gui/collab/ChangeScanner.java b/src/main/java/org/jabref/gui/collab/ChangeScanner.java index 4806d156a86..910fe25ad8e 100644 --- a/src/main/java/org/jabref/gui/collab/ChangeScanner.java +++ b/src/main/java/org/jabref/gui/collab/ChangeScanner.java @@ -40,7 +40,7 @@ public List scanForChanges() { // Parse the modified file // Important: apply all post-load actions ImportFormatPreferences importFormatPreferences = preferencesService.getImportFormatPreferences(); - ParserResult result = OpenDatabase.loadDatabase(database.getDatabasePath().get(), importFormatPreferences, new DummyFileUpdateMonitor()); + ParserResult result = OpenDatabase.loadDatabase(database.getDatabasePath().get(), importFormatPreferences, preferencesService.getTimestampPreferences(), new DummyFileUpdateMonitor()); BibDatabaseContext databaseOnDisk = result.getDatabaseContext(); // Start looking at changes. diff --git a/src/main/java/org/jabref/gui/externalfiles/ImportHandler.java b/src/main/java/org/jabref/gui/externalfiles/ImportHandler.java index dcb570a82cd..4b8e3309946 100644 --- a/src/main/java/org/jabref/gui/externalfiles/ImportHandler.java +++ b/src/main/java/org/jabref/gui/externalfiles/ImportHandler.java @@ -54,7 +54,7 @@ public ImportHandler(DialogService dialogService, this.stateManager = stateManager; this.linker = new ExternalFilesEntryLinker(externalFileTypes, preferencesService.getFilePreferences(), database); - this.contentImporter = new ExternalFilesContentImporter(preferencesService.getImportFormatPreferences()); + this.contentImporter = new ExternalFilesContentImporter(preferencesService.getImportFormatPreferences(), preferencesService.getTimestampPreferences()); this.undoManager = undoManager; } diff --git a/src/main/java/org/jabref/gui/importer/ImportAction.java b/src/main/java/org/jabref/gui/importer/ImportAction.java index 38bf8004dd1..6a2bf12c086 100644 --- a/src/main/java/org/jabref/gui/importer/ImportAction.java +++ b/src/main/java/org/jabref/gui/importer/ImportAction.java @@ -110,7 +110,7 @@ private List doImport(List files) // Unknown format: DefaultTaskExecutor.runInJavaFXThread(() -> frame.getDialogService().notify(Localization.lang("Importing in unknown format") + "...")); // This import method never throws an IOException: - imports.add(Globals.IMPORT_FORMAT_READER.importUnknownFormat(filename, Globals.getFileUpdateMonitor())); + imports.add(Globals.IMPORT_FORMAT_READER.importUnknownFormat(filename, prefs.getTimestampPreferences(), Globals.getFileUpdateMonitor())); } else { DefaultTaskExecutor.runInJavaFXThread(() -> frame.getDialogService().notify(Localization.lang("Importing in %0 format", importer.get().getName()) + "...")); // Specific importer: diff --git a/src/main/java/org/jabref/gui/importer/actions/OpenDatabaseAction.java b/src/main/java/org/jabref/gui/importer/actions/OpenDatabaseAction.java index 16a4bd4e0f0..b382f9f0be8 100644 --- a/src/main/java/org/jabref/gui/importer/actions/OpenDatabaseAction.java +++ b/src/main/java/org/jabref/gui/importer/actions/OpenDatabaseAction.java @@ -184,7 +184,7 @@ private ParserResult loadDatabase(Path file) throws Exception { } ParserResult result = OpenDatabase.loadDatabase(fileToLoad.toString(), - Globals.prefs.getImportFormatPreferences(), Globals.getFileUpdateMonitor()); + Globals.prefs.getImportFormatPreferences(), Globals.prefs.getTimestampPreferences(), Globals.getFileUpdateMonitor()); if (result.getDatabase().isShared()) { try { diff --git a/src/main/java/org/jabref/gui/preferences/GeneralTab.fxml b/src/main/java/org/jabref/gui/preferences/GeneralTab.fxml index fc30802e771..101147a10fa 100644 --- a/src/main/java/org/jabref/gui/preferences/GeneralTab.fxml +++ b/src/main/java/org/jabref/gui/preferences/GeneralTab.fxml @@ -56,31 +56,6 @@