From 37474d3892bb28cc163e3e9571a690283cc6377d Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Sat, 20 Nov 2021 12:52:20 +0100 Subject: [PATCH 1/8] Refactored setWorkingDirectory --- .../gui/exporter/SaveDatabaseAction.java | 4 ++-- .../UnlinkedFilesDialogViewModel.java | 19 ++++++++++++------- .../importer/actions/OpenDatabaseAction.java | 2 +- .../LinkedFilesEditDialogViewModel.java | 8 +++++--- .../texparser/ParseLatexDialogViewModel.java | 2 +- .../jabref/preferences/FilePreferences.java | 19 ++++++++++++++++++- .../jabref/preferences/JabRefPreferences.java | 9 +++------ .../preferences/PreferencesService.java | 5 ----- .../gui/exporter/SaveDatabaseActionTest.java | 16 +++++++++------- 9 files changed, 51 insertions(+), 33 deletions(-) diff --git a/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java b/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java index a85f5acfd66..e7bd6fe61de 100644 --- a/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java +++ b/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java @@ -159,10 +159,10 @@ private Optional askForSavePath() { FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() .addExtensionFilter(StandardFileType.BIBTEX_DB) .withDefaultExtension(StandardFileType.BIBTEX_DB) - .withInitialDirectory(preferences.getWorkingDir()) + .withInitialDirectory(preferences.getFilePreferences().getWorkingDirectory()) .build(); Optional selectedPath = dialogService.showFileSaveDialog(fileDialogConfiguration); - selectedPath.ifPresent(path -> preferences.setWorkingDirectory(path.getParent())); + selectedPath.ifPresent(path -> preferences.getFilePreferences().setWorkingDirectory(path.getParent())); if (selectedPath.isPresent()) { Path savePath = selectedPath.get(); // Workaround for linux systems not adding file extension diff --git a/src/main/java/org/jabref/gui/externalfiles/UnlinkedFilesDialogViewModel.java b/src/main/java/org/jabref/gui/externalfiles/UnlinkedFilesDialogViewModel.java index 69c62af874a..5a195f56cae 100644 --- a/src/main/java/org/jabref/gui/externalfiles/UnlinkedFilesDialogViewModel.java +++ b/src/main/java/org/jabref/gui/externalfiles/UnlinkedFilesDialogViewModel.java @@ -80,8 +80,13 @@ public class UnlinkedFilesDialogViewModel { private final FunctionBasedValidator scanDirectoryValidator; - public UnlinkedFilesDialogViewModel(DialogService dialogService, ExternalFileTypes externalFileTypes, UndoManager undoManager, - FileUpdateMonitor fileUpdateMonitor, PreferencesService preferences, StateManager stateManager, TaskExecutor taskExecutor) { + public UnlinkedFilesDialogViewModel(DialogService dialogService, + ExternalFileTypes externalFileTypes, + UndoManager undoManager, + FileUpdateMonitor fileUpdateMonitor, + PreferencesService preferences, + StateManager stateManager, + TaskExecutor taskExecutor) { this.preferences = preferences; this.dialogService = dialogService; this.taskExecutor = taskExecutor; @@ -95,9 +100,9 @@ public UnlinkedFilesDialogViewModel(DialogService dialogService, ExternalFileTyp stateManager); this.fileFilterList = FXCollections.observableArrayList( - new FileExtensionViewModel(StandardFileType.ANY_FILE, externalFileTypes), - new FileExtensionViewModel(StandardFileType.BIBTEX_DB, externalFileTypes), - new FileExtensionViewModel(StandardFileType.PDF, externalFileTypes)); + new FileExtensionViewModel(StandardFileType.ANY_FILE, externalFileTypes), + new FileExtensionViewModel(StandardFileType.BIBTEX_DB, externalFileTypes), + new FileExtensionViewModel(StandardFileType.PDF, externalFileTypes)); this.dateFilterList = FXCollections.observableArrayList(DateRange.values()); @@ -218,12 +223,12 @@ public void cancelTasks() { public void browseFileDirectory() { DirectoryDialogConfiguration directoryDialogConfiguration = new DirectoryDialogConfiguration.Builder() - .withInitialDirectory(preferences.getWorkingDir()).build(); + .withInitialDirectory(preferences.getFilePreferences().getWorkingDirectory()).build(); dialogService.showDirectorySelectionDialog(directoryDialogConfiguration) .ifPresent(selectedDirectory -> { directoryPath.setValue(selectedDirectory.toAbsolutePath().toString()); - preferences.setWorkingDirectory(selectedDirectory.toAbsolutePath()); + preferences.getFilePreferences().setWorkingDirectory(selectedDirectory.toAbsolutePath()); }); } 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 bd1bbee5af4..6ce800b108f 100644 --- a/src/main/java/org/jabref/gui/importer/actions/OpenDatabaseAction.java +++ b/src/main/java/org/jabref/gui/importer/actions/OpenDatabaseAction.java @@ -181,7 +181,7 @@ private ParserResult loadDatabase(Path file) throws Exception { dialogService.notify(Localization.lang("Opening") + ": '" + file + "'"); - preferencesService.setWorkingDirectory(fileToLoad.getParent()); + preferencesService.getFilePreferences().setWorkingDirectory(fileToLoad.getParent()); if (BackupManager.backupFileDiffers(fileToLoad)) { BackupUIManager.showRestoreBackupDialog(dialogService, fileToLoad); diff --git a/src/main/java/org/jabref/gui/linkedfile/LinkedFilesEditDialogViewModel.java b/src/main/java/org/jabref/gui/linkedfile/LinkedFilesEditDialogViewModel.java index b69789282f9..ea6924a6933 100644 --- a/src/main/java/org/jabref/gui/linkedfile/LinkedFilesEditDialogViewModel.java +++ b/src/main/java/org/jabref/gui/linkedfile/LinkedFilesEditDialogViewModel.java @@ -25,6 +25,7 @@ import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.LinkedFile; import org.jabref.model.util.FileHelper; +import org.jabref.preferences.FilePreferences; import org.jabref.preferences.PreferencesService; import com.tobiasdiez.easybind.EasyBind; @@ -70,10 +71,11 @@ private void setExternalFileTypeByExtension(String link) { public void openBrowseDialog() { String fileText = link.get(); + FilePreferences filePreferences = preferences.getFilePreferences(); - Optional file = FileHelper.find(database, fileText, preferences.getFilePreferences()); + Optional file = FileHelper.find(database, fileText, filePreferences); - Path workingDir = file.orElse(preferences.getWorkingDir()); + Path workingDir = file.orElse(filePreferences.getWorkingDirectory()); String fileName = Path.of(fileText).getFileName().toString(); FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() @@ -83,7 +85,7 @@ public void openBrowseDialog() { dialogService.showFileOpenDialog(fileDialogConfiguration).ifPresent(path -> { // Store the directory for next time: - preferences.setWorkingDirectory(path); + filePreferences.setWorkingDirectory(path); link.set(relativize(path)); setExternalFileTypeByExtension(link.getValueSafe()); diff --git a/src/main/java/org/jabref/gui/texparser/ParseLatexDialogViewModel.java b/src/main/java/org/jabref/gui/texparser/ParseLatexDialogViewModel.java index 069f77df537..8bdd823403c 100644 --- a/src/main/java/org/jabref/gui/texparser/ParseLatexDialogViewModel.java +++ b/src/main/java/org/jabref/gui/texparser/ParseLatexDialogViewModel.java @@ -117,7 +117,7 @@ public void browseButtonClicked() { dialogService.showDirectorySelectionDialog(directoryDialogConfiguration).ifPresent(selectedDirectory -> { latexFileDirectory.set(selectedDirectory.toAbsolutePath().toString()); - preferencesService.setWorkingDirectory(selectedDirectory.toAbsolutePath()); + preferencesService.getFilePreferences().setWorkingDirectory(selectedDirectory.toAbsolutePath()); }); } diff --git a/src/main/java/org/jabref/preferences/FilePreferences.java b/src/main/java/org/jabref/preferences/FilePreferences.java index e2a7e597eae..fc68ac209bb 100644 --- a/src/main/java/org/jabref/preferences/FilePreferences.java +++ b/src/main/java/org/jabref/preferences/FilePreferences.java @@ -4,7 +4,9 @@ import java.util.Optional; import javafx.beans.property.BooleanProperty; +import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; @@ -20,19 +22,22 @@ public class FilePreferences { private final StringProperty fileNamePattern = new SimpleStringProperty(); private final StringProperty fileDirectoryPattern = new SimpleStringProperty(); private final BooleanProperty downloadLinkedFiles = new SimpleBooleanProperty(); + private final ObjectProperty workingDirectory = new SimpleObjectProperty<>(); public FilePreferences(String user, String mainFileDirectory, boolean storeFilesRelativeToBibFile, String fileNamePattern, String fileDirectoryPattern, - boolean downloadLinkedFiles) { + boolean downloadLinkedFiles, + Path workingDirectory) { this.user.setValue(user); this.mainFileDirectory.setValue(mainFileDirectory); this.storeFilesRelativeToBibFile.setValue(storeFilesRelativeToBibFile); this.fileNamePattern.setValue(fileNamePattern); this.fileDirectoryPattern.setValue(fileDirectoryPattern); this.downloadLinkedFiles.setValue(downloadLinkedFiles); + this.workingDirectory.setValue(workingDirectory); } public String getUser() { // Read only @@ -102,4 +107,16 @@ public BooleanProperty downloadLinkedFilesProperty() { public void setDownloadLinkedFiles(boolean shouldDownloadLinkedFiles) { this.downloadLinkedFiles.set(shouldDownloadLinkedFiles); } + + public Path getWorkingDirectory() { + return workingDirectory.get(); + } + + public ObjectProperty workingDirectoryProperty() { + return workingDirectory; + } + + public void setWorkingDirectory(Path workingDirectory) { + this.workingDirectory.set(workingDirectory); + } } diff --git a/src/main/java/org/jabref/preferences/JabRefPreferences.java b/src/main/java/org/jabref/preferences/JabRefPreferences.java index ed4d4bf1b32..22cfdc503a8 100644 --- a/src/main/java/org/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/org/jabref/preferences/JabRefPreferences.java @@ -2162,11 +2162,6 @@ public Path getWorkingDir() { return Path.of(get(WORKING_DIRECTORY)); } - @Override - public void setWorkingDirectory(Path directory) { - put(WORKING_DIRECTORY, directory.toString()); - } - @Override public FilePreferences getFilePreferences() { if (Objects.nonNull(filePreferences)) { @@ -2179,7 +2174,8 @@ public FilePreferences getFilePreferences() { getBoolean(STORE_RELATIVE_TO_BIB), get(IMPORT_FILENAMEPATTERN), get(IMPORT_FILEDIRPATTERN), - getBoolean(DOWNLOAD_LINKED_FILES) + getBoolean(DOWNLOAD_LINKED_FILES), + Path.of(get(WORKING_DIRECTORY)) ); EasyBind.listen(filePreferences.mainFileDirectoryProperty(), (obs, oldValue, newValue) -> put(MAIN_FILE_DIRECTORY, filePreferences.getFileDirectory().map(Path::toString).orElse(""))); @@ -2187,6 +2183,7 @@ public FilePreferences getFilePreferences() { EasyBind.listen(filePreferences.fileNamePatternProperty(), (obs, oldValue, newValue) -> put(IMPORT_FILENAMEPATTERN, newValue)); EasyBind.listen(filePreferences.fileDirectoryPatternProperty(), (obs, oldValue, newValue) -> put(IMPORT_FILEDIRPATTERN, newValue)); EasyBind.listen(filePreferences.downloadLinkedFilesProperty(), (obs, oldValue, newValue) -> putBoolean(DOWNLOAD_LINKED_FILES, newValue)); + EasyBind.listen(filePreferences.workingDirectoryProperty(), (obs, oldValue, newValue) -> put(WORKING_DIRECTORY, newValue.toString())); return filePreferences; } diff --git a/src/main/java/org/jabref/preferences/PreferencesService.java b/src/main/java/org/jabref/preferences/PreferencesService.java index fe7d74c0b5b..d3b002bfdae 100644 --- a/src/main/java/org/jabref/preferences/PreferencesService.java +++ b/src/main/java/org/jabref/preferences/PreferencesService.java @@ -296,11 +296,6 @@ public interface PreferencesService { */ Path getWorkingDir(); - /** - * Stores the directory for file browsing dialogs - */ - void setWorkingDirectory(Path dir); - //************************************************************************************************************* // Misc preferences //************************************************************************************************************* diff --git a/src/test/java/org/jabref/gui/exporter/SaveDatabaseActionTest.java b/src/test/java/org/jabref/gui/exporter/SaveDatabaseActionTest.java index 5e77b46c329..978867dfd28 100644 --- a/src/test/java/org/jabref/gui/exporter/SaveDatabaseActionTest.java +++ b/src/test/java/org/jabref/gui/exporter/SaveDatabaseActionTest.java @@ -26,6 +26,7 @@ import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.model.entry.field.StandardField; import org.jabref.model.metadata.MetaData; +import org.jabref.preferences.FilePreferences; import org.jabref.preferences.GeneralPreferences; import org.jabref.preferences.JabRefPreferences; @@ -46,10 +47,11 @@ class SaveDatabaseActionTest { private static final String TEST_BIBTEX_LIBRARY_LOCATION = "C:\\Users\\John_Doe\\Jabref\\literature.bib"; private Path file = Path.of(TEST_BIBTEX_LIBRARY_LOCATION); - private DialogService dialogService = mock(DialogService.class); - private JabRefPreferences preferences = mock(JabRefPreferences.class); + private final DialogService dialogService = mock(DialogService.class); + private final FilePreferences filePreferences = mock(FilePreferences.class); + private final JabRefPreferences preferences = mock(JabRefPreferences.class); private LibraryTab libraryTab = mock(LibraryTab.class); - private JabRefFrame jabRefFrame = mock(JabRefFrame.class); + private final JabRefFrame jabRefFrame = mock(JabRefFrame.class); private BibDatabaseContext dbContext = spy(BibDatabaseContext.class); private SaveDatabaseAction saveDatabaseAction; @@ -57,6 +59,8 @@ class SaveDatabaseActionTest { public void setUp() { when(libraryTab.frame()).thenReturn(jabRefFrame); when(libraryTab.getBibDatabaseContext()).thenReturn(dbContext); + when(filePreferences.getWorkingDirectory()).thenReturn(Path.of(TEST_BIBTEX_LIBRARY_LOCATION)); + when(preferences.getFilePreferences()).thenReturn(filePreferences); when(jabRefFrame.getDialogService()).thenReturn(dialogService); saveDatabaseAction = spy(new SaveDatabaseAction(libraryTab, preferences, mock(BibEntryTypesManager.class))); @@ -64,24 +68,22 @@ public void setUp() { @Test public void saveAsShouldSetWorkingDirectory() { - when(preferences.getWorkingDir()).thenReturn(Path.of(TEST_BIBTEX_LIBRARY_LOCATION)); when(dialogService.showFileSaveDialog(any(FileDialogConfiguration.class))).thenReturn(Optional.of(file)); doReturn(true).when(saveDatabaseAction).saveAs(any()); saveDatabaseAction.saveAs(); - verify(preferences, times(1)).setWorkingDirectory(file.getParent()); + verify(filePreferences, times(1)).setWorkingDirectory(file.getParent()); } @Test public void saveAsShouldNotSetWorkingDirectoryIfNotSelected() { - when(preferences.getWorkingDir()).thenReturn(Path.of(TEST_BIBTEX_LIBRARY_LOCATION)); when(dialogService.showFileSaveDialog(any(FileDialogConfiguration.class))).thenReturn(Optional.empty()); doReturn(false).when(saveDatabaseAction).saveAs(any()); saveDatabaseAction.saveAs(); - verify(preferences, times(0)).setWorkingDirectory(file.getParent()); + verify(filePreferences, times(0)).setWorkingDirectory(any()); } @Test From 7918e1a61c09133ca21f28f3968b6fd253841d1d Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Sat, 20 Nov 2021 18:13:22 +0100 Subject: [PATCH 2/8] Refactored getWorkingDirectory and getUser and fixed minor ide suggestions --- .../org/jabref/cli/ArgumentProcessor.java | 24 ++++----- .../jabref/gui/auximport/FromAuxDialog.java | 2 +- .../gui/copyfiles/CopySingleFileAction.java | 14 ++--- .../LatexCitationsTabViewModel.java | 16 +++--- .../UnlinkedFilesDialogViewModel.java | 2 +- .../gui/fieldeditors/LinkedFilesEditor.java | 2 +- .../LinkedFilesEditorViewModel.java | 2 +- .../gui/groups/GroupDialogViewModel.java | 10 ++-- .../importer/actions/OpenDatabaseAction.java | 4 +- .../LibraryPropertiesDialogViewModel.java | 14 ++--- .../gui/linkedfile/AttachFileAction.java | 14 ++--- .../linkedfile/LinkedFileEditDialogView.java | 4 +- .../LinkedFilesEditDialogViewModel.java | 10 ++-- .../jabref/gui/maintable/RightClickMenu.java | 2 +- .../StyleSelectDialogViewModel.java | 2 +- .../CustomImporterTabViewModel.java | 2 +- .../linkedfiles/LinkedFilesTabViewModel.java | 18 +++---- .../NewProtectedTermsFileDialog.java | 6 +-- .../ProtectedTermsTabViewModel.java | 4 +- .../gui/push/AbstractPushToApplication.java | 2 +- .../gui/push/PushToApplicationSettings.java | 6 +-- .../java/org/jabref/gui/push/PushToEmacs.java | 2 +- .../jabref/gui/push/PushToEmacsSettings.java | 6 +-- .../java/org/jabref/gui/push/PushToLyx.java | 2 +- .../jabref/gui/push/PushToLyxSettings.java | 6 +-- .../java/org/jabref/gui/push/PushToVim.java | 2 +- .../jabref/gui/push/PushToVimSettings.java | 6 +-- .../shared/SharedDatabaseLoginDialogView.java | 14 ++--- .../SharedDatabaseLoginDialogViewModel.java | 53 ++++++++++--------- .../gui/slr/ExistingStudySearchAction.java | 4 +- .../texparser/ParseLatexDialogViewModel.java | 4 +- .../org/jabref/logic/util/io/FileUtil.java | 9 ++-- .../jabref/preferences/JabRefPreferences.java | 36 ++++++------- .../preferences/PreferencesService.java | 8 --- .../gui/groups/GroupDialogViewModelTest.java | 6 +-- 35 files changed, 152 insertions(+), 166 deletions(-) diff --git a/src/main/java/org/jabref/cli/ArgumentProcessor.java b/src/main/java/org/jabref/cli/ArgumentProcessor.java index 5cfc3e81cf0..ea14183b83d 100644 --- a/src/main/java/org/jabref/cli/ArgumentProcessor.java +++ b/src/main/java/org/jabref/cli/ArgumentProcessor.java @@ -309,20 +309,20 @@ private void writeMetadatatoPDFsOfEntry(BibDatabaseContext databaseContext, Stri try { if (writeXMP) { if (xmpPdfExporter.exportToAllFilesOfEntry(databaseContext, encoding, filePreferences, entry, List.of(entry))) { - System.out.println(String.format("Successfully written XMP metadata on at least one linked file of %s", citeKey)); + System.out.printf("Successfully written XMP metadata on at least one linked file of %s%n", citeKey); } else { - System.err.println(String.format("Cannot write XMP metadata on any linked files of %s. Make sure there is at least one linked file and the path is correct.", citeKey)); + System.err.printf("Cannot write XMP metadata on any linked files of %s. Make sure there is at least one linked file and the path is correct.%n", citeKey); } } if (embeddBibfile) { if (embeddedBibFilePdfExporter.exportToAllFilesOfEntry(databaseContext, encoding, filePreferences, entry, List.of(entry))) { - System.out.println(String.format("Successfully embedded metadata on at least one linked file of %s", citeKey)); + System.out.printf("Successfully embedded metadata on at least one linked file of %s%n", citeKey); } else { - System.out.println(String.format("Cannot embedd metadata on any linked files of %s. Make sure there is at least one linked file and the path is correct.", citeKey)); + System.out.printf("Cannot embedd metadata on any linked files of %s. Make sure there is at least one linked file and the path is correct.%n", citeKey); } } } catch (Exception e) { - LOGGER.error(String.format("Failed writing metadata on a linked file of %s.", citeKey)); + LOGGER.error("Failed writing metadata on a linked file of {}.", citeKey); } } @@ -330,7 +330,7 @@ private void writeMetadatatoPdfByCitekey(BibDatabaseContext databaseContext, Bib for (String citeKey : citeKeys) { List bibEntryList = dataBase.getEntriesByCitationKey(citeKey); if (bibEntryList.isEmpty()) { - System.err.println(String.format("Skipped - Cannot find %s in library.", citeKey)); + System.err.printf("Skipped - Cannot find %s in library.%n", citeKey); continue; } for (BibEntry entry : bibEntryList) { @@ -349,25 +349,25 @@ private void writeMetadatatoPdfByFileNames(BibDatabaseContext databaseContext, B try { if (writeXMP) { if (xmpPdfExporter.exportToFileByPath(databaseContext, dataBase, encoding, filePreferences, filePath)) { - System.out.println(String.format("Successfully written XMP metadata of at least one entry to %s", fileName)); + System.out.printf("Successfully written XMP metadata of at least one entry to %s%n", fileName); } else { - System.out.println(String.format("File %s is not linked to any entry in database.", fileName)); + System.out.printf("File %s is not linked to any entry in database.%n", fileName); } } if (embeddBibfile) { if (embeddedBibFilePdfExporter.exportToFileByPath(databaseContext, dataBase, encoding, filePreferences, filePath)) { - System.out.println(String.format("Successfully embedded XMP metadata of at least one entry to %s", fileName)); + System.out.printf("Successfully embedded XMP metadata of at least one entry to %s%n", fileName); } else { - System.out.println(String.format("File %s is not linked to any entry in database.", fileName)); + System.out.printf("File %s is not linked to any entry in database.%n", fileName); } } } catch (IOException e) { LOGGER.error("Error accessing file '{}'.", fileName); } catch (Exception e) { - LOGGER.error(String.format("Error writing entry to %s.", fileName)); + LOGGER.error("Error writing entry to {}.", fileName); } } else { - LOGGER.error(String.format("Skipped - PDF %s does not exist", fileName)); + LOGGER.error("Skipped - PDF {} does not exist", fileName); } } } diff --git a/src/main/java/org/jabref/gui/auximport/FromAuxDialog.java b/src/main/java/org/jabref/gui/auximport/FromAuxDialog.java index 7280deb9819..ae7de0b43e0 100644 --- a/src/main/java/org/jabref/gui/auximport/FromAuxDialog.java +++ b/src/main/java/org/jabref/gui/auximport/FromAuxDialog.java @@ -93,7 +93,7 @@ private void browseButtonClicked() { FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() .addExtensionFilter(StandardFileType.AUX) .withDefaultExtension(StandardFileType.AUX) - .withInitialDirectory(preferences.getWorkingDir()).build(); + .withInitialDirectory(preferences.getFilePreferences().getWorkingDirectory()).build(); dialogService.showFileOpenDialog(fileDialogConfiguration).ifPresent(file -> auxFileField.setText(file.toAbsolutePath().toString())); } } diff --git a/src/main/java/org/jabref/gui/copyfiles/CopySingleFileAction.java b/src/main/java/org/jabref/gui/copyfiles/CopySingleFileAction.java index 72ec5c64266..29bc0716b59 100644 --- a/src/main/java/org/jabref/gui/copyfiles/CopySingleFileAction.java +++ b/src/main/java/org/jabref/gui/copyfiles/CopySingleFileAction.java @@ -14,40 +14,40 @@ import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.LinkedFile; import org.jabref.model.util.OptionalUtil; -import org.jabref.preferences.PreferencesService; +import org.jabref.preferences.FilePreferences; public class CopySingleFileAction extends SimpleCommand { private final LinkedFile linkedFile; private final DialogService dialogService; private final BibDatabaseContext databaseContext; - private final PreferencesService preferencesService; + private final FilePreferences filePreferences; private final BiFunction resolvePathFilename = (path, file) -> path.resolve(file.getFileName()); - public CopySingleFileAction(LinkedFile linkedFile, DialogService dialogService, BibDatabaseContext databaseContext, PreferencesService preferencesService) { + public CopySingleFileAction(LinkedFile linkedFile, DialogService dialogService, BibDatabaseContext databaseContext, FilePreferences filePreferences) { this.linkedFile = linkedFile; this.dialogService = dialogService; this.databaseContext = databaseContext; - this.preferencesService = preferencesService; + this.filePreferences = filePreferences; this.executable.bind(Bindings.createBooleanBinding( () -> !linkedFile.isOnlineLink() - && linkedFile.findIn(databaseContext, preferencesService.getFilePreferences()).isPresent(), + && linkedFile.findIn(databaseContext, this.filePreferences).isPresent(), linkedFile.linkProperty())); } @Override public void execute() { DirectoryDialogConfiguration dirDialogConfiguration = new DirectoryDialogConfiguration.Builder() - .withInitialDirectory(preferencesService.getWorkingDir()) + .withInitialDirectory(filePreferences.getWorkingDirectory()) .build(); Optional exportPath = dialogService.showDirectorySelectionDialog(dirDialogConfiguration); exportPath.ifPresent(this::copyFileToDestination); } private void copyFileToDestination(Path exportPath) { - Optional fileToExport = linkedFile.findIn(databaseContext, preferencesService.getFilePreferences()); + Optional fileToExport = linkedFile.findIn(databaseContext, filePreferences); Optional newPath = OptionalUtil.combine(Optional.of(exportPath), fileToExport, resolvePathFilename); if (newPath.isPresent()) { diff --git a/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java b/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java index 7673eb62d2b..fbfbb5c37e3 100644 --- a/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java +++ b/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java @@ -60,14 +60,16 @@ enum Status { private LatexParserResult latexParserResult; private BibEntry currentEntry; - public LatexCitationsTabViewModel(BibDatabaseContext databaseContext, PreferencesService preferencesService, - TaskExecutor taskExecutor, DialogService dialogService) { + public LatexCitationsTabViewModel(BibDatabaseContext databaseContext, + PreferencesService preferencesService, + TaskExecutor taskExecutor, + DialogService dialogService) { this.databaseContext = databaseContext; this.preferencesService = preferencesService; this.taskExecutor = taskExecutor; this.dialogService = dialogService; - this.directory = new SimpleObjectProperty(databaseContext.getMetaData().getLatexFileDirectory(preferencesService.getUser()) - .orElse(FileUtil.getInitialDirectory(databaseContext, preferencesService))); + this.directory = new SimpleObjectProperty<>(databaseContext.getMetaData().getLatexFileDirectory(preferencesService.getFilePreferences().getUser()) + .orElse(FileUtil.getInitialDirectory(databaseContext, preferencesService.getFilePreferences().getWorkingDirectory()))); this.citationList = FXCollections.observableArrayList(); this.status = new SimpleObjectProperty<>(Status.IN_PROGRESS); this.searchError = new SimpleStringProperty(""); @@ -128,8 +130,8 @@ private void cancelSearch() { private Collection searchAndParse(String citeKey) throws IOException { // we need to check whether the user meanwhile set the LaTeX file directory or the database changed locations - Path newDirectory = databaseContext.getMetaData().getLatexFileDirectory(preferencesService.getUser()) - .orElse(FileUtil.getInitialDirectory(databaseContext, preferencesService)); + Path newDirectory = databaseContext.getMetaData().getLatexFileDirectory(preferencesService.getFilePreferences().getUser()) + .orElse(FileUtil.getInitialDirectory(databaseContext, preferencesService.getFilePreferences().getWorkingDirectory())); if (latexParserResult == null || !newDirectory.equals(directory.get())) { directory.set(newDirectory); @@ -170,7 +172,7 @@ public void setLatexDirectory() { .withInitialDirectory(directory.get()).build(); dialogService.showDirectorySelectionDialog(directoryDialogConfiguration).ifPresent(selectedDirectory -> - databaseContext.getMetaData().setLatexFileDirectory(preferencesService.getUser(), selectedDirectory.toAbsolutePath())); + databaseContext.getMetaData().setLatexFileDirectory(preferencesService.getFilePreferences().getUser(), selectedDirectory.toAbsolutePath())); init(currentEntry); } diff --git a/src/main/java/org/jabref/gui/externalfiles/UnlinkedFilesDialogViewModel.java b/src/main/java/org/jabref/gui/externalfiles/UnlinkedFilesDialogViewModel.java index 5a195f56cae..c516be37f86 100644 --- a/src/main/java/org/jabref/gui/externalfiles/UnlinkedFilesDialogViewModel.java +++ b/src/main/java/org/jabref/gui/externalfiles/UnlinkedFilesDialogViewModel.java @@ -180,7 +180,7 @@ public void startExport() { } FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() - .withInitialDirectory(preferences.getWorkingDir()) + .withInitialDirectory(preferences.getFilePreferences().getWorkingDirectory()) .addExtensionFilter(StandardFileType.TXT) .withDefaultExtension(StandardFileType.TXT) .build(); diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java index a13eeb6a310..36aba630f54 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java @@ -275,7 +275,7 @@ private ContextMenu createContextMenuForFile(LinkedFileViewModel linkedFile) { factory.createMenuItem(StandardActions.RENAME_FILE_TO_NAME, new ContextAction(StandardActions.RENAME_FILE_TO_NAME, linkedFile, preferencesService)), factory.createMenuItem(StandardActions.MOVE_FILE_TO_FOLDER, new ContextAction(StandardActions.MOVE_FILE_TO_FOLDER, linkedFile, preferencesService)), factory.createMenuItem(StandardActions.MOVE_FILE_TO_FOLDER_AND_RENAME, new ContextAction(StandardActions.MOVE_FILE_TO_FOLDER_AND_RENAME, linkedFile, preferencesService)), - factory.createMenuItem(StandardActions.COPY_FILE_TO_FOLDER, new CopySingleFileAction(linkedFile.getFile(), dialogService, databaseContext, preferencesService)), + factory.createMenuItem(StandardActions.COPY_FILE_TO_FOLDER, new CopySingleFileAction(linkedFile.getFile(), dialogService, databaseContext, preferencesService.getFilePreferences())), factory.createMenuItem(StandardActions.REMOVE_LINK, new ContextAction(StandardActions.REMOVE_LINK, linkedFile, preferencesService)), factory.createMenuItem(StandardActions.DELETE_FILE, new ContextAction(StandardActions.DELETE_FILE, linkedFile, preferencesService)) ); diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java index e3f542e4a95..f9c7f1e67e5 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java @@ -137,7 +137,7 @@ public ListProperty filesProperty() { public void addNewFile() { Path workingDirectory = databaseContext.getFirstExistingFileDir(preferences.getFilePreferences()) - .orElse(preferences.getWorkingDir()); + .orElse(preferences.getFilePreferences().getWorkingDirectory()); FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() .withInitialDirectory(workingDirectory) diff --git a/src/main/java/org/jabref/gui/groups/GroupDialogViewModel.java b/src/main/java/org/jabref/gui/groups/GroupDialogViewModel.java index 7714fcdcfa0..522d129bb08 100644 --- a/src/main/java/org/jabref/gui/groups/GroupDialogViewModel.java +++ b/src/main/java/org/jabref/gui/groups/GroupDialogViewModel.java @@ -83,7 +83,7 @@ public class GroupDialogViewModel { private final BooleanProperty keywordGroupRegexProperty = new SimpleBooleanProperty(); private final StringProperty searchGroupSearchTermProperty = new SimpleStringProperty(""); - private final ObjectProperty> searchFlagsProperty = new SimpleObjectProperty(EnumSet.noneOf(SearchFlags.class)); + private final ObjectProperty> searchFlagsProperty = new SimpleObjectProperty<>(EnumSet.noneOf(SearchFlags.class)); private final BooleanProperty autoGroupKeywordsOptionProperty = new SimpleBooleanProperty(); private final StringProperty autoGroupKeywordsFieldProperty = new SimpleStringProperty(""); @@ -236,7 +236,7 @@ private void setupValidation() { return false; } return FileUtil.getFileExtension(input) - .map(extension -> extension.toLowerCase().equals("aux")) + .map(extension -> extension.equalsIgnoreCase("aux")) .orElse(false); } }, @@ -273,7 +273,7 @@ private void setupValidation() { * @return an absolute path if LatexFileDirectory exists; otherwise, returns input */ private Path getAbsoluteTexGroupPath(String input) { - Optional latexFileDirectory = currentDatabase.getMetaData().getLatexFileDirectory(preferencesService.getUser()); + Optional latexFileDirectory = currentDatabase.getMetaData().getLatexFileDirectory(preferencesService.getFilePreferences().getUser()); return latexFileDirectory.map(path -> path.resolve(input)).orElse(Path.of(input)); } @@ -436,8 +436,8 @@ public void texGroupBrowse() { .addExtensionFilter(StandardFileType.AUX) .withDefaultExtension(StandardFileType.AUX) .withInitialDirectory(currentDatabase.getMetaData() - .getLatexFileDirectory(preferencesService.getUser()) - .orElse(FileUtil.getInitialDirectory(currentDatabase, preferencesService))).build(); + .getLatexFileDirectory(preferencesService.getFilePreferences().getUser()) + .orElse(FileUtil.getInitialDirectory(currentDatabase, preferencesService.getFilePreferences().getWorkingDirectory()))).build(); dialogService.showFileOpenDialog(fileDialogConfiguration) .ifPresent(file -> texGroupFilePathProperty.setValue( FileUtil.relativize(file.toAbsolutePath(), getFileDirectoriesAsPaths()).toString() 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 6ce800b108f..39b22f76f55 100644 --- a/src/main/java/org/jabref/gui/importer/actions/OpenDatabaseAction.java +++ b/src/main/java/org/jabref/gui/importer/actions/OpenDatabaseAction.java @@ -94,10 +94,10 @@ public void execute() { */ private Path getInitialDirectory() { if (frame.getBasePanelCount() == 0) { - return preferencesService.getWorkingDir(); + return preferencesService.getFilePreferences().getWorkingDirectory(); } else { Optional databasePath = frame.getCurrentLibraryTab().getBibDatabaseContext().getDatabasePath(); - return databasePath.map(Path::getParent).orElse(preferencesService.getWorkingDir()); + return databasePath.map(Path::getParent).orElse(preferencesService.getFilePreferences().getWorkingDirectory()); } } diff --git a/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesDialogViewModel.java b/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesDialogViewModel.java index f3a37a6092d..d07206d881b 100644 --- a/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesDialogViewModel.java +++ b/src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesDialogViewModel.java @@ -75,7 +75,7 @@ public LibraryPropertiesDialogViewModel(BibDatabaseContext databaseContext, Dial this.initialSaveOrderConfig = initialMetaData.getSaveOrderConfig().orElseGet(preferences::getExportSaveOrder); this.directoryDialogConfiguration = new DirectoryDialogConfiguration.Builder() - .withInitialDirectory(preferences.getWorkingDir()).build(); + .withInitialDirectory(preferences.getFilePreferences().getWorkingDirectory()).build(); setValues(); } @@ -88,8 +88,8 @@ void setValues() { selectedEncodingPropety.setValue(initialMetaData.getEncoding().orElse(preferences.getGeneralPreferences().getDefaultEncoding())); selectedDatabaseModeProperty.setValue(initialMetaData.getMode().orElse(BibDatabaseMode.BIBLATEX)); generalFileDirectoryProperty.setValue(initialMetaData.getDefaultFileDirectory().orElse("").trim()); - userSpecificFileDirectoryProperty.setValue(initialMetaData.getUserFileDirectory(preferences.getUser()).orElse("").trim()); - laTexFileDirectoryProperty.setValue(initialMetaData.getLatexFileDirectory(preferences.getUser()).map(Path::toString).orElse("")); + userSpecificFileDirectoryProperty.setValue(initialMetaData.getUserFileDirectory(preferences.getFilePreferences().getUser()).orElse("").trim()); + laTexFileDirectoryProperty.setValue(initialMetaData.getLatexFileDirectory(preferences.getFilePreferences().getUser()).map(Path::toString).orElse("")); libraryProtectedProperty.setValue(initialMetaData.isProtected()); // SaveOrderConfigPanel @@ -134,16 +134,16 @@ void storeSettings() { String userSpecificFileDirectory = userSpecificFileDirectoryProperty.getValue(); if (userSpecificFileDirectory.isEmpty()) { - newMetaData.clearUserFileDirectory(preferences.getUser()); + newMetaData.clearUserFileDirectory(preferences.getFilePreferences().getUser()); } else { - newMetaData.setUserFileDirectory(preferences.getUser(), userSpecificFileDirectory); + newMetaData.setUserFileDirectory(preferences.getFilePreferences().getUser(), userSpecificFileDirectory); } String latexFileDirectory = laTexFileDirectoryProperty.getValue(); if (latexFileDirectory.isEmpty()) { - newMetaData.clearLatexFileDirectory(preferences.getUser()); + newMetaData.clearLatexFileDirectory(preferences.getFilePreferences().getUser()); } else { - newMetaData.setLatexFileDirectory(preferences.getUser(), Path.of(latexFileDirectory)); + newMetaData.setLatexFileDirectory(preferences.getFilePreferences().getUser(), Path.of(latexFileDirectory)); } if (libraryProtectedProperty.getValue()) { diff --git a/src/main/java/org/jabref/gui/linkedfile/AttachFileAction.java b/src/main/java/org/jabref/gui/linkedfile/AttachFileAction.java index a0b6ff4602d..00e0c1f3b4b 100644 --- a/src/main/java/org/jabref/gui/linkedfile/AttachFileAction.java +++ b/src/main/java/org/jabref/gui/linkedfile/AttachFileAction.java @@ -17,23 +17,23 @@ import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.LinkedFile; -import org.jabref.preferences.PreferencesService; +import org.jabref.preferences.FilePreferences; public class AttachFileAction extends SimpleCommand { private final LibraryTab libraryTab; private final StateManager stateManager; private final DialogService dialogService; - private final PreferencesService preferencesService; + private final FilePreferences filePreferences; public AttachFileAction(LibraryTab libraryTab, DialogService dialogService, StateManager stateManager, - PreferencesService preferencesService) { + FilePreferences filePreferences) { this.libraryTab = libraryTab; this.stateManager = stateManager; this.dialogService = dialogService; - this.preferencesService = preferencesService; + this.filePreferences = filePreferences; this.executable.bind(ActionHelper.needsEntriesSelected(1, stateManager)); } @@ -54,8 +54,8 @@ public void execute() { BibEntry entry = stateManager.getSelectedEntries().get(0); - Path workingDirectory = databaseContext.getFirstExistingFileDir(preferencesService.getFilePreferences()) - .orElse(preferencesService.getWorkingDir()); + Path workingDirectory = databaseContext.getFirstExistingFileDir(filePreferences) + .orElse(filePreferences.getWorkingDirectory()); FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() .withInitialDirectory(workingDirectory) @@ -63,7 +63,7 @@ public void execute() { dialogService.showFileOpenDialog(fileDialogConfiguration).ifPresent(newFile -> { LinkedFile linkedFile = LinkedFilesEditorViewModel.fromFile(newFile, - databaseContext.getFileDirectories(preferencesService.getFilePreferences()), + databaseContext.getFileDirectories(filePreferences), ExternalFileTypes.getInstance()); LinkedFileEditDialogView dialog = new LinkedFileEditDialogView(linkedFile); diff --git a/src/main/java/org/jabref/gui/linkedfile/LinkedFileEditDialogView.java b/src/main/java/org/jabref/gui/linkedfile/LinkedFileEditDialogView.java index 5ea1e9fb344..b470265e78d 100644 --- a/src/main/java/org/jabref/gui/linkedfile/LinkedFileEditDialogView.java +++ b/src/main/java/org/jabref/gui/linkedfile/LinkedFileEditDialogView.java @@ -32,7 +32,7 @@ public class LinkedFileEditDialogView extends BaseDialog { private LinkedFilesEditDialogViewModel viewModel; private final LinkedFile linkedFile; - private ExternalFileTypes externalFileTypes; + private final ExternalFileTypes externalFileTypes; public LinkedFileEditDialogView(LinkedFile linkedFile) { this.linkedFile = linkedFile; @@ -56,7 +56,7 @@ public LinkedFileEditDialogView(LinkedFile linkedFile) { @FXML private void initialize() { - viewModel = new LinkedFilesEditDialogViewModel(linkedFile, stateManager.getActiveDatabase().get(), dialogService, preferences, externalFileTypes); + viewModel = new LinkedFilesEditDialogViewModel(linkedFile, stateManager.getActiveDatabase().get(), dialogService, preferences.getFilePreferences(), externalFileTypes); fileType.itemsProperty().bindBidirectional(viewModel.externalFileTypeProperty()); description.textProperty().bindBidirectional(viewModel.descriptionProperty()); link.textProperty().bindBidirectional(viewModel.linkProperty()); diff --git a/src/main/java/org/jabref/gui/linkedfile/LinkedFilesEditDialogViewModel.java b/src/main/java/org/jabref/gui/linkedfile/LinkedFilesEditDialogViewModel.java index ea6924a6933..2d5175bd3d4 100644 --- a/src/main/java/org/jabref/gui/linkedfile/LinkedFilesEditDialogViewModel.java +++ b/src/main/java/org/jabref/gui/linkedfile/LinkedFilesEditDialogViewModel.java @@ -26,7 +26,6 @@ import org.jabref.model.entry.LinkedFile; import org.jabref.model.util.FileHelper; import org.jabref.preferences.FilePreferences; -import org.jabref.preferences.PreferencesService; import com.tobiasdiez.easybind.EasyBind; import com.tobiasdiez.easybind.optional.ObservableOptionalValue; @@ -41,13 +40,13 @@ public class LinkedFilesEditDialogViewModel extends AbstractViewModel { private final ObservableOptionalValue monadicSelectedExternalFileType; private final BibDatabaseContext database; private final DialogService dialogService; - private final PreferencesService preferences; + private final FilePreferences filePreferences; private final ExternalFileTypes externalFileTypes; - public LinkedFilesEditDialogViewModel(LinkedFile linkedFile, BibDatabaseContext database, DialogService dialogService, PreferencesService preferences, ExternalFileTypes externalFileTypes) { + public LinkedFilesEditDialogViewModel(LinkedFile linkedFile, BibDatabaseContext database, DialogService dialogService, FilePreferences filePreferences, ExternalFileTypes externalFileTypes) { this.database = database; this.dialogService = dialogService; - this.preferences = preferences; + this.filePreferences = filePreferences; this.externalFileTypes = externalFileTypes; allExternalFileTypes.set(FXCollections.observableArrayList(externalFileTypes.getExternalFileTypeSelection())); @@ -71,7 +70,6 @@ private void setExternalFileTypeByExtension(String link) { public void openBrowseDialog() { String fileText = link.get(); - FilePreferences filePreferences = preferences.getFilePreferences(); Optional file = FileHelper.find(database, fileText, filePreferences); @@ -142,7 +140,7 @@ public LinkedFile getNewLinkedFile() { } private String relativize(Path filePath) { - List fileDirectories = database.getFileDirectories(preferences.getFilePreferences()); + List fileDirectories = database.getFileDirectories(filePreferences); return FileUtil.relativize(filePath, fileDirectories).toString(); } } diff --git a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java index de00201399b..4834c920790 100644 --- a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java +++ b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java @@ -68,7 +68,7 @@ public static ContextMenu create(BibEntryTableViewModel entry, contextMenu.getItems().add(new SeparatorMenuItem()); - contextMenu.getItems().add(factory.createMenuItem(StandardActions.ATTACH_FILE, new AttachFileAction(libraryTab, dialogService, stateManager, preferencesService))); + contextMenu.getItems().add(factory.createMenuItem(StandardActions.ATTACH_FILE, new AttachFileAction(libraryTab, dialogService, stateManager, preferencesService.getFilePreferences()))); contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_FOLDER, new OpenFolderAction(dialogService, stateManager, preferencesService))); contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_EXTERNAL_FILE, new OpenExternalFileAction(dialogService, stateManager, preferencesService))); contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_URL, new OpenUrlAction(dialogService, stateManager, preferencesService))); diff --git a/src/main/java/org/jabref/gui/openoffice/StyleSelectDialogViewModel.java b/src/main/java/org/jabref/gui/openoffice/StyleSelectDialogViewModel.java index bd307cd93ba..2fccfd5a332 100644 --- a/src/main/java/org/jabref/gui/openoffice/StyleSelectDialogViewModel.java +++ b/src/main/java/org/jabref/gui/openoffice/StyleSelectDialogViewModel.java @@ -62,7 +62,7 @@ public void addStyleFile() { FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() .addExtensionFilter(Localization.lang("Style file"), StandardFileType.JSTYLE) .withDefaultExtension(Localization.lang("Style file"), StandardFileType.JSTYLE) - .withInitialDirectory(preferencesService.getWorkingDir()) + .withInitialDirectory(preferencesService.getFilePreferences().getWorkingDirectory()) .build(); Optional path = dialogService.showFileOpenDialog(fileDialogConfiguration); path.map(Path::toAbsolutePath).map(Path::toString).ifPresent(stylePath -> { diff --git a/src/main/java/org/jabref/gui/preferences/customimporter/CustomImporterTabViewModel.java b/src/main/java/org/jabref/gui/preferences/customimporter/CustomImporterTabViewModel.java index 4e0ec263e83..218c76d940a 100644 --- a/src/main/java/org/jabref/gui/preferences/customimporter/CustomImporterTabViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/customimporter/CustomImporterTabViewModel.java @@ -84,7 +84,7 @@ public void addImporter() { FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() .addExtensionFilter(StandardFileType.CLASS, StandardFileType.JAR, StandardFileType.ZIP) .withDefaultExtension(StandardFileType.CLASS) - .withInitialDirectory(preferences.getWorkingDir()) + .withInitialDirectory(preferences.getFilePreferences().getWorkingDirectory()) .build(); Optional selectedFile = dialogService.showFileOpenDialog(fileDialogConfiguration); diff --git a/src/main/java/org/jabref/gui/preferences/linkedfiles/LinkedFilesTabViewModel.java b/src/main/java/org/jabref/gui/preferences/linkedfiles/LinkedFilesTabViewModel.java index 783f6069aca..eca825e896f 100644 --- a/src/main/java/org/jabref/gui/preferences/linkedfiles/LinkedFilesTabViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/linkedfiles/LinkedFilesTabViewModel.java @@ -42,15 +42,13 @@ public class LinkedFilesTabViewModel implements PreferenceTabViewModel { private final Validator mainFileDirValidator; private final DialogService dialogService; - private final PreferencesService preferences; private final FilePreferences filePreferences; - private final AutoLinkPreferences initialAutoLinkPreferences; + private final AutoLinkPreferences autoLinkPreferences; public LinkedFilesTabViewModel(DialogService dialogService, PreferencesService preferences) { this.dialogService = dialogService; - this.preferences = preferences; this.filePreferences = preferences.getFilePreferences(); - this.initialAutoLinkPreferences = preferences.getAutoLinkPreferences(); + this.autoLinkPreferences = preferences.getAutoLinkPreferences(); mainFileDirValidator = new FunctionBasedValidator<>( mainFileDirectoryProperty, @@ -82,13 +80,13 @@ public void setValues() { fileDirectoryPatternProperty.setValue(filePreferences.getFileDirectoryPattern()); // Autolink preferences - switch (initialAutoLinkPreferences.getCitationKeyDependency()) { + switch (autoLinkPreferences.getCitationKeyDependency()) { case START -> autolinkFileStartsBibtexProperty.setValue(true); case EXACT -> autolinkFileExactBibtexProperty.setValue(true); case REGEX -> autolinkUseRegexProperty.setValue(true); } - autolinkRegexKeyProperty.setValue(initialAutoLinkPreferences.getRegularExpression()); + autolinkRegexKeyProperty.setValue(autoLinkPreferences.getRegularExpression()); } @Override @@ -102,14 +100,14 @@ public void storeSettings() { // Autolink preferences if (autolinkFileStartsBibtexProperty.getValue()) { - preferences.getAutoLinkPreferences().setCitationKeyDependency(AutoLinkPreferences.CitationKeyDependency.START); + autoLinkPreferences.setCitationKeyDependency(AutoLinkPreferences.CitationKeyDependency.START); } else if (autolinkFileExactBibtexProperty.getValue()) { - preferences.getAutoLinkPreferences().setCitationKeyDependency(AutoLinkPreferences.CitationKeyDependency.EXACT); + autoLinkPreferences.setCitationKeyDependency(AutoLinkPreferences.CitationKeyDependency.EXACT); } else if (autolinkUseRegexProperty.getValue()) { - preferences.getAutoLinkPreferences().setCitationKeyDependency(AutoLinkPreferences.CitationKeyDependency.REGEX); + autoLinkPreferences.setCitationKeyDependency(AutoLinkPreferences.CitationKeyDependency.REGEX); } - preferences.getAutoLinkPreferences().setRegularExpression(autolinkRegexKeyProperty.getValue()); + autoLinkPreferences.setRegularExpression(autolinkRegexKeyProperty.getValue()); } ValidationStatus mainFileDirValidationStatus() { diff --git a/src/main/java/org/jabref/gui/preferences/protectedterms/NewProtectedTermsFileDialog.java b/src/main/java/org/jabref/gui/preferences/protectedterms/NewProtectedTermsFileDialog.java index 679fc56f17a..7802e7fde1b 100644 --- a/src/main/java/org/jabref/gui/preferences/protectedterms/NewProtectedTermsFileDialog.java +++ b/src/main/java/org/jabref/gui/preferences/protectedterms/NewProtectedTermsFileDialog.java @@ -16,14 +16,14 @@ import org.jabref.logic.l10n.Localization; import org.jabref.logic.protectedterms.ProtectedTermsList; import org.jabref.logic.util.StandardFileType; -import org.jabref.preferences.PreferencesService; +import org.jabref.preferences.FilePreferences; public class NewProtectedTermsFileDialog extends BaseDialog { private final TextField newFile = new TextField(); private final DialogService dialogService; - public NewProtectedTermsFileDialog(List termsLists, DialogService dialogService, PreferencesService preferencesService) { + public NewProtectedTermsFileDialog(List termsLists, DialogService dialogService, FilePreferences filePreferences) { this.dialogService = dialogService; this.setTitle(Localization.lang("New protected terms file")); @@ -31,7 +31,7 @@ public NewProtectedTermsFileDialog(List termsLists, FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() .addExtensionFilter(Localization.lang("Protected terms file"), StandardFileType.TERMS) .withDefaultExtension(Localization.lang("Protected terms file"), StandardFileType.TERMS) - .withInitialDirectory(preferencesService.getWorkingDir()) + .withInitialDirectory(filePreferences.getWorkingDirectory()) .build(); Button browse = new Button(Localization.lang("Browse")); diff --git a/src/main/java/org/jabref/gui/preferences/protectedterms/ProtectedTermsTabViewModel.java b/src/main/java/org/jabref/gui/preferences/protectedterms/ProtectedTermsTabViewModel.java index c3cc950660c..2382ea04263 100644 --- a/src/main/java/org/jabref/gui/preferences/protectedterms/ProtectedTermsTabViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/protectedterms/ProtectedTermsTabViewModel.java @@ -92,7 +92,7 @@ public void addFile() { FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() .addExtensionFilter(Localization.lang("Protected terms file"), StandardFileType.TERMS) .withDefaultExtension(Localization.lang("Protected terms file"), StandardFileType.TERMS) - .withInitialDirectory(preferences.getWorkingDir()) + .withInitialDirectory(preferences.getFilePreferences().getWorkingDirectory()) .build(); dialogService.showFileOpenDialog(fileDialogConfiguration) @@ -121,7 +121,7 @@ public void removeList(ProtectedTermsListItemModel itemModel) { } public void createNewFile() { - dialogService.showCustomDialogAndWait(new NewProtectedTermsFileDialog(termsFilesProperty, dialogService, preferences)); + dialogService.showCustomDialogAndWait(new NewProtectedTermsFileDialog(termsFilesProperty, dialogService, preferences.getFilePreferences())); } public void edit(ProtectedTermsListItemModel file) { diff --git a/src/main/java/org/jabref/gui/push/AbstractPushToApplication.java b/src/main/java/org/jabref/gui/push/AbstractPushToApplication.java index d624ded3e39..995a2174019 100644 --- a/src/main/java/org/jabref/gui/push/AbstractPushToApplication.java +++ b/src/main/java/org/jabref/gui/push/AbstractPushToApplication.java @@ -133,6 +133,6 @@ protected String getCiteCommand() { } public PushToApplicationSettings getSettings(PushToApplication application, ObjectProperty preferences) { - return new PushToApplicationSettings(application, dialogService, preferencesService, preferences); + return new PushToApplicationSettings(application, dialogService, preferencesService.getFilePreferences(), preferences); } } diff --git a/src/main/java/org/jabref/gui/push/PushToApplicationSettings.java b/src/main/java/org/jabref/gui/push/PushToApplicationSettings.java index e6a312c9b59..162fc0ba98e 100644 --- a/src/main/java/org/jabref/gui/push/PushToApplicationSettings.java +++ b/src/main/java/org/jabref/gui/push/PushToApplicationSettings.java @@ -15,7 +15,7 @@ import org.jabref.gui.icon.IconTheme; import org.jabref.gui.util.FileDialogConfiguration; import org.jabref.logic.l10n.Localization; -import org.jabref.preferences.PreferencesService; +import org.jabref.preferences.FilePreferences; import org.jabref.preferences.PushToApplicationPreferences; public class PushToApplicationSettings { @@ -28,7 +28,7 @@ public class PushToApplicationSettings { public PushToApplicationSettings(PushToApplication application, DialogService dialogService, - PreferencesService preferencesService, + FilePreferences filePreferences, ObjectProperty preferences) { this.application = (AbstractPushToApplication) application; this.preferences = preferences; @@ -61,7 +61,7 @@ public PushToApplicationSettings(PushToApplication application, settingsPane.add(path, 1, 0); FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() - .withInitialDirectory(preferencesService.getWorkingDir()).build(); + .withInitialDirectory(filePreferences.getWorkingDirectory()).build(); browse.setOnAction(e -> dialogService.showFileOpenDialog(fileDialogConfiguration) .ifPresent(f -> path.setText(f.toAbsolutePath().toString()))); settingsPane.add(browse, 2, 0); diff --git a/src/main/java/org/jabref/gui/push/PushToEmacs.java b/src/main/java/org/jabref/gui/push/PushToEmacs.java index feaff80124a..0a1daeacfe5 100644 --- a/src/main/java/org/jabref/gui/push/PushToEmacs.java +++ b/src/main/java/org/jabref/gui/push/PushToEmacs.java @@ -131,6 +131,6 @@ protected String getCommandName() { @Override public PushToApplicationSettings getSettings(PushToApplication application, ObjectProperty preferences) { - return new PushToEmacsSettings(application, dialogService, preferencesService, preferences); + return new PushToEmacsSettings(application, dialogService, preferencesService.getFilePreferences(), preferences); } } diff --git a/src/main/java/org/jabref/gui/push/PushToEmacsSettings.java b/src/main/java/org/jabref/gui/push/PushToEmacsSettings.java index d2c30dcf8ce..b193619b272 100644 --- a/src/main/java/org/jabref/gui/push/PushToEmacsSettings.java +++ b/src/main/java/org/jabref/gui/push/PushToEmacsSettings.java @@ -6,7 +6,7 @@ import org.jabref.gui.DialogService; import org.jabref.logic.l10n.Localization; -import org.jabref.preferences.PreferencesService; +import org.jabref.preferences.FilePreferences; import org.jabref.preferences.PushToApplicationPreferences; public class PushToEmacsSettings extends PushToApplicationSettings { @@ -15,9 +15,9 @@ public class PushToEmacsSettings extends PushToApplicationSettings { public PushToEmacsSettings(PushToApplication application, DialogService dialogService, - PreferencesService preferencesService, + FilePreferences filePreferences, ObjectProperty preferences) { - super(application, dialogService, preferencesService, preferences); + super(application, dialogService, filePreferences, preferences); settingsPane.add(new Label(Localization.lang("Additional parameters") + ":"), 0, 1); settingsPane.add(additionalParams, 1, 1); diff --git a/src/main/java/org/jabref/gui/push/PushToLyx.java b/src/main/java/org/jabref/gui/push/PushToLyx.java index a4c4d9db3f3..398e2ea265e 100644 --- a/src/main/java/org/jabref/gui/push/PushToLyx.java +++ b/src/main/java/org/jabref/gui/push/PushToLyx.java @@ -57,7 +57,7 @@ public void operationCompleted() { @Override public PushToApplicationSettings getSettings(PushToApplication application, ObjectProperty preferences) { - return new PushToLyxSettings(application, dialogService, preferencesService, preferences); + return new PushToLyxSettings(application, dialogService, preferencesService.getFilePreferences(), preferences); } @Override diff --git a/src/main/java/org/jabref/gui/push/PushToLyxSettings.java b/src/main/java/org/jabref/gui/push/PushToLyxSettings.java index fb06a6efed9..98cd15b90f4 100644 --- a/src/main/java/org/jabref/gui/push/PushToLyxSettings.java +++ b/src/main/java/org/jabref/gui/push/PushToLyxSettings.java @@ -4,16 +4,16 @@ import org.jabref.gui.DialogService; import org.jabref.logic.l10n.Localization; -import org.jabref.preferences.PreferencesService; +import org.jabref.preferences.FilePreferences; import org.jabref.preferences.PushToApplicationPreferences; public class PushToLyxSettings extends PushToApplicationSettings { public PushToLyxSettings(PushToApplication application, DialogService dialogService, - PreferencesService preferencesService, + FilePreferences filePreferences, ObjectProperty preferences) { - super(application, dialogService, preferencesService, preferences); + super(application, dialogService, filePreferences, preferences); commandLabel.setText(Localization.lang("Path to LyX pipe") + ":"); } diff --git a/src/main/java/org/jabref/gui/push/PushToVim.java b/src/main/java/org/jabref/gui/push/PushToVim.java index 82d3afbebdb..dc9b9aa06b9 100644 --- a/src/main/java/org/jabref/gui/push/PushToVim.java +++ b/src/main/java/org/jabref/gui/push/PushToVim.java @@ -42,7 +42,7 @@ public JabRefIcon getIcon() { @Override public PushToApplicationSettings getSettings(PushToApplication application, ObjectProperty preferences) { - return new PushToVimSettings(application, dialogService, preferencesService, preferences); + return new PushToVimSettings(application, dialogService, preferencesService.getFilePreferences(), preferences); } @Override diff --git a/src/main/java/org/jabref/gui/push/PushToVimSettings.java b/src/main/java/org/jabref/gui/push/PushToVimSettings.java index c97bececb1e..3a3f179aa31 100644 --- a/src/main/java/org/jabref/gui/push/PushToVimSettings.java +++ b/src/main/java/org/jabref/gui/push/PushToVimSettings.java @@ -6,7 +6,7 @@ import org.jabref.gui.DialogService; import org.jabref.logic.l10n.Localization; -import org.jabref.preferences.PreferencesService; +import org.jabref.preferences.FilePreferences; import org.jabref.preferences.PushToApplicationPreferences; public class PushToVimSettings extends PushToApplicationSettings { @@ -15,9 +15,9 @@ public class PushToVimSettings extends PushToApplicationSettings { public PushToVimSettings(PushToApplication application, DialogService dialogService, - PreferencesService preferencesService, + FilePreferences filePreferences, ObjectProperty preferences) { - super(application, dialogService, preferencesService, preferences); + super(application, dialogService, filePreferences, preferences); settingsPane.add(new Label(Localization.lang("Vim server name") + ":"), 0, 1); settingsPane.add(vimServer, 1, 1); diff --git a/src/main/java/org/jabref/gui/shared/SharedDatabaseLoginDialogView.java b/src/main/java/org/jabref/gui/shared/SharedDatabaseLoginDialogView.java index 1185c91d95e..52e9280f2e7 100644 --- a/src/main/java/org/jabref/gui/shared/SharedDatabaseLoginDialogView.java +++ b/src/main/java/org/jabref/gui/shared/SharedDatabaseLoginDialogView.java @@ -19,6 +19,7 @@ import org.jabref.gui.util.IconValidationDecorator; import org.jabref.logic.l10n.Localization; import org.jabref.logic.shared.DBMSType; +import org.jabref.preferences.PreferencesService; import com.airhacks.afterburner.views.ViewLoader; import com.tobiasdiez.easybind.EasyBind; @@ -46,6 +47,7 @@ public class SharedDatabaseLoginDialogView extends BaseDialog { @FXML private TextField serverTimezone; @Inject private DialogService dialogService; + @Inject private PreferencesService preferencesService; private SharedDatabaseLoginDialogViewModel viewModel; private final ControlsFxVisualizer visualizer = new ControlsFxVisualizer(); @@ -78,7 +80,7 @@ private void openDatabase() { private void initialize() { visualizer.setDecoration(new IconValidationDecorator()); - viewModel = new SharedDatabaseLoginDialogViewModel(frame, dialogService); + viewModel = new SharedDatabaseLoginDialogViewModel(frame, dialogService, preferencesService); databaseType.getItems().addAll(DBMSType.values()); databaseType.getSelectionModel().select(0); @@ -111,13 +113,11 @@ private void initialize() { visualizer.initVisualization(viewModel.portValidation(), port, true); visualizer.initVisualization(viewModel.userValidation(), user, true); - EasyBind.subscribe(autosave.selectedProperty(), selected -> { - visualizer.initVisualization(viewModel.folderValidation(), folder, true); - }); + EasyBind.subscribe(autosave.selectedProperty(), selected -> + visualizer.initVisualization(viewModel.folderValidation(), folder, true)); - EasyBind.subscribe(useSSL.selectedProperty(), selected -> { - visualizer.initVisualization(viewModel.keystoreValidation(), fileKeystore, true); - }); + EasyBind.subscribe(useSSL.selectedProperty(), selected -> + visualizer.initVisualization(viewModel.keystoreValidation(), fileKeystore, true)); }); } diff --git a/src/main/java/org/jabref/gui/shared/SharedDatabaseLoginDialogViewModel.java b/src/main/java/org/jabref/gui/shared/SharedDatabaseLoginDialogViewModel.java index eed130a2f35..95a62d6878d 100644 --- a/src/main/java/org/jabref/gui/shared/SharedDatabaseLoginDialogViewModel.java +++ b/src/main/java/org/jabref/gui/shared/SharedDatabaseLoginDialogViewModel.java @@ -40,6 +40,7 @@ import org.jabref.logic.shared.security.Password; import org.jabref.logic.util.StandardFileType; import org.jabref.model.database.BibDatabaseContext; +import org.jabref.preferences.PreferencesService; import com.tobiasdiez.easybind.EasyBind; import de.saxsys.mvvmfx.utils.validation.CompositeValidator; @@ -72,7 +73,8 @@ public class SharedDatabaseLoginDialogViewModel extends AbstractViewModel { private final JabRefFrame frame; private final DialogService dialogService; - private final SharedDatabasePreferences prefs = new SharedDatabasePreferences(); + private final PreferencesService preferencesService; + private final SharedDatabasePreferences sharedDatabasePreferences = new SharedDatabasePreferences(); private final Validator databaseValidator; private final Validator hostValidator; @@ -82,9 +84,10 @@ public class SharedDatabaseLoginDialogViewModel extends AbstractViewModel { private final Validator keystoreValidator; private final CompositeValidator formValidator; - public SharedDatabaseLoginDialogViewModel(JabRefFrame frame, DialogService dialogService) { + public SharedDatabaseLoginDialogViewModel(JabRefFrame frame, DialogService dialogService, PreferencesService preferencesService) { this.frame = frame; this.dialogService = dialogService; + this.preferencesService = preferencesService; EasyBind.subscribe(selectedDBMSType, selected -> port.setValue(Integer.toString(selected.getDefaultPort()))); @@ -162,7 +165,7 @@ private boolean openSharedDatabase(DBMSConnectionProperties connectionProperties if (!folder.getValue().isEmpty()) { try { - new SaveDatabaseAction(libraryTab, Globals.prefs, Globals.entryTypesManager).saveAs(Path.of(folder.getValue())); + new SaveDatabaseAction(libraryTab, preferencesService, Globals.entryTypesManager).saveAs(Path.of(folder.getValue())); } catch (Throwable e) { LOGGER.error("Error while saving the database", e); } @@ -192,40 +195,40 @@ private boolean openSharedDatabase(DBMSConnectionProperties connectionProperties } private void setPreferences() { - prefs.setType(selectedDBMSType.getValue().toString()); - prefs.setHost(host.getValue()); - prefs.setPort(port.getValue()); - prefs.setName(database.getValue()); - prefs.setUser(user.getValue()); - prefs.setUseSSL(useSSL.getValue()); - prefs.setKeystoreFile(keystore.getValue()); - prefs.setServerTimezone(serverTimezone.getValue()); + sharedDatabasePreferences.setType(selectedDBMSType.getValue().toString()); + sharedDatabasePreferences.setHost(host.getValue()); + sharedDatabasePreferences.setPort(port.getValue()); + sharedDatabasePreferences.setName(database.getValue()); + sharedDatabasePreferences.setUser(user.getValue()); + sharedDatabasePreferences.setUseSSL(useSSL.getValue()); + sharedDatabasePreferences.setKeystoreFile(keystore.getValue()); + sharedDatabasePreferences.setServerTimezone(serverTimezone.getValue()); if (rememberPassword.get()) { try { - prefs.setPassword(new Password(password.getValue(), user.getValue()).encrypt()); + sharedDatabasePreferences.setPassword(new Password(password.getValue(), user.getValue()).encrypt()); } catch (GeneralSecurityException | UnsupportedEncodingException e) { LOGGER.error("Could not store the password due to encryption problems.", e); } } else { - prefs.clearPassword(); // for the case that the password is already set + sharedDatabasePreferences.clearPassword(); // for the case that the password is already set } - prefs.setRememberPassword(rememberPassword.get()); + sharedDatabasePreferences.setRememberPassword(rememberPassword.get()); } /** * Fetches possibly saved data and configures the control elements respectively. */ private void applyPreferences() { - Optional sharedDatabaseType = prefs.getType(); - Optional sharedDatabaseHost = prefs.getHost(); - Optional sharedDatabasePort = prefs.getPort(); - Optional sharedDatabaseName = prefs.getName(); - Optional sharedDatabaseUser = prefs.getUser(); - Optional sharedDatabasePassword = prefs.getPassword(); - boolean sharedDatabaseRememberPassword = prefs.getRememberPassword(); - Optional sharedDatabaseKeystoreFile = prefs.getKeyStoreFile(); + Optional sharedDatabaseType = sharedDatabasePreferences.getType(); + Optional sharedDatabaseHost = sharedDatabasePreferences.getHost(); + Optional sharedDatabasePort = sharedDatabasePreferences.getPort(); + Optional sharedDatabaseName = sharedDatabasePreferences.getName(); + Optional sharedDatabaseUser = sharedDatabasePreferences.getUser(); + Optional sharedDatabasePassword = sharedDatabasePreferences.getPassword(); + boolean sharedDatabaseRememberPassword = sharedDatabasePreferences.getRememberPassword(); + Optional sharedDatabaseKeystoreFile = sharedDatabasePreferences.getKeyStoreFile(); if (sharedDatabaseType.isPresent()) { Optional dbmsType = DBMSType.fromString(sharedDatabaseType.get()); @@ -237,7 +240,7 @@ private void applyPreferences() { sharedDatabaseName.ifPresent(database::set); sharedDatabaseUser.ifPresent(user::set); sharedDatabaseKeystoreFile.ifPresent(keystore::set); - useSSL.setValue(prefs.isUseSSL()); + useSSL.setValue(sharedDatabasePreferences.isUseSSL()); if (sharedDatabasePassword.isPresent() && sharedDatabaseUser.isPresent()) { try { @@ -264,7 +267,7 @@ public void showSaveDbToFileDialog() { FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() .addExtensionFilter(StandardFileType.BIBTEX_DB) .withDefaultExtension(StandardFileType.BIBTEX_DB) - .withInitialDirectory(Globals.prefs.getWorkingDir()) + .withInitialDirectory(preferencesService.getFilePreferences().getWorkingDirectory()) .build(); Optional exportPath = dialogService.showFileSaveDialog(fileDialogConfiguration); exportPath.ifPresent(path -> folder.setValue(path.toString())); @@ -275,7 +278,7 @@ public void showOpenKeystoreFileDialog() { .addExtensionFilter(FileFilterConverter.ANY_FILE) .addExtensionFilter(StandardFileType.JAVA_KEYSTORE) .withDefaultExtension(StandardFileType.JAVA_KEYSTORE) - .withInitialDirectory(Globals.prefs.getWorkingDir()) + .withInitialDirectory(preferencesService.getFilePreferences().getWorkingDirectory()) .build(); Optional keystorePath = dialogService.showFileOpenDialog(fileDialogConfiguration); keystorePath.ifPresent(path -> keystore.setValue(path.toString())); diff --git a/src/main/java/org/jabref/gui/slr/ExistingStudySearchAction.java b/src/main/java/org/jabref/gui/slr/ExistingStudySearchAction.java index 0cd0915ec24..b6ad94cda00 100644 --- a/src/main/java/org/jabref/gui/slr/ExistingStudySearchAction.java +++ b/src/main/java/org/jabref/gui/slr/ExistingStudySearchAction.java @@ -63,8 +63,8 @@ public ExistingStudySearchAction(JabRefFrame frame, this.savePreferences = preferencesService.getSavePreferences(); this.workingDirectory = stateManager.getActiveDatabase() - .map(database -> FileUtil.getInitialDirectory(database, preferencesService)) - .orElse(preferencesService.getWorkingDir()); + .map(database -> FileUtil.getInitialDirectory(database, preferencesService.getFilePreferences().getWorkingDirectory())) + .orElse(preferencesService.getFilePreferences().getWorkingDirectory()); } @Override diff --git a/src/main/java/org/jabref/gui/texparser/ParseLatexDialogViewModel.java b/src/main/java/org/jabref/gui/texparser/ParseLatexDialogViewModel.java index 8bdd823403c..0982fa7002d 100644 --- a/src/main/java/org/jabref/gui/texparser/ParseLatexDialogViewModel.java +++ b/src/main/java/org/jabref/gui/texparser/ParseLatexDialogViewModel.java @@ -69,8 +69,8 @@ public ParseLatexDialogViewModel(BibDatabaseContext databaseContext, this.taskExecutor = taskExecutor; this.preferencesService = preferencesService; this.fileMonitor = fileMonitor; - this.latexFileDirectory = new SimpleStringProperty(databaseContext.getMetaData().getLatexFileDirectory(preferencesService.getUser()) - .orElse(FileUtil.getInitialDirectory(databaseContext, preferencesService)) + this.latexFileDirectory = new SimpleStringProperty(databaseContext.getMetaData().getLatexFileDirectory(preferencesService.getFilePreferences().getUser()) + .orElse(FileUtil.getInitialDirectory(databaseContext, preferencesService.getFilePreferences().getWorkingDirectory())) .toAbsolutePath().toString()); this.root = new SimpleObjectProperty<>(); this.checkedFileList = FXCollections.observableArrayList(); diff --git a/src/main/java/org/jabref/logic/util/io/FileUtil.java b/src/main/java/org/jabref/logic/util/io/FileUtil.java index 369646b7f45..c015f54e2d4 100644 --- a/src/main/java/org/jabref/logic/util/io/FileUtil.java +++ b/src/main/java/org/jabref/logic/util/io/FileUtil.java @@ -27,7 +27,6 @@ import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.jabref.model.util.OptionalUtil; -import org.jabref.preferences.PreferencesService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -364,7 +363,7 @@ public static String toPortableString(Path path) { * @return True if file extension is ".bib", false otherwise */ public static boolean isBibFile(Path file) { - return getFileExtension(file).filter(type -> "bib".equals(type)).isPresent(); + return getFileExtension(file).filter("bib"::equals).isPresent(); } /** @@ -374,13 +373,13 @@ public static boolean isBibFile(Path file) { * @return True if file extension is ".bib", false otherwise */ public static boolean isPDFFile(Path file) { - return getFileExtension(file).filter(type -> "pdf".equals(type)).isPresent(); + return getFileExtension(file).filter("pdf"::equals).isPresent(); } /** * @return Path of current panel database directory or the standard working directory in case the datbase was not saved yet */ - public static Path getInitialDirectory(BibDatabaseContext databaseContext, PreferencesService preferencesService) { - return databaseContext.getDatabasePath().map(Path::getParent).orElse(preferencesService.getWorkingDir()); + public static Path getInitialDirectory(BibDatabaseContext databaseContext, Path workingDirectory) { + return databaseContext.getDatabasePath().map(Path::getParent).orElse(workingDirectory); } } diff --git a/src/main/java/org/jabref/preferences/JabRefPreferences.java b/src/main/java/org/jabref/preferences/JabRefPreferences.java index 22cfdc503a8..6e8f067aae5 100644 --- a/src/main/java/org/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/org/jabref/preferences/JabRefPreferences.java @@ -802,22 +802,6 @@ private static void insertDefaultCleanupPreset(Map storage) { storage.put(CLEANUP_FORMATTERS, convertListToString(Cleanups.DEFAULT_SAVE_ACTIONS.getAsStringList(OS.NEWLINE))); } - @Override - public String getUser() { - if (StringUtil.isNotBlank(userName)) { - return userName; - } - - try { - userName = get(DEFAULT_OWNER) + '-' + InetAddress.getLocalHost().getHostName(); - return userName; - } catch (UnknownHostException ex) { - LOGGER.error("Hostname not found. Please go to https://docs.jabref.org/ to find possible " + - "problem resolution", ex); - return get(DEFAULT_OWNER); - } - } - public void setLanguageDependentDefaultValues() { // Entry editor tab 0: defaults.put(CUSTOM_TAB_NAME + "_def0", Localization.lang("General")); @@ -2157,11 +2141,6 @@ public void storeFileHistory(FileHistory history) { } } - @Override - public Path getWorkingDir() { - return Path.of(get(WORKING_DIRECTORY)); - } - @Override public FilePreferences getFilePreferences() { if (Objects.nonNull(filePreferences)) { @@ -2188,6 +2167,21 @@ public FilePreferences getFilePreferences() { return filePreferences; } + private String getUser() { + if (StringUtil.isNotBlank(userName)) { + return userName; + } + + try { + userName = get(DEFAULT_OWNER) + '-' + InetAddress.getLocalHost().getHostName(); + return userName; + } catch (UnknownHostException ex) { + LOGGER.error("Hostname not found. Please go to https://docs.jabref.org/ to find possible " + + "problem resolution", ex); + return get(DEFAULT_OWNER); + } + } + @Override public AutoLinkPreferences getAutoLinkPreferences() { if (Objects.nonNull(autoLinkPreferences)) { diff --git a/src/main/java/org/jabref/preferences/PreferencesService.java b/src/main/java/org/jabref/preferences/PreferencesService.java index d3b002bfdae..8712f25eb4a 100644 --- a/src/main/java/org/jabref/preferences/PreferencesService.java +++ b/src/main/java/org/jabref/preferences/PreferencesService.java @@ -95,8 +95,6 @@ public interface PreferencesService { SavePreferences getSavePreferences(); - String getUser(); - SaveOrderConfig getExportSaveOrder(); void storeExportSaveOrder(SaveOrderConfig config); @@ -290,12 +288,6 @@ public interface PreferencesService { void clearEditedFiles(); - /** - * Gets the directory for file browsing dialogs. This ensures that each browse dialog starts in the last visited - * browse directory. - */ - Path getWorkingDir(); - //************************************************************************************************************* // Misc preferences //************************************************************************************************************* diff --git a/src/test/java/org/jabref/gui/groups/GroupDialogViewModelTest.java b/src/test/java/org/jabref/gui/groups/GroupDialogViewModelTest.java index 9249f2f8aa8..fe3913d3948 100644 --- a/src/test/java/org/jabref/gui/groups/GroupDialogViewModelTest.java +++ b/src/test/java/org/jabref/gui/groups/GroupDialogViewModelTest.java @@ -28,7 +28,7 @@ class GroupDialogViewModelTest { private final MetaData metaData = mock(MetaData.class); @BeforeEach - void setUp(@TempDir Path temporaryFolder) throws Exception { + void setUp(@TempDir Path temporaryFolder) { this.temporaryFolder = temporaryFolder; bibDatabaseContext = new BibDatabaseContext(); DialogService dialogService = mock(DialogService.class); @@ -38,7 +38,7 @@ void setUp(@TempDir Path temporaryFolder) throws Exception { PreferencesService preferencesService = mock(PreferencesService.class); when(preferencesService.getKeywordDelimiter()).thenReturn(','); - when(preferencesService.getUser()).thenReturn("MockedUser"); + when(preferencesService.getFilePreferences().getUser()).thenReturn("MockedUser"); bibDatabaseContext.setMetaData(metaData); @@ -57,7 +57,7 @@ void validateExistingAbsolutePath() throws Exception { } @Test - void validateNonExistingAbsolutePath() throws Exception { + void validateNonExistingAbsolutePath() { var notAnAuxFile = temporaryFolder.resolve("notanauxfile.aux").toAbsolutePath(); viewModel.texGroupFilePathProperty().setValue(notAnAuxFile.toString()); assertFalse(viewModel.texGroupFilePathValidatonStatus().isValid()); From cdbe75f0d45f32a1e71fdf597aa876f2420cc122 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Sat, 20 Nov 2021 19:08:21 +0100 Subject: [PATCH 3/8] Refactored NameFormatterPreferences --- .../nameformatter/NameFormatterTab.java | 2 +- .../NameFormatterTabViewModel.java | 22 ++++++---------- .../format/NameFormatterPreferences.java | 25 ++++++++++++++----- .../jabref/preferences/JabRefPreferences.java | 20 +++++++++------ .../preferences/PreferencesService.java | 2 -- 5 files changed, 40 insertions(+), 31 deletions(-) diff --git a/src/main/java/org/jabref/gui/preferences/nameformatter/NameFormatterTab.java b/src/main/java/org/jabref/gui/preferences/nameformatter/NameFormatterTab.java index 997abc78d9b..03038872af2 100644 --- a/src/main/java/org/jabref/gui/preferences/nameformatter/NameFormatterTab.java +++ b/src/main/java/org/jabref/gui/preferences/nameformatter/NameFormatterTab.java @@ -44,7 +44,7 @@ public String getTabName() { } public void initialize() { - this.viewModel = new NameFormatterTabViewModel(dialogService, preferencesService); + this.viewModel = new NameFormatterTabViewModel(preferencesService.getNameFormatterPreferences()); formatterNameColumn.setSortable(true); formatterNameColumn.setReorderable(false); diff --git a/src/main/java/org/jabref/gui/preferences/nameformatter/NameFormatterTabViewModel.java b/src/main/java/org/jabref/gui/preferences/nameformatter/NameFormatterTabViewModel.java index d0463324446..3bcfb75cc5f 100644 --- a/src/main/java/org/jabref/gui/preferences/nameformatter/NameFormatterTabViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/nameformatter/NameFormatterTabViewModel.java @@ -9,11 +9,9 @@ import javafx.beans.property.StringProperty; import javafx.collections.FXCollections; -import org.jabref.gui.DialogService; import org.jabref.gui.preferences.PreferenceTabViewModel; import org.jabref.logic.layout.format.NameFormatterPreferences; import org.jabref.model.strings.StringUtil; -import org.jabref.preferences.PreferencesService; public class NameFormatterTabViewModel implements PreferenceTabViewModel { @@ -21,21 +19,17 @@ public class NameFormatterTabViewModel implements PreferenceTabViewModel { private final StringProperty addFormatterNameProperty = new SimpleStringProperty(); private final StringProperty addFormatterStringProperty = new SimpleStringProperty(); - private final DialogService dialogService; - private final PreferencesService preferences; - private final NameFormatterPreferences initialNameFormatterPreferences; + private final NameFormatterPreferences nameFormatterPreferences; - NameFormatterTabViewModel(DialogService dialogService, PreferencesService preferences) { - this.dialogService = dialogService; - this.preferences = preferences; - this.initialNameFormatterPreferences = preferences.getNameFormatterPreferences(); + NameFormatterTabViewModel(NameFormatterPreferences preferences) { + this.nameFormatterPreferences = preferences; } @Override public void setValues() { formatterListProperty.clear(); - List names = initialNameFormatterPreferences.getNameFormatterKey(); - List formats = initialNameFormatterPreferences.getNameFormatterValue(); + List names = nameFormatterPreferences.getNameFormatterKey(); + List formats = nameFormatterPreferences.getNameFormatterValue(); for (int i = 0; i < names.size(); i++) { if (i < formats.size()) { @@ -57,10 +51,8 @@ public void storeSettings() { formats.add(formatterListItem.getFormat()); } - NameFormatterPreferences newNameFormatterPreferences = new NameFormatterPreferences( - names, - formats); - preferences.storeNameFormatterPreferences(newNameFormatterPreferences); + nameFormatterPreferences.setNameFormatterKey(names); + nameFormatterPreferences.setNameFormatterValue(formats); } public void addFormatter() { diff --git a/src/main/java/org/jabref/logic/layout/format/NameFormatterPreferences.java b/src/main/java/org/jabref/logic/layout/format/NameFormatterPreferences.java index 922bc12b2e0..486f92abb5c 100644 --- a/src/main/java/org/jabref/logic/layout/format/NameFormatterPreferences.java +++ b/src/main/java/org/jabref/logic/layout/format/NameFormatterPreferences.java @@ -2,21 +2,34 @@ import java.util.List; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; + public class NameFormatterPreferences { - private final List nameFormatterKey; - private final List nameFormatterValue; + private final ObservableList nameFormatterKey; + private final ObservableList nameFormatterValue; public NameFormatterPreferences(List nameFormatterKey, List nameFormatterValue) { - this.nameFormatterKey = nameFormatterKey; - this.nameFormatterValue = nameFormatterValue; + this.nameFormatterKey = FXCollections.observableList(nameFormatterKey); + this.nameFormatterValue = FXCollections.observableList(nameFormatterValue); } - public List getNameFormatterKey() { + public ObservableList getNameFormatterKey() { return nameFormatterKey; } - public List getNameFormatterValue() { + public ObservableList getNameFormatterValue() { return nameFormatterValue; } + + public void setNameFormatterKey(List list) { + nameFormatterKey.clear(); + nameFormatterKey.addAll(list); + } + + public void setNameFormatterValue(List list) { + nameFormatterValue.clear(); + nameFormatterValue.addAll(list); + } } diff --git a/src/main/java/org/jabref/preferences/JabRefPreferences.java b/src/main/java/org/jabref/preferences/JabRefPreferences.java index 2b1d9c003c6..7702bca3761 100644 --- a/src/main/java/org/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/org/jabref/preferences/JabRefPreferences.java @@ -157,7 +157,7 @@ public class JabRefPreferences implements PreferencesService { public static final String REFORMAT_FILE_ON_SAVE_AND_EXPORT = "reformatFileOnSaveAndExport"; public static final String EXPORT_IN_ORIGINAL_ORDER = "exportInOriginalOrder"; public static final String EXPORT_IN_SPECIFIED_ORDER = "exportInSpecifiedOrder"; - + public static final String EXPORT_PRIMARY_SORT_FIELD = "exportPriSort"; public static final String EXPORT_PRIMARY_SORT_DESCENDING = "exportPriDescending"; public static final String EXPORT_SECONDARY_SORT_FIELD = "exportSecSort"; @@ -439,6 +439,7 @@ public class JabRefPreferences implements PreferencesService { private SearchPreferences searchPreferences; private AutoLinkPreferences autoLinkPreferences; private ImportExportPreferences importExportPreferences; + private NameFormatterPreferences nameFormatterPreferences; // The constructor is made private to enforce this as a singleton class: private JabRefPreferences() { @@ -2610,15 +2611,20 @@ public void storeXmpPreferences(XmpPreferences preferences) { @Override public NameFormatterPreferences getNameFormatterPreferences() { - return new NameFormatterPreferences( + if (Objects.nonNull(nameFormatterPreferences)) { + return nameFormatterPreferences; + } + + nameFormatterPreferences = new NameFormatterPreferences( getStringList(NAME_FORMATER_KEY), getStringList(NAME_FORMATTER_VALUE)); - } - @Override - public void storeNameFormatterPreferences(NameFormatterPreferences preferences) { - putStringList(NAME_FORMATER_KEY, preferences.getNameFormatterKey()); - putStringList(NAME_FORMATTER_VALUE, preferences.getNameFormatterValue()); + nameFormatterPreferences.getNameFormatterKey().addListener((InvalidationListener) change -> + putStringList(NAME_FORMATER_KEY, nameFormatterPreferences.getNameFormatterKey())); + nameFormatterPreferences.getNameFormatterValue().addListener((InvalidationListener) change -> + putStringList(NAME_FORMATTER_VALUE, nameFormatterPreferences.getNameFormatterValue())); + + return nameFormatterPreferences; } @Override diff --git a/src/main/java/org/jabref/preferences/PreferencesService.java b/src/main/java/org/jabref/preferences/PreferencesService.java index 373050cbf09..22248f01ae2 100644 --- a/src/main/java/org/jabref/preferences/PreferencesService.java +++ b/src/main/java/org/jabref/preferences/PreferencesService.java @@ -296,8 +296,6 @@ public interface PreferencesService { NameFormatterPreferences getNameFormatterPreferences(); - void storeNameFormatterPreferences(NameFormatterPreferences preferences); - AutoCompletePreferences getAutoCompletePreferences(); void storeAutoCompletePreferences(AutoCompletePreferences autoCompletePreferences); From 400450b225e4c761b8b33fbb9d155b4a5937cc12 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Sat, 20 Nov 2021 19:31:44 +0100 Subject: [PATCH 4/8] Refactored VersionPreferences --- src/main/java/org/jabref/gui/JabRefGUI.java | 4 ++-- .../org/jabref/gui/help/NewVersionDialog.java | 8 +++---- .../gui/help/SearchForUpdateAction.java | 2 +- .../org/jabref/gui/help/VersionWorker.java | 21 +++++++++++-------- .../jabref/preferences/JabRefPreferences.java | 15 +++++++------ .../preferences/PreferencesService.java | 2 -- .../preferences/VersionPreferences.java | 15 +++++++++++-- 7 files changed, 40 insertions(+), 27 deletions(-) diff --git a/src/main/java/org/jabref/gui/JabRefGUI.java b/src/main/java/org/jabref/gui/JabRefGUI.java index c139ae93a26..4edab4cd9ff 100644 --- a/src/main/java/org/jabref/gui/JabRefGUI.java +++ b/src/main/java/org/jabref/gui/JabRefGUI.java @@ -59,9 +59,9 @@ public JabRefGUI(Stage mainStage, List databases, boolean isBlank, openWindow(mainStage); new VersionWorker(Globals.BUILD_INFO.version, - preferencesService.getVersionPreferences().getIgnoredVersion(), mainFrame.getDialogService(), - Globals.TASK_EXECUTOR) + Globals.TASK_EXECUTOR, + preferencesService.getVersionPreferences()) .checkForNewVersionDelayed(); } diff --git a/src/main/java/org/jabref/gui/help/NewVersionDialog.java b/src/main/java/org/jabref/gui/help/NewVersionDialog.java index 5c61943d2aa..2ab73b250a5 100644 --- a/src/main/java/org/jabref/gui/help/NewVersionDialog.java +++ b/src/main/java/org/jabref/gui/help/NewVersionDialog.java @@ -7,14 +7,12 @@ import javafx.scene.control.Label; import javafx.scene.layout.VBox; -import org.jabref.gui.Globals; import org.jabref.gui.desktop.JabRefDesktop; import org.jabref.gui.util.BaseDialog; import org.jabref.logic.l10n.Localization; import org.jabref.logic.util.Version; -import org.jabref.preferences.VersionPreferences; -public class NewVersionDialog extends BaseDialog { +public class NewVersionDialog extends BaseDialog { public NewVersionDialog(Version currentVersion, Version latestVersion) { this.setTitle(Localization.lang("New version available")); @@ -25,11 +23,11 @@ public NewVersionDialog(Version currentVersion, Version latestVersion) { this.getDialogPane().getButtonTypes().addAll(btnIgnoreUpdate, btnDownloadUpdate, btnRemindMeLater); this.setResultConverter(button -> { if (button == btnIgnoreUpdate) { - Globals.prefs.storeVersionPreferences(new VersionPreferences(latestVersion)); + return false; } else if (button == btnDownloadUpdate) { JabRefDesktop.openBrowserShowPopup(Version.JABREF_DOWNLOAD_URL); } - return null; + return true; }); Button defaultButton = (Button) this.getDialogPane().lookupButton(btnDownloadUpdate); defaultButton.setDefaultButton(true); diff --git a/src/main/java/org/jabref/gui/help/SearchForUpdateAction.java b/src/main/java/org/jabref/gui/help/SearchForUpdateAction.java index 5e39a0e6d7c..ddf013c2ded 100644 --- a/src/main/java/org/jabref/gui/help/SearchForUpdateAction.java +++ b/src/main/java/org/jabref/gui/help/SearchForUpdateAction.java @@ -22,7 +22,7 @@ public SearchForUpdateAction(BuildInfo buildInfo, VersionPreferences versionPref @Override public void execute() { - new VersionWorker(buildInfo.version, versionPreferences.getIgnoredVersion(), dialogService, taskExecutor) + new VersionWorker(buildInfo.version, dialogService, taskExecutor, versionPreferences) .checkForNewVersionAsync(); } } diff --git a/src/main/java/org/jabref/gui/help/VersionWorker.java b/src/main/java/org/jabref/gui/help/VersionWorker.java index 139565c9df8..e22ed8aa583 100644 --- a/src/main/java/org/jabref/gui/help/VersionWorker.java +++ b/src/main/java/org/jabref/gui/help/VersionWorker.java @@ -11,6 +11,7 @@ import org.jabref.gui.util.TaskExecutor; import org.jabref.logic.l10n.Localization; import org.jabref.logic.util.Version; +import org.jabref.preferences.VersionPreferences; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,19 +33,19 @@ public class VersionWorker { */ private final Version installedVersion; - /** - * The version which was previously ignored by the user - */ - private final Version toBeIgnored; - private final DialogService dialogService; private final TaskExecutor taskExecutor; + private final VersionPreferences versionPreferences; - public VersionWorker(Version installedVersion, Version toBeIgnored, DialogService dialogService, TaskExecutor taskExecutor) { + public VersionWorker(Version installedVersion, + + DialogService dialogService, + TaskExecutor taskExecutor, + VersionPreferences versionPreferences) { this.installedVersion = Objects.requireNonNull(installedVersion); - this.toBeIgnored = Objects.requireNonNull(toBeIgnored); this.dialogService = Objects.requireNonNull(dialogService); this.taskExecutor = Objects.requireNonNull(taskExecutor); + this.versionPreferences = versionPreferences; } /** @@ -88,13 +89,15 @@ private void showConnectionError(Exception exception, boolean manualExecution) { */ private void showUpdateInfo(Optional newerVersion, boolean manualExecution) { // no new version could be found, only respect the ignored version on automated version checks - if (!newerVersion.isPresent() || (newerVersion.get().equals(toBeIgnored) && !manualExecution)) { + if (newerVersion.isEmpty() || (newerVersion.get().equals(versionPreferences.getIgnoredVersion()) && !manualExecution)) { if (manualExecution) { dialogService.notify(Localization.lang("JabRef is up-to-date.")); } } else { // notify the user about a newer version - dialogService.showCustomDialogAndWait(new NewVersionDialog(installedVersion, newerVersion.get())); + if (dialogService.showCustomDialogAndWait(new NewVersionDialog(installedVersion, newerVersion.get())).orElse(true)) { + versionPreferences.setIgnoredVersion(newerVersion.get()); + } } } } diff --git a/src/main/java/org/jabref/preferences/JabRefPreferences.java b/src/main/java/org/jabref/preferences/JabRefPreferences.java index 7702bca3761..90b11ca154c 100644 --- a/src/main/java/org/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/org/jabref/preferences/JabRefPreferences.java @@ -440,6 +440,7 @@ public class JabRefPreferences implements PreferencesService { private AutoLinkPreferences autoLinkPreferences; private ImportExportPreferences importExportPreferences; private NameFormatterPreferences nameFormatterPreferences; + private VersionPreferences versionPreferences; // The constructor is made private to enforce this as a singleton class: private JabRefPreferences() { @@ -1112,13 +1113,15 @@ public void setOpenOfficePreferences(OpenOfficePreferences openOfficePreferences @Override public VersionPreferences getVersionPreferences() { - Version ignoredVersion = Version.parse(get(VERSION_IGNORED_UPDATE)); - return new VersionPreferences(ignoredVersion); - } + if (Objects.nonNull(versionPreferences)) { + return versionPreferences; + } - @Override - public void storeVersionPreferences(VersionPreferences versionPreferences) { - put(VERSION_IGNORED_UPDATE, versionPreferences.getIgnoredVersion().toString()); + versionPreferences = new VersionPreferences(Version.parse(get(VERSION_IGNORED_UPDATE))); + + EasyBind.listen(versionPreferences.ignoredVersionProperty(), (obs, oldValue, newValue) -> put(VERSION_IGNORED_UPDATE, newValue.toString())); + + return versionPreferences; } @Override diff --git a/src/main/java/org/jabref/preferences/PreferencesService.java b/src/main/java/org/jabref/preferences/PreferencesService.java index 22248f01ae2..a40ebfed836 100644 --- a/src/main/java/org/jabref/preferences/PreferencesService.java +++ b/src/main/java/org/jabref/preferences/PreferencesService.java @@ -55,8 +55,6 @@ public interface PreferencesService { VersionPreferences getVersionPreferences(); - void storeVersionPreferences(VersionPreferences versionPreferences); - JournalAbbreviationPreferences getJournalAbbreviationPreferences(); void storeKeyBindingRepository(KeyBindingRepository keyBindingRepository); diff --git a/src/main/java/org/jabref/preferences/VersionPreferences.java b/src/main/java/org/jabref/preferences/VersionPreferences.java index 308c6702c4e..39fb72e61cb 100644 --- a/src/main/java/org/jabref/preferences/VersionPreferences.java +++ b/src/main/java/org/jabref/preferences/VersionPreferences.java @@ -1,16 +1,27 @@ package org.jabref.preferences; +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleObjectProperty; + import org.jabref.logic.util.Version; public class VersionPreferences { - private final Version ignoredVersion; + private final ObjectProperty ignoredVersion; public VersionPreferences(Version ignoredVersion) { - this.ignoredVersion = ignoredVersion; + this.ignoredVersion = new SimpleObjectProperty<>(ignoredVersion); } public Version getIgnoredVersion() { + return ignoredVersion.getValue(); + } + + public ObjectProperty ignoredVersionProperty() { return ignoredVersion; } + + public void setIgnoredVersion(Version ignoredVersion) { + this.ignoredVersion.set(ignoredVersion); + } } From fc2408f262cc6d9d61c624ec193e1f64d477ab89 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Sat, 20 Nov 2021 22:29:10 +0100 Subject: [PATCH 5/8] Refactored SpecialFieldsPreferences, removed orphaned autosync prefs --- src/main/java/org/jabref/gui/JabRefFrame.java | 30 ++++++++------- src/main/java/org/jabref/gui/LibraryTab.java | 3 -- .../jabref/gui/maintable/RightClickMenu.java | 14 +++---- .../gui/preferences/table/TableTab.fxml | 12 ------ .../gui/preferences/table/TableTab.java | 4 -- .../preferences/table/TableTabViewModel.java | 37 ++----------------- .../SpecialFieldDatabaseChangeListener.java | 35 ------------------ .../SpecialFieldMenuItemFactory.java | 7 +++- .../SpecialFieldsPreferences.java | 27 ++++++-------- .../importer/ImportFormatPreferences.java | 13 +------ .../jabref/preferences/JabRefPreferences.java | 29 ++++++--------- .../preferences/PreferencesService.java | 2 - src/main/resources/l10n/JabRef_en.properties | 8 +--- .../org/jabref/logic/crawler/CrawlerTest.java | 1 - .../StudyDatabaseToFetcherConverterTest.java | 1 - .../logic/crawler/StudyRepositoryTest.java | 1 - 16 files changed, 55 insertions(+), 169 deletions(-) delete mode 100644 src/main/java/org/jabref/gui/specialfields/SpecialFieldDatabaseChangeListener.java diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index 073371ea4bf..f9657fb67d4 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -754,19 +754,21 @@ private MenuBar createMenu() { factory.createMenuItem(StandardActions.MASS_SET_FIELDS, new MassSetFieldsAction(stateManager, dialogService, undoManager)) ); - if (prefs.getSpecialFieldsPreferences().isSpecialFieldsEnabled()) { - edit.getItems().addAll( - new SeparatorMenuItem(), - // ToDo: SpecialField needs the active BasePanel to mark it as changed. - // Refactor BasePanel, should mark the BibDatabaseContext or the UndoManager as dirty instead! - SpecialFieldMenuItemFactory.createSpecialFieldMenu(SpecialField.RANKING, factory, this, dialogService, prefs, undoManager, stateManager), - SpecialFieldMenuItemFactory.getSpecialFieldSingleItem(SpecialField.RELEVANCE, factory, this, dialogService, prefs, undoManager, stateManager), - SpecialFieldMenuItemFactory.getSpecialFieldSingleItem(SpecialField.QUALITY, factory, this, dialogService, prefs, undoManager, stateManager), - SpecialFieldMenuItemFactory.getSpecialFieldSingleItem(SpecialField.PRINTED, factory, this, dialogService, prefs, undoManager, stateManager), - SpecialFieldMenuItemFactory.createSpecialFieldMenu(SpecialField.PRIORITY, factory, this, dialogService, prefs, undoManager, stateManager), - SpecialFieldMenuItemFactory.createSpecialFieldMenu(SpecialField.READ_STATUS, factory, this, dialogService, prefs, undoManager, stateManager) - ); - } + SeparatorMenuItem specialFieldsSeparator = new SeparatorMenuItem(); + specialFieldsSeparator.visibleProperty().bind(prefs.getSpecialFieldsPreferences().specialFieldsEnabledProperty()); + + edit.getItems().addAll( + specialFieldsSeparator, + // ToDo: SpecialField needs the active BasePanel to mark it as changed. + // Refactor BasePanel, should mark the BibDatabaseContext or the UndoManager as dirty instead! + SpecialFieldMenuItemFactory.createSpecialFieldMenu(SpecialField.RANKING, factory, this, dialogService, prefs, undoManager, stateManager), + SpecialFieldMenuItemFactory.getSpecialFieldSingleItem(SpecialField.RELEVANCE, factory, this, dialogService, prefs, undoManager, stateManager), + SpecialFieldMenuItemFactory.getSpecialFieldSingleItem(SpecialField.QUALITY, factory, this, dialogService, prefs, undoManager, stateManager), + SpecialFieldMenuItemFactory.getSpecialFieldSingleItem(SpecialField.PRINTED, factory, this, dialogService, prefs, undoManager, stateManager), + SpecialFieldMenuItemFactory.createSpecialFieldMenu(SpecialField.PRIORITY, factory, this, dialogService, prefs, undoManager, stateManager), + SpecialFieldMenuItemFactory.createSpecialFieldMenu(SpecialField.READ_STATUS, factory, this, dialogService, prefs, undoManager, stateManager) + ); + // @formatter:off library.getItems().addAll( @@ -1192,7 +1194,7 @@ private Boolean confirmEmptyEntry(LibraryTab libraryTab, BibDatabaseContext cont if (response.isPresent() && response.get().equals(deleteEmptyEntries)) { // The user wants to delete. try { - for (BibEntry currentEntry : new ArrayList(context.getEntries())) { + for (BibEntry currentEntry : new ArrayList<>(context.getEntries())) { if (currentEntry.getFields().isEmpty()) { context.getDatabase().removeEntries(Collections.singletonList(currentEntry)); } diff --git a/src/main/java/org/jabref/gui/LibraryTab.java b/src/main/java/org/jabref/gui/LibraryTab.java index 2e75f23a18f..cf5504b591f 100644 --- a/src/main/java/org/jabref/gui/LibraryTab.java +++ b/src/main/java/org/jabref/gui/LibraryTab.java @@ -31,7 +31,6 @@ import org.jabref.gui.importer.actions.OpenDatabaseAction; import org.jabref.gui.maintable.MainTable; import org.jabref.gui.maintable.MainTableDataModel; -import org.jabref.gui.specialfields.SpecialFieldDatabaseChangeListener; import org.jabref.gui.undo.CountingUndoManager; import org.jabref.gui.undo.NamedCompound; import org.jabref.gui.undo.UndoableFieldChange; @@ -465,8 +464,6 @@ public void editEntryAndFocusField(BibEntry entry, Field field) { } private void createMainTable() { - bibDatabaseContext.getDatabase().registerListener(SpecialFieldDatabaseChangeListener.INSTANCE); - mainTable = new MainTable(tableModel, this, bibDatabaseContext, diff --git a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java index 4834c920790..31fd414d1b0 100644 --- a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java +++ b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java @@ -57,14 +57,12 @@ public static ContextMenu create(BibEntryTableViewModel entry, contextMenu.getItems().add(new SeparatorMenuItem()); - if (preferencesService.getSpecialFieldsPreferences().isSpecialFieldsEnabled()) { - contextMenu.getItems().add(SpecialFieldMenuItemFactory.createSpecialFieldMenu(SpecialField.RANKING, factory, libraryTab.frame(), dialogService, preferencesService, undoManager, stateManager)); - contextMenu.getItems().add(SpecialFieldMenuItemFactory.getSpecialFieldSingleItem(SpecialField.RELEVANCE, factory, libraryTab.frame(), dialogService, preferencesService, undoManager, stateManager)); - contextMenu.getItems().add(SpecialFieldMenuItemFactory.getSpecialFieldSingleItem(SpecialField.QUALITY, factory, libraryTab.frame(), dialogService, preferencesService, undoManager, stateManager)); - contextMenu.getItems().add(SpecialFieldMenuItemFactory.getSpecialFieldSingleItem(SpecialField.PRINTED, factory, libraryTab.frame(), dialogService, preferencesService, undoManager, stateManager)); - contextMenu.getItems().add(SpecialFieldMenuItemFactory.createSpecialFieldMenu(SpecialField.PRIORITY, factory, libraryTab.frame(), dialogService, preferencesService, undoManager, stateManager)); - contextMenu.getItems().add(SpecialFieldMenuItemFactory.createSpecialFieldMenu(SpecialField.READ_STATUS, factory, libraryTab.frame(), dialogService, preferencesService, undoManager, stateManager)); - } + contextMenu.getItems().add(SpecialFieldMenuItemFactory.createSpecialFieldMenu(SpecialField.RANKING, factory, libraryTab.frame(), dialogService, preferencesService, undoManager, stateManager)); + contextMenu.getItems().add(SpecialFieldMenuItemFactory.getSpecialFieldSingleItem(SpecialField.RELEVANCE, factory, libraryTab.frame(), dialogService, preferencesService, undoManager, stateManager)); + contextMenu.getItems().add(SpecialFieldMenuItemFactory.getSpecialFieldSingleItem(SpecialField.QUALITY, factory, libraryTab.frame(), dialogService, preferencesService, undoManager, stateManager)); + contextMenu.getItems().add(SpecialFieldMenuItemFactory.getSpecialFieldSingleItem(SpecialField.PRINTED, factory, libraryTab.frame(), dialogService, preferencesService, undoManager, stateManager)); + contextMenu.getItems().add(SpecialFieldMenuItemFactory.createSpecialFieldMenu(SpecialField.PRIORITY, factory, libraryTab.frame(), dialogService, preferencesService, undoManager, stateManager)); + contextMenu.getItems().add(SpecialFieldMenuItemFactory.createSpecialFieldMenu(SpecialField.READ_STATUS, factory, libraryTab.frame(), dialogService, preferencesService, undoManager, stateManager)); contextMenu.getItems().add(new SeparatorMenuItem()); diff --git a/src/main/java/org/jabref/gui/preferences/table/TableTab.fxml b/src/main/java/org/jabref/gui/preferences/table/TableTab.fxml index c65b263263f..0ff264f489f 100644 --- a/src/main/java/org/jabref/gui/preferences/table/TableTab.fxml +++ b/src/main/java/org/jabref/gui/preferences/table/TableTab.fxml @@ -17,7 +17,6 @@ xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="org.jabref.gui.preferences.table.TableTab"> - @@ -88,17 +87,6 @@