From e38a45227244d944e27d193bf53df33854137881 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Tue, 31 Aug 2021 00:22:45 +0200 Subject: [PATCH 1/5] Extracted Globals.prefs from JabRefDesktop --- src/main/java/org/jabref/gui/JabRefFrame.java | 6 ++--- .../org/jabref/gui/OpenConsoleAction.java | 7 ++++-- .../org/jabref/gui/SendAsEMailAction.java | 2 +- .../org/jabref/gui/desktop/JabRefDesktop.java | 25 +++++++++++-------- .../gui/fieldeditors/LinkedFileViewModel.java | 4 +-- .../jabref/gui/maintable/OpenUrlAction.java | 2 +- .../jabref/gui/maintable/RightClickMenu.java | 2 +- .../maintable/SearchShortScienceAction.java | 7 ++++-- .../columns/LinkedIdentifierColumn.java | 2 +- .../StyleSelectDialogViewModel.java | 2 +- .../ProtectedTermsTabViewModel.java | 2 +- 11 files changed, 36 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index 6361fd9d76e..9c63ee011a3 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -845,7 +845,7 @@ private MenuBar createMenu() { factory.createMenuItem(StandardActions.SHOW_PDF_VIEWER, new ShowDocumentViewerAction(stateManager, prefs)), factory.createMenuItem(StandardActions.EDIT_ENTRY, new OpenEntryEditorAction(this, stateManager)), - factory.createMenuItem(StandardActions.OPEN_CONSOLE, new OpenConsoleAction(stateManager)) + factory.createMenuItem(StandardActions.OPEN_CONSOLE, new OpenConsoleAction(stateManager, prefs)) ); options.getItems().addAll( @@ -1004,7 +1004,7 @@ private ContextMenu createTabContextMenu(KeyBindingRepository keyBindingReposito contextMenu.getItems().addAll( factory.createMenuItem(StandardActions.OPEN_DATABASE_FOLDER, new OpenDatabaseFolder()), - factory.createMenuItem(StandardActions.OPEN_CONSOLE, new OpenConsoleAction(stateManager)), + factory.createMenuItem(StandardActions.OPEN_CONSOLE, new OpenConsoleAction(stateManager, prefs)), new SeparatorMenuItem(), factory.createMenuItem(StandardActions.CLOSE_LIBRARY, new CloseDatabaseAction()), factory.createMenuItem(StandardActions.CLOSE_OTHER_LIBRARIES, new CloseOthersDatabaseAction()), @@ -1238,7 +1238,7 @@ private class OpenDatabaseFolder extends SimpleCommand { public void execute() { stateManager.getActiveDatabase().flatMap(BibDatabaseContext::getDatabasePath).ifPresent(path -> { try { - JabRefDesktop.openFolderAndSelectFile(path); + JabRefDesktop.openFolderAndSelectFile(path, prefs); } catch (IOException e) { LOGGER.info("Could not open folder", e); } diff --git a/src/main/java/org/jabref/gui/OpenConsoleAction.java b/src/main/java/org/jabref/gui/OpenConsoleAction.java index 666094c3a4f..c95ff39d65b 100644 --- a/src/main/java/org/jabref/gui/OpenConsoleAction.java +++ b/src/main/java/org/jabref/gui/OpenConsoleAction.java @@ -6,6 +6,7 @@ import org.jabref.gui.actions.SimpleCommand; import org.jabref.gui.desktop.JabRefDesktop; import org.jabref.model.database.BibDatabaseContext; +import org.jabref.preferences.PreferencesService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,9 +15,11 @@ public class OpenConsoleAction extends SimpleCommand { private static final Logger LOGGER = LoggerFactory.getLogger(OpenConsoleAction.class); private final StateManager stateManager; + private final PreferencesService preferencesService; - public OpenConsoleAction(StateManager stateManager) { + public OpenConsoleAction(StateManager stateManager, PreferencesService preferencesService) { this.stateManager = stateManager; + this.preferencesService = preferencesService; this.executable.bind(ActionHelper.needsDatabase(stateManager)); } @@ -25,7 +28,7 @@ public OpenConsoleAction(StateManager stateManager) { public void execute() { stateManager.getActiveDatabase().flatMap(BibDatabaseContext::getDatabasePath).ifPresent(path -> { try { - JabRefDesktop.openConsole(path.toFile()); + JabRefDesktop.openConsole(path.toFile(), preferencesService); } catch (IOException e) { LOGGER.info("Could not open console", e); } diff --git a/src/main/java/org/jabref/gui/SendAsEMailAction.java b/src/main/java/org/jabref/gui/SendAsEMailAction.java index 373d8f7e6f6..7ea52d621f9 100644 --- a/src/main/java/org/jabref/gui/SendAsEMailAction.java +++ b/src/main/java/org/jabref/gui/SendAsEMailAction.java @@ -97,7 +97,7 @@ private String sendEmail() throws Exception { attachments.add(path.toAbsolutePath().toString()); if (openFolders) { try { - JabRefDesktop.openFolderAndSelectFile(path.toAbsolutePath()); + JabRefDesktop.openFolderAndSelectFile(path.toAbsolutePath(), preferencesService); } catch (IOException e) { LOGGER.debug("Cannot open file", e); } diff --git a/src/main/java/org/jabref/gui/desktop/JabRefDesktop.java b/src/main/java/org/jabref/gui/desktop/JabRefDesktop.java index 77845e10dd0..430454938e8 100644 --- a/src/main/java/org/jabref/gui/desktop/JabRefDesktop.java +++ b/src/main/java/org/jabref/gui/desktop/JabRefDesktop.java @@ -51,13 +51,16 @@ private JabRefDesktop() { /** * Open a http/pdf/ps viewer for the given link string. */ - public static void openExternalViewer(BibDatabaseContext databaseContext, String initialLink, Field initialField) + public static void openExternalViewer(BibDatabaseContext databaseContext, + PreferencesService preferencesService, + String initialLink, + Field initialField) throws IOException { String link = initialLink; Field field = initialField; if (StandardField.PS.equals(field) || StandardField.PDF.equals(field)) { // Find the default directory for this field type: - List directories = databaseContext.getFileDirectories(Globals.prefs.getFilePreferences()); + List directories = databaseContext.getFileDirectories(preferencesService.getFilePreferences()); Optional file = FileHelper.find(link, directories); @@ -130,7 +133,9 @@ public static void openCustomDoi(String link, PreferencesService preferences, Di * @param link The filename. * @return false if the link couldn't be resolved, true otherwise. */ - public static boolean openExternalFileAnyFormat(final BibDatabaseContext databaseContext, String link, + public static boolean openExternalFileAnyFormat(final BibDatabaseContext databaseContext, + PreferencesService preferencesService, + String link, final Optional type) throws IOException { @@ -139,7 +144,7 @@ public static boolean openExternalFileAnyFormat(final BibDatabaseContext databas return true; } - Optional file = FileHelper.find(databaseContext, link, Globals.prefs.getFilePreferences()); + Optional file = FileHelper.find(databaseContext, link, preferencesService.getFilePreferences()); if (file.isPresent() && Files.exists(file.get())) { // Open the file: String filePath = file.get().toString(); @@ -174,17 +179,17 @@ private static void openExternalFilePlatformIndependent(Optional type = ExternalFileTypes.getInstance().fromLinkedFile(linkedFile, true); - boolean successful = JabRefDesktop.openExternalFileAnyFormat(databaseContext, linkedFile.getLink(), type); + boolean successful = JabRefDesktop.openExternalFileAnyFormat(databaseContext, preferences, linkedFile.getLink(), type); if (!successful) { dialogService.showErrorDialogAndWait(Localization.lang("File not found"), Localization.lang("Could not find file '%0'.", linkedFile.getLink())); } @@ -219,7 +219,7 @@ public void openFolder() { preferences.getFilePreferences()); if (resolvedPath.isPresent()) { - JabRefDesktop.openFolderAndSelectFile(resolvedPath.get()); + JabRefDesktop.openFolderAndSelectFile(resolvedPath.get(), preferences); } else { dialogService.showErrorDialogAndWait(Localization.lang("File not found")); } diff --git a/src/main/java/org/jabref/gui/maintable/OpenUrlAction.java b/src/main/java/org/jabref/gui/maintable/OpenUrlAction.java index 031089f1ae5..a9431dd550e 100644 --- a/src/main/java/org/jabref/gui/maintable/OpenUrlAction.java +++ b/src/main/java/org/jabref/gui/maintable/OpenUrlAction.java @@ -68,7 +68,7 @@ public void execute() { if (field.equals(StandardField.DOI) && preferences.getDOIPreferences().isUseCustom()) { JabRefDesktop.openCustomDoi(link.get(), preferences, dialogService); } else { - JabRefDesktop.openExternalViewer(databaseContext, link.get(), field); + JabRefDesktop.openExternalViewer(databaseContext, preferences, link.get(), field); } } catch (IOException e) { dialogService.showErrorDialogAndWait(Localization.lang("Unable to open link."), e); diff --git a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java index bbc4bc37cd4..de00201399b 100644 --- a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java +++ b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java @@ -72,7 +72,7 @@ public static ContextMenu create(BibEntryTableViewModel entry, 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))); - contextMenu.getItems().add(factory.createMenuItem(StandardActions.SEARCH_SHORTSCIENCE, new SearchShortScienceAction(dialogService, stateManager))); + contextMenu.getItems().add(factory.createMenuItem(StandardActions.SEARCH_SHORTSCIENCE, new SearchShortScienceAction(dialogService, stateManager, preferencesService))); contextMenu.getItems().add(new SeparatorMenuItem()); diff --git a/src/main/java/org/jabref/gui/maintable/SearchShortScienceAction.java b/src/main/java/org/jabref/gui/maintable/SearchShortScienceAction.java index 663fd5be697..761482df189 100644 --- a/src/main/java/org/jabref/gui/maintable/SearchShortScienceAction.java +++ b/src/main/java/org/jabref/gui/maintable/SearchShortScienceAction.java @@ -13,6 +13,7 @@ import org.jabref.logic.util.ExternalLinkCreator; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.StandardField; +import org.jabref.preferences.PreferencesService; import static org.jabref.gui.actions.ActionHelper.isFieldSetForSelectedEntry; import static org.jabref.gui.actions.ActionHelper.needsEntriesSelected; @@ -20,10 +21,12 @@ public class SearchShortScienceAction extends SimpleCommand { private final DialogService dialogService; private final StateManager stateManager; + private final PreferencesService preferencesService; - public SearchShortScienceAction(DialogService dialogService, StateManager stateManager) { + public SearchShortScienceAction(DialogService dialogService, StateManager stateManager, PreferencesService preferencesService) { this.dialogService = dialogService; this.stateManager = stateManager; + this.preferencesService = preferencesService; BooleanExpression fieldIsSet = isFieldSetForSelectedEntry(StandardField.TITLE, stateManager); this.executable.bind(needsEntriesSelected(1, stateManager).and(fieldIsSet)); @@ -40,7 +43,7 @@ public void execute() { } ExternalLinkCreator.getShortScienceSearchURL(bibEntries.get(0)).ifPresent(url -> { try { - JabRefDesktop.openExternalViewer(databaseContext, url, StandardField.URL); + JabRefDesktop.openExternalViewer(databaseContext, preferencesService, url, StandardField.URL); } catch (IOException ex) { dialogService.showErrorDialogAndWait(Localization.lang("Unable to open ShortScience."), ex); } diff --git a/src/main/java/org/jabref/gui/maintable/columns/LinkedIdentifierColumn.java b/src/main/java/org/jabref/gui/maintable/columns/LinkedIdentifierColumn.java index 7b51e516723..23970e161b6 100644 --- a/src/main/java/org/jabref/gui/maintable/columns/LinkedIdentifierColumn.java +++ b/src/main/java/org/jabref/gui/maintable/columns/LinkedIdentifierColumn.java @@ -98,7 +98,7 @@ private ContextMenu createIdentifierMenu(BibEntryTableViewModel entry, Map { try { - JabRefDesktop.openExternalViewer(database, values.get(field), field); + JabRefDesktop.openExternalViewer(database, preferences, values.get(field), field); } catch (IOException e) { dialogService.showErrorDialogAndWait(Localization.lang("Unable to open link."), e); } diff --git a/src/main/java/org/jabref/gui/openoffice/StyleSelectDialogViewModel.java b/src/main/java/org/jabref/gui/openoffice/StyleSelectDialogViewModel.java index abb37e87bd7..bd307cd93ba 100644 --- a/src/main/java/org/jabref/gui/openoffice/StyleSelectDialogViewModel.java +++ b/src/main/java/org/jabref/gui/openoffice/StyleSelectDialogViewModel.java @@ -96,7 +96,7 @@ public void editStyle() { OOBibStyle style = selectedItem.getValue().getStyle(); Optional type = ExternalFileTypes.getInstance().getExternalFileTypeByExt("jstyle"); try { - JabRefDesktop.openExternalFileAnyFormat(new BibDatabaseContext(), style.getPath(), type); + JabRefDesktop.openExternalFileAnyFormat(new BibDatabaseContext(), preferencesService, style.getPath(), type); } catch (IOException e) { dialogService.showErrorDialogAndWait(e); } 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 5415ea6a011..dc370f12455 100644 --- a/src/main/java/org/jabref/gui/preferences/protectedterms/ProtectedTermsTabViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/protectedterms/ProtectedTermsTabViewModel.java @@ -125,7 +125,7 @@ public void edit(ProtectedTermsList file) { String fileName = file.getLocation(); try { - JabRefDesktop.openExternalFileAnyFormat(new BibDatabaseContext(), fileName, termsFileType); + JabRefDesktop.openExternalFileAnyFormat(new BibDatabaseContext(), preferences, fileName, termsFileType); } catch (IOException e) { LOGGER.warn("Problem open protected terms file editor", e); } From 86cc8cf4f90fa42542f7ae7ba3407dc857c08012 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Tue, 31 Aug 2021 10:36:55 +0200 Subject: [PATCH 2/5] Extracted Globals.prefs from EntryAddChangeViewModel and Globals.stateManager --- src/main/java/org/jabref/gui/JabRefFrame.java | 21 +++++------ src/main/java/org/jabref/gui/LibraryTab.java | 35 ++++++++++--------- .../org/jabref/gui/collab/ChangeScanner.java | 7 ++-- .../gui/collab/DatabaseChangeMonitor.java | 8 +++-- .../gui/collab/EntryAddChangeViewModel.java | 13 ++++--- .../importer/actions/OpenDatabaseAction.java | 7 ++-- .../gui/slr/ExistingStudySearchAction.java | 29 ++++++++------- .../jabref/gui/slr/StartNewStudyAction.java | 5 +-- 8 files changed, 75 insertions(+), 50 deletions(-) diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index 9c63ee011a3..06957ff346f 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -157,7 +157,7 @@ public class JabRefFrame extends BorderPane { private final SplitPane splitPane = new SplitPane(); private final PreferencesService prefs = Globals.prefs; - private final GlobalSearchBar globalSearchBar = new GlobalSearchBar(this, Globals.stateManager, prefs); + private final GlobalSearchBar globalSearchBar; private final FileHistoryMenu fileHistory; @@ -180,6 +180,7 @@ public JabRefFrame(Stage mainStage) { this.dialogService = new JabRefDialogService(mainStage, this, prefs); this.stateManager = Globals.stateManager; this.pushToApplicationsManager = new PushToApplicationsManager(dialogService, stateManager, prefs); + this.globalSearchBar = new GlobalSearchBar(this, stateManager, prefs); this.undoManager = Globals.undoManager; this.fileHistory = new FileHistoryMenu(prefs, dialogService, getOpenDatabaseAction()); this.taskExecutor = Globals.TASK_EXECUTOR; @@ -288,7 +289,7 @@ private void initKeyBindings() { } private void initShowTrackingNotification() { - if (Globals.prefs.getTelemetryPreferences().shouldAskToCollectTelemetry()) { + if (prefs.getTelemetryPreferences().shouldAskToCollectTelemetry()) { JabRefExecutorService.INSTANCE.submit(new TimerTask() { @Override @@ -300,7 +301,7 @@ public void run() { } private void showTrackingNotification() { - TelemetryPreferences telemetryPreferences = Globals.prefs.getTelemetryPreferences(); + TelemetryPreferences telemetryPreferences = prefs.getTelemetryPreferences(); boolean shouldCollect = telemetryPreferences.shouldCollectTelemetry(); if (!telemetryPreferences.shouldCollectTelemetry()) { @@ -311,7 +312,7 @@ private void showTrackingNotification() { Localization.lang("Don't share")); } - Globals.prefs.storeTelemetryPreferences(telemetryPreferences.withCollectTelemetry(shouldCollect) + prefs.storeTelemetryPreferences(telemetryPreferences.withCollectTelemetry(shouldCollect) .withAskToCollectTelemetry(false)); } @@ -478,7 +479,7 @@ private Node createToolbar() { new HBox( factory.createIconButton(StandardActions.NEW_LIBRARY, new NewDatabaseAction(this, prefs)), - factory.createIconButton(StandardActions.OPEN_LIBRARY, new OpenDatabaseAction(this, prefs, dialogService)), + factory.createIconButton(StandardActions.OPEN_LIBRARY, new OpenDatabaseAction(this, prefs, dialogService, stateManager)), factory.createIconButton(StandardActions.SAVE_LIBRARY, new SaveAction(SaveAction.SaveMethod.SAVE, this, stateManager))), leftSpacer, @@ -819,8 +820,8 @@ private MenuBar createMenu() { factory.createMenuItem(StandardActions.SEND_AS_EMAIL, new SendAsEMailAction(dialogService, this.prefs, stateManager)), pushToApplicationMenuItem, new SeparatorMenuItem(), - factory.createMenuItem(StandardActions.START_NEW_STUDY, new StartNewStudyAction(this, Globals.getFileUpdateMonitor(), Globals.TASK_EXECUTOR, prefs)), - factory.createMenuItem(StandardActions.SEARCH_FOR_EXISTING_STUDY, new ExistingStudySearchAction(this, Globals.getFileUpdateMonitor(), Globals.TASK_EXECUTOR, prefs)), + factory.createMenuItem(StandardActions.START_NEW_STUDY, new StartNewStudyAction(this, Globals.getFileUpdateMonitor(), Globals.TASK_EXECUTOR, prefs, stateManager)), + factory.createMenuItem(StandardActions.SEARCH_FOR_EXISTING_STUDY, new ExistingStudySearchAction(this, Globals.getFileUpdateMonitor(), Globals.TASK_EXECUTOR, prefs, stateManager)), new SeparatorMenuItem(), @@ -1053,14 +1054,14 @@ private void trackOpenNewDatabase(LibraryTab libraryTab) { public LibraryTab addTab(BibDatabaseContext databaseContext, boolean raisePanel) { Objects.requireNonNull(databaseContext); - LibraryTab libraryTab = new LibraryTab(this, prefs, databaseContext, ExternalFileTypes.getInstance()); + LibraryTab libraryTab = new LibraryTab(this, prefs, stateManager, databaseContext, ExternalFileTypes.getInstance()); addTab(libraryTab, raisePanel); return libraryTab; } private boolean readyForAutosave(BibDatabaseContext context) { return ((context.getLocation() == DatabaseLocation.SHARED) || - ((context.getLocation() == DatabaseLocation.LOCAL) && Globals.prefs.shouldAutosave())) + ((context.getLocation() == DatabaseLocation.LOCAL) && prefs.shouldAutosave())) && context.getDatabasePath().isPresent(); } @@ -1162,7 +1163,7 @@ public void closeCurrentTab() { } public OpenDatabaseAction getOpenDatabaseAction() { - return new OpenDatabaseAction(this, prefs, dialogService); + return new OpenDatabaseAction(this, prefs, dialogService, stateManager); } public SidePaneManager getSidePaneManager() { diff --git a/src/main/java/org/jabref/gui/LibraryTab.java b/src/main/java/org/jabref/gui/LibraryTab.java index c6c55f4681b..1889c3c6956 100644 --- a/src/main/java/org/jabref/gui/LibraryTab.java +++ b/src/main/java/org/jabref/gui/LibraryTab.java @@ -84,6 +84,7 @@ public class LibraryTab extends Tab { private final ExternalFileTypes externalFileTypes; private final DialogService dialogService; private final PreferencesService preferencesService; + private final StateManager stateManager; private final BooleanProperty changedProperty = new SimpleBooleanProperty(false); private final BooleanProperty nonUndoableChangeProperty = new SimpleBooleanProperty(false); private BibDatabaseContext bibDatabaseContext; @@ -112,6 +113,7 @@ public class LibraryTab extends Tab { public LibraryTab(JabRefFrame frame, PreferencesService preferencesService, + StateManager stateManager, BibDatabaseContext bibDatabaseContext, ExternalFileTypes externalFileTypes) { this.frame = Objects.requireNonNull(frame); @@ -120,12 +122,13 @@ public LibraryTab(JabRefFrame frame, this.undoManager = frame.getUndoManager(); this.dialogService = frame.getDialogService(); this.preferencesService = Objects.requireNonNull(preferencesService); + this.stateManager = Objects.requireNonNull(stateManager); bibDatabaseContext.getDatabase().registerListener(this); bibDatabaseContext.getMetaData().registerListener(this); this.sidePaneManager = frame.getSidePaneManager(); - this.tableModel = new MainTableDataModel(getBibDatabaseContext(), preferencesService, Globals.stateManager); + this.tableModel = new MainTableDataModel(getBibDatabaseContext(), preferencesService, stateManager); citationStyleCache = new CitationStyleCache(bibDatabaseContext); annotationCache = new FileAnnotationCache(bibDatabaseContext, preferencesService.getFilePreferences()); @@ -148,7 +151,7 @@ public LibraryTab(JabRefFrame frame, Platform.runLater(() -> { EasyBind.subscribe(changedProperty, this::updateTabTitle); - Globals.stateManager.getOpenDatabases().addListener((ListChangeListener) c -> + stateManager.getOpenDatabases().addListener((ListChangeListener) c -> updateTabTitle(changedProperty.getValue())); }); } @@ -201,7 +204,7 @@ public void onDatabaseLoadingSucceed(ParserResult result) { feedData(context); // a temporary workaround to update groups pane - Globals.stateManager.activeDatabaseProperty().bind( + stateManager.activeDatabaseProperty().bind( EasyBind.map(frame.getTabbedPane().getSelectionModel().selectedItemProperty(), selectedTab -> Optional.ofNullable(selectedTab) .filter(tab -> tab instanceof LibraryTab) @@ -224,7 +227,7 @@ public void feedData(BibDatabaseContext bibDatabaseContext) { bibDatabaseContext.getDatabase().registerListener(this); bibDatabaseContext.getMetaData().registerListener(this); - this.tableModel = new MainTableDataModel(getBibDatabaseContext(), preferencesService, Globals.stateManager); + this.tableModel = new MainTableDataModel(getBibDatabaseContext(), preferencesService, stateManager); citationStyleCache = new CitationStyleCache(bibDatabaseContext); annotationCache = new FileAnnotationCache(bibDatabaseContext, preferencesService.getFilePreferences()); @@ -245,7 +248,7 @@ public void feedData(BibDatabaseContext bibDatabaseContext) { Platform.runLater(() -> { EasyBind.subscribe(changedProperty, this::updateTabTitle); - Globals.stateManager.getOpenDatabases().addListener((ListChangeListener) c -> + stateManager.getOpenDatabases().addListener((ListChangeListener) c -> updateTabTitle(changedProperty.getValue())); }); @@ -348,11 +351,11 @@ public void updateTabTitle(boolean isChanged) { private List collectAllDatabasePaths() { List list = new ArrayList<>(); - Globals.stateManager.getOpenDatabases().stream() - .map(BibDatabaseContext::getDatabasePath) - .forEachOrdered(pathOptional -> pathOptional.ifPresentOrElse( - path -> list.add(path.toAbsolutePath().toString()), - () -> list.add(""))); + stateManager.getOpenDatabases().stream() + .map(BibDatabaseContext::getDatabasePath) + .forEachOrdered(pathOptional -> pathOptional.ifPresentOrElse( + path -> list.add(path.toAbsolutePath().toString()), + () -> list.add(""))); return list; } @@ -480,12 +483,12 @@ private void createMainTable() { bibDatabaseContext, preferencesService, dialogService, - Globals.stateManager, + stateManager, externalFileTypes, Globals.getKeyPrefs()); // Add the listener that binds selection to state manager (TODO: should be replaced by proper JavaFX binding as soon as table is implemented in JavaFX) - mainTable.addSelectionListener(listEvent -> Globals.stateManager.setSelectedEntries(mainTable.getSelectedEntries())); + mainTable.addSelectionListener(listEvent -> stateManager.setSelectedEntries(mainTable.getSelectedEntries())); // Update entry editor and preview according to selected entries mainTable.addSelectionListener(event -> mainTable.getSelectedEntries() @@ -750,7 +753,7 @@ public FileAnnotationCache getAnnotationCache() { public void resetChangeMonitorAndChangePane() { changeMonitor.ifPresent(DatabaseChangeMonitor::unregister); - changeMonitor = Optional.of(new DatabaseChangeMonitor(bibDatabaseContext, Globals.getFileUpdateMonitor(), Globals.TASK_EXECUTOR, preferencesService)); + changeMonitor = Optional.of(new DatabaseChangeMonitor(bibDatabaseContext, Globals.getFileUpdateMonitor(), Globals.TASK_EXECUTOR, preferencesService, stateManager)); changePane = new DatabaseChangePane(splitPane, bibDatabaseContext, changeMonitor.get()); @@ -796,11 +799,11 @@ public void resetChangedProperties() { } public static class Factory { - public LibraryTab createLibraryTab(JabRefFrame frame, PreferencesService preferencesService, Path file, BackgroundTask dataLoadingTask) { + public LibraryTab createLibraryTab(JabRefFrame frame, PreferencesService preferencesService, StateManager stateManager, Path file, BackgroundTask dataLoadingTask) { BibDatabaseContext context = new BibDatabaseContext(); context.setDatabasePath(file); - LibraryTab newTab = new LibraryTab(frame, preferencesService, context, ExternalFileTypes.getInstance()); + LibraryTab newTab = new LibraryTab(frame, preferencesService, stateManager, context, ExternalFileTypes.getInstance()); newTab.setDataLoadingTask(dataLoadingTask); dataLoadingTask.onRunning(newTab::onDatabaseLoadingStarted) @@ -823,7 +826,7 @@ public void listen(EntriesAddedEvent addedEntriesEvent) { // Automatically add new entries to the selected group (or set of groups) if (preferencesService.getGroupsPreferences().shouldAutoAssignGroup()) { - Globals.stateManager.getSelectedGroup(bibDatabaseContext).forEach( + stateManager.getSelectedGroup(bibDatabaseContext).forEach( selectedGroup -> selectedGroup.addEntriesToGroup(addedEntriesEvent.getBibEntries())); } } diff --git a/src/main/java/org/jabref/gui/collab/ChangeScanner.java b/src/main/java/org/jabref/gui/collab/ChangeScanner.java index 4806d156a86..98da80d12f0 100644 --- a/src/main/java/org/jabref/gui/collab/ChangeScanner.java +++ b/src/main/java/org/jabref/gui/collab/ChangeScanner.java @@ -5,6 +5,7 @@ import java.util.Collections; import java.util.List; +import org.jabref.gui.StateManager; import org.jabref.logic.bibtex.comparator.BibDatabaseDiff; import org.jabref.logic.bibtex.comparator.BibEntryDiff; import org.jabref.logic.bibtex.comparator.BibStringDiff; @@ -23,10 +24,12 @@ public class ChangeScanner { private static final Logger LOGGER = LoggerFactory.getLogger(ChangeScanner.class); private final BibDatabaseContext database; private final PreferencesService preferencesService; + private final StateManager stateManager; - public ChangeScanner(BibDatabaseContext database, PreferencesService preferencesService) { + public ChangeScanner(BibDatabaseContext database, PreferencesService preferencesService, StateManager stateManager) { this.database = database; this.preferencesService = preferencesService; + this.stateManager = stateManager; } public List scanForChanges() { @@ -77,7 +80,7 @@ private DatabaseChangeViewModel createBibStringDiff(BibStringDiff diff) { private DatabaseChangeViewModel createBibEntryDiff(BibEntryDiff diff) { if (diff.getOriginalEntry() == null) { - return new EntryAddChangeViewModel(diff.getNewEntry()); + return new EntryAddChangeViewModel(diff.getNewEntry(), preferencesService, stateManager); } if (diff.getNewEntry() == null) { diff --git a/src/main/java/org/jabref/gui/collab/DatabaseChangeMonitor.java b/src/main/java/org/jabref/gui/collab/DatabaseChangeMonitor.java index fe1f892ca62..dd779687963 100644 --- a/src/main/java/org/jabref/gui/collab/DatabaseChangeMonitor.java +++ b/src/main/java/org/jabref/gui/collab/DatabaseChangeMonitor.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; +import org.jabref.gui.StateManager; import org.jabref.gui.util.BackgroundTask; import org.jabref.gui.util.TaskExecutor; import org.jabref.model.database.BibDatabaseContext; @@ -23,15 +24,18 @@ public class DatabaseChangeMonitor implements FileUpdateListener { private final List listeners; private final TaskExecutor taskExecutor; private final PreferencesService preferencesService; + private final StateManager stateManager; public DatabaseChangeMonitor(BibDatabaseContext database, FileUpdateMonitor fileMonitor, TaskExecutor taskExecutor, - PreferencesService preferencesService) { + PreferencesService preferencesService, + StateManager stateManager) { this.database = database; this.fileMonitor = fileMonitor; this.taskExecutor = taskExecutor; this.preferencesService = preferencesService; + this.stateManager = stateManager; this.listeners = new ArrayList<>(); this.database.getDatabasePath().ifPresent(path -> { @@ -46,7 +50,7 @@ public DatabaseChangeMonitor(BibDatabaseContext database, @Override public void fileUpdated() { // File on disk has changed, thus look for notable changes and notify listeners in case there are such changes - ChangeScanner scanner = new ChangeScanner(database, preferencesService); + ChangeScanner scanner = new ChangeScanner(database, preferencesService, stateManager); BackgroundTask.wrap(scanner::scanForChanges) .onSuccess(changes -> { if (!changes.isEmpty()) { diff --git a/src/main/java/org/jabref/gui/collab/EntryAddChangeViewModel.java b/src/main/java/org/jabref/gui/collab/EntryAddChangeViewModel.java index 6e5e0d8b456..5b3b12eb567 100644 --- a/src/main/java/org/jabref/gui/collab/EntryAddChangeViewModel.java +++ b/src/main/java/org/jabref/gui/collab/EntryAddChangeViewModel.java @@ -2,21 +2,26 @@ import javafx.scene.Node; -import org.jabref.gui.Globals; import org.jabref.gui.JabRefGUI; +import org.jabref.gui.StateManager; import org.jabref.gui.preview.PreviewViewer; import org.jabref.gui.undo.NamedCompound; import org.jabref.gui.undo.UndoableInsertEntries; import org.jabref.logic.l10n.Localization; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; +import org.jabref.preferences.PreferencesService; class EntryAddChangeViewModel extends DatabaseChangeViewModel { private final BibEntry entry; + private final PreferencesService preferencesService; + private final StateManager stateManager; - public EntryAddChangeViewModel(BibEntry entry) { + public EntryAddChangeViewModel(BibEntry entry, PreferencesService preferencesService, StateManager stateManager) { super(); + this.preferencesService = preferencesService; + this.stateManager = stateManager; this.name = entry.getCitationKey() .map(key -> Localization.lang("Added entry") + ": '" + key + '\'') .orElse(Localization.lang("Added entry")); @@ -31,8 +36,8 @@ public void makeChange(BibDatabaseContext database, NamedCompound undoEdit) { @Override public Node description() { - PreviewViewer previewViewer = new PreviewViewer(new BibDatabaseContext(), JabRefGUI.getMainFrame().getDialogService(), Globals.stateManager); - previewViewer.setLayout(Globals.prefs.getPreviewPreferences().getCurrentPreviewStyle()); + PreviewViewer previewViewer = new PreviewViewer(new BibDatabaseContext(), JabRefGUI.getMainFrame().getDialogService(), stateManager); + previewViewer.setLayout(preferencesService.getPreviewPreferences().getCurrentPreviewStyle()); previewViewer.setEntry(entry); return previewViewer; } 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 51cc8071303..d5f6d2a1dd5 100644 --- a/src/main/java/org/jabref/gui/importer/actions/OpenDatabaseAction.java +++ b/src/main/java/org/jabref/gui/importer/actions/OpenDatabaseAction.java @@ -18,6 +18,7 @@ import org.jabref.gui.Globals; import org.jabref.gui.JabRefFrame; import org.jabref.gui.LibraryTab; +import org.jabref.gui.StateManager; import org.jabref.gui.actions.SimpleCommand; import org.jabref.gui.dialogs.BackupUIManager; import org.jabref.gui.shared.SharedDatabaseUIManager; @@ -51,12 +52,14 @@ public class OpenDatabaseAction extends SimpleCommand { private final JabRefFrame frame; private final PreferencesService preferencesService; + private final StateManager stateManager; private final DialogService dialogService; - public OpenDatabaseAction(JabRefFrame frame, PreferencesService preferencesService, DialogService dialogService) { + public OpenDatabaseAction(JabRefFrame frame, PreferencesService preferencesService, DialogService dialogService, StateManager stateManager) { this.frame = frame; this.preferencesService = preferencesService; this.dialogService = dialogService; + this.stateManager = stateManager; } /** @@ -168,7 +171,7 @@ private void openTheFile(Path file, boolean raisePanel) { BackgroundTask backgroundTask = BackgroundTask.wrap(() -> loadDatabase(file)); LibraryTab.Factory libraryTabFactory = new LibraryTab.Factory(); - LibraryTab newTab = libraryTabFactory.createLibraryTab(frame, preferencesService, file, backgroundTask); + LibraryTab newTab = libraryTabFactory.createLibraryTab(frame, preferencesService, stateManager, file, backgroundTask); backgroundTask.onFinished(() -> trackOpenNewDatabase(newTab)); } diff --git a/src/main/java/org/jabref/gui/slr/ExistingStudySearchAction.java b/src/main/java/org/jabref/gui/slr/ExistingStudySearchAction.java index d8d1abc6b26..9419a07376b 100644 --- a/src/main/java/org/jabref/gui/slr/ExistingStudySearchAction.java +++ b/src/main/java/org/jabref/gui/slr/ExistingStudySearchAction.java @@ -7,6 +7,7 @@ import org.jabref.gui.DialogService; import org.jabref.gui.JabRefFrame; +import org.jabref.gui.StateManager; import org.jabref.gui.actions.SimpleCommand; import org.jabref.gui.importer.actions.OpenDatabaseAction; import org.jabref.gui.util.BackgroundTask; @@ -38,19 +39,26 @@ public class ExistingStudySearchAction extends SimpleCommand { private final FileUpdateMonitor fileUpdateMonitor; private final TaskExecutor taskExecutor; private final PreferencesService preferencesService; - private final ImportFormatPreferences importFormatPreferneces; + private final StateManager stateManager; + private final ImportFormatPreferences importFormatPreferences; private final SavePreferences savePreferences; // This can be either populated before crawl is called or is populated in the call using the directory dialog. This is helpful if the directory is selected in a previous dialog/UI element - public ExistingStudySearchAction(JabRefFrame frame, FileUpdateMonitor fileUpdateMonitor, TaskExecutor taskExecutor, PreferencesService preferencesService) { + public ExistingStudySearchAction(JabRefFrame frame, + FileUpdateMonitor fileUpdateMonitor, + TaskExecutor taskExecutor, + PreferencesService preferencesService, + StateManager stateManager) { this.frame = frame; this.dialogService = frame.getDialogService(); this.fileUpdateMonitor = fileUpdateMonitor; - this.workingDirectory = getInitialDirectory(preferencesService.getWorkingDir()); this.taskExecutor = taskExecutor; this.preferencesService = preferencesService; - this.importFormatPreferneces = preferencesService.getImportFormatPreferences(); + this.stateManager = stateManager; + this.importFormatPreferences = preferencesService.getImportFormatPreferences(); this.savePreferences = preferencesService.getSavePreferences(); + + this.workingDirectory = getInitialDirectory(preferencesService.getWorkingDir()); } @Override @@ -83,7 +91,7 @@ public void crawl() { } final Crawler crawler; try { - crawler = new Crawler(studyDirectory, new SlrGitHandler(studyDirectory), importFormatPreferneces, savePreferences, preferencesService.getTimestampPreferences(), new BibEntryTypesManager(), fileUpdateMonitor); + crawler = new Crawler(studyDirectory, new SlrGitHandler(studyDirectory), importFormatPreferences, savePreferences, preferencesService.getTimestampPreferences(), new BibEntryTypesManager(), fileUpdateMonitor); } catch (IOException | ParseException e) { LOGGER.error("Error during reading of study definition file.", e); dialogService.showErrorDialogAndWait(Localization.lang("Error during reading of study definition file."), e); @@ -99,7 +107,7 @@ public void crawl() { dialogService.showErrorDialogAndWait(Localization.lang("Error during persistence of crawling results."), e); }) .onSuccess(unused -> { - new OpenDatabaseAction(frame, preferencesService, dialogService).openFile(Path.of(studyDirectory.toString(), "studyResult.bib"), true); + new OpenDatabaseAction(frame, preferencesService, dialogService, stateManager).openFile(Path.of(studyDirectory.toString(), "studyResult.bib"), true); // If finished reset command object for next use studyDirectory = null; }) @@ -117,11 +125,8 @@ protected void setupRepository(Path studyRepositoryRoot) throws IOException, Git * @return Path of current panel database directory or the standard working directory */ private Path getInitialDirectory(Path standardWorkingDirectory) { - if (frame.getBasePanelCount() == 0) { - return standardWorkingDirectory; - } else { - Optional databasePath = frame.getCurrentLibraryTab().getBibDatabaseContext().getDatabasePath(); - return databasePath.map(Path::getParent).orElse(standardWorkingDirectory); - } + return stateManager.getActiveDatabase().map(database -> database.getDatabasePath().map(Path::getParent) + .orElse(standardWorkingDirectory)) + .orElse(standardWorkingDirectory); } } diff --git a/src/main/java/org/jabref/gui/slr/StartNewStudyAction.java b/src/main/java/org/jabref/gui/slr/StartNewStudyAction.java index 463db54daaa..0a1c99f4b31 100644 --- a/src/main/java/org/jabref/gui/slr/StartNewStudyAction.java +++ b/src/main/java/org/jabref/gui/slr/StartNewStudyAction.java @@ -5,6 +5,7 @@ import java.util.Optional; import org.jabref.gui.JabRefFrame; +import org.jabref.gui.StateManager; import org.jabref.gui.util.TaskExecutor; import org.jabref.logic.crawler.StudyYamlParser; import org.jabref.model.study.Study; @@ -16,8 +17,8 @@ public class StartNewStudyAction extends ExistingStudySearchAction { Study newStudy; - public StartNewStudyAction(JabRefFrame frame, FileUpdateMonitor fileUpdateMonitor, TaskExecutor taskExecutor, PreferencesService prefs) { - super(frame, fileUpdateMonitor, taskExecutor, prefs); + public StartNewStudyAction(JabRefFrame frame, FileUpdateMonitor fileUpdateMonitor, TaskExecutor taskExecutor, PreferencesService prefs, StateManager stateManager) { + super(frame, fileUpdateMonitor, taskExecutor, prefs, stateManager); } @Override From 7122beb868d913f0cb341174e2e728758e446a12 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Tue, 31 Aug 2021 11:37:59 +0200 Subject: [PATCH 3/5] More simple extractions of Globals.prefs --- src/main/java/org/jabref/gui/JabRefFrame.java | 12 +++++------ src/main/java/org/jabref/gui/LibraryTab.java | 2 +- .../jabref/gui/copyfiles/CopyFilesAction.java | 13 +++++++----- .../jabref/gui/copyfiles/CopyFilesTask.java | 21 +++++++++++-------- .../documentviewer/DocumentViewerView.java | 5 ++++- .../DocumentViewerViewModel.java | 18 ++++++++-------- .../org/jabref/gui/edit/CopyMoreAction.java | 2 +- .../org/jabref/gui/exporter/SaveAction.java | 7 +++++-- .../jabref/gui/exporter/SaveAllAction.java | 7 +++++-- .../externalfiles/DownloadFullTextAction.java | 2 +- 10 files changed, 52 insertions(+), 37 deletions(-) diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index 06957ff346f..bd32b536c2d 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -480,7 +480,7 @@ private Node createToolbar() { new HBox( factory.createIconButton(StandardActions.NEW_LIBRARY, new NewDatabaseAction(this, prefs)), factory.createIconButton(StandardActions.OPEN_LIBRARY, new OpenDatabaseAction(this, prefs, dialogService, stateManager)), - factory.createIconButton(StandardActions.SAVE_LIBRARY, new SaveAction(SaveAction.SaveMethod.SAVE, this, stateManager))), + factory.createIconButton(StandardActions.SAVE_LIBRARY, new SaveAction(SaveAction.SaveMethod.SAVE, this, prefs, stateManager))), leftSpacer, @@ -679,9 +679,9 @@ private MenuBar createMenu() { factory.createMenuItem(StandardActions.NEW_LIBRARY, new NewDatabaseAction(this, prefs)), factory.createMenuItem(StandardActions.OPEN_LIBRARY, getOpenDatabaseAction()), fileHistory, - factory.createMenuItem(StandardActions.SAVE_LIBRARY, new SaveAction(SaveAction.SaveMethod.SAVE, this, stateManager)), - factory.createMenuItem(StandardActions.SAVE_LIBRARY_AS, new SaveAction(SaveAction.SaveMethod.SAVE_AS, this, stateManager)), - factory.createMenuItem(StandardActions.SAVE_ALL, new SaveAllAction(this)), + factory.createMenuItem(StandardActions.SAVE_LIBRARY, new SaveAction(SaveAction.SaveMethod.SAVE, this, prefs, stateManager)), + factory.createMenuItem(StandardActions.SAVE_LIBRARY_AS, new SaveAction(SaveAction.SaveMethod.SAVE_AS, this, prefs, stateManager)), + factory.createMenuItem(StandardActions.SAVE_ALL, new SaveAllAction(this, prefs)), new SeparatorMenuItem(), @@ -692,7 +692,7 @@ private MenuBar createMenu() { factory.createSubMenu(StandardActions.EXPORT, factory.createMenuItem(StandardActions.EXPORT_ALL, new ExportCommand(this, false, prefs)), factory.createMenuItem(StandardActions.EXPORT_SELECTED, new ExportCommand(this, true, prefs)), - factory.createMenuItem(StandardActions.SAVE_SELECTED_AS_PLAIN_BIBTEX, new SaveAction(SaveAction.SaveMethod.SAVE_SELECTED, this, stateManager))), + factory.createMenuItem(StandardActions.SAVE_SELECTED_AS_PLAIN_BIBTEX, new SaveAction(SaveAction.SaveMethod.SAVE_SELECTED, this, prefs, stateManager))), new SeparatorMenuItem(), @@ -813,7 +813,7 @@ private MenuBar createMenu() { new SeparatorMenuItem(), factory.createMenuItem(StandardActions.WRITE_XMP, new WriteXMPAction(stateManager, dialogService)), - factory.createMenuItem(StandardActions.COPY_LINKED_FILES, new CopyFilesAction(stateManager, this.getDialogService())), + factory.createMenuItem(StandardActions.COPY_LINKED_FILES, new CopyFilesAction(dialogService, prefs, stateManager)), new SeparatorMenuItem(), diff --git a/src/main/java/org/jabref/gui/LibraryTab.java b/src/main/java/org/jabref/gui/LibraryTab.java index 1889c3c6956..d5443bf343b 100644 --- a/src/main/java/org/jabref/gui/LibraryTab.java +++ b/src/main/java/org/jabref/gui/LibraryTab.java @@ -257,7 +257,7 @@ public void feedData(BibDatabaseContext bibDatabaseContext) { autoSaver.registerListener(new AutosaveUiManager(this)); } - BackupManager.start(this.bibDatabaseContext, Globals.entryTypesManager, Globals.prefs); + BackupManager.start(this.bibDatabaseContext, Globals.entryTypesManager, preferencesService); } private boolean isDatabaseReadyForAutoSave(BibDatabaseContext context) { diff --git a/src/main/java/org/jabref/gui/copyfiles/CopyFilesAction.java b/src/main/java/org/jabref/gui/copyfiles/CopyFilesAction.java index 9574e128edb..4317dbeef8e 100644 --- a/src/main/java/org/jabref/gui/copyfiles/CopyFilesAction.java +++ b/src/main/java/org/jabref/gui/copyfiles/CopyFilesAction.java @@ -14,6 +14,7 @@ import org.jabref.logic.l10n.Localization; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; +import org.jabref.preferences.PreferencesService; import static org.jabref.gui.actions.ActionHelper.needsDatabase; import static org.jabref.gui.actions.ActionHelper.needsEntriesSelected; @@ -21,13 +22,15 @@ public class CopyFilesAction extends SimpleCommand { private final DialogService dialogService; + private final PreferencesService preferencesService; private final StateManager stateManager; - public CopyFilesAction(StateManager stateManager, DialogService dialogService) { - this.stateManager = stateManager; + public CopyFilesAction(DialogService dialogService, PreferencesService preferencesService, StateManager stateManager) { this.dialogService = dialogService; + this.preferencesService = preferencesService; + this.stateManager = stateManager; - this.executable.bind(needsDatabase(this.stateManager).and(needsEntriesSelected(stateManager))); + this.executable.bind(needsDatabase(stateManager).and(needsEntriesSelected(stateManager))); } private void showDialog(List data) { @@ -44,11 +47,11 @@ public void execute() { List entries = stateManager.getSelectedEntries(); DirectoryDialogConfiguration dirDialogConfiguration = new DirectoryDialogConfiguration.Builder() - .withInitialDirectory(Globals.prefs.getImportExportPreferences().getExportWorkingDirectory()) + .withInitialDirectory(preferencesService.getImportExportPreferences().getExportWorkingDirectory()) .build(); Optional exportPath = dialogService.showDirectorySelectionDialog(dirDialogConfiguration); exportPath.ifPresent(path -> { - Task> exportTask = new CopyFilesTask(database, entries, path); + Task> exportTask = new CopyFilesTask(database, entries, path, preferencesService); dialogService.showProgressDialog( Localization.lang("Copy linked files to folder..."), Localization.lang("Copy linked files to folder..."), diff --git a/src/main/java/org/jabref/gui/copyfiles/CopyFilesTask.java b/src/main/java/org/jabref/gui/copyfiles/CopyFilesTask.java index 1e12a4efa53..36514b6858f 100644 --- a/src/main/java/org/jabref/gui/copyfiles/CopyFilesTask.java +++ b/src/main/java/org/jabref/gui/copyfiles/CopyFilesTask.java @@ -14,7 +14,6 @@ import javafx.concurrent.Task; -import org.jabref.gui.Globals; import org.jabref.logic.l10n.Localization; import org.jabref.logic.util.OS; import org.jabref.logic.util.io.FileUtil; @@ -22,6 +21,7 @@ import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.LinkedFile; import org.jabref.model.util.OptionalUtil; +import org.jabref.preferences.PreferencesService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -32,6 +32,7 @@ public class CopyFilesTask extends Task> { private static final String LOGFILE_PREFIX = "copyFileslog_"; private static final String LOGFILE_EXT = ".log"; private final BibDatabaseContext databaseContext; + private final PreferencesService preferencesService; private final Path exportPath; private final String localizedSucessMessage = Localization.lang("Copied file successfully"); private final String localizedErrorMessage = Localization.lang("Could not copy file") + ": " + Localization.lang("File exists"); @@ -39,15 +40,14 @@ public class CopyFilesTask extends Task> { private final List entries; private final List results = new ArrayList<>(); private Optional newPath = Optional.empty(); - private int numberSucessful; + private int numberSuccessful; private int totalFilesCounter; - private final BiFunction resolvePathFilename = (path, file) -> { - return path.resolve(file.getFileName()); - }; + private final BiFunction resolvePathFilename = (path, file) -> path.resolve(file.getFileName()); - public CopyFilesTask(BibDatabaseContext databaseContext, List entries, Path path) { + public CopyFilesTask(BibDatabaseContext databaseContext, List entries, Path path, PreferencesService preferencesService) { this.databaseContext = databaseContext; + this.preferencesService = preferencesService; this.entries = entries; this.exportPath = path; totalFilesCount = entries.stream().mapToLong(entry -> entry.getFiles().size()).sum(); @@ -82,7 +82,7 @@ protected List call() throws InterruptedException, LinkedFile fileName = files.get(j); - Optional fileToExport = fileName.findIn(databaseContext, Globals.prefs.getFilePreferences()); + Optional fileToExport = fileName.findIn(databaseContext, preferencesService.getFilePreferences()); newPath = OptionalUtil.combine(Optional.of(exportPath), fileToExport, resolvePathFilename); @@ -101,7 +101,7 @@ protected List call() throws InterruptedException, } if (success) { updateMessage(localizedSucessMessage); - numberSucessful++; + numberSuccessful++; writeLogMessage(newFile, bw, localizedSucessMessage); addResultToList(newFile, success, localizedSucessMessage); } else { @@ -115,7 +115,10 @@ protected List call() throws InterruptedException, } updateMessage(Localization.lang("Finished copying")); - String sucessMessage = Localization.lang("Copied %0 files of %1 sucessfully to %2", Integer.toString(numberSucessful), Integer.toString(totalFilesCounter), newPath.map(Path::getParent).map(Path::toString).orElse("")); + String sucessMessage = Localization.lang("Copied %0 files of %1 sucessfully to %2", + Integer.toString(numberSuccessful), + Integer.toString(totalFilesCounter), + newPath.map(Path::getParent).map(Path::toString).orElse("")); updateMessage(sucessMessage); bw.write(sucessMessage); return results; diff --git a/src/main/java/org/jabref/gui/documentviewer/DocumentViewerView.java b/src/main/java/org/jabref/gui/documentviewer/DocumentViewerView.java index fa27a269be4..377f158abd6 100644 --- a/src/main/java/org/jabref/gui/documentviewer/DocumentViewerView.java +++ b/src/main/java/org/jabref/gui/documentviewer/DocumentViewerView.java @@ -21,6 +21,7 @@ import org.jabref.gui.util.ViewModelListCellFactory; import org.jabref.logic.l10n.Localization; import org.jabref.model.entry.LinkedFile; +import org.jabref.preferences.PreferencesService; import com.airhacks.afterburner.views.ViewLoader; @@ -36,6 +37,8 @@ public class DocumentViewerView extends BaseDialog { @Inject private StateManager stateManager; @Inject private TaskExecutor taskExecutor; + @Inject private PreferencesService preferencesService; + private DocumentViewerControl viewer; private DocumentViewerViewModel viewModel; @@ -54,7 +57,7 @@ public DocumentViewerView() { @FXML private void initialize() { - viewModel = new DocumentViewerViewModel(stateManager); + viewModel = new DocumentViewerViewModel(stateManager, preferencesService); setupViewer(); setupScrollbar(); diff --git a/src/main/java/org/jabref/gui/documentviewer/DocumentViewerViewModel.java b/src/main/java/org/jabref/gui/documentviewer/DocumentViewerViewModel.java index 2da7620b9be..d1f54cfca3c 100644 --- a/src/main/java/org/jabref/gui/documentviewer/DocumentViewerViewModel.java +++ b/src/main/java/org/jabref/gui/documentviewer/DocumentViewerViewModel.java @@ -18,10 +18,10 @@ import javafx.collections.ListChangeListener; import org.jabref.gui.AbstractViewModel; -import org.jabref.gui.Globals; import org.jabref.gui.StateManager; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.LinkedFile; +import org.jabref.preferences.PreferencesService; import com.tobiasdiez.easybind.EasyBind; import org.apache.pdfbox.pdmodel.PDDocument; @@ -33,14 +33,16 @@ public class DocumentViewerViewModel extends AbstractViewModel { private static final Logger LOGGER = LoggerFactory.getLogger(DocumentViewerViewModel.class); private final StateManager stateManager; + private final PreferencesService preferencesService; private final ObjectProperty currentDocument = new SimpleObjectProperty<>(); private final ListProperty files = new SimpleListProperty<>(); private final BooleanProperty liveMode = new SimpleBooleanProperty(); private final ObjectProperty currentPage = new SimpleObjectProperty<>(); private final IntegerProperty maxPages = new SimpleIntegerProperty(); - public DocumentViewerViewModel(StateManager stateManager) { + public DocumentViewerViewModel(StateManager stateManager, PreferencesService preferencesService) { this.stateManager = Objects.requireNonNull(stateManager); + this.preferencesService = Objects.requireNonNull(preferencesService); this.stateManager.getSelectedEntries().addListener((ListChangeListener) c -> { // Switch to currently selected entry in live mode @@ -57,10 +59,8 @@ public DocumentViewerViewModel(StateManager stateManager) { }); // we need to wrap this in run later so that the max pages number is correctly shown - Platform.runLater(() -> { - maxPages.bindBidirectional( - EasyBind.wrapNullable(currentDocument).selectProperty(DocumentViewModel::maxPagesProperty)); - }); + Platform.runLater(() -> maxPages.bindBidirectional( + EasyBind.wrapNullable(currentDocument).selectProperty(DocumentViewModel::maxPagesProperty))); setCurrentEntries(this.stateManager.getSelectedEntries()); } @@ -113,9 +113,9 @@ private void setCurrentDocument(Path path) { public void switchToFile(LinkedFile file) { if (file != null) { - stateManager.getActiveDatabase().ifPresent(database -> - file.findIn(database, Globals.prefs.getFilePreferences()) - .ifPresent(this::setCurrentDocument)); + stateManager.getActiveDatabase() + .flatMap(database -> file.findIn(database, preferencesService.getFilePreferences())) + .ifPresent(this::setCurrentDocument); } } diff --git a/src/main/java/org/jabref/gui/edit/CopyMoreAction.java b/src/main/java/org/jabref/gui/edit/CopyMoreAction.java index 3b9a6ad3725..c6bc6ba7d4e 100644 --- a/src/main/java/org/jabref/gui/edit/CopyMoreAction.java +++ b/src/main/java/org/jabref/gui/edit/CopyMoreAction.java @@ -155,7 +155,7 @@ private void copyCiteKey() { return; } - String citeCommand = Optional.ofNullable(Globals.prefs.getExternalApplicationsPreferences().getCiteCommand()) + String citeCommand = Optional.ofNullable(preferencesService.getExternalApplicationsPreferences().getCiteCommand()) .filter(cite -> cite.contains("\\")) // must contain \ .orElse("\\cite"); diff --git a/src/main/java/org/jabref/gui/exporter/SaveAction.java b/src/main/java/org/jabref/gui/exporter/SaveAction.java index 80061fa220c..7f90fea1616 100644 --- a/src/main/java/org/jabref/gui/exporter/SaveAction.java +++ b/src/main/java/org/jabref/gui/exporter/SaveAction.java @@ -5,6 +5,7 @@ import org.jabref.gui.StateManager; import org.jabref.gui.actions.ActionHelper; import org.jabref.gui.actions.SimpleCommand; +import org.jabref.preferences.PreferencesService; /** * This class is just a simple wrapper for the soon to be refactored SaveDatabaseAction. @@ -15,10 +16,12 @@ public enum SaveMethod { SAVE, SAVE_AS, SAVE_SELECTED } private final SaveMethod saveMethod; private final JabRefFrame frame; + private final PreferencesService preferencesService; - public SaveAction(SaveMethod saveMethod, JabRefFrame frame, StateManager stateManager) { + public SaveAction(SaveMethod saveMethod, JabRefFrame frame, PreferencesService preferencesService, StateManager stateManager) { this.saveMethod = saveMethod; this.frame = frame; + this.preferencesService = preferencesService; if (saveMethod == SaveMethod.SAVE_SELECTED) { this.executable.bind(ActionHelper.needsEntriesSelected(stateManager)); @@ -31,7 +34,7 @@ public SaveAction(SaveMethod saveMethod, JabRefFrame frame, StateManager stateMa public void execute() { SaveDatabaseAction saveDatabaseAction = new SaveDatabaseAction( frame.getCurrentLibraryTab(), - Globals.prefs, + preferencesService, Globals.entryTypesManager); switch (saveMethod) { diff --git a/src/main/java/org/jabref/gui/exporter/SaveAllAction.java b/src/main/java/org/jabref/gui/exporter/SaveAllAction.java index dd115d79ec8..a1034c64cd7 100644 --- a/src/main/java/org/jabref/gui/exporter/SaveAllAction.java +++ b/src/main/java/org/jabref/gui/exporter/SaveAllAction.java @@ -6,15 +6,18 @@ import org.jabref.gui.LibraryTab; import org.jabref.gui.actions.SimpleCommand; import org.jabref.logic.l10n.Localization; +import org.jabref.preferences.PreferencesService; public class SaveAllAction extends SimpleCommand { private final JabRefFrame frame; private final DialogService dialogService; + private final PreferencesService preferencesService; - public SaveAllAction(JabRefFrame frame) { + public SaveAllAction(JabRefFrame frame, PreferencesService preferencesService) { this.frame = frame; this.dialogService = frame.getDialogService(); + this.preferencesService = preferencesService; } @Override @@ -22,7 +25,7 @@ public void execute() { dialogService.notify(Localization.lang("Saving all libraries...")); for (LibraryTab libraryTab : frame.getLibraryTabs()) { - SaveDatabaseAction saveDatabaseAction = new SaveDatabaseAction(libraryTab, Globals.prefs, Globals.entryTypesManager); + SaveDatabaseAction saveDatabaseAction = new SaveDatabaseAction(libraryTab, preferencesService, Globals.entryTypesManager); boolean saveResult = saveDatabaseAction.save(); if (!saveResult) { dialogService.notify(Localization.lang("Could not save file.")); diff --git a/src/main/java/org/jabref/gui/externalfiles/DownloadFullTextAction.java b/src/main/java/org/jabref/gui/externalfiles/DownloadFullTextAction.java index 93b32af2375..56068fa847e 100644 --- a/src/main/java/org/jabref/gui/externalfiles/DownloadFullTextAction.java +++ b/src/main/java/org/jabref/gui/externalfiles/DownloadFullTextAction.java @@ -109,7 +109,7 @@ private void downloadFullTexts(Map> downloads, BibDataba BibEntry entry = download.getKey(); Optional result = download.getValue(); if (result.isPresent()) { - Optional dir = databaseContext.getFirstExistingFileDir(Globals.prefs.getFilePreferences()); + Optional dir = databaseContext.getFirstExistingFileDir(preferences.getFilePreferences()); if (dir.isEmpty()) { dialogService.showErrorDialogAndWait(Localization.lang("Directory not found"), Localization.lang("Main file directory not set. Check the preferences (linked files) or the library properties.")); From 9d09ce94cbfe12b7a6146d4f0b93e48f4082de91 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Tue, 31 Aug 2021 12:30:04 +0200 Subject: [PATCH 4/5] Remove double return of standardWorkingDirectory --- .../java/org/jabref/gui/slr/ExistingStudySearchAction.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/org/jabref/gui/slr/ExistingStudySearchAction.java b/src/main/java/org/jabref/gui/slr/ExistingStudySearchAction.java index 9419a07376b..c60cd4cc26b 100644 --- a/src/main/java/org/jabref/gui/slr/ExistingStudySearchAction.java +++ b/src/main/java/org/jabref/gui/slr/ExistingStudySearchAction.java @@ -125,8 +125,6 @@ protected void setupRepository(Path studyRepositoryRoot) throws IOException, Git * @return Path of current panel database directory or the standard working directory */ private Path getInitialDirectory(Path standardWorkingDirectory) { - return stateManager.getActiveDatabase().map(database -> database.getDatabasePath().map(Path::getParent) - .orElse(standardWorkingDirectory)) - .orElse(standardWorkingDirectory); + return stateManager.getActiveDatabase().flatMap(database -> database.getDatabasePath().map(Path::getParent)).orElse(standardWorkingDirectory); } } From 369e044b97eeb23b86166887f59924d0c5208701 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Tue, 31 Aug 2021 12:39:24 +0200 Subject: [PATCH 5/5] More simple extractions of Globals.prefs --- src/main/java/org/jabref/gui/JabRefFrame.java | 6 ++---- .../java/org/jabref/gui/exporter/WriteXMPAction.java | 9 ++++++--- src/main/java/org/jabref/gui/importer/ImportAction.java | 5 ++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index bd32b536c2d..8b4b9ab188d 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -608,15 +608,13 @@ public void init() { * cut/paste/copy operations would some times occur in the wrong tab. */ EasyBind.subscribe(tabbedPane.getSelectionModel().selectedItemProperty(), tab -> { - if ((tab == null) || (!(tab instanceof LibraryTab))) { + if (!(tab instanceof LibraryTab libraryTab)) { stateManager.setSelectedEntries(Collections.emptyList()); mainStage.titleProperty().unbind(); mainStage.setTitle(FRAME_TITLE); return; } - LibraryTab libraryTab = (LibraryTab) tab; - // Poor-mans binding to global state stateManager.setSelectedEntries(libraryTab.getSelectedEntries()); @@ -812,7 +810,7 @@ private MenuBar createMenu() { new SeparatorMenuItem(), - factory.createMenuItem(StandardActions.WRITE_XMP, new WriteXMPAction(stateManager, dialogService)), + factory.createMenuItem(StandardActions.WRITE_XMP, new WriteXMPAction(stateManager, dialogService, prefs)), factory.createMenuItem(StandardActions.COPY_LINKED_FILES, new CopyFilesAction(dialogService, prefs, stateManager)), new SeparatorMenuItem(), diff --git a/src/main/java/org/jabref/gui/exporter/WriteXMPAction.java b/src/main/java/org/jabref/gui/exporter/WriteXMPAction.java index 51570c8fdfa..fd76757ec84 100644 --- a/src/main/java/org/jabref/gui/exporter/WriteXMPAction.java +++ b/src/main/java/org/jabref/gui/exporter/WriteXMPAction.java @@ -30,6 +30,7 @@ import org.jabref.logic.xmp.XmpUtilWriter; import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.BibEntry; +import org.jabref.preferences.PreferencesService; import static org.jabref.gui.actions.ActionHelper.needsDatabase; @@ -37,6 +38,7 @@ public class WriteXMPAction extends SimpleCommand { private final StateManager stateManager; private final DialogService dialogService; + private final PreferencesService preferencesService; private OptionsDialog optionsDialog; @@ -48,9 +50,10 @@ public class WriteXMPAction extends SimpleCommand { private int entriesChanged; private int errors; - public WriteXMPAction(StateManager stateManager, DialogService dialogService) { + public WriteXMPAction(StateManager stateManager, DialogService dialogService, PreferencesService preferencesService) { this.stateManager = stateManager; this.dialogService = dialogService; + this.preferencesService = preferencesService; this.executable.bind(needsDatabase(stateManager)); } @@ -111,7 +114,7 @@ private void writeXMP() { // Make a list of all PDFs linked from this entry: List files = entry.getFiles().stream() .filter(file -> file.getFileType().equalsIgnoreCase("pdf")) - .map(file -> file.findIn(stateManager.getActiveDatabase().get(), Globals.prefs.getFilePreferences())) + .map(file -> file.findIn(stateManager.getActiveDatabase().get(), preferencesService.getFilePreferences())) .filter(Optional::isPresent) .map(Optional::get) .collect(Collectors.toList()); @@ -127,7 +130,7 @@ private void writeXMP() { for (Path file : files) { if (Files.exists(file)) { try { - XmpUtilWriter.writeXmp(file, entry, database, Globals.prefs.getXmpPreferences()); + XmpUtilWriter.writeXmp(file, entry, database, preferencesService.getXmpPreferences()); Platform.runLater( () -> optionsDialog.getProgressArea().appendText(" " + Localization.lang("OK") + ".\n")); entriesChanged++; diff --git a/src/main/java/org/jabref/gui/importer/ImportAction.java b/src/main/java/org/jabref/gui/importer/ImportAction.java index 57bd1bdc2b5..e67b9ed94b0 100644 --- a/src/main/java/org/jabref/gui/importer/ImportAction.java +++ b/src/main/java/org/jabref/gui/importer/ImportAction.java @@ -1,6 +1,5 @@ package org.jabref.gui.importer; -import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.util.ArrayList; @@ -133,7 +132,7 @@ private List doImport(List files) frame.getDialogService().notify(Localization.lang("Importing in %0 format", importer.get().getName()) + "..."); }); // Specific importer: - ParserResult pr = importer.get().importDatabase(filename, Globals.prefs.getDefaultEncoding()); + ParserResult pr = importer.get().importDatabase(filename, prefs.getDefaultEncoding()); imports.add(new ImportFormatReader.UnknownFormatImport(importer.get().getName(), pr)); } } catch (ImportException | IOException e) { @@ -165,7 +164,7 @@ private ParserResult mergeImportResults(List path.getFileName().toString()).orElse("unknown"), parserResult.getDatabase().getEntries()); } // TODO: collect errors into ParserResult, because they are currently ignored (see caller of this method)