From ee50022c1bf133de915a8e85872b06f6482dc24f Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Sat, 5 Jul 2025 00:13:19 +0200 Subject: [PATCH 01/23] change CAYWEntry.java from class to record --- .../jabref/http/server/cayw/CAYWResource.java | 6 +- .../server/cayw/format/BibLatexFormatter.java | 2 +- .../cayw/format/SimpleJsonFormatter.java | 2 +- .../http/server/cayw/gui/CAYWEntry.java | 58 +++---------------- .../cayw/gui/SearchResultContainer.java | 4 +- .../cayw/gui/SelectedItemsContainer.java | 7 +-- 6 files changed, 17 insertions(+), 62 deletions(-) diff --git a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java index 25429375985..558e3c2f7fb 100644 --- a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java +++ b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java @@ -198,8 +198,8 @@ private boolean matches(CAYWEntry entry, String searchText) { return true; } String lowerSearchText = searchText.toLowerCase(); - return entry.getLabel().toLowerCase().contains(lowerSearchText) || - entry.getDescription().toLowerCase().contains(lowerSearchText) || - entry.getShortLabel().toLowerCase().contains(lowerSearchText); + return entry.label().toLowerCase().contains(lowerSearchText) || + entry.description().toLowerCase().contains(lowerSearchText) || + entry.shortLabel().toLowerCase().contains(lowerSearchText); } } diff --git a/jabsrv/src/main/java/org/jabref/http/server/cayw/format/BibLatexFormatter.java b/jabsrv/src/main/java/org/jabref/http/server/cayw/format/BibLatexFormatter.java index 0b581b1d423..a5a54403674 100644 --- a/jabsrv/src/main/java/org/jabref/http/server/cayw/format/BibLatexFormatter.java +++ b/jabsrv/src/main/java/org/jabref/http/server/cayw/format/BibLatexFormatter.java @@ -22,7 +22,7 @@ public String format(CAYWQueryParams queryParams, List caywEntries) { String command = queryParams.getCommand(); List bibEntries = caywEntries.stream() - .map(CAYWEntry::getBibEntry) + .map(CAYWEntry::bibEntry) .toList(); return "\\%s{%s}".formatted(command, diff --git a/jabsrv/src/main/java/org/jabref/http/server/cayw/format/SimpleJsonFormatter.java b/jabsrv/src/main/java/org/jabref/http/server/cayw/format/SimpleJsonFormatter.java index b4ac28e75b3..cc568a036bc 100644 --- a/jabsrv/src/main/java/org/jabref/http/server/cayw/format/SimpleJsonFormatter.java +++ b/jabsrv/src/main/java/org/jabref/http/server/cayw/format/SimpleJsonFormatter.java @@ -27,7 +27,7 @@ public String getFormatName() { @Override public String format(CAYWQueryParams queryParams, List caywEntries) { List simpleJsons = caywEntries.stream() - .map(caywEntry -> SimpleJson.fromBibEntry(caywEntry.getBibEntry())) + .map(caywEntry -> SimpleJson.fromBibEntry(caywEntry.bibEntry())) .toList(); return gson.toJson(simpleJsons); } diff --git a/jabsrv/src/main/java/org/jabref/http/server/cayw/gui/CAYWEntry.java b/jabsrv/src/main/java/org/jabref/http/server/cayw/gui/CAYWEntry.java index 32593961221..022b3e4c130 100644 --- a/jabsrv/src/main/java/org/jabref/http/server/cayw/gui/CAYWEntry.java +++ b/jabsrv/src/main/java/org/jabref/http/server/cayw/gui/CAYWEntry.java @@ -2,56 +2,14 @@ import java.util.Objects; -import javafx.event.ActionEvent; -import javafx.event.EventHandler; - import org.jabref.model.entry.BibEntry; -public class CAYWEntry { - - private final BibEntry bibEntry; - - // Used on the buttons ("chips") - private final String shortLabel; - - // Used in the list - private final String label; - - // Used when hovering and used as bases on the second line - private final String description; - - private EventHandler onClick; - - public CAYWEntry(BibEntry bibEntry, String label, String shortLabel, String description) { - this.bibEntry = bibEntry; - this.label = label; - this.shortLabel = shortLabel; - this.description = description; - } - - public BibEntry getBibEntry() { - return bibEntry; - } - - public String getLabel() { - return label; - } - - public String getShortLabel() { - return shortLabel; - } - - public String getDescription() { - return description; - } - - public EventHandler getOnClick() { - return onClick; - } - - public void setOnClick(EventHandler onClick) { - this.onClick = onClick; - } +public record CAYWEntry( + BibEntry bibEntry, + String label, // Used in the list + String shortLabel, // Used on the buttons ("chips") + String description // Used when hovering and used as bases on the second line +) { @Override public boolean equals(Object o) { @@ -60,11 +18,11 @@ public boolean equals(Object o) { } CAYWEntry caywEntry = (CAYWEntry) o; - return Objects.equals(getBibEntry(), caywEntry.getBibEntry()); + return Objects.equals(bibEntry(), caywEntry.bibEntry()); } @Override public int hashCode() { - return Objects.hashCode(getBibEntry()); + return Objects.hashCode(bibEntry()); } } diff --git a/jabsrv/src/main/java/org/jabref/http/server/cayw/gui/SearchResultContainer.java b/jabsrv/src/main/java/org/jabref/http/server/cayw/gui/SearchResultContainer.java index 4b2b17b9ed5..714ad4e4ba9 100644 --- a/jabsrv/src/main/java/org/jabref/http/server/cayw/gui/SearchResultContainer.java +++ b/jabsrv/src/main/java/org/jabref/http/server/cayw/gui/SearchResultContainer.java @@ -81,9 +81,9 @@ protected void updateItem(CAYWEntry item, boolean empty) { setGraphic(null); setTooltip(null); } else { - labelText.setText(item.getLabel()); + labelText.setText(item.label()); - String fullDescription = item.getDescription(); + String fullDescription = item.description(); String truncatedDescription = truncateToThreeLines(fullDescription); descriptionText.setText(truncatedDescription); diff --git a/jabsrv/src/main/java/org/jabref/http/server/cayw/gui/SelectedItemsContainer.java b/jabsrv/src/main/java/org/jabref/http/server/cayw/gui/SelectedItemsContainer.java index e36724d2918..9c91a448167 100644 --- a/jabsrv/src/main/java/org/jabref/http/server/cayw/gui/SelectedItemsContainer.java +++ b/jabsrv/src/main/java/org/jabref/http/server/cayw/gui/SelectedItemsContainer.java @@ -2,7 +2,6 @@ import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; -import javafx.event.ActionEvent; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.Button; @@ -72,14 +71,12 @@ public Chip(CAYWEntry entry, ObservableList parentList) { parentList.remove(entry); }); - Label label = new Label(entry.getShortLabel()); + Label label = new Label(entry.shortLabel()); getChildren().addAll(label, removeButton); this.setOnMouseClicked(e -> { - if (!e.isConsumed() && entry.getOnClick() != null) { - entry.getOnClick().handle(new ActionEvent(entry, null)); - } + // TODO: Handle the click event and show custom fields like prefix/suffix etc. }); } From 1863499bae7c85776c481626d9886cc06709b2ad Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Sun, 6 Jul 2025 01:08:06 +0200 Subject: [PATCH 02/23] replace id hash with sharedID --- .../main/java/org/jabref/http/dto/cayw/SimpleJson.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/jabsrv/src/main/java/org/jabref/http/dto/cayw/SimpleJson.java b/jabsrv/src/main/java/org/jabref/http/dto/cayw/SimpleJson.java index ba33658de6a..9ff367d8488 100644 --- a/jabsrv/src/main/java/org/jabref/http/dto/cayw/SimpleJson.java +++ b/jabsrv/src/main/java/org/jabref/http/dto/cayw/SimpleJson.java @@ -1,10 +1,7 @@ package org.jabref.http.dto.cayw; -import java.nio.charset.StandardCharsets; - import org.jabref.model.entry.BibEntry; -import com.google.common.hash.Hashing; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,11 +14,9 @@ public record SimpleJson( public static SimpleJson fromBibEntry(BibEntry bibEntry) { if (bibEntry.getCitationKey().isEmpty()) { LOGGER.warn("BibEntry has no citation key: {}", bibEntry); - return new SimpleJson(0, ""); + return new SimpleJson(-1, ""); } - long id = Hashing.sha256().hashString(bibEntry.getCitationKey().get(), StandardCharsets.UTF_8).asLong(); - String citationKey = bibEntry.getCitationKey().get(); - return new SimpleJson(id, citationKey); + return new SimpleJson(bibEntry.getSharedBibEntryData().getSharedID(), bibEntry.getCitationKey().get()); } } From 26655cddb9baebcae789f7e5074ee4da7ac01d95 Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Tue, 8 Jul 2025 21:23:23 +0200 Subject: [PATCH 03/23] Refactor PushToApplications and move the logic part to jablib --- .../java/org/jabref/gui/desktop/os/Linux.java | 2 +- .../LatexCitationsTabViewModel.java | 6 +- .../gui/preferences/GuiPreferences.java | 2 +- .../gui/preferences/JabRefGuiPreferences.java | 4 +- .../gui/preferences/external/ExternalTab.java | 10 +- .../external/ExternalTabViewModel.java | 24 ++-- .../jabref/gui/push/GUIPushToApplication.java | 27 +++++ .../gui/push/GUIPushToApplications.java | 39 +++++++ .../org/jabref/gui/push/GUIPushToEmacs.java | 70 ++++++++++++ .../org/jabref/gui/push/GUIPushToLyx.java | 66 +++++++++++ .../jabref/gui/push/GUIPushToSublimeText.java | 66 +++++++++++ .../jabref/gui/push/GUIPushToTeXstudio.java | 66 +++++++++++ .../jabref/gui/push/GUIPushToTeXworks.java | 66 +++++++++++ .../org/jabref/gui/push/GUIPushToTexShop.java | 66 +++++++++++ .../jabref/gui/push/GUIPushToTexmaker.java | 66 +++++++++++ .../org/jabref/gui/push/GUIPushToVScode.java | 66 +++++++++++ .../org/jabref/gui/push/GUIPushToVim.java | 66 +++++++++++ .../org/jabref/gui/push/GUIPushToWinEdt.java | 66 +++++++++++ .../gui/push/PushToApplicationCommand.java | 12 +- .../gui/push/PushToApplicationSettings.java | 3 + .../jabref/gui/push/PushToEmacsSettings.java | 2 + .../jabref/gui/push/PushToLyxSettings.java | 2 + .../jabref/gui/push/PushToVimSettings.java | 2 + .../org/jabref/gui/push/PushToEmacsTest.java | 2 + .../jabref/gui/push/PushToTeXworksTest.java | 2 + .../org/jabref/gui/push/PushToWinEdtTest.java | 1 + .../logic/preferences/CliPreferences.java | 3 + .../preferences/JabRefCliPreferences.java | 104 ++++++++++++++++++ .../push/AbstractPushToApplication.java | 88 +++++---------- .../jabref/logic}/push/PushToApplication.java | 24 +--- .../push/PushToApplicationPreferences.java | 2 +- .../logic}/push/PushToApplications.java | 30 ++--- .../org/jabref/logic}/push/PushToEmacs.java | 28 ++--- .../org/jabref/logic}/push/PushToLyx.java | 24 +--- .../jabref/logic}/push/PushToSublimeText.java | 19 +--- .../jabref/logic}/push/PushToTeXstudio.java | 15 +-- .../jabref/logic}/push/PushToTeXworks.java | 19 +--- .../org/jabref/logic}/push/PushToTexShop.java | 21 ++-- .../jabref/logic}/push/PushToTexmaker.java | 15 +-- .../org/jabref/logic}/push/PushToVScode.java | 17 +-- .../org/jabref/logic}/push/PushToVim.java | 26 ++--- .../org/jabref/logic}/push/PushToWinEdt.java | 17 +-- .../org/jabref/logic}/util/StreamGobbler.java | 2 +- 43 files changed, 990 insertions(+), 268 deletions(-) create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java rename {jabgui/src/main/java/org/jabref/gui => jablib/src/main/java/org/jabref/logic}/push/AbstractPushToApplication.java (70%) rename {jabgui/src/main/java/org/jabref/gui => jablib/src/main/java/org/jabref/logic}/push/PushToApplication.java (72%) rename {jabgui/src/main/java/org/jabref/gui => jablib/src/main/java/org/jabref/logic}/push/PushToApplicationPreferences.java (98%) rename {jabgui/src/main/java/org/jabref/gui => jablib/src/main/java/org/jabref/logic}/push/PushToApplications.java (55%) rename {jabgui/src/main/java/org/jabref/gui => jablib/src/main/java/org/jabref/logic}/push/PushToEmacs.java (85%) rename {jabgui/src/main/java/org/jabref/gui => jablib/src/main/java/org/jabref/logic}/push/PushToLyx.java (74%) rename {jabgui/src/main/java/org/jabref/gui => jablib/src/main/java/org/jabref/logic}/push/PushToSublimeText.java (86%) rename {jabgui/src/main/java/org/jabref/gui => jablib/src/main/java/org/jabref/logic}/push/PushToTeXstudio.java (63%) rename {jabgui/src/main/java/org/jabref/gui => jablib/src/main/java/org/jabref/logic}/push/PushToTeXworks.java (60%) rename {jabgui/src/main/java/org/jabref/gui => jablib/src/main/java/org/jabref/logic}/push/PushToTexShop.java (80%) rename {jabgui/src/main/java/org/jabref/gui => jablib/src/main/java/org/jabref/logic}/push/PushToTexmaker.java (64%) rename {jabgui/src/main/java/org/jabref/gui => jablib/src/main/java/org/jabref/logic}/push/PushToVScode.java (60%) rename {jabgui/src/main/java/org/jabref/gui => jablib/src/main/java/org/jabref/logic}/push/PushToVim.java (84%) rename {jabgui/src/main/java/org/jabref/gui => jablib/src/main/java/org/jabref/logic}/push/PushToWinEdt.java (61%) rename {jabgui/src/main/java/org/jabref/gui => jablib/src/main/java/org/jabref/logic}/util/StreamGobbler.java (96%) diff --git a/jabgui/src/main/java/org/jabref/gui/desktop/os/Linux.java b/jabgui/src/main/java/org/jabref/gui/desktop/os/Linux.java index d2cb8ddde59..aae1d826d3e 100644 --- a/jabgui/src/main/java/org/jabref/gui/desktop/os/Linux.java +++ b/jabgui/src/main/java/org/jabref/gui/desktop/os/Linux.java @@ -17,10 +17,10 @@ import org.jabref.gui.externalfiletype.ExternalFileType; import org.jabref.gui.externalfiletype.ExternalFileTypes; import org.jabref.gui.frame.ExternalApplicationsPreferences; -import org.jabref.gui.util.StreamGobbler; import org.jabref.logic.l10n.Localization; import org.jabref.logic.util.Directories; import org.jabref.logic.util.HeadlessExecutorService; +import org.jabref.logic.util.StreamGobbler; import org.slf4j.LoggerFactory; diff --git a/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java b/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java index 7c4f1de6401..e41816cb573 100644 --- a/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java @@ -22,9 +22,9 @@ import org.jabref.gui.DialogService; import org.jabref.gui.LibraryTab; import org.jabref.gui.preferences.GuiPreferences; -import org.jabref.gui.push.PushToApplication; -import org.jabref.gui.push.PushToApplications; -import org.jabref.gui.push.PushToTeXstudio; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplications; +import org.jabref.logic.push.PushToTeXstudio; import org.jabref.gui.texparser.CitationsDisplay; import org.jabref.gui.util.DirectoryDialogConfiguration; import org.jabref.gui.util.DirectoryMonitor; diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/GuiPreferences.java b/jabgui/src/main/java/org/jabref/gui/preferences/GuiPreferences.java index 3e439c75a49..6e1faaded08 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/GuiPreferences.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/GuiPreferences.java @@ -16,9 +16,9 @@ import org.jabref.gui.mergeentries.MergeDialogPreferences; import org.jabref.gui.newentry.NewEntryPreferences; import org.jabref.gui.preview.PreviewPreferences; -import org.jabref.gui.push.PushToApplicationPreferences; import org.jabref.gui.specialfields.SpecialFieldsPreferences; import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.push.PushToApplicationPreferences; public interface GuiPreferences extends CliPreferences { CopyToPreferences getCopyToPreferences(); diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java b/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java index fee55c3d475..668418dccaf 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java @@ -43,8 +43,6 @@ import org.jabref.gui.newentry.NewEntryDialogTab; import org.jabref.gui.newentry.NewEntryPreferences; import org.jabref.gui.preview.PreviewPreferences; -import org.jabref.gui.push.PushToApplicationPreferences; -import org.jabref.gui.push.PushToApplications; import org.jabref.gui.sidepane.SidePaneType; import org.jabref.gui.specialfields.SpecialFieldsPreferences; import org.jabref.gui.theme.Theme; @@ -66,6 +64,8 @@ import org.jabref.logic.preferences.JabRefCliPreferences; import org.jabref.logic.preview.PreviewLayout; import org.jabref.logic.push.CitationCommandString; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToApplications; import org.jabref.logic.util.StandardFileType; import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.model.entry.field.Field; diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTab.java b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTab.java index 00cf9834924..48d8c4b1362 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTab.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTab.java @@ -12,7 +12,7 @@ import org.jabref.gui.help.HelpAction; import org.jabref.gui.preferences.AbstractPreferenceTabView; import org.jabref.gui.preferences.PreferencesTab; -import org.jabref.gui.push.PushToApplication; +import org.jabref.gui.push.GUIPushToApplication; import org.jabref.gui.util.IconValidationDecorator; import org.jabref.gui.util.ViewModelListCellFactory; import org.jabref.logic.help.HelpFile; @@ -25,7 +25,7 @@ public class ExternalTab extends AbstractPreferenceTabView @FXML private TextField eMailReferenceSubject; @FXML private CheckBox autoOpenAttachedFolders; - @FXML private ComboBox pushToApplicationCombo; + @FXML private ComboBox pushToApplicationCombo; @FXML private TextField citeCommand; @FXML private Button autolinkExternalHelp; @@ -53,9 +53,9 @@ public String getTabName() { public void initialize() { this.viewModel = new ExternalTabViewModel(dialogService, preferences); - new ViewModelListCellFactory() - .withText(PushToApplication::getDisplayName) - .withIcon(PushToApplication::getApplicationIcon) + new ViewModelListCellFactory() + .withText(GUIPushToApplication::getDisplayName) + .withIcon(GUIPushToApplication::getApplicationIcon) .install(pushToApplicationCombo); eMailReferenceSubject.textProperty().bindBidirectional(viewModel.eMailReferenceSubjectProperty()); diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java index 815009515a9..d7bdb315f66 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java @@ -18,14 +18,14 @@ import org.jabref.gui.frame.ExternalApplicationsPreferences; import org.jabref.gui.preferences.GuiPreferences; import org.jabref.gui.preferences.PreferenceTabViewModel; -import org.jabref.gui.push.PushToApplication; -import org.jabref.gui.push.PushToApplicationPreferences; +import org.jabref.gui.push.GUIPushToApplication; +import org.jabref.gui.push.GUIPushToApplications; +import org.jabref.gui.push.GUIPushToEmacs; import org.jabref.gui.push.PushToApplicationSettings; -import org.jabref.gui.push.PushToApplications; -import org.jabref.gui.push.PushToEmacs; import org.jabref.gui.util.FileDialogConfiguration; import org.jabref.logic.l10n.Localization; import org.jabref.logic.push.CitationCommandString; +import org.jabref.logic.push.PushToApplicationPreferences; import org.jabref.model.strings.StringUtil; import de.saxsys.mvvmfx.utils.validation.CompositeValidator; @@ -38,8 +38,8 @@ public class ExternalTabViewModel implements PreferenceTabViewModel { private final StringProperty eMailReferenceSubjectProperty = new SimpleStringProperty(""); private final BooleanProperty autoOpenAttachedFoldersProperty = new SimpleBooleanProperty(); - private final ListProperty pushToApplicationsListProperty = new SimpleListProperty<>(); - private final ObjectProperty selectedPushToApplicationProperty = new SimpleObjectProperty<>(); + private final ListProperty pushToApplicationsListProperty = new SimpleListProperty<>(); + private final ObjectProperty selectedPushToApplicationProperty = new SimpleObjectProperty<>(); private final StringProperty citeCommandProperty = new SimpleStringProperty(""); private final BooleanProperty useCustomTerminalProperty = new SimpleBooleanProperty(); private final StringProperty customTerminalCommandProperty = new SimpleStringProperty(""); @@ -93,10 +93,10 @@ public void setValues() { autoOpenAttachedFoldersProperty.setValue(initialExternalApplicationPreferences.shouldAutoOpenEmailAttachmentsFolder()); pushToApplicationsListProperty.setValue( - FXCollections.observableArrayList(PushToApplications.getAllApplications(dialogService, preferences))); + FXCollections.observableArrayList(GUIPushToApplications.getAllGUIApplications(dialogService, preferences))); selectedPushToApplicationProperty.setValue( - PushToApplications.getApplicationByName(initialPushToApplicationPreferences.getActiveApplicationName(), dialogService, preferences) - .orElse(new PushToEmacs(dialogService, preferences))); + GUIPushToApplications.getGUIApplicationByName(initialPushToApplicationPreferences.getActiveApplicationName(), dialogService, preferences) + .orElse(new GUIPushToEmacs(dialogService, preferences))); citeCommandProperty.setValue(initialExternalApplicationPreferences.getCiteCommand().toString()); @@ -156,7 +156,7 @@ public boolean validateSettings() { } public void pushToApplicationSettings() { - PushToApplication selectedApplication = selectedPushToApplicationProperty.getValue(); + GUIPushToApplication selectedApplication = selectedPushToApplicationProperty.getValue(); PushToApplicationSettings settings = selectedApplication.getSettings(selectedApplication, workingPushToApplicationPreferences); DialogPane dialogPane = new DialogPane(); @@ -200,11 +200,11 @@ public BooleanProperty autoOpenAttachedFoldersProperty() { // Push-To-Application - public ListProperty pushToApplicationsListProperty() { + public ListProperty pushToApplicationsListProperty() { return this.pushToApplicationsListProperty; } - public ObjectProperty selectedPushToApplication() { + public ObjectProperty selectedPushToApplication() { return this.selectedPushToApplicationProperty; } diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java new file mode 100644 index 00000000000..9b037d308eb --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java @@ -0,0 +1,27 @@ +package org.jabref.gui.push; + +import org.jabref.gui.actions.Action; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; + +public interface GUIPushToApplication extends PushToApplication { + + /** + * Gets a tooltip for the push operation. + */ + String getTooltip(); + + /** + * Gets the icon associated with the application. + * + * @return The icon for the application. + */ + JabRefIcon getApplicationIcon(); + + Action getAction(); + + PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences pushToApplicationPreferences); + + void sendErrorNotification(String title, String message); +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java new file mode 100644 index 00000000000..040434e45c3 --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java @@ -0,0 +1,39 @@ +package org.jabref.gui.push; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import org.jabref.gui.DialogService; +import org.jabref.logic.preferences.CliPreferences; + +public class GUIPushToApplications { + + private static final List APPLICATIONS = new ArrayList<>(); + + public static List getAllGUIApplications(DialogService dialogService, CliPreferences preferences) { + if (!APPLICATIONS.isEmpty()) { + return APPLICATIONS; + } + + APPLICATIONS.addAll(List.of( + new GUIPushToEmacs(dialogService, preferences), + new GUIPushToLyx(dialogService, preferences), + new GUIPushToSublimeText(dialogService, preferences), + new GUIPushToTexmaker(dialogService, preferences), + new GUIPushToTeXstudio(dialogService, preferences), + new GUIPushToTeXworks(dialogService, preferences), + new GUIPushToVim(dialogService, preferences), + new GUIPushToWinEdt(dialogService, preferences), + new GUIPushToTexShop(dialogService, preferences), + new GUIPushToVScode(dialogService, preferences))); + + return APPLICATIONS; + } + + public static Optional getGUIApplicationByName(String applicationName, DialogService dialogService, CliPreferences preferences) { + return getAllGUIApplications(dialogService, preferences).stream() + .filter(application -> application.getDisplayName().equals(applicationName)) + .findAny(); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java new file mode 100644 index 00000000000..f673c3be840 --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java @@ -0,0 +1,70 @@ +package org.jabref.gui.push; + +import java.util.Optional; + +import org.jabref.gui.DialogService; +import org.jabref.gui.actions.Action; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.gui.keyboard.KeyBinding; +import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToEmacs; + +public class GUIPushToEmacs extends PushToEmacs implements GUIPushToApplication { + + private final DialogService dialogService; + + /** + * @param dialogService + * @param preferences getPushToApplicationPreferences(), getExternalApplicationsPreferences(), and getFilePreferences() are used + */ + public GUIPushToEmacs(DialogService dialogService, CliPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public String getTooltip() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Action getAction() { + return new PushToApplicationAction(); + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_EMACS; + } + + @Override + public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new PushToEmacsSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + } + + protected class PushToApplicationAction implements Action { + @Override + public String getText() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Optional getIcon() { + return Optional.of(getApplicationIcon()); + } + + @Override + public Optional getKeyBinding() { + return Optional.of(KeyBinding.PUSH_TO_APPLICATION); + } + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java new file mode 100644 index 00000000000..466a7bc6dbe --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java @@ -0,0 +1,66 @@ +package org.jabref.gui.push; + +import java.util.Optional; + +import org.jabref.gui.DialogService; +import org.jabref.gui.actions.Action; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.gui.keyboard.KeyBinding; +import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToLyx; + +public class GUIPushToLyx extends PushToLyx implements GUIPushToApplication { + + private final DialogService dialogService; + + public GUIPushToLyx(DialogService dialogService, CliPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new PushToLyxSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + } + + @Override + public String getTooltip() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Action getAction() { + return new PushToApplicationAction(); + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_LYX; + } + + protected class PushToApplicationAction implements Action { + @Override + public String getText() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Optional getIcon() { + return Optional.of(getApplicationIcon()); + } + + @Override + public Optional getKeyBinding() { + return Optional.of(KeyBinding.PUSH_TO_APPLICATION); + } + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java new file mode 100644 index 00000000000..46fbc40aa09 --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java @@ -0,0 +1,66 @@ +package org.jabref.gui.push; + +import java.util.Optional; + +import org.jabref.gui.DialogService; +import org.jabref.gui.actions.Action; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.gui.keyboard.KeyBinding; +import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToSublimeText; + +public class GUIPushToSublimeText extends PushToSublimeText implements GUIPushToApplication { + + private final DialogService dialogService; + + public GUIPushToSublimeText(DialogService dialogService, CliPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new PushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + } + + @Override + public String getTooltip() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Action getAction() { + return new PushToApplicationAction(); + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_SUBLIMETEXT; + } + + protected class PushToApplicationAction implements Action { + @Override + public String getText() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Optional getIcon() { + return Optional.of(getApplicationIcon()); + } + + @Override + public Optional getKeyBinding() { + return Optional.of(KeyBinding.PUSH_TO_APPLICATION); + } + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java new file mode 100644 index 00000000000..c7173789c51 --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java @@ -0,0 +1,66 @@ +package org.jabref.gui.push; + +import java.util.Optional; + +import org.jabref.gui.DialogService; +import org.jabref.gui.actions.Action; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.gui.keyboard.KeyBinding; +import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToTeXstudio; + +public class GUIPushToTeXstudio extends PushToTeXstudio implements GUIPushToApplication { + + private final DialogService dialogService; + + public GUIPushToTeXstudio(DialogService dialogService, CliPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new PushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + } + + @Override + public String getTooltip() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Action getAction() { + return new PushToApplicationAction(); + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_TEXSTUDIO; + } + + protected class PushToApplicationAction implements Action { + @Override + public String getText() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Optional getIcon() { + return Optional.of(getApplicationIcon()); + } + + @Override + public Optional getKeyBinding() { + return Optional.of(KeyBinding.PUSH_TO_APPLICATION); + } + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java new file mode 100644 index 00000000000..da0e71638cd --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java @@ -0,0 +1,66 @@ +package org.jabref.gui.push; + +import java.util.Optional; + +import org.jabref.gui.DialogService; +import org.jabref.gui.actions.Action; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.gui.keyboard.KeyBinding; +import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToTeXworks; + +public class GUIPushToTeXworks extends PushToTeXworks implements GUIPushToApplication { + + private final DialogService dialogService; + + public GUIPushToTeXworks(DialogService dialogService, CliPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new PushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + } + + @Override + public String getTooltip() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Action getAction() { + return new PushToApplicationAction(); + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_TEXWORS; + } + + protected class PushToApplicationAction implements Action { + @Override + public String getText() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Optional getIcon() { + return Optional.of(getApplicationIcon()); + } + + @Override + public Optional getKeyBinding() { + return Optional.of(KeyBinding.PUSH_TO_APPLICATION); + } + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java new file mode 100644 index 00000000000..9c96f05f261 --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java @@ -0,0 +1,66 @@ +package org.jabref.gui.push; + +import java.util.Optional; + +import org.jabref.gui.DialogService; +import org.jabref.gui.actions.Action; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.gui.keyboard.KeyBinding; +import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToTexShop; + +public class GUIPushToTexShop extends PushToTexShop implements GUIPushToApplication { + + private final DialogService dialogService; + + public GUIPushToTexShop(DialogService dialogService, CliPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new PushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + } + + @Override + public String getTooltip() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Action getAction() { + return new PushToApplicationAction(); + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_TEXSHOP; + } + + protected class PushToApplicationAction implements Action { + @Override + public String getText() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Optional getIcon() { + return Optional.of(getApplicationIcon()); + } + + @Override + public Optional getKeyBinding() { + return Optional.of(KeyBinding.PUSH_TO_APPLICATION); + } + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java new file mode 100644 index 00000000000..56289967970 --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java @@ -0,0 +1,66 @@ +package org.jabref.gui.push; + +import java.util.Optional; + +import org.jabref.gui.DialogService; +import org.jabref.gui.actions.Action; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.gui.keyboard.KeyBinding; +import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToTexmaker; + +public class GUIPushToTexmaker extends PushToTexmaker implements GUIPushToApplication { + + private final DialogService dialogService; + + public GUIPushToTexmaker(DialogService dialogService, CliPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new PushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + } + + @Override + public String getTooltip() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Action getAction() { + return new PushToApplicationAction(); + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_TEXMAKER; + } + + protected class PushToApplicationAction implements Action { + @Override + public String getText() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Optional getIcon() { + return Optional.of(getApplicationIcon()); + } + + @Override + public Optional getKeyBinding() { + return Optional.of(KeyBinding.PUSH_TO_APPLICATION); + } + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java new file mode 100644 index 00000000000..06ad78bb06a --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java @@ -0,0 +1,66 @@ +package org.jabref.gui.push; + +import java.util.Optional; + +import org.jabref.gui.DialogService; +import org.jabref.gui.actions.Action; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.gui.keyboard.KeyBinding; +import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToVScode; + +public class GUIPushToVScode extends PushToVScode implements GUIPushToApplication { + + private final DialogService dialogService; + + public GUIPushToVScode(DialogService dialogService, CliPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new PushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + } + + @Override + public String getTooltip() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Action getAction() { + return new PushToApplicationAction(); + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_VSCODE; + } + + protected class PushToApplicationAction implements Action { + @Override + public String getText() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Optional getIcon() { + return Optional.of(getApplicationIcon()); + } + + @Override + public Optional getKeyBinding() { + return Optional.of(KeyBinding.PUSH_TO_APPLICATION); + } + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java new file mode 100644 index 00000000000..d1aceff42f0 --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java @@ -0,0 +1,66 @@ +package org.jabref.gui.push; + +import java.util.Optional; + +import org.jabref.gui.DialogService; +import org.jabref.gui.actions.Action; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.gui.keyboard.KeyBinding; +import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToVim; + +public class GUIPushToVim extends PushToVim implements GUIPushToApplication { + + private final DialogService dialogService; + + public GUIPushToVim(DialogService dialogService, CliPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new PushToVimSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + } + + @Override + public String getTooltip() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Action getAction() { + return new PushToApplicationAction(); + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_VIM; + } + + protected class PushToApplicationAction implements Action { + @Override + public String getText() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Optional getIcon() { + return Optional.of(getApplicationIcon()); + } + + @Override + public Optional getKeyBinding() { + return Optional.of(KeyBinding.PUSH_TO_APPLICATION); + } + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java new file mode 100644 index 00000000000..7facf3295ef --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java @@ -0,0 +1,66 @@ +package org.jabref.gui.push; + +import java.util.Optional; + +import org.jabref.gui.DialogService; +import org.jabref.gui.actions.Action; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.gui.keyboard.KeyBinding; +import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToWinEdt; + +public class GUIPushToWinEdt extends PushToWinEdt implements GUIPushToApplication { + + private final DialogService dialogService; + + public GUIPushToWinEdt(DialogService dialogService, CliPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new PushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + } + + @Override + public String getTooltip() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Action getAction() { + return new PushToApplicationAction(); + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_WINEDT; + } + + protected class PushToApplicationAction implements Action { + @Override + public String getText() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + @Override + public Optional getIcon() { + return Optional.of(getApplicationIcon()); + } + + @Override + public Optional getKeyBinding() { + return Optional.of(KeyBinding.PUSH_TO_APPLICATION); + } + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToApplicationCommand.java b/jabgui/src/main/java/org/jabref/gui/push/PushToApplicationCommand.java index 5ab1c532d4d..94fe0f67662 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToApplicationCommand.java +++ b/jabgui/src/main/java/org/jabref/gui/push/PushToApplicationCommand.java @@ -12,6 +12,7 @@ import org.jabref.gui.StateManager; import org.jabref.gui.actions.Action; import org.jabref.gui.actions.ActionFactory; +import org.jabref.gui.actions.ActionHelper; import org.jabref.gui.actions.SimpleCommand; import org.jabref.gui.preferences.GuiPreferences; import org.jabref.gui.util.BindingsHelper; @@ -26,9 +27,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static org.jabref.gui.actions.ActionHelper.needsDatabase; -import static org.jabref.gui.actions.ActionHelper.needsEntriesSelected; - /** * An Action class representing the process of invoking a PushToApplication operation. */ @@ -43,7 +41,7 @@ public class PushToApplicationCommand extends SimpleCommand { private final List reconfigurableControls = new ArrayList<>(); private final TaskExecutor taskExecutor; - private PushToApplication application; + private GUIPushToApplication application; public PushToApplicationCommand(StateManager stateManager, DialogService dialogService, GuiPreferences preferences, TaskExecutor taskExecutor) { this.stateManager = stateManager; @@ -57,7 +55,7 @@ public PushToApplicationCommand(StateManager stateManager, DialogService dialogS EasyBind.subscribe(preferences.getPushToApplicationPreferences().activeApplicationNameProperty(), this::setApplication); - this.executable.bind(needsDatabase(stateManager).and(needsEntriesSelected(stateManager))); + this.executable.bind(ActionHelper.needsDatabase(stateManager).and(ActionHelper.needsEntriesSelected(stateManager))); this.statusMessage.bind(BindingsHelper.ifThenElse( this.executable, "", @@ -75,11 +73,11 @@ public void registerReconfigurable(Object node) { private void setApplication(String applicationName) { final ActionFactory factory = new ActionFactory(); - PushToApplication application = PushToApplications.getApplicationByName( + GUIPushToApplication application = GUIPushToApplications.getGUIApplicationByName( applicationName, dialogService, preferences) - .orElse(new PushToEmacs(dialogService, preferences)); + .orElse(new GUIPushToEmacs(dialogService, preferences)); preferences.getPushToApplicationPreferences().setActiveApplicationName(application.getDisplayName()); this.application = Objects.requireNonNull(application); diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToApplicationSettings.java b/jabgui/src/main/java/org/jabref/gui/push/PushToApplicationSettings.java index 26740b27abe..8d00e049b6c 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToApplicationSettings.java +++ b/jabgui/src/main/java/org/jabref/gui/push/PushToApplicationSettings.java @@ -16,6 +16,9 @@ import org.jabref.gui.util.FileDialogConfiguration; import org.jabref.logic.FilePreferences; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.push.AbstractPushToApplication; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; public class PushToApplicationSettings { diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToEmacsSettings.java b/jabgui/src/main/java/org/jabref/gui/push/PushToEmacsSettings.java index 4efcb9be814..f2311a77606 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToEmacsSettings.java +++ b/jabgui/src/main/java/org/jabref/gui/push/PushToEmacsSettings.java @@ -6,6 +6,8 @@ import org.jabref.gui.DialogService; import org.jabref.logic.FilePreferences; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; public class PushToEmacsSettings extends PushToApplicationSettings { diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToLyxSettings.java b/jabgui/src/main/java/org/jabref/gui/push/PushToLyxSettings.java index 86f0a06804f..145b9520544 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToLyxSettings.java +++ b/jabgui/src/main/java/org/jabref/gui/push/PushToLyxSettings.java @@ -3,6 +3,8 @@ import org.jabref.gui.DialogService; import org.jabref.logic.FilePreferences; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; public class PushToLyxSettings extends PushToApplicationSettings { diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToVimSettings.java b/jabgui/src/main/java/org/jabref/gui/push/PushToVimSettings.java index 724fae85eae..b7c6e24d526 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToVimSettings.java +++ b/jabgui/src/main/java/org/jabref/gui/push/PushToVimSettings.java @@ -6,6 +6,8 @@ import org.jabref.gui.DialogService; import org.jabref.logic.FilePreferences; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; public class PushToVimSettings extends PushToApplicationSettings { diff --git a/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java b/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java index ecce833f03b..99f0f396fb8 100644 --- a/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java +++ b/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java @@ -10,6 +10,8 @@ import org.jabref.gui.frame.ExternalApplicationsPreferences; import org.jabref.gui.preferences.GuiPreferences; import org.jabref.logic.os.OS; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToEmacs; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; diff --git a/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java b/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java index 956ab88e400..bcaa74798e0 100644 --- a/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java +++ b/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java @@ -10,6 +10,8 @@ import org.jabref.gui.frame.ExternalApplicationsPreferences; import org.jabref.gui.preferences.GuiPreferences; import org.jabref.logic.push.CitationCommandString; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToTeXworks; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/jabgui/src/test/java/org/jabref/gui/push/PushToWinEdtTest.java b/jabgui/src/test/java/org/jabref/gui/push/PushToWinEdtTest.java index 3ca3ed7cc30..2d2f2a57217 100644 --- a/jabgui/src/test/java/org/jabref/gui/push/PushToWinEdtTest.java +++ b/jabgui/src/test/java/org/jabref/gui/push/PushToWinEdtTest.java @@ -4,6 +4,7 @@ import org.jabref.gui.DialogService; import org.jabref.gui.preferences.GuiPreferences; +import org.jabref.logic.push.PushToWinEdt; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java b/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java index 412ba59d013..7de2df628d5 100644 --- a/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java @@ -26,6 +26,7 @@ import org.jabref.logic.net.ssl.SSLPreferences; import org.jabref.logic.openoffice.OpenOfficePreferences; import org.jabref.logic.protectedterms.ProtectedTermsPreferences; +import org.jabref.logic.push.PushToApplicationPreferences; import org.jabref.logic.remote.RemotePreferences; import org.jabref.logic.search.SearchPreferences; import org.jabref.logic.util.io.AutoLinkPreferences; @@ -116,4 +117,6 @@ public interface CliPreferences { WalkthroughPreferences getWalkthroughPreferences(); OpenOfficePreferences getOpenOfficePreferences(JournalAbbreviationRepository journalAbbreviationRepository); + + PushToApplicationPreferences getPushToApplicationPreferences(); } diff --git a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java index 099c58e6960..4c21545a9e5 100644 --- a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java @@ -1,5 +1,6 @@ package org.jabref.logic.preferences; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -81,6 +82,8 @@ import org.jabref.logic.os.OS; import org.jabref.logic.protectedterms.ProtectedTermsLoader; import org.jabref.logic.protectedterms.ProtectedTermsPreferences; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToApplications; import org.jabref.logic.remote.RemotePreferences; import org.jabref.logic.search.SearchPreferences; import org.jabref.logic.shared.prefs.SharedDatabasePreferences; @@ -407,6 +410,21 @@ public class JabRefCliPreferences implements CliPreferences { private static final String MAIN_FILE_DIRECTORY_WALKTHROUGH_COMPLETED = "mainFileDirectoryWalkthroughCompleted"; + // region Push to application preferences + private static final String PUSH_TO_APPLICATION = "pushToApplication"; + private static final String PUSH_EMACS_PATH = "emacsPath"; + private static final String PUSH_EMACS_ADDITIONAL_PARAMETERS = "emacsParameters"; + private static final String PUSH_LYXPIPE = "lyxpipe"; + private static final String PUSH_TEXSTUDIO_PATH = "TeXstudioPath"; + private static final String PUSH_TEXWORKS_PATH = "TeXworksPath"; + private static final String PUSH_WINEDT_PATH = "winEdtPath"; + private static final String PUSH_TEXMAKER_PATH = "texmakerPath"; + private static final String PUSH_VIM_SERVER = "vimServer"; + private static final String PUSH_VIM = "vim"; + private static final String PUSH_SUBLIME_TEXT_PATH = "sublimeTextPath"; + private static final String PUSH_VSCODE_PATH = "VScodePath"; + // endregion + private static final Logger LOGGER = LoggerFactory.getLogger(JabRefCliPreferences.class); private static final Preferences PREFS_NODE = Preferences.userRoot().node("/org/jabref"); @@ -451,6 +469,7 @@ public class JabRefCliPreferences implements CliPreferences { private AiPreferences aiPreferences; private LastFilesOpenedPreferences lastFilesOpenedPreferences; private WalkthroughPreferences walkthroughPreferences; + private PushToApplicationPreferences pushToApplicationPreferences; /** * @implNote The constructor was made public because dependency injection via constructor @@ -723,6 +742,29 @@ public JabRefCliPreferences() { // endregion + // region PushToApplicationPreferences + defaults.put(PUSH_TEXMAKER_PATH, OS.detectProgramPath("texmaker", "Texmaker")); + defaults.put(PUSH_WINEDT_PATH, OS.detectProgramPath("WinEdt", "WinEdt Team\\WinEdt")); + defaults.put(PUSH_TO_APPLICATION, "TeXstudio"); + defaults.put(PUSH_TEXSTUDIO_PATH, OS.detectProgramPath("texstudio", "TeXstudio")); + defaults.put(PUSH_TEXWORKS_PATH, OS.detectProgramPath("texworks", "TeXworks")); + defaults.put(PUSH_SUBLIME_TEXT_PATH, OS.detectProgramPath("subl", "Sublime")); + defaults.put(PUSH_LYXPIPE, USER_HOME + File.separator + ".lyx/lyxpipe"); + defaults.put(PUSH_VIM, "vim"); + defaults.put(PUSH_VIM_SERVER, "vim"); + defaults.put(PUSH_EMACS_ADDITIONAL_PARAMETERS, "-n -e"); + defaults.put(PUSH_VSCODE_PATH, OS.detectProgramPath("Code", "Microsoft VS Code")); + + if (OS.OS_X) { + defaults.put(PUSH_EMACS_PATH, "emacsclient"); + } else if (OS.WINDOWS) { + defaults.put(PUSH_EMACS_PATH, "emacsclient.exe"); + } else { + // Linux + defaults.put(PUSH_EMACS_PATH, "emacsclient"); + } + // endregion + // WalkThrough defaults.put(MAIN_FILE_DIRECTORY_WALKTHROUGH_COMPLETED, Boolean.FALSE); } @@ -738,6 +780,68 @@ public void setLanguageDependentDefaultValues() { defaults.put(CUSTOM_TAB_NAME + "_def1", Localization.lang("Abstract")); } + // region PushToApplicationPreferences + + public PushToApplicationPreferences getPushToApplicationPreferences() { + if (pushToApplicationPreferences != null) { + return pushToApplicationPreferences; + } + + Map applicationCommands = new HashMap<>(); + // getEmptyIsDefault is used to ensure that an installation of a tool leads to the new path (instead of leaving the empty one) + // Reason: empty string is returned by org.jabref.gui.desktop.os.Windows.detectProgramPath if program is not found. That path is stored in the preferences. + applicationCommands.put(PushToApplications.EMACS, getEmptyIsDefault(PUSH_EMACS_PATH)); + applicationCommands.put(PushToApplications.LYX, getEmptyIsDefault(PUSH_LYXPIPE)); + applicationCommands.put(PushToApplications.TEXMAKER, getEmptyIsDefault(PUSH_TEXMAKER_PATH)); + applicationCommands.put(PushToApplications.TEXSTUDIO, getEmptyIsDefault(PUSH_TEXSTUDIO_PATH)); + applicationCommands.put(PushToApplications.TEXWORKS, getEmptyIsDefault(PUSH_TEXWORKS_PATH)); + applicationCommands.put(PushToApplications.VIM, getEmptyIsDefault(PUSH_VIM)); + applicationCommands.put(PushToApplications.WIN_EDT, getEmptyIsDefault(PUSH_WINEDT_PATH)); + applicationCommands.put(PushToApplications.SUBLIME_TEXT, getEmptyIsDefault(PUSH_SUBLIME_TEXT_PATH)); + applicationCommands.put(PushToApplications.VSCODE, getEmptyIsDefault(PUSH_VSCODE_PATH)); + + pushToApplicationPreferences = new PushToApplicationPreferences( + get(PUSH_TO_APPLICATION), + applicationCommands, + get(PUSH_EMACS_ADDITIONAL_PARAMETERS), + get(PUSH_VIM_SERVER) + ); + + EasyBind.listen(pushToApplicationPreferences.activeApplicationNameProperty(), (obs, oldValue, newValue) -> put(PUSH_TO_APPLICATION, newValue)); + pushToApplicationPreferences.getCommandPaths().addListener((obs, oldValue, newValue) -> storePushToApplicationPath(newValue)); + EasyBind.listen(pushToApplicationPreferences.emacsArgumentsProperty(), (obs, oldValue, newValue) -> put(PUSH_EMACS_ADDITIONAL_PARAMETERS, newValue)); + EasyBind.listen(pushToApplicationPreferences.vimServerProperty(), (obs, oldValue, newValue) -> put(PUSH_VIM_SERVER, newValue)); + return pushToApplicationPreferences; + } + + private void storePushToApplicationPath(Map commandPair) { + commandPair.forEach((key, value) -> { + switch (key) { + case PushToApplications.EMACS -> + put(PUSH_EMACS_PATH, value); + case PushToApplications.LYX -> + put(PUSH_LYXPIPE, value); + case PushToApplications.TEXMAKER -> + put(PUSH_TEXMAKER_PATH, value); + case PushToApplications.TEXSTUDIO -> + put(PUSH_TEXSTUDIO_PATH, value); + case PushToApplications.TEXWORKS -> + put(PUSH_TEXWORKS_PATH, value); + case PushToApplications.VIM -> + put(PUSH_VIM, value); + case PushToApplications.WIN_EDT -> + put(PUSH_WINEDT_PATH, value); + case PushToApplications.SUBLIME_TEXT -> + put(PUSH_SUBLIME_TEXT_PATH, value); + case PushToApplications.VSCODE -> + put(PUSH_VSCODE_PATH, value); + } + }); + } + + // endregion + + /** * @deprecated Never ever add a call to this method. There should be only one * caller. All other usages should get the preferences passed (or injected). The diff --git a/jabgui/src/main/java/org/jabref/gui/push/AbstractPushToApplication.java b/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java similarity index 70% rename from jabgui/src/main/java/org/jabref/gui/push/AbstractPushToApplication.java rename to jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java index 15615c88691..6a5e105608b 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/AbstractPushToApplication.java +++ b/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java @@ -1,18 +1,13 @@ -package org.jabref.gui.push; +package org.jabref.logic.push; import java.io.IOException; import java.nio.file.Path; import java.util.List; -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.gui.preferences.GuiPreferences; + import org.jabref.logic.l10n.Localization; import org.jabref.logic.os.OS; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.util.NotificationService; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.jabref.model.strings.StringUtil; @@ -33,29 +28,14 @@ public abstract class AbstractPushToApplication implements PushToApplication { protected String commandPath; - protected final DialogService dialogService; - protected final GuiPreferences preferences; + protected final NotificationService notificationService; + protected final CliPreferences preferences; - public AbstractPushToApplication(DialogService dialogService, GuiPreferences preferences) { - this.dialogService = dialogService; + public AbstractPushToApplication(NotificationService notificationService, CliPreferences preferences) { + this.notificationService = notificationService; this.preferences = preferences; } - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_GENERIC; - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - @Override public void pushEntries(BibDatabaseContext database, List entries, String keyString) { pushEntries(database, entries, keyString, new ProcessBuilder()); @@ -106,19 +86,33 @@ protected void pushEntries(BibDatabaseContext database, List entries, @Override public void onOperationCompleted() { if (notDefined) { - dialogService.showErrorDialogAndWait( + sendErrorNotification( Localization.lang("Error pushing entries"), Localization.lang("Path to %0 not defined", getDisplayName()) + "."); } else if (couldNotCall) { - dialogService.showErrorDialogAndWait( + sendErrorNotification( Localization.lang("Error pushing entries"), Localization.lang("Could not call executable") + " '" + commandPath + "'."); } else if (couldNotPush) { - dialogService.showErrorDialogAndWait( + sendErrorNotification( Localization.lang("Error pushing entries"), Localization.lang("Could not connect to %0", getDisplayName()) + "."); } else { - dialogService.notify(Localization.lang("Pushed citations to %0", getDisplayName()) + "."); + notificationService.notify(Localization.lang("Pushed citations to %0", getDisplayName()) + "."); + } + } + + @Override + public void sendErrorNotification(String message) { + this.sendErrorNotification(message, ""); + } + + @Override + public void sendErrorNotification(String title, String message) { + if (StringUtil.isNullOrEmpty(message)) { + notificationService.notify(title); + } else { + notificationService.notify(title.concat(" ").concat(message)); } } @@ -145,42 +139,20 @@ protected String[] getCommandLine(String keyString) { * * @return String with the command name */ - protected String getCommandName() { + public String getCommandName() { return null; } protected String getCitePrefix() { - return preferences.getExternalApplicationsPreferences().getCiteCommand().prefix(); + return "\\autocite{"; } public String getDelimiter() { - return preferences.getExternalApplicationsPreferences().getCiteCommand().delimiter(); + return ","; } protected String getCiteSuffix() { - return preferences.getExternalApplicationsPreferences().getCiteCommand().suffix(); - } - - @Override - public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new PushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } + return "}"; } public void jumpToLine(Path fileName, int line, int column) { diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToApplication.java b/jablib/src/main/java/org/jabref/logic/push/PushToApplication.java similarity index 72% rename from jabgui/src/main/java/org/jabref/gui/push/PushToApplication.java rename to jablib/src/main/java/org/jabref/logic/push/PushToApplication.java index 9292b433fb9..79428cfbe45 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToApplication.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToApplication.java @@ -1,10 +1,8 @@ -package org.jabref.gui.push; +package org.jabref.logic.push; import java.nio.file.Path; import java.util.List; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.JabRefIcon; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; @@ -21,18 +19,6 @@ public interface PushToApplication { */ String getDisplayName(); - /** - * Gets a tooltip for the push operation. - */ - String getTooltip(); - - /** - * Gets the icon associated with the application. - * - * @return The icon for the application. - */ - JabRefIcon getApplicationIcon(); - /** * The actual operation. This method will not be called on the event dispatch thread, so it should not do GUI * operations without utilizing invokeLater(). @@ -44,6 +30,10 @@ public interface PushToApplication { */ void onOperationCompleted(); + void sendErrorNotification(String title, String message); + + void sendErrorNotification(String message); + /** * Check whether this operation requires citation keys to be set for the entries. If true is returned an error message * will be displayed if keys are missing. @@ -52,10 +42,6 @@ public interface PushToApplication { */ boolean requiresCitationKeys(); - Action getAction(); - - PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences pushToApplicationPreferences); - String getDelimiter(); void jumpToLine(Path fileName, int line, int column); diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToApplicationPreferences.java b/jablib/src/main/java/org/jabref/logic/push/PushToApplicationPreferences.java similarity index 98% rename from jabgui/src/main/java/org/jabref/gui/push/PushToApplicationPreferences.java rename to jablib/src/main/java/org/jabref/logic/push/PushToApplicationPreferences.java index 7b569f73691..0add34a2aef 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToApplicationPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToApplicationPreferences.java @@ -1,4 +1,4 @@ -package org.jabref.gui.push; +package org.jabref.logic.push; import java.util.Map; diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToApplications.java b/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java similarity index 55% rename from jabgui/src/main/java/org/jabref/gui/push/PushToApplications.java rename to jablib/src/main/java/org/jabref/logic/push/PushToApplications.java index 0a277e471a2..7a834fd24d4 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToApplications.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java @@ -1,11 +1,11 @@ -package org.jabref.gui.push; +package org.jabref.logic.push; import java.util.ArrayList; import java.util.List; import java.util.Optional; -import org.jabref.gui.DialogService; -import org.jabref.gui.preferences.GuiPreferences; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.util.NotificationService; public class PushToApplications { @@ -25,27 +25,27 @@ public class PushToApplications { private PushToApplications() { } - public static List getAllApplications(DialogService dialogService, GuiPreferences preferences) { + public static List getAllApplications(NotificationService notificationService, CliPreferences preferences) { if (!APPLICATIONS.isEmpty()) { return APPLICATIONS; } APPLICATIONS.addAll(List.of( - new PushToEmacs(dialogService, preferences), - new PushToLyx(dialogService, preferences), - new PushToSublimeText(dialogService, preferences), - new PushToTexmaker(dialogService, preferences), - new PushToTeXstudio(dialogService, preferences), - new PushToTeXworks(dialogService, preferences), - new PushToVim(dialogService, preferences), - new PushToWinEdt(dialogService, preferences), - new PushToTexShop(dialogService, preferences), - new PushToVScode(dialogService, preferences))); + new PushToEmacs(notificationService, preferences), + new PushToLyx(notificationService, preferences), + new PushToSublimeText(notificationService, preferences), + new PushToTexmaker(notificationService, preferences), + new PushToTeXstudio(notificationService, preferences), + new PushToTeXworks(notificationService, preferences), + new PushToVim(notificationService, preferences), + new PushToWinEdt(notificationService, preferences), + new PushToTexShop(notificationService, preferences), + new PushToVScode(notificationService, preferences))); return APPLICATIONS; } - public static Optional getApplicationByName(String applicationName, DialogService dialogService, GuiPreferences preferences) { + public static Optional getApplicationByName(String applicationName, NotificationService dialogService, CliPreferences preferences) { return getAllApplications(dialogService, preferences).stream() .filter(application -> application.getDisplayName().equals(applicationName)) .findAny(); diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToEmacs.java b/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java similarity index 85% rename from jabgui/src/main/java/org/jabref/gui/push/PushToEmacs.java rename to jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java index 0139dc02da1..070aaf4c6ac 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToEmacs.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java @@ -1,4 +1,4 @@ -package org.jabref.gui.push; +package org.jabref.logic.push; import java.io.IOException; import java.io.InputStream; @@ -6,13 +6,11 @@ import java.util.Arrays; import java.util.List; -import org.jabref.gui.DialogService; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.preferences.GuiPreferences; import org.jabref.logic.l10n.Localization; import org.jabref.logic.os.OS; +import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.HeadlessExecutorService; +import org.jabref.logic.util.NotificationService; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; @@ -28,8 +26,8 @@ public class PushToEmacs extends AbstractPushToApplication { /** * @param preferences getPushToApplicationPreferences(), getExternalApplicationsPreferences(), and getFilePreferences() are used */ - public PushToEmacs(DialogService dialogService, GuiPreferences preferences) { - super(dialogService, preferences); + public PushToEmacs(NotificationService notificationService, CliPreferences preferences) { + super(notificationService, preferences); } @Override @@ -37,11 +35,6 @@ public String getDisplayName() { return NAME; } - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_EMACS; - } - @Override public void pushEntries(BibDatabaseContext database, List entries, String keys) { couldNotPush = false; @@ -129,10 +122,10 @@ public void pushEntries(BibDatabaseContext database, List entries, Str @Override public void onOperationCompleted() { if (couldNotPush) { - dialogService.showErrorDialogAndWait(Localization.lang("Error pushing entries"), + sendErrorNotification(Localization.lang("Error pushing entries"), Localization.lang("Could not push to a running emacs daemon.")); } else if (couldNotCall) { - dialogService.showErrorDialogAndWait(Localization.lang("Error pushing entries"), + sendErrorNotification(Localization.lang("Error pushing entries"), Localization.lang("Could not run the emacs client.")); } else { super.onOperationCompleted(); @@ -140,15 +133,10 @@ public void onOperationCompleted() { } @Override - protected String getCommandName() { + public String getCommandName() { return "gnuclient " + Localization.lang("or") + " emacsclient"; } - @Override - public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new PushToEmacsSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - @Override protected String[] jumpToLineCommandlineArguments(Path fileName, int line, int column) { return new String[] {commandPath, "+%s".formatted(line), fileName.toString()}; diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToLyx.java b/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java similarity index 74% rename from jabgui/src/main/java/org/jabref/gui/push/PushToLyx.java rename to jablib/src/main/java/org/jabref/logic/push/PushToLyx.java index f2ff670d0f4..4b410525e3c 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToLyx.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java @@ -1,4 +1,4 @@ -package org.jabref.gui.push; +package org.jabref.logic.push; import java.io.BufferedWriter; import java.io.IOException; @@ -7,12 +7,10 @@ import java.nio.file.Path; import java.util.List; -import org.jabref.gui.DialogService; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.preferences.GuiPreferences; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.HeadlessExecutorService; +import org.jabref.logic.util.NotificationService; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; @@ -25,7 +23,7 @@ public class PushToLyx extends AbstractPushToApplication { private static final Logger LOGGER = LoggerFactory.getLogger(PushToLyx.class); - public PushToLyx(DialogService dialogService, GuiPreferences preferences) { + public PushToLyx(NotificationService dialogService, CliPreferences preferences) { super(dialogService, preferences); } @@ -34,29 +32,19 @@ public String getDisplayName() { return NAME; } - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_LYX; - } - @Override public void onOperationCompleted() { if (couldNotPush) { - dialogService.showErrorDialogAndWait(Localization.lang("Error pushing entries"), + this.sendErrorNotification(Localization.lang("Error pushing entries"), Localization.lang("Verify that LyX is running and that the lyxpipe is valid.") + "[" + commandPath + "]"); } else if (couldNotCall) { - dialogService.showErrorDialogAndWait(Localization.lang("Unable to write to %0.", commandPath + ".in")); + this.sendErrorNotification(Localization.lang("Unable to write to %0.", commandPath + ".in")); } else { super.onOperationCompleted(); } } - @Override - public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new PushToLyxSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - @Override public void pushEntries(BibDatabaseContext database, final List entries, final String keyString) { couldNotPush = false; diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToSublimeText.java b/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java similarity index 86% rename from jabgui/src/main/java/org/jabref/gui/push/PushToSublimeText.java rename to jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java index fbcef0b4cc2..a327e8beb55 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToSublimeText.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java @@ -1,17 +1,15 @@ -package org.jabref.gui.push; +package org.jabref.logic.push; import java.io.IOException; import java.nio.file.Path; import java.util.List; import java.util.Map; -import org.jabref.gui.DialogService; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.preferences.GuiPreferences; -import org.jabref.gui.util.StreamGobbler; import org.jabref.logic.os.OS; +import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.HeadlessExecutorService; +import org.jabref.logic.util.NotificationService; +import org.jabref.logic.util.StreamGobbler; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.jabref.model.strings.StringUtil; @@ -25,8 +23,8 @@ public class PushToSublimeText extends AbstractPushToApplication { private static final Logger LOGGER = LoggerFactory.getLogger(PushToSublimeText.class); - public PushToSublimeText(DialogService dialogService, GuiPreferences preferences) { - super(dialogService, preferences); + public PushToSublimeText(NotificationService notificationService, CliPreferences preferences) { + super(notificationService, preferences); } @Override @@ -34,11 +32,6 @@ public String getDisplayName() { return NAME; } - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_SUBLIMETEXT; - } - @Override public void pushEntries(BibDatabaseContext database, List entries, String keyString) { couldNotPush = false; diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToTeXstudio.java b/jablib/src/main/java/org/jabref/logic/push/PushToTeXstudio.java similarity index 63% rename from jabgui/src/main/java/org/jabref/gui/push/PushToTeXstudio.java rename to jablib/src/main/java/org/jabref/logic/push/PushToTeXstudio.java index ac5ba327275..bf3783a7e58 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToTeXstudio.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTeXstudio.java @@ -1,17 +1,15 @@ -package org.jabref.gui.push; +package org.jabref.logic.push; import java.nio.file.Path; -import org.jabref.gui.DialogService; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.preferences.GuiPreferences; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.util.NotificationService; public class PushToTeXstudio extends AbstractPushToApplication { public static final String NAME = PushToApplications.TEXSTUDIO; - public PushToTeXstudio(DialogService dialogService, GuiPreferences preferences) { + public PushToTeXstudio(NotificationService dialogService, CliPreferences preferences) { super(dialogService, preferences); } @@ -20,11 +18,6 @@ public String getDisplayName() { return NAME; } - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_TEXSTUDIO; - } - @Override protected String[] getCommandLine(String keyString) { return new String[] {commandPath, "--insert-cite", "%s%s%s".formatted(getCitePrefix(), keyString, getCiteSuffix())}; diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToTeXworks.java b/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java similarity index 60% rename from jabgui/src/main/java/org/jabref/gui/push/PushToTeXworks.java rename to jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java index 87c3a3b9931..cf7f21d5838 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToTeXworks.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java @@ -1,11 +1,9 @@ -package org.jabref.gui.push; +package org.jabref.logic.push; import java.nio.file.Path; -import org.jabref.gui.DialogService; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.preferences.GuiPreferences; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.util.NotificationService; public class PushToTeXworks extends AbstractPushToApplication { @@ -14,11 +12,11 @@ public class PushToTeXworks extends AbstractPushToApplication { /** * Constructs a new {@code PushToTeXworks} instance. * - * @param dialogService The dialog service for displaying messages to the user. + * @param notificationService The dialog service for displaying messages to the user. * @param preferences The service for accessing user preferences. */ - public PushToTeXworks(DialogService dialogService, GuiPreferences preferences) { - super(dialogService, preferences); + public PushToTeXworks(NotificationService notificationService, CliPreferences preferences) { + super(notificationService, preferences); } @Override @@ -26,11 +24,6 @@ public String getDisplayName() { return NAME; } - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_TEXWORS; - } - @Override protected String[] getCommandLine(String keyString) { return new String[] {commandPath, "--insert-text", "%s%s%s".formatted(getCitePrefix(), keyString, getCiteSuffix())}; diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToTexShop.java b/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java similarity index 80% rename from jabgui/src/main/java/org/jabref/gui/push/PushToTexShop.java rename to jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java index 889982ca8ce..6852e28573a 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToTexShop.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java @@ -1,16 +1,14 @@ -package org.jabref.gui.push; +package org.jabref.logic.push; import java.io.IOException; import java.util.List; -import org.jabref.gui.DialogService; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.preferences.GuiPreferences; -import org.jabref.gui.util.StreamGobbler; import org.jabref.logic.l10n.Localization; import org.jabref.logic.os.OS; +import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.HeadlessExecutorService; +import org.jabref.logic.util.NotificationService; +import org.jabref.logic.util.StreamGobbler; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; @@ -23,8 +21,8 @@ public class PushToTexShop extends AbstractPushToApplication { private static final Logger LOGGER = LoggerFactory.getLogger(PushToTexShop.class); - public PushToTexShop(DialogService dialogService, GuiPreferences preferences) { - super(dialogService, preferences); + public PushToTexShop(NotificationService notificationService, CliPreferences preferences) { + super(notificationService, preferences); } @Override @@ -32,11 +30,6 @@ public String getDisplayName() { return NAME; } - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_TEXSHOP; - } - @Override public void pushEntries(BibDatabaseContext database, List entries, String keyString) { couldNotPush = false; @@ -82,7 +75,7 @@ protected String[] getCommandLine(String keyString) { if (OS.OS_X) { return new String[] {"sh", "-c", osascriptTexShop}; } else { - dialogService.showInformationDialogAndWait(Localization.lang("Push to application"), Localization.lang("Pushing citations to TeXShop is only possible on macOS!")); + sendErrorNotification(Localization.lang("Push to application"), Localization.lang("Pushing citations to TeXShop is only possible on macOS!")); return new String[] {}; } } diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToTexmaker.java b/jablib/src/main/java/org/jabref/logic/push/PushToTexmaker.java similarity index 64% rename from jabgui/src/main/java/org/jabref/gui/push/PushToTexmaker.java rename to jablib/src/main/java/org/jabref/logic/push/PushToTexmaker.java index 509fb6626ff..823e6e11763 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToTexmaker.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTexmaker.java @@ -1,11 +1,9 @@ -package org.jabref.gui.push; +package org.jabref.logic.push; import java.nio.file.Path; -import org.jabref.gui.DialogService; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.preferences.GuiPreferences; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.util.NotificationService; /** * Class for pushing entries into TexMaker. @@ -14,7 +12,7 @@ public class PushToTexmaker extends AbstractPushToApplication { public static final String NAME = "Texmaker"; - public PushToTexmaker(DialogService dialogService, GuiPreferences preferences) { + public PushToTexmaker(NotificationService dialogService, CliPreferences preferences) { super(dialogService, preferences); } @@ -23,11 +21,6 @@ public String getDisplayName() { return NAME; } - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_TEXMAKER; - } - @Override protected String[] getCommandLine(String keyString) { return new String[] {commandPath, "-insert", getCitePrefix() + keyString + getCiteSuffix()}; diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToVScode.java b/jablib/src/main/java/org/jabref/logic/push/PushToVScode.java similarity index 60% rename from jabgui/src/main/java/org/jabref/gui/push/PushToVScode.java rename to jablib/src/main/java/org/jabref/logic/push/PushToVScode.java index 6a40a1edf45..67c5254903d 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToVScode.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToVScode.java @@ -1,18 +1,16 @@ -package org.jabref.gui.push; +package org.jabref.logic.push; import java.nio.file.Path; -import org.jabref.gui.DialogService; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.preferences.GuiPreferences; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.util.NotificationService; public class PushToVScode extends AbstractPushToApplication { public static final String NAME = PushToApplications.VSCODE; - public PushToVScode(DialogService dialogService, GuiPreferences preferences) { - super(dialogService, preferences); + public PushToVScode(NotificationService notificationService, CliPreferences preferences) { + super(notificationService, preferences); } @Override @@ -20,11 +18,6 @@ public String getDisplayName() { return NAME; } - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_VSCODE; - } - @Override protected String[] getCommandLine(String keyString) { // TODO - Implementing this will fix https://github.com/JabRef/jabref/issues/6775 diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToVim.java b/jablib/src/main/java/org/jabref/logic/push/PushToVim.java similarity index 84% rename from jabgui/src/main/java/org/jabref/gui/push/PushToVim.java rename to jablib/src/main/java/org/jabref/logic/push/PushToVim.java index 3e2f3d4fb04..acbcf7b6453 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToVim.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToVim.java @@ -1,4 +1,4 @@ -package org.jabref.gui.push; +package org.jabref.logic.push; import java.io.IOException; import java.io.InputStream; @@ -6,13 +6,11 @@ import java.util.Arrays; import java.util.List; -import org.jabref.gui.DialogService; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.preferences.GuiPreferences; import org.jabref.logic.l10n.Localization; import org.jabref.logic.os.OS; +import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.HeadlessExecutorService; +import org.jabref.logic.util.NotificationService; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; @@ -25,8 +23,8 @@ public class PushToVim extends AbstractPushToApplication { private static final Logger LOGGER = LoggerFactory.getLogger(PushToVim.class); - public PushToVim(DialogService dialogService, GuiPreferences preferences) { - super(dialogService, preferences); + public PushToVim(NotificationService notificationService, CliPreferences preferences) { + super(notificationService, preferences); } @Override @@ -34,16 +32,6 @@ public String getDisplayName() { return NAME; } - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_VIM; - } - - @Override - public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new PushToVimSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - @Override public void pushEntries(BibDatabaseContext database, List entries, String keys) { if (!determineCommandPath()) { @@ -91,10 +79,10 @@ public void pushEntries(BibDatabaseContext database, List entries, Str @Override public void onOperationCompleted() { if (couldNotPush) { - dialogService.showErrorDialogAndWait(Localization.lang("Error pushing entries"), + sendErrorNotification(Localization.lang("Error pushing entries"), Localization.lang("Could not push to a running Vim server.")); } else if (couldNotCall) { - dialogService.showErrorDialogAndWait(Localization.lang("Error pushing entries"), + sendErrorNotification(Localization.lang("Error pushing entries"), Localization.lang("Could not run the 'vim' program.")); } else { super.onOperationCompleted(); diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToWinEdt.java b/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java similarity index 61% rename from jabgui/src/main/java/org/jabref/gui/push/PushToWinEdt.java rename to jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java index e1c8269d7b9..26609898dd1 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToWinEdt.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java @@ -1,18 +1,16 @@ -package org.jabref.gui.push; +package org.jabref.logic.push; import java.nio.file.Path; -import org.jabref.gui.DialogService; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.preferences.GuiPreferences; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.util.NotificationService; public class PushToWinEdt extends AbstractPushToApplication { public static final String NAME = PushToApplications.WIN_EDT; - public PushToWinEdt(DialogService dialogService, GuiPreferences preferences) { - super(dialogService, preferences); + public PushToWinEdt(NotificationService notificationService, CliPreferences preferences) { + super(notificationService, preferences); } @Override @@ -20,11 +18,6 @@ public String getDisplayName() { return NAME; } - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_WINEDT; - } - @Override protected String[] getCommandLine(String keyString) { return new String[] {commandPath, diff --git a/jabgui/src/main/java/org/jabref/gui/util/StreamGobbler.java b/jablib/src/main/java/org/jabref/logic/util/StreamGobbler.java similarity index 96% rename from jabgui/src/main/java/org/jabref/gui/util/StreamGobbler.java rename to jablib/src/main/java/org/jabref/logic/util/StreamGobbler.java index b2131968f87..1144fcff923 100644 --- a/jabgui/src/main/java/org/jabref/gui/util/StreamGobbler.java +++ b/jablib/src/main/java/org/jabref/logic/util/StreamGobbler.java @@ -1,4 +1,4 @@ -package org.jabref.gui.util; +package org.jabref.logic.util; import java.io.BufferedReader; import java.io.IOException; From 96d79bcd6c833b9bc147b65798271e5daec35082 Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Tue, 8 Jul 2025 21:27:34 +0200 Subject: [PATCH 04/23] Add Prefix GUI to all gui classes --- .../main/java/org/jabref/gui/frame/JabRefFrame.java | 10 +++++----- .../src/main/java/org/jabref/gui/frame/MainMenu.java | 12 ++++++------ .../main/java/org/jabref/gui/frame/MainToolBar.java | 12 ++++++------ .../preferences/external/ExternalTabViewModel.java | 4 ++-- .../org/jabref/gui/push/GUIPushToApplication.java | 2 +- ...Command.java => GUIPushToApplicationCommand.java} | 6 +++--- ...ttings.java => GUIPushToApplicationSettings.java} | 10 +++++----- .../java/org/jabref/gui/push/GUIPushToEmacs.java | 4 ++-- ...macsSettings.java => GUIPushToEmacsSettings.java} | 10 +++++----- .../main/java/org/jabref/gui/push/GUIPushToLyx.java | 4 ++-- ...hToLyxSettings.java => GUIPushToLyxSettings.java} | 10 +++++----- .../org/jabref/gui/push/GUIPushToSublimeText.java | 4 ++-- .../java/org/jabref/gui/push/GUIPushToTeXstudio.java | 4 ++-- .../java/org/jabref/gui/push/GUIPushToTeXworks.java | 4 ++-- .../java/org/jabref/gui/push/GUIPushToTexShop.java | 4 ++-- .../java/org/jabref/gui/push/GUIPushToTexmaker.java | 4 ++-- .../java/org/jabref/gui/push/GUIPushToVScode.java | 4 ++-- .../main/java/org/jabref/gui/push/GUIPushToVim.java | 4 ++-- ...hToVimSettings.java => GUIPushToVimSettings.java} | 10 +++++----- .../java/org/jabref/gui/push/GUIPushToWinEdt.java | 4 ++-- 20 files changed, 63 insertions(+), 63 deletions(-) rename jabgui/src/main/java/org/jabref/gui/push/{PushToApplicationCommand.java => GUIPushToApplicationCommand.java} (95%) rename jabgui/src/main/java/org/jabref/gui/push/{PushToApplicationSettings.java => GUIPushToApplicationSettings.java} (91%) rename jabgui/src/main/java/org/jabref/gui/push/{PushToEmacsSettings.java => GUIPushToEmacsSettings.java} (70%) rename jabgui/src/main/java/org/jabref/gui/push/{PushToLyxSettings.java => GUIPushToLyxSettings.java} (55%) rename jabgui/src/main/java/org/jabref/gui/push/{PushToVimSettings.java => GUIPushToVimSettings.java} (70%) diff --git a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java index 3fa13641fb7..4ddc5d47d19 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java @@ -44,7 +44,7 @@ import org.jabref.gui.keyboard.KeyBinding; import org.jabref.gui.libraryproperties.LibraryPropertiesAction; import org.jabref.gui.preferences.GuiPreferences; -import org.jabref.gui.push.PushToApplicationCommand; +import org.jabref.gui.push.GUIPushToApplicationCommand; import org.jabref.gui.search.GlobalSearchBar; import org.jabref.gui.search.SearchType; import org.jabref.gui.sidepane.SidePane; @@ -104,7 +104,7 @@ private enum PanelMode { MAIN_TABLE, MAIN_TABLE_AND_ENTRY_EDITOR } private final TaskExecutor taskExecutor; private final JabRefFrameViewModel viewModel; - private final PushToApplicationCommand pushToApplicationCommand; + private final GUIPushToApplicationCommand GUIPushToApplicationCommand; private final SplitPane horizontalSplit = new SplitPane(); private final SidePane sidePane; private final SplitPane verticalSplit = new SplitPane(); @@ -188,7 +188,7 @@ public JabRefFrame(Stage mainStage, clipBoardManager, undoManager); - this.pushToApplicationCommand = new PushToApplicationCommand( + this.GUIPushToApplicationCommand = new GUIPushToApplicationCommand( stateManager, dialogService, this.preferences, @@ -218,7 +218,7 @@ public JabRefFrame(Stage mainStage, private void initLayout() { MainToolBar mainToolBar = new MainToolBar( this, - pushToApplicationCommand, + GUIPushToApplicationCommand, globalSearchBar, dialogService, stateManager, @@ -234,7 +234,7 @@ private void initLayout() { this, fileHistory, sidePane, - pushToApplicationCommand, + GUIPushToApplicationCommand, preferences, stateManager, fileUpdateMonitor, diff --git a/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java b/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java index 78654f6939d..84d6ccb3716 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java @@ -62,7 +62,7 @@ import org.jabref.gui.preferences.ShowPreferencesAction; import org.jabref.gui.preview.CopyCitationAction; import org.jabref.gui.preview.PreviewControls; -import org.jabref.gui.push.PushToApplicationCommand; +import org.jabref.gui.push.GUIPushToApplicationCommand; import org.jabref.gui.search.RebuildFulltextSearchIndexAction; import org.jabref.gui.shared.ConnectToSharedDatabaseCommand; import org.jabref.gui.shared.PullChangesFromSharedAction; @@ -98,7 +98,7 @@ public class MainMenu extends MenuBar { private final JabRefFrame frame; private final FileHistoryMenu fileHistoryMenu; private final SidePane sidePane; - private final PushToApplicationCommand pushToApplicationCommand; + private final GUIPushToApplicationCommand GUIPushToApplicationCommand; private final GuiPreferences preferences; private final StateManager stateManager; private final FileUpdateMonitor fileUpdateMonitor; @@ -115,7 +115,7 @@ public class MainMenu extends MenuBar { public MainMenu(JabRefFrame frame, FileHistoryMenu fileHistoryMenu, SidePane sidePane, - PushToApplicationCommand pushToApplicationCommand, + GUIPushToApplicationCommand GUIPushToApplicationCommand, GuiPreferences preferences, StateManager stateManager, FileUpdateMonitor fileUpdateMonitor, @@ -131,7 +131,7 @@ public MainMenu(JabRefFrame frame, this.frame = frame; this.fileHistoryMenu = fileHistoryMenu; this.sidePane = sidePane; - this.pushToApplicationCommand = pushToApplicationCommand; + this.GUIPushToApplicationCommand = GUIPushToApplicationCommand; this.preferences = preferences; this.stateManager = stateManager; this.fileUpdateMonitor = fileUpdateMonitor; @@ -312,8 +312,8 @@ private void createMenu() { // endregion ); - final MenuItem pushToApplicationMenuItem = factory.createMenuItem(pushToApplicationCommand.getAction(), pushToApplicationCommand); - pushToApplicationCommand.registerReconfigurable(pushToApplicationMenuItem); + final MenuItem pushToApplicationMenuItem = factory.createMenuItem(GUIPushToApplicationCommand.getAction(), GUIPushToApplicationCommand); + GUIPushToApplicationCommand.registerReconfigurable(pushToApplicationMenuItem); tools.getItems().addAll( factory.createMenuItem(StandardActions.PARSE_LATEX, new ParseLatexAction(stateManager)), diff --git a/jabgui/src/main/java/org/jabref/gui/frame/MainToolBar.java b/jabgui/src/main/java/org/jabref/gui/frame/MainToolBar.java index ed8525c132b..64c5ca02bbd 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/MainToolBar.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/MainToolBar.java @@ -28,7 +28,7 @@ import org.jabref.gui.importer.NewEntryAction; import org.jabref.gui.importer.actions.OpenDatabaseAction; import org.jabref.gui.preferences.GuiPreferences; -import org.jabref.gui.push.PushToApplicationCommand; +import org.jabref.gui.push.GUIPushToApplicationCommand; import org.jabref.gui.search.GlobalSearchBar; import org.jabref.gui.theme.ThemeManager; import org.jabref.gui.undo.CountingUndoManager; @@ -47,7 +47,7 @@ public class MainToolBar extends ToolBar { private final LibraryTabContainer frame; - private final PushToApplicationCommand pushToApplicationCommand; + private final GUIPushToApplicationCommand GUIPushToApplicationCommand; private final GlobalSearchBar globalSearchBar; private final DialogService dialogService; private final StateManager stateManager; @@ -64,7 +64,7 @@ public class MainToolBar extends ToolBar { private Subscription taskProgressSubscription; public MainToolBar(LibraryTabContainer tabContainer, - PushToApplicationCommand pushToApplicationCommand, + GUIPushToApplicationCommand GUIPushToApplicationCommand, GlobalSearchBar globalSearchBar, DialogService dialogService, StateManager stateManager, @@ -76,7 +76,7 @@ public MainToolBar(LibraryTabContainer tabContainer, ClipBoardManager clipBoardManager, CountingUndoManager undoManager) { this.frame = tabContainer; - this.pushToApplicationCommand = pushToApplicationCommand; + this.GUIPushToApplicationCommand = GUIPushToApplicationCommand; this.globalSearchBar = globalSearchBar; this.dialogService = dialogService; this.stateManager = stateManager; @@ -97,8 +97,8 @@ private void createToolBar() { final Region leftSpacer = new Region(); final Region rightSpacer = new Region(); - final Button pushToApplicationButton = factory.createIconButton(pushToApplicationCommand.getAction(), pushToApplicationCommand); - pushToApplicationCommand.registerReconfigurable(pushToApplicationButton); + final Button pushToApplicationButton = factory.createIconButton(GUIPushToApplicationCommand.getAction(), GUIPushToApplicationCommand); + GUIPushToApplicationCommand.registerReconfigurable(pushToApplicationButton); // Setup Toolbar diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java index d7bdb315f66..5bdf5478fef 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java @@ -21,7 +21,7 @@ import org.jabref.gui.push.GUIPushToApplication; import org.jabref.gui.push.GUIPushToApplications; import org.jabref.gui.push.GUIPushToEmacs; -import org.jabref.gui.push.PushToApplicationSettings; +import org.jabref.gui.push.GUIPushToApplicationSettings; import org.jabref.gui.util.FileDialogConfiguration; import org.jabref.logic.l10n.Localization; import org.jabref.logic.push.CitationCommandString; @@ -157,7 +157,7 @@ public boolean validateSettings() { public void pushToApplicationSettings() { GUIPushToApplication selectedApplication = selectedPushToApplicationProperty.getValue(); - PushToApplicationSettings settings = selectedApplication.getSettings(selectedApplication, workingPushToApplicationPreferences); + GUIPushToApplicationSettings settings = selectedApplication.getSettings(selectedApplication, workingPushToApplicationPreferences); DialogPane dialogPane = new DialogPane(); dialogPane.setContent(settings.getSettingsPane()); diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java index 9b037d308eb..aff96c476a6 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java @@ -21,7 +21,7 @@ public interface GUIPushToApplication extends PushToApplication { Action getAction(); - PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences pushToApplicationPreferences); + GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences pushToApplicationPreferences); void sendErrorNotification(String title, String message); } diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToApplicationCommand.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationCommand.java similarity index 95% rename from jabgui/src/main/java/org/jabref/gui/push/PushToApplicationCommand.java rename to jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationCommand.java index 94fe0f67662..bb45e4eb043 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToApplicationCommand.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationCommand.java @@ -30,9 +30,9 @@ /** * An Action class representing the process of invoking a PushToApplication operation. */ -public class PushToApplicationCommand extends SimpleCommand { +public class GUIPushToApplicationCommand extends SimpleCommand { - private static final Logger LOGGER = LoggerFactory.getLogger(PushToApplicationCommand.class); + private static final Logger LOGGER = LoggerFactory.getLogger(GUIPushToApplicationCommand.class); private final StateManager stateManager; private final DialogService dialogService; @@ -43,7 +43,7 @@ public class PushToApplicationCommand extends SimpleCommand { private GUIPushToApplication application; - public PushToApplicationCommand(StateManager stateManager, DialogService dialogService, GuiPreferences preferences, TaskExecutor taskExecutor) { + public GUIPushToApplicationCommand(StateManager stateManager, DialogService dialogService, GuiPreferences preferences, TaskExecutor taskExecutor) { this.stateManager = stateManager; this.dialogService = dialogService; this.preferences = preferences; diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToApplicationSettings.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationSettings.java similarity index 91% rename from jabgui/src/main/java/org/jabref/gui/push/PushToApplicationSettings.java rename to jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationSettings.java index 8d00e049b6c..bd5542cc303 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToApplicationSettings.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationSettings.java @@ -20,7 +20,7 @@ import org.jabref.logic.push.PushToApplication; import org.jabref.logic.push.PushToApplicationPreferences; -public class PushToApplicationSettings { +public class GUIPushToApplicationSettings { protected final Label commandLabel; protected final TextField path; @@ -28,10 +28,10 @@ public class PushToApplicationSettings { protected final PushToApplicationPreferences preferences; protected final AbstractPushToApplication application; - public PushToApplicationSettings(PushToApplication application, - DialogService dialogService, - FilePreferences filePreferences, - PushToApplicationPreferences preferences) { + public GUIPushToApplicationSettings(PushToApplication application, + DialogService dialogService, + FilePreferences filePreferences, + PushToApplicationPreferences preferences) { this.application = (AbstractPushToApplication) application; this.preferences = preferences; diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java index f673c3be840..ddd2c606253 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java @@ -42,8 +42,8 @@ public JabRefIcon getApplicationIcon() { } @Override - public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new PushToEmacsSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new GUIPushToEmacsSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); } protected class PushToApplicationAction implements Action { diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToEmacsSettings.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacsSettings.java similarity index 70% rename from jabgui/src/main/java/org/jabref/gui/push/PushToEmacsSettings.java rename to jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacsSettings.java index f2311a77606..7f22369d3d8 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToEmacsSettings.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacsSettings.java @@ -9,14 +9,14 @@ import org.jabref.logic.push.PushToApplication; import org.jabref.logic.push.PushToApplicationPreferences; -public class PushToEmacsSettings extends PushToApplicationSettings { +public class GUIPushToEmacsSettings extends GUIPushToApplicationSettings { private final TextField additionalParams = new TextField(); - public PushToEmacsSettings(PushToApplication application, - DialogService dialogService, - FilePreferences filePreferences, - PushToApplicationPreferences preferences) { + public GUIPushToEmacsSettings(PushToApplication application, + DialogService dialogService, + FilePreferences filePreferences, + PushToApplicationPreferences preferences) { super(application, dialogService, filePreferences, preferences); settingsPane.add(new Label(Localization.lang("Additional parameters") + ":"), 0, 1); diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java index 466a7bc6dbe..206ee5635f5 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java @@ -23,8 +23,8 @@ public GUIPushToLyx(DialogService dialogService, CliPreferences preferences) { } @Override - public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new PushToLyxSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new GUIPushToLyxSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); } @Override diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToLyxSettings.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyxSettings.java similarity index 55% rename from jabgui/src/main/java/org/jabref/gui/push/PushToLyxSettings.java rename to jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyxSettings.java index 145b9520544..90b2d8e633f 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToLyxSettings.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyxSettings.java @@ -6,12 +6,12 @@ import org.jabref.logic.push.PushToApplication; import org.jabref.logic.push.PushToApplicationPreferences; -public class PushToLyxSettings extends PushToApplicationSettings { +public class GUIPushToLyxSettings extends GUIPushToApplicationSettings { - public PushToLyxSettings(PushToApplication application, - DialogService dialogService, - FilePreferences filePreferences, - PushToApplicationPreferences preferences) { + public GUIPushToLyxSettings(PushToApplication application, + DialogService dialogService, + FilePreferences filePreferences, + PushToApplicationPreferences preferences) { super(application, dialogService, filePreferences, preferences); commandLabel.setText(Localization.lang("Path to LyX pipe") + ":"); diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java index 46fbc40aa09..cfc7fe1f2a5 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java @@ -23,8 +23,8 @@ public GUIPushToSublimeText(DialogService dialogService, CliPreferences preferen } @Override - public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new PushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); } @Override diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java index c7173789c51..7fa03c316b7 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java @@ -23,8 +23,8 @@ public GUIPushToTeXstudio(DialogService dialogService, CliPreferences preference } @Override - public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new PushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); } @Override diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java index da0e71638cd..cc83d00dc3a 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java @@ -23,8 +23,8 @@ public GUIPushToTeXworks(DialogService dialogService, CliPreferences preferences } @Override - public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new PushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); } @Override diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java index 9c96f05f261..65d9aea09fa 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java @@ -23,8 +23,8 @@ public GUIPushToTexShop(DialogService dialogService, CliPreferences preferences) } @Override - public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new PushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); } @Override diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java index 56289967970..02bfa75976a 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java @@ -23,8 +23,8 @@ public GUIPushToTexmaker(DialogService dialogService, CliPreferences preferences } @Override - public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new PushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); } @Override diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java index 06ad78bb06a..55d61e46c63 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java @@ -23,8 +23,8 @@ public GUIPushToVScode(DialogService dialogService, CliPreferences preferences) } @Override - public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new PushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); } @Override diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java index d1aceff42f0..c9b5c0c562a 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java @@ -23,8 +23,8 @@ public GUIPushToVim(DialogService dialogService, CliPreferences preferences) { } @Override - public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new PushToVimSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new GUIPushToVimSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); } @Override diff --git a/jabgui/src/main/java/org/jabref/gui/push/PushToVimSettings.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVimSettings.java similarity index 70% rename from jabgui/src/main/java/org/jabref/gui/push/PushToVimSettings.java rename to jabgui/src/main/java/org/jabref/gui/push/GUIPushToVimSettings.java index b7c6e24d526..ac3dfef683c 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/PushToVimSettings.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVimSettings.java @@ -9,14 +9,14 @@ import org.jabref.logic.push.PushToApplication; import org.jabref.logic.push.PushToApplicationPreferences; -public class PushToVimSettings extends PushToApplicationSettings { +public class GUIPushToVimSettings extends GUIPushToApplicationSettings { private final TextField vimServer = new TextField(); - public PushToVimSettings(PushToApplication application, - DialogService dialogService, - FilePreferences filePreferences, - PushToApplicationPreferences preferences) { + public GUIPushToVimSettings(PushToApplication application, + DialogService dialogService, + FilePreferences filePreferences, + PushToApplicationPreferences preferences) { super(application, dialogService, filePreferences, preferences); settingsPane.add(new Label(Localization.lang("Vim server name") + ":"), 0, 1); diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java index 7facf3295ef..fd6c444dd2d 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java @@ -23,8 +23,8 @@ public GUIPushToWinEdt(DialogService dialogService, CliPreferences preferences) } @Override - public PushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new PushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); + public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { + return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); } @Override From 63cf18cd9deeab4aaf460499ed63696901e398be Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Tue, 8 Jul 2025 23:24:17 +0200 Subject: [PATCH 05/23] Move Cite Command Preferences from ExternalApplicationsPreferences to PushToApplicationPreferences --- .../org/jabref/gui/edit/CopyMoreAction.java | 4 +-- .../ExternalApplicationsPreferences.java | 26 ------------------ .../gui/preferences/JabRefGuiPreferences.java | 15 ++++++----- .../external/ExternalTabViewModel.java | 13 +++++---- .../jabref/gui/edit/CopyMoreActionTest.java | 8 +++--- .../org/jabref/gui/push/PushToEmacsTest.java | 11 +++----- .../jabref/gui/push/PushToTeXworksTest.java | 11 +++----- .../org/jabref/gui/push/PushToWinEdtTest.java | 3 +-- .../preferences/JabRefCliPreferences.java | 7 ++++- .../logic/push/AbstractPushToApplication.java | 8 +++--- .../push/PushToApplicationPreferences.java | 27 ++++++++++++++++++- .../org/jabref/logic/push/PushToEmacs.java | 4 +-- .../org/jabref/logic/push/PushToTeXworks.java | 2 +- .../org/jabref/logic/push/PushToWinEdt.java | 2 +- 14 files changed, 71 insertions(+), 70 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/edit/CopyMoreAction.java b/jabgui/src/main/java/org/jabref/gui/edit/CopyMoreAction.java index 80789f0c5fa..193a00a5bab 100644 --- a/jabgui/src/main/java/org/jabref/gui/edit/CopyMoreAction.java +++ b/jabgui/src/main/java/org/jabref/gui/edit/CopyMoreAction.java @@ -169,13 +169,13 @@ private void doCopyKey(Function, String> mapKeyList) { private void copyCiteKey() { doCopyKey(keys -> { - CitationCommandString citeCommand = preferences.getExternalApplicationsPreferences().getCiteCommand(); + CitationCommandString citeCommand = preferences.getPushToApplicationPreferences().getCiteCommand(); return citeCommand.prefix() + String.join(citeCommand.delimiter(), keys) + citeCommand.suffix(); }); } private void copyKey() { - doCopyKey(keys -> String.join(preferences.getExternalApplicationsPreferences().getCiteCommand().delimiter(), keys)); + doCopyKey(keys -> String.join(preferences.getPushToApplicationPreferences().getCiteCommand().delimiter(), keys)); } private void copyKeyAndTitle() { diff --git a/jabgui/src/main/java/org/jabref/gui/frame/ExternalApplicationsPreferences.java b/jabgui/src/main/java/org/jabref/gui/frame/ExternalApplicationsPreferences.java index b2d7587afb1..dbaa426796b 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/ExternalApplicationsPreferences.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/ExternalApplicationsPreferences.java @@ -5,24 +5,18 @@ import java.util.TreeSet; 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; import javafx.collections.FXCollections; import javafx.collections.ObservableSet; import org.jabref.gui.externalfiletype.ExternalFileType; -import org.jabref.logic.push.CitationCommandString; public class ExternalApplicationsPreferences { private final StringProperty eMailSubject; private final BooleanProperty shouldAutoOpenEmailAttachmentsFolder; - private final ObjectProperty citeCommand; - - private final ObjectProperty defaultCiteCommand; private final BooleanProperty useCustomTerminal; private final StringProperty customTerminalCommand; @@ -33,8 +27,6 @@ public class ExternalApplicationsPreferences { public ExternalApplicationsPreferences(String eMailSubject, boolean shouldAutoOpenEmailAttachmentsFolder, - CitationCommandString citeCommand, - CitationCommandString defaultCiteCommand, Set externalFileTypes, boolean useCustomTerminal, String customTerminalCommand, @@ -44,8 +36,6 @@ public ExternalApplicationsPreferences(String eMailSubject, this.eMailSubject = new SimpleStringProperty(eMailSubject); this.shouldAutoOpenEmailAttachmentsFolder = new SimpleBooleanProperty(shouldAutoOpenEmailAttachmentsFolder); - this.citeCommand = new SimpleObjectProperty<>(citeCommand); - this.defaultCiteCommand = new SimpleObjectProperty<>(defaultCiteCommand); this.externalFileTypes.addAll(externalFileTypes); this.useCustomTerminal = new SimpleBooleanProperty(useCustomTerminal); this.customTerminalCommand = new SimpleStringProperty(customTerminalCommand); @@ -78,18 +68,6 @@ public void setAutoOpenEmailAttachmentsFolder(boolean shouldAutoOpenEmailAttachm this.shouldAutoOpenEmailAttachmentsFolder.set(shouldAutoOpenEmailAttachmentsFolder); } - public CitationCommandString getCiteCommand() { - return citeCommand.get(); - } - - public ObjectProperty citeCommandProperty() { - return citeCommand; - } - - public void setCiteCommand(CitationCommandString citeCommand) { - this.citeCommand.set(citeCommand); - } - public boolean useCustomTerminal() { return useCustomTerminal.get(); } @@ -150,10 +128,6 @@ public void setKindleEmail(String kindleEmail) { this.kindleEmail.set(kindleEmail); } - public CitationCommandString getDefaultCiteCommand() { - return defaultCiteCommand.getValue(); - } - public ObservableSet getExternalFileTypes() { return this.externalFileTypes; } diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java b/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java index 668418dccaf..d2373dc24fa 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java @@ -147,6 +147,7 @@ public class JabRefGuiPreferences extends JabRefCliPreferences implements GuiPre private static final String PUSH_VIM = "vim"; private static final String PUSH_SUBLIME_TEXT_PATH = "sublimeTextPath"; private static final String PUSH_VSCODE_PATH = "VScodePath"; + private static final String CITE_COMMAND = "citeCommand"; // endregion // region NameDisplayPreferences @@ -162,7 +163,6 @@ public class JabRefGuiPreferences extends JabRefCliPreferences implements GuiPre private static final String CONSOLE_COMMAND = "consoleCommand"; private static final String USE_DEFAULT_CONSOLE_APPLICATION = "useDefaultConsoleApplication"; private static final String USE_DEFAULT_FILE_BROWSER_APPLICATION = "userDefaultFileBrowserApplication"; - private static final String CITE_COMMAND = "citeCommand"; private static final String EMAIL_SUBJECT = "emailSubject"; private static final String KINDLE_EMAIL = "kindleEmail"; private static final String OPEN_FOLDERS_OF_ATTACHED_FILES = "openFoldersOfAttachedFiles"; @@ -301,7 +301,6 @@ private JabRefGuiPreferences() { // region ExternalApplicationsPreferences defaults.put(EXTERNAL_FILE_TYPES, ""); - defaults.put(CITE_COMMAND, "\\cite{key1,key2}"); defaults.put(EMAIL_SUBJECT, Localization.lang("References")); defaults.put(KINDLE_EMAIL, ""); @@ -386,6 +385,7 @@ private JabRefGuiPreferences() { defaults.put(PUSH_VIM_SERVER, "vim"); defaults.put(PUSH_EMACS_ADDITIONAL_PARAMETERS, "-n -e"); defaults.put(PUSH_VSCODE_PATH, OS.detectProgramPath("Code", "Microsoft VS Code")); + defaults.put(CITE_COMMAND, "\\cite{key1,key2}"); if (OS.OS_X) { defaults.put(PUSH_EMACS_PATH, "emacsclient"); @@ -814,8 +814,6 @@ public ExternalApplicationsPreferences getExternalApplicationsPreferences() { externalApplicationsPreferences = new ExternalApplicationsPreferences( get(EMAIL_SUBJECT), getBoolean(OPEN_FOLDERS_OF_ATTACHED_FILES), - CitationCommandString.from(get(CITE_COMMAND)), - CitationCommandString.from((String) defaults.get(CITE_COMMAND)), ExternalFileTypes.fromString(get(EXTERNAL_FILE_TYPES)), !getBoolean(USE_DEFAULT_CONSOLE_APPLICATION), // mind the ! get(CONSOLE_COMMAND), @@ -827,8 +825,6 @@ public ExternalApplicationsPreferences getExternalApplicationsPreferences() { (obs, oldValue, newValue) -> put(EMAIL_SUBJECT, newValue)); EasyBind.listen(externalApplicationsPreferences.autoOpenEmailAttachmentsFolderProperty(), (obs, oldValue, newValue) -> putBoolean(OPEN_FOLDERS_OF_ATTACHED_FILES, newValue)); - EasyBind.listen(externalApplicationsPreferences.citeCommandProperty(), - (obs, oldValue, newValue) -> put(CITE_COMMAND, newValue.toString())); EasyBind.listen(externalApplicationsPreferences.useCustomTerminalProperty(), (obs, oldValue, newValue) -> putBoolean(USE_DEFAULT_CONSOLE_APPLICATION, !newValue)); // mind the ! externalApplicationsPreferences.getExternalFileTypes().addListener((SetChangeListener) c -> @@ -998,13 +994,18 @@ public PushToApplicationPreferences getPushToApplicationPreferences() { get(PUSH_TO_APPLICATION), applicationCommands, get(PUSH_EMACS_ADDITIONAL_PARAMETERS), - get(PUSH_VIM_SERVER) + get(PUSH_VIM_SERVER), + CitationCommandString.from(get(CITE_COMMAND)), + CitationCommandString.from((String) defaults.get(CITE_COMMAND)) ); EasyBind.listen(pushToApplicationPreferences.activeApplicationNameProperty(), (obs, oldValue, newValue) -> put(PUSH_TO_APPLICATION, newValue)); pushToApplicationPreferences.getCommandPaths().addListener((obs, oldValue, newValue) -> storePushToApplicationPath(newValue)); EasyBind.listen(pushToApplicationPreferences.emacsArgumentsProperty(), (obs, oldValue, newValue) -> put(PUSH_EMACS_ADDITIONAL_PARAMETERS, newValue)); EasyBind.listen(pushToApplicationPreferences.vimServerProperty(), (obs, oldValue, newValue) -> put(PUSH_VIM_SERVER, newValue)); + EasyBind.listen(pushToApplicationPreferences.citeCommandProperty(), + (obs, oldValue, newValue) -> put(CITE_COMMAND, newValue.toString())); + return pushToApplicationPreferences; } diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java index 5bdf5478fef..1beb3e29ab8 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java @@ -19,9 +19,9 @@ import org.jabref.gui.preferences.GuiPreferences; import org.jabref.gui.preferences.PreferenceTabViewModel; import org.jabref.gui.push.GUIPushToApplication; +import org.jabref.gui.push.GUIPushToApplicationSettings; import org.jabref.gui.push.GUIPushToApplications; import org.jabref.gui.push.GUIPushToEmacs; -import org.jabref.gui.push.GUIPushToApplicationSettings; import org.jabref.gui.util.FileDialogConfiguration; import org.jabref.logic.l10n.Localization; import org.jabref.logic.push.CitationCommandString; @@ -68,7 +68,10 @@ public ExternalTabViewModel(DialogService dialogService, GuiPreferences preferen initialPushToApplicationPreferences.getActiveApplicationName(), new HashMap<>(initialPushToApplicationPreferences.getCommandPaths()), initialPushToApplicationPreferences.getEmacsArguments(), - initialPushToApplicationPreferences.getVimServer()); + initialPushToApplicationPreferences.getVimServer(), + initialPushToApplicationPreferences.getCiteCommand(), + initialPushToApplicationPreferences.getDefaultCiteCommand() + ); terminalCommandValidator = new FunctionBasedValidator<>( customTerminalCommandProperty, @@ -98,7 +101,7 @@ public void setValues() { GUIPushToApplications.getGUIApplicationByName(initialPushToApplicationPreferences.getActiveApplicationName(), dialogService, preferences) .orElse(new GUIPushToEmacs(dialogService, preferences))); - citeCommandProperty.setValue(initialExternalApplicationPreferences.getCiteCommand().toString()); + citeCommandProperty.setValue(initialPushToApplicationPreferences.getCiteCommand().toString()); useCustomTerminalProperty.setValue(initialExternalApplicationPreferences.useCustomTerminal()); customTerminalCommandProperty.setValue(initialExternalApplicationPreferences.getCustomTerminalCommand()); @@ -112,7 +115,6 @@ public void storeSettings() { ExternalApplicationsPreferences externalPreferences = preferences.getExternalApplicationsPreferences(); externalPreferences.setEMailSubject(eMailReferenceSubjectProperty.getValue()); externalPreferences.setAutoOpenEmailAttachmentsFolder(autoOpenAttachedFoldersProperty.getValue()); - externalPreferences.setCiteCommand(CitationCommandString.from(citeCommandProperty.getValue())); externalPreferences.setUseCustomTerminal(useCustomTerminalProperty.getValue()); externalPreferences.setCustomTerminalCommand(customTerminalCommandProperty.getValue()); externalPreferences.setUseCustomFileBrowser(useCustomFileBrowserProperty.getValue()); @@ -124,6 +126,7 @@ public void storeSettings() { pushPreferences.setCommandPaths(workingPushToApplicationPreferences.getCommandPaths()); pushPreferences.setEmacsArguments(workingPushToApplicationPreferences.getEmacsArguments()); pushPreferences.setVimServer(workingPushToApplicationPreferences.getVimServer()); + pushPreferences.setCiteCommand(CitationCommandString.from(citeCommandProperty.getValue())); } public ValidationStatus terminalCommandValidationStatus() { @@ -231,6 +234,6 @@ public StringProperty customFileBrowserCommandProperty() { } public void resetCiteCommandToDefault() { - this.citeCommandProperty.setValue(preferences.getExternalApplicationsPreferences().getDefaultCiteCommand().toString()); + this.citeCommandProperty.setValue(preferences.getPushToApplicationPreferences().getDefaultCiteCommand().toString()); } } diff --git a/jabgui/src/test/java/org/jabref/gui/edit/CopyMoreActionTest.java b/jabgui/src/test/java/org/jabref/gui/edit/CopyMoreActionTest.java index 9a5b9743660..4f53c37681b 100644 --- a/jabgui/src/test/java/org/jabref/gui/edit/CopyMoreActionTest.java +++ b/jabgui/src/test/java/org/jabref/gui/edit/CopyMoreActionTest.java @@ -12,11 +12,11 @@ import org.jabref.gui.JabRefDialogService; import org.jabref.gui.StateManager; import org.jabref.gui.actions.StandardActions; -import org.jabref.gui.frame.ExternalApplicationsPreferences; import org.jabref.gui.preferences.GuiPreferences; import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.logic.l10n.Localization; import org.jabref.logic.push.CitationCommandString; +import org.jabref.logic.push.PushToApplicationPreferences; import org.jabref.model.database.BibDatabase; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; @@ -61,9 +61,9 @@ void setUp() { keys.add("abc"); dois.add("10.1145/3377811.3380330"); - ExternalApplicationsPreferences externalApplicationsPreferences = mock(ExternalApplicationsPreferences.class); - when(externalApplicationsPreferences.getCiteCommand()).thenReturn(new CitationCommandString("\\cite{", ",", "}")); - when(preferences.getExternalApplicationsPreferences()).thenReturn(externalApplicationsPreferences); + PushToApplicationPreferences pushToApplicationPreferences = mock(PushToApplicationPreferences.class); + when(pushToApplicationPreferences.getCiteCommand()).thenReturn(new CitationCommandString("\\cite{", ",", "}")); + when(preferences.getPushToApplicationPreferences()).thenReturn(pushToApplicationPreferences); } @Test diff --git a/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java b/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java index 99f0f396fb8..29a2d2831f9 100644 --- a/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java +++ b/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java @@ -7,11 +7,9 @@ import javafx.collections.ObservableMap; import org.jabref.gui.DialogService; -import org.jabref.gui.frame.ExternalApplicationsPreferences; import org.jabref.gui.preferences.GuiPreferences; import org.jabref.logic.os.OS; import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToEmacs; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; @@ -23,7 +21,7 @@ @Disabled("Needs running emacs daemon. Start emacs with --daemon") class PushToEmacsTest { - PushToEmacs pushToEmacs; + GUIPushToEmacs pushToEmacs; @BeforeEach void setup() { @@ -41,11 +39,10 @@ void setup() { when(preferences.getPushToApplicationPreferences()).thenReturn(pushToApplicationPreferences); - ExternalApplicationsPreferences externalApplicationsPreferences = mock(ExternalApplicationsPreferences.class); - when(externalApplicationsPreferences.getCiteCommand().toString()).thenReturn("\\cite{key1,key2}"); - when(preferences.getExternalApplicationsPreferences()).thenReturn(externalApplicationsPreferences); + when(pushToApplicationPreferences.getCiteCommand().toString()).thenReturn("\\cite{key1,key2}"); + when(preferences.getPushToApplicationPreferences()).thenReturn(pushToApplicationPreferences); - pushToEmacs = new PushToEmacs(dialogService, preferences); + pushToEmacs = new GUIPushToEmacs(dialogService, preferences); } @Test diff --git a/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java b/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java index bcaa74798e0..7041cbbb8c5 100644 --- a/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java +++ b/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java @@ -7,11 +7,9 @@ import javafx.collections.ObservableMap; import org.jabref.gui.DialogService; -import org.jabref.gui.frame.ExternalApplicationsPreferences; import org.jabref.gui.preferences.GuiPreferences; import org.jabref.logic.push.CitationCommandString; import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToTeXworks; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -28,7 +26,7 @@ class PushToTeXworksTest { private static final String TEXWORKS_CLIENT_PATH = "/usr/bin/texworks"; private static final String DISPLAY_NAME = "TeXworks"; - private PushToTeXworks pushToTeXworks; + private GUIPushToTeXworks pushToTeXworks; @BeforeEach void setup() { @@ -43,15 +41,14 @@ void setup() { when(preferences.getPushToApplicationPreferences()).thenReturn(pushToApplicationPreferences); // Mock the return value for getCiteCommand() - ExternalApplicationsPreferences externalApplicationsPreferences = mock(ExternalApplicationsPreferences.class); CitationCommandString mockCiteCommand = mock(CitationCommandString.class); when(mockCiteCommand.prefix()).thenReturn(""); when(mockCiteCommand.suffix()).thenReturn(""); - when(externalApplicationsPreferences.getCiteCommand()).thenReturn(mockCiteCommand); - when(preferences.getExternalApplicationsPreferences()).thenReturn(externalApplicationsPreferences); + when(pushToApplicationPreferences.getCiteCommand()).thenReturn(mockCiteCommand); + when(preferences.getPushToApplicationPreferences()).thenReturn(pushToApplicationPreferences); // Create a new instance of PushToTeXworks - pushToTeXworks = new PushToTeXworks(dialogService, preferences); + pushToTeXworks = new GUIPushToTeXworks(dialogService, preferences); } /** diff --git a/jabgui/src/test/java/org/jabref/gui/push/PushToWinEdtTest.java b/jabgui/src/test/java/org/jabref/gui/push/PushToWinEdtTest.java index 2d2f2a57217..a4bb71dca22 100644 --- a/jabgui/src/test/java/org/jabref/gui/push/PushToWinEdtTest.java +++ b/jabgui/src/test/java/org/jabref/gui/push/PushToWinEdtTest.java @@ -4,7 +4,6 @@ import org.jabref.gui.DialogService; import org.jabref.gui.preferences.GuiPreferences; -import org.jabref.logic.push.PushToWinEdt; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -26,6 +25,6 @@ void setup() { @Test void jumpToLineCommandlineArguments() { - assertNotNull(new PushToWinEdt(dialogService, preferences).jumpToLineCommandlineArguments(Path.of("test.tex"), 1, 5)); + assertNotNull(new GUIPushToWinEdt(dialogService, preferences).jumpToLineCommandlineArguments(Path.of("test.tex"), 1, 5)); } } diff --git a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java index 4c21545a9e5..12ba0381e46 100644 --- a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java @@ -82,6 +82,7 @@ import org.jabref.logic.os.OS; import org.jabref.logic.protectedterms.ProtectedTermsLoader; import org.jabref.logic.protectedterms.ProtectedTermsPreferences; +import org.jabref.logic.push.CitationCommandString; import org.jabref.logic.push.PushToApplicationPreferences; import org.jabref.logic.push.PushToApplications; import org.jabref.logic.remote.RemotePreferences; @@ -423,6 +424,7 @@ public class JabRefCliPreferences implements CliPreferences { private static final String PUSH_VIM = "vim"; private static final String PUSH_SUBLIME_TEXT_PATH = "sublimeTextPath"; private static final String PUSH_VSCODE_PATH = "VScodePath"; + private static final String CITE_COMMAND = "citeCommand"; // endregion private static final Logger LOGGER = LoggerFactory.getLogger(JabRefCliPreferences.class); @@ -754,6 +756,7 @@ public JabRefCliPreferences() { defaults.put(PUSH_VIM_SERVER, "vim"); defaults.put(PUSH_EMACS_ADDITIONAL_PARAMETERS, "-n -e"); defaults.put(PUSH_VSCODE_PATH, OS.detectProgramPath("Code", "Microsoft VS Code")); + defaults.put(CITE_COMMAND, "\\cite{key1,key2}"); if (OS.OS_X) { defaults.put(PUSH_EMACS_PATH, "emacsclient"); @@ -804,7 +807,9 @@ public PushToApplicationPreferences getPushToApplicationPreferences() { get(PUSH_TO_APPLICATION), applicationCommands, get(PUSH_EMACS_ADDITIONAL_PARAMETERS), - get(PUSH_VIM_SERVER) + get(PUSH_VIM_SERVER), + CitationCommandString.from(get(CITE_COMMAND)), + CitationCommandString.from((String) defaults.get(CITE_COMMAND)) ); EasyBind.listen(pushToApplicationPreferences.activeApplicationNameProperty(), (obs, oldValue, newValue) -> put(PUSH_TO_APPLICATION, newValue)); diff --git a/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java b/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java index 6a5e105608b..a3960d34332 100644 --- a/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java +++ b/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java @@ -42,7 +42,7 @@ public void pushEntries(BibDatabaseContext database, List entries, Str } @VisibleForTesting - protected void pushEntries(BibDatabaseContext database, List entries, String keyString, ProcessBuilder processBuilder) { + public void pushEntries(BibDatabaseContext database, List entries, String keyString, ProcessBuilder processBuilder) { couldNotPush = false; couldNotCall = false; notDefined = false; @@ -144,15 +144,15 @@ public String getCommandName() { } protected String getCitePrefix() { - return "\\autocite{"; + return preferences.getPushToApplicationPreferences().getCiteCommand().prefix(); } public String getDelimiter() { - return ","; + return preferences.getPushToApplicationPreferences().getCiteCommand().delimiter(); } protected String getCiteSuffix() { - return "}"; + return preferences.getPushToApplicationPreferences().getCiteCommand().suffix(); } public void jumpToLine(Path fileName, int line, int column) { diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToApplicationPreferences.java b/jablib/src/main/java/org/jabref/logic/push/PushToApplicationPreferences.java index 0add34a2aef..dff091d3360 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToApplicationPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToApplicationPreferences.java @@ -3,7 +3,9 @@ import java.util.Map; import javafx.beans.property.MapProperty; +import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleMapProperty; +import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.collections.FXCollections; @@ -14,14 +16,21 @@ public class PushToApplicationPreferences { private final StringProperty emacsArguments; private final StringProperty vimServer; + private final ObjectProperty citeCommand; + private final ObjectProperty defaultCiteCommand; + public PushToApplicationPreferences(String activeApplicationName, Map commandPaths, String emacsArguments, - String vimServer) { + String vimServer, + CitationCommandString citeCommand, + CitationCommandString defaultCiteCommand) { this.activeApplicationName = new SimpleStringProperty(activeApplicationName); this.commandPaths = new SimpleMapProperty<>(FXCollections.observableMap(commandPaths)); this.emacsArguments = new SimpleStringProperty(emacsArguments); this.vimServer = new SimpleStringProperty(vimServer); + this.citeCommand = new SimpleObjectProperty<>(citeCommand); + this.defaultCiteCommand = new SimpleObjectProperty<>(defaultCiteCommand); } public String getActiveApplicationName() { @@ -68,4 +77,20 @@ public StringProperty vimServerProperty() { public void setVimServer(String vimServer) { this.vimServer.set(vimServer); } + + public CitationCommandString getCiteCommand() { + return citeCommand.get(); + } + + public ObjectProperty citeCommandProperty() { + return citeCommand; + } + + public void setCiteCommand(CitationCommandString citeCommand) { + this.citeCommand.set(citeCommand); + } + + public CitationCommandString getDefaultCiteCommand() { + return defaultCiteCommand.getValue(); + } } diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java b/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java index 070aaf4c6ac..b0a0c69f287 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java @@ -122,10 +122,10 @@ public void pushEntries(BibDatabaseContext database, List entries, Str @Override public void onOperationCompleted() { if (couldNotPush) { - sendErrorNotification(Localization.lang("Error pushing entries"), + this.sendErrorNotification(Localization.lang("Error pushing entries"), Localization.lang("Could not push to a running emacs daemon.")); } else if (couldNotCall) { - sendErrorNotification(Localization.lang("Error pushing entries"), + this.sendErrorNotification(Localization.lang("Error pushing entries"), Localization.lang("Could not run the emacs client.")); } else { super.onOperationCompleted(); diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java b/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java index cf7f21d5838..a51aa9b8865 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java @@ -25,7 +25,7 @@ public String getDisplayName() { } @Override - protected String[] getCommandLine(String keyString) { + public String[] getCommandLine(String keyString) { return new String[] {commandPath, "--insert-text", "%s%s%s".formatted(getCitePrefix(), keyString, getCiteSuffix())}; } diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java b/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java index 26609898dd1..b016a148fe6 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java @@ -25,7 +25,7 @@ protected String[] getCommandLine(String keyString) { } @Override - protected String[] jumpToLineCommandlineArguments(Path fileName, int line, int column) { + public String[] jumpToLineCommandlineArguments(Path fileName, int line, int column) { return new String[] {commandPath, "\"[Open(|%s|);SelLine(%s,%s);]\"".formatted(fileName.toString(), line, column)}; } } From bfe016fabef70ce6eaad309a2f657964b56c4596 Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Tue, 8 Jul 2025 23:46:05 +0200 Subject: [PATCH 06/23] fix wrong changes --- .../logic/citationstyle/CitationStyleGeneratorTest.java | 8 ++++---- .../logic/openoffice/oocsltext/CSLFormatUtilsTest.java | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/jablib/src/test/java/org/jabref/logic/citationstyle/CitationStyleGeneratorTest.java b/jablib/src/test/java/org/jabref/logic/citationstyle/CitationStyleGeneratorTest.java index c107600986f..132fba7f605 100644 --- a/jablib/src/test/java/org/jabref/logic/citationstyle/CitationStyleGeneratorTest.java +++ b/jablib/src/test/java/org/jabref/logic/citationstyle/CitationStyleGeneratorTest.java @@ -86,7 +86,7 @@ void defaultBibliography() { // if the default citation style (ieee.csl) changes this has to be modified String expected = """
-
[1]
B. Smith, B. Jones, and J. Williams, “Title of the test entry,” BibTeX Journal, vol. 34, no. 3, pp. 45–67, Jul. 2016, doi: 10.1001/bla.blubb.
+
[1]
B. Smith, B. Jones, and J. Williams, “Title of the test entry,” BibTeX Journal, vol. 34, no. 3, pp. 45–67, July 2016, doi: 10.1001/bla.blubb.
"""; @@ -169,7 +169,7 @@ void missingCitationStyle() { @Test void htmlFormat() { String expectedCitation = "
\n" + - "
[1]
B. Smith, B. Jones, and J. Williams, “Title of the test entry,” BibTeX Journal, vol. 34, no. 3, pp. 45–67, Jul. 2016, doi: 10.1001/bla.blubb.
\n" + + "
[1]
B. Smith, B. Jones, and J. Williams, “Title of the test entry,” BibTeX Journal, vol. 34, no. 3, pp. 45–67, July 2016, doi: 10.1001/bla.blubb.
\n" + "
\n"; String actualCitation = CitationStyleGenerator.generateBibliography(List.of(testEntry), DEFAULT_STYLE, HTML_OUTPUT_FORMAT, testEntryContext, ENTRY_TYPES_MANAGER).getFirst(); @@ -178,7 +178,7 @@ void htmlFormat() { @Test void textFormat() { - String expectedCitation = "[1]B. Smith, B. Jones, and J. Williams, “Title of the test entry,” BibTeX Journal, vol. 34, no. 3, pp. 45–67, Jul. 2016, doi: 10.1001/bla.blubb.\n"; + String expectedCitation = "[1]B. Smith, B. Jones, and J. Williams, “Title of the test entry,” BibTeX Journal, vol. 34, no. 3, pp. 45–67, July 2016, doi: 10.1001/bla.blubb.\n"; String actualCitation = CitationStyleGenerator.generateBibliography(List.of(testEntry), DEFAULT_STYLE, TEXT_OUTPUT_FORMAT, testEntryContext, ENTRY_TYPES_MANAGER).getFirst(); assertEquals(expectedCitation, actualCitation); @@ -201,7 +201,7 @@ void handleDiacritics() { @Test void handleAmpersand() { - String expectedCitation = "[1]B. Smith, B. Jones, and J. Williams, “Famous quote: “&TitleTest&” - that is it,” BibTeX Journal, vol. 34, no. 3, pp. 45–67, Jul. 2016, doi: 10.1001/bla.blubb.\n"; + String expectedCitation = "[1]B. Smith, B. Jones, and J. Williams, “Famous quote: “&TitleTest&” - that is it,” BibTeX Journal, vol. 34, no. 3, pp. 45–67, July 2016, doi: 10.1001/bla.blubb.\n"; testEntry.setField(StandardField.TITLE, "Famous quote: “&TitleTest&” - that is it"); String actualCitation = CitationStyleGenerator.generateBibliography(List.of(testEntry), DEFAULT_STYLE, TEXT_OUTPUT_FORMAT, testEntryContext, ENTRY_TYPES_MANAGER).getFirst(); diff --git a/jablib/src/test/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtilsTest.java b/jablib/src/test/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtilsTest.java index 04c63d9b675..19da86fdaf8 100644 --- a/jablib/src/test/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtilsTest.java +++ b/jablib/src/test/java/org/jabref/logic/openoffice/oocsltext/CSLFormatUtilsTest.java @@ -165,7 +165,7 @@ static Stream ooHTMLTransformFromRawBibliography() { // Numeric type "[1]", brackets, newlines Arguments.of( - "[1] B. Smith, B. Jones, and J. Williams, “Title of the test entry,” BibTeX Journal, vol. 34, no. 3, pp. 45–67, Jul. 2016, doi: 10.1001/bla.blubb.

", + "[1] B. Smith, B. Jones, and J. Williams, “Title of the test entry,” BibTeX Journal, vol. 34, no. 3, pp. 45–67, July 2016, doi: 10.1001/bla.blubb.

", STYLE_LIST.stream().filter(e -> "IEEE".equals(e.getTitle())).findAny().get() ), @@ -182,7 +182,7 @@ static Stream ooHTMLTransformFromRawBibliography() { // Semicolons Arguments.of( - "1. Smith B, Jones B, Williams J. Title of the test entry. Taylor P, editor. BibTeX Journal [Internet]. 2016 Jul;34(3):45–67. Available from: https://github.com/JabRef

", + "1. Smith B, Jones B, Williams J. Title of the test entry. Taylor P, editor. BibTeX Journal [Internet]. 2016 July;34(3):45–67. Available from: https://github.com/JabRef

", STYLE_LIST.stream().filter(e -> "Vancouver".equals(e.getTitle())).findAny().get() ), @@ -511,7 +511,7 @@ static Stream updateSingleNumericBibliography() { // Type: "[1]" Arguments.of( - "[3] B. Smith, B. Jones, and J. Williams, “Title of the test entry,” BibTeX Journal, vol. 34, no. 3, pp. 45–67, Jul. 2016, doi: 10.1001/bla.blubb.

", + "[3] B. Smith, B. Jones, and J. Williams, “Title of the test entry,” BibTeX Journal, vol. 34, no. 3, pp. 45–67, July 2016, doi: 10.1001/bla.blubb.

", STYLE_LIST.stream().filter(e -> "IEEE".equals(e.getTitle())).findAny().get() ), From 124abf459eb455526c1bd0bb4ee851aae921e87a Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Tue, 8 Jul 2025 23:50:39 +0200 Subject: [PATCH 07/23] change field name --- .../jabref/gui/preferences/JabRefGuiPreferences.java | 10 +++++----- .../jabref/logic/preferences/JabRefCliPreferences.java | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java b/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java index d2373dc24fa..caf74637e76 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java @@ -147,7 +147,7 @@ public class JabRefGuiPreferences extends JabRefCliPreferences implements GuiPre private static final String PUSH_VIM = "vim"; private static final String PUSH_SUBLIME_TEXT_PATH = "sublimeTextPath"; private static final String PUSH_VSCODE_PATH = "VScodePath"; - private static final String CITE_COMMAND = "citeCommand"; + private static final String PUSH_CITE_COMMAND = "citeCommand"; // endregion // region NameDisplayPreferences @@ -385,7 +385,7 @@ private JabRefGuiPreferences() { defaults.put(PUSH_VIM_SERVER, "vim"); defaults.put(PUSH_EMACS_ADDITIONAL_PARAMETERS, "-n -e"); defaults.put(PUSH_VSCODE_PATH, OS.detectProgramPath("Code", "Microsoft VS Code")); - defaults.put(CITE_COMMAND, "\\cite{key1,key2}"); + defaults.put(PUSH_CITE_COMMAND, "\\cite{key1,key2}"); if (OS.OS_X) { defaults.put(PUSH_EMACS_PATH, "emacsclient"); @@ -995,8 +995,8 @@ public PushToApplicationPreferences getPushToApplicationPreferences() { applicationCommands, get(PUSH_EMACS_ADDITIONAL_PARAMETERS), get(PUSH_VIM_SERVER), - CitationCommandString.from(get(CITE_COMMAND)), - CitationCommandString.from((String) defaults.get(CITE_COMMAND)) + CitationCommandString.from(get(PUSH_CITE_COMMAND)), + CitationCommandString.from((String) defaults.get(PUSH_CITE_COMMAND)) ); EasyBind.listen(pushToApplicationPreferences.activeApplicationNameProperty(), (obs, oldValue, newValue) -> put(PUSH_TO_APPLICATION, newValue)); @@ -1004,7 +1004,7 @@ public PushToApplicationPreferences getPushToApplicationPreferences() { EasyBind.listen(pushToApplicationPreferences.emacsArgumentsProperty(), (obs, oldValue, newValue) -> put(PUSH_EMACS_ADDITIONAL_PARAMETERS, newValue)); EasyBind.listen(pushToApplicationPreferences.vimServerProperty(), (obs, oldValue, newValue) -> put(PUSH_VIM_SERVER, newValue)); EasyBind.listen(pushToApplicationPreferences.citeCommandProperty(), - (obs, oldValue, newValue) -> put(CITE_COMMAND, newValue.toString())); + (obs, oldValue, newValue) -> put(PUSH_CITE_COMMAND, newValue.toString())); return pushToApplicationPreferences; } diff --git a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java index 12ba0381e46..024cf7c03fc 100644 --- a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java @@ -424,7 +424,7 @@ public class JabRefCliPreferences implements CliPreferences { private static final String PUSH_VIM = "vim"; private static final String PUSH_SUBLIME_TEXT_PATH = "sublimeTextPath"; private static final String PUSH_VSCODE_PATH = "VScodePath"; - private static final String CITE_COMMAND = "citeCommand"; + private static final String PUSH_CITE_COMMAND = "citeCommand"; // endregion private static final Logger LOGGER = LoggerFactory.getLogger(JabRefCliPreferences.class); @@ -756,7 +756,7 @@ public JabRefCliPreferences() { defaults.put(PUSH_VIM_SERVER, "vim"); defaults.put(PUSH_EMACS_ADDITIONAL_PARAMETERS, "-n -e"); defaults.put(PUSH_VSCODE_PATH, OS.detectProgramPath("Code", "Microsoft VS Code")); - defaults.put(CITE_COMMAND, "\\cite{key1,key2}"); + defaults.put(PUSH_CITE_COMMAND, "\\cite{key1,key2}"); if (OS.OS_X) { defaults.put(PUSH_EMACS_PATH, "emacsclient"); @@ -808,8 +808,8 @@ public PushToApplicationPreferences getPushToApplicationPreferences() { applicationCommands, get(PUSH_EMACS_ADDITIONAL_PARAMETERS), get(PUSH_VIM_SERVER), - CitationCommandString.from(get(CITE_COMMAND)), - CitationCommandString.from((String) defaults.get(CITE_COMMAND)) + CitationCommandString.from(get(PUSH_CITE_COMMAND)), + CitationCommandString.from((String) defaults.get(PUSH_CITE_COMMAND)) ); EasyBind.listen(pushToApplicationPreferences.activeApplicationNameProperty(), (obs, oldValue, newValue) -> put(PUSH_TO_APPLICATION, newValue)); From 7432cd5652573d2227e662e0ffde9117a06be608 Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Wed, 9 Jul 2025 00:09:47 +0200 Subject: [PATCH 08/23] checkstyle and rewriterun --- .../jabref/gui/entryeditor/LatexCitationsTabViewModel.java | 6 +++--- .../java/org/jabref/gui/push/GUIPushToApplications.java | 3 ++- .../src/main/java/org/jabref/gui/push/GUIPushToEmacs.java | 1 - .../main/java/org/jabref/logic/push/PushToApplications.java | 3 ++- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java b/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java index e41816cb573..4e56341e21a 100644 --- a/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java @@ -22,14 +22,14 @@ import org.jabref.gui.DialogService; import org.jabref.gui.LibraryTab; import org.jabref.gui.preferences.GuiPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplications; -import org.jabref.logic.push.PushToTeXstudio; import org.jabref.gui.texparser.CitationsDisplay; import org.jabref.gui.util.DirectoryDialogConfiguration; import org.jabref.gui.util.DirectoryMonitor; import org.jabref.gui.util.UiTaskExecutor; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplications; +import org.jabref.logic.push.PushToTeXstudio; import org.jabref.logic.texparser.DefaultLatexParser; import org.jabref.logic.util.io.FileUtil; import org.jabref.model.database.BibDatabaseContext; diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java index 040434e45c3..6f8bceec354 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java @@ -1,6 +1,7 @@ package org.jabref.gui.push; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Optional; @@ -13,7 +14,7 @@ public class GUIPushToApplications { public static List getAllGUIApplications(DialogService dialogService, CliPreferences preferences) { if (!APPLICATIONS.isEmpty()) { - return APPLICATIONS; + return Collections.unmodifiableList(APPLICATIONS); } APPLICATIONS.addAll(List.of( diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java index ddd2c606253..659cd3d0430 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java @@ -18,7 +18,6 @@ public class GUIPushToEmacs extends PushToEmacs implements GUIPushToApplication private final DialogService dialogService; /** - * @param dialogService * @param preferences getPushToApplicationPreferences(), getExternalApplicationsPreferences(), and getFilePreferences() are used */ public GUIPushToEmacs(DialogService dialogService, CliPreferences preferences) { diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java b/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java index 7a834fd24d4..93e9c1b8c02 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java @@ -1,6 +1,7 @@ package org.jabref.logic.push; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Optional; @@ -27,7 +28,7 @@ private PushToApplications() { public static List getAllApplications(NotificationService notificationService, CliPreferences preferences) { if (!APPLICATIONS.isEmpty()) { - return APPLICATIONS; + return Collections.unmodifiableList(APPLICATIONS); } APPLICATIONS.addAll(List.of( From e80d7d78901f0bd47d27d9e312333af31b7a1ebb Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Wed, 9 Jul 2025 00:15:36 +0200 Subject: [PATCH 09/23] add private constructor --- .../main/java/org/jabref/gui/push/GUIPushToApplications.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java index 6f8bceec354..809bfc7ab8b 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java @@ -12,6 +12,9 @@ public class GUIPushToApplications { private static final List APPLICATIONS = new ArrayList<>(); + private GUIPushToApplications() { + } + public static List getAllGUIApplications(DialogService dialogService, CliPreferences preferences) { if (!APPLICATIONS.isEmpty()) { return Collections.unmodifiableList(APPLICATIONS); From d1cb260d9a6a85444863d261a9bdd573a4e93bd7 Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Wed, 9 Jul 2025 00:38:00 +0200 Subject: [PATCH 10/23] refactor --- .../gui/entryeditor/LatexCitationsTabViewModel.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java b/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java index 4e56341e21a..273806068dc 100644 --- a/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java @@ -22,14 +22,14 @@ import org.jabref.gui.DialogService; import org.jabref.gui.LibraryTab; import org.jabref.gui.preferences.GuiPreferences; +import org.jabref.gui.push.GUIPushToApplication; +import org.jabref.gui.push.GUIPushToApplications; +import org.jabref.gui.push.GUIPushToTeXstudio; import org.jabref.gui.texparser.CitationsDisplay; import org.jabref.gui.util.DirectoryDialogConfiguration; import org.jabref.gui.util.DirectoryMonitor; import org.jabref.gui.util.UiTaskExecutor; import org.jabref.logic.l10n.Localization; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplications; -import org.jabref.logic.push.PushToTeXstudio; import org.jabref.logic.texparser.DefaultLatexParser; import org.jabref.logic.util.io.FileUtil; import org.jabref.model.database.BibDatabaseContext; @@ -98,11 +98,11 @@ public void handleMouseClick(MouseEvent event, CitationsDisplay citationsDisplay if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2 && selectedItem != null) { String applicationName = preferences.getPushToApplicationPreferences() .getActiveApplicationName(); - PushToApplication application = PushToApplications.getApplicationByName( + GUIPushToApplication application = GUIPushToApplications.getGUIApplicationByName( applicationName, dialogService, preferences) - .orElse(new PushToTeXstudio(dialogService, preferences)); + .orElse(new GUIPushToTeXstudio(dialogService, preferences)); preferences.getPushToApplicationPreferences().setActiveApplicationName(application.getDisplayName()); application.jumpToLine(selectedItem.path(), selectedItem.line(), selectedItem.colStart()); } From 881b6501bf63d52a47e3a13508236db07bfe9915 Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Wed, 9 Jul 2025 00:43:50 +0200 Subject: [PATCH 11/23] use orElseGet instead of orElse --- .../org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java | 2 +- .../jabref/gui/preferences/external/ExternalTabViewModel.java | 2 +- .../java/org/jabref/gui/push/GUIPushToApplicationCommand.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java b/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java index 273806068dc..10344334638 100644 --- a/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java @@ -102,7 +102,7 @@ public void handleMouseClick(MouseEvent event, CitationsDisplay citationsDisplay applicationName, dialogService, preferences) - .orElse(new GUIPushToTeXstudio(dialogService, preferences)); + .orElseGet(() -> new GUIPushToTeXstudio(dialogService, preferences)); preferences.getPushToApplicationPreferences().setActiveApplicationName(application.getDisplayName()); application.jumpToLine(selectedItem.path(), selectedItem.line(), selectedItem.colStart()); } diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java index 1beb3e29ab8..c41d2749436 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java @@ -99,7 +99,7 @@ public void setValues() { FXCollections.observableArrayList(GUIPushToApplications.getAllGUIApplications(dialogService, preferences))); selectedPushToApplicationProperty.setValue( GUIPushToApplications.getGUIApplicationByName(initialPushToApplicationPreferences.getActiveApplicationName(), dialogService, preferences) - .orElse(new GUIPushToEmacs(dialogService, preferences))); + .orElseGet(() -> new GUIPushToEmacs(dialogService, preferences))); citeCommandProperty.setValue(initialPushToApplicationPreferences.getCiteCommand().toString()); diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationCommand.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationCommand.java index bb45e4eb043..0eb29f78ae7 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationCommand.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationCommand.java @@ -77,7 +77,7 @@ private void setApplication(String applicationName) { applicationName, dialogService, preferences) - .orElse(new GUIPushToEmacs(dialogService, preferences)); + .orElseGet(() -> new GUIPushToEmacs(dialogService, preferences)); preferences.getPushToApplicationPreferences().setActiveApplicationName(application.getDisplayName()); this.application = Objects.requireNonNull(application); From 2b2ad7bda1df036ea36cb3caefb586e7670de16d Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Wed, 9 Jul 2025 11:45:09 +0200 Subject: [PATCH 12/23] Reduce Gui classes by extending the interfaces with default methods Remove CliPreferences and only use PushToApplicationPreferences --- .../LatexCitationsTabViewModel.java | 10 +- .../gui/preferences/JabRefGuiPreferences.java | 109 ------------------ .../gui/preferences/external/ExternalTab.java | 10 +- .../external/ExternalTabViewModel.java | 22 ++-- .../jabref/gui/push/GUIPushToApplication.java | 27 ----- .../gui/push/GUIPushToApplicationAction.java | 34 ++++++ .../gui/push/GUIPushToApplicationCommand.java | 8 +- .../gui/push/GUIPushToApplications.java | 28 ++--- .../org/jabref/gui/push/GUIPushToEmacs.java | 69 ----------- .../org/jabref/gui/push/GUIPushToLyx.java | 66 ----------- .../jabref/gui/push/GUIPushToSublimeText.java | 66 ----------- .../jabref/gui/push/GUIPushToTeXstudio.java | 66 ----------- .../jabref/gui/push/GUIPushToTeXworks.java | 66 ----------- .../org/jabref/gui/push/GUIPushToTexShop.java | 66 ----------- .../jabref/gui/push/GUIPushToTexmaker.java | 66 ----------- .../org/jabref/gui/push/GUIPushToVScode.java | 66 ----------- .../org/jabref/gui/push/GUIPushToVim.java | 66 ----------- .../org/jabref/gui/push/GUIPushToWinEdt.java | 66 ----------- .../jabref/gui/push/GuiPushToApplication.java | 36 ++++++ .../org/jabref/gui/push/GuiPushToEmacs.java | 37 ++++++ .../org/jabref/gui/push/GuiPushToLyx.java | 34 ++++++ .../jabref/gui/push/GuiPushToSublimeText.java | 27 +++++ .../jabref/gui/push/GuiPushToTeXstudio.java | 27 +++++ .../jabref/gui/push/GuiPushToTeXworks.java | 27 +++++ .../org/jabref/gui/push/GuiPushToTexShop.java | 27 +++++ .../jabref/gui/push/GuiPushToTexmaker.java | 27 +++++ .../org/jabref/gui/push/GuiPushToVScode.java | 27 +++++ .../org/jabref/gui/push/GuiPushToVim.java | 34 ++++++ .../org/jabref/gui/push/GuiPushToWinEdt.java | 27 +++++ .../org/jabref/gui/push/PushToEmacsTest.java | 9 +- .../jabref/gui/push/PushToTeXworksTest.java | 8 +- .../org/jabref/gui/push/PushToWinEdtTest.java | 2 +- .../preferences/JabRefCliPreferences.java | 3 + .../logic/push/AbstractPushToApplication.java | 15 ++- .../jabref/logic/push/PushToApplications.java | 7 +- .../org/jabref/logic/push/PushToEmacs.java | 11 +- .../java/org/jabref/logic/push/PushToLyx.java | 5 +- .../jabref/logic/push/PushToSublimeText.java | 5 +- .../jabref/logic/push/PushToTeXstudio.java | 3 +- .../org/jabref/logic/push/PushToTeXworks.java | 3 +- .../org/jabref/logic/push/PushToTexShop.java | 5 +- .../org/jabref/logic/push/PushToTexmaker.java | 3 +- .../org/jabref/logic/push/PushToVScode.java | 3 +- .../java/org/jabref/logic/push/PushToVim.java | 7 +- .../org/jabref/logic/push/PushToWinEdt.java | 3 +- .../jabref/http/server/cayw/CAYWResource.java | 14 +++ 46 files changed, 453 insertions(+), 894 deletions(-) delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationAction.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplication.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GuiPushToEmacs.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GuiPushToLyx.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GuiPushToSublimeText.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GuiPushToTeXstudio.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GuiPushToTeXworks.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GuiPushToTexShop.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GuiPushToTexmaker.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GuiPushToVScode.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GuiPushToVim.java create mode 100644 jabgui/src/main/java/org/jabref/gui/push/GuiPushToWinEdt.java diff --git a/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java b/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java index 10344334638..0294f3ebc86 100644 --- a/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java @@ -22,9 +22,9 @@ import org.jabref.gui.DialogService; import org.jabref.gui.LibraryTab; import org.jabref.gui.preferences.GuiPreferences; -import org.jabref.gui.push.GUIPushToApplication; +import org.jabref.gui.push.GuiPushToApplication; import org.jabref.gui.push.GUIPushToApplications; -import org.jabref.gui.push.GUIPushToTeXstudio; +import org.jabref.gui.push.GuiPushToTeXstudio; import org.jabref.gui.texparser.CitationsDisplay; import org.jabref.gui.util.DirectoryDialogConfiguration; import org.jabref.gui.util.DirectoryMonitor; @@ -98,11 +98,11 @@ public void handleMouseClick(MouseEvent event, CitationsDisplay citationsDisplay if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2 && selectedItem != null) { String applicationName = preferences.getPushToApplicationPreferences() .getActiveApplicationName(); - GUIPushToApplication application = GUIPushToApplications.getGUIApplicationByName( + GuiPushToApplication application = GUIPushToApplications.getGUIApplicationByName( applicationName, dialogService, - preferences) - .orElseGet(() -> new GUIPushToTeXstudio(dialogService, preferences)); + preferences.getPushToApplicationPreferences()) + .orElseGet(() -> new GuiPushToTeXstudio(dialogService, preferences.getPushToApplicationPreferences())); preferences.getPushToApplicationPreferences().setActiveApplicationName(application.getDisplayName()); application.jumpToLine(selectedItem.path(), selectedItem.line(), selectedItem.colStart()); } diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java b/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java index caf74637e76..c82ee3c79d3 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/JabRefGuiPreferences.java @@ -1,6 +1,5 @@ package org.jabref.gui.preferences; -import java.io.File; import java.nio.file.Path; import java.util.ArrayList; import java.util.HashMap; @@ -63,9 +62,7 @@ import org.jabref.logic.preferences.AutoCompleteFirstNameMode; import org.jabref.logic.preferences.JabRefCliPreferences; import org.jabref.logic.preview.PreviewLayout; -import org.jabref.logic.push.CitationCommandString; import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToApplications; import org.jabref.logic.util.StandardFileType; import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.model.entry.field.Field; @@ -134,22 +131,6 @@ public class JabRefGuiPreferences extends JabRefCliPreferences implements GuiPre private static final String SEARCH_DIALOG_COLUMN_SORT_ORDER = "searchDalogColumnSortOrder"; // endregion - // region Push to application preferences - private static final String PUSH_TO_APPLICATION = "pushToApplication"; - private static final String PUSH_EMACS_PATH = "emacsPath"; - private static final String PUSH_EMACS_ADDITIONAL_PARAMETERS = "emacsParameters"; - private static final String PUSH_LYXPIPE = "lyxpipe"; - private static final String PUSH_TEXSTUDIO_PATH = "TeXstudioPath"; - private static final String PUSH_TEXWORKS_PATH = "TeXworksPath"; - private static final String PUSH_WINEDT_PATH = "winEdtPath"; - private static final String PUSH_TEXMAKER_PATH = "texmakerPath"; - private static final String PUSH_VIM_SERVER = "vimServer"; - private static final String PUSH_VIM = "vim"; - private static final String PUSH_SUBLIME_TEXT_PATH = "sublimeTextPath"; - private static final String PUSH_VSCODE_PATH = "VScodePath"; - private static final String PUSH_CITE_COMMAND = "citeCommand"; - // endregion - // region NameDisplayPreferences private static final String NAMES_LAST_ONLY = "namesLastOnly"; private static final String ABBR_AUTHOR_NAMES = "abbrAuthorNames"; @@ -373,30 +354,6 @@ private JabRefGuiPreferences() { defaults.put(NAMES_LAST_ONLY, Boolean.TRUE); // "Show last names only" // endregion - // region PushToApplicationPreferences - defaults.put(PUSH_TEXMAKER_PATH, OS.detectProgramPath("texmaker", "Texmaker")); - defaults.put(PUSH_WINEDT_PATH, OS.detectProgramPath("WinEdt", "WinEdt Team\\WinEdt")); - defaults.put(PUSH_TO_APPLICATION, "TeXstudio"); - defaults.put(PUSH_TEXSTUDIO_PATH, OS.detectProgramPath("texstudio", "TeXstudio")); - defaults.put(PUSH_TEXWORKS_PATH, OS.detectProgramPath("texworks", "TeXworks")); - defaults.put(PUSH_SUBLIME_TEXT_PATH, OS.detectProgramPath("subl", "Sublime")); - defaults.put(PUSH_LYXPIPE, USER_HOME + File.separator + ".lyx/lyxpipe"); - defaults.put(PUSH_VIM, "vim"); - defaults.put(PUSH_VIM_SERVER, "vim"); - defaults.put(PUSH_EMACS_ADDITIONAL_PARAMETERS, "-n -e"); - defaults.put(PUSH_VSCODE_PATH, OS.detectProgramPath("Code", "Microsoft VS Code")); - defaults.put(PUSH_CITE_COMMAND, "\\cite{key1,key2}"); - - if (OS.OS_X) { - defaults.put(PUSH_EMACS_PATH, "emacsclient"); - } else if (OS.WINDOWS) { - defaults.put(PUSH_EMACS_PATH, "emacsclient.exe"); - } else { - // Linux - defaults.put(PUSH_EMACS_PATH, "emacsclient"); - } - // endregion - // region: Main table, main table column, and search dialog column preferences defaults.put(EXTRA_FILE_COLUMNS, Boolean.FALSE); defaults.put(COLUMN_NAMES, "groups;group_icons;files;linked_id;field:citationkey;field:entrytype;field:author/editor;field:title;field:year;field:journal/booktitle;special:ranking;special:readstatus;special:priority"); @@ -970,72 +927,6 @@ private int getPreviewCyclePosition(List layouts) { } // endregion - // region PushToApplicationPreferences - - public PushToApplicationPreferences getPushToApplicationPreferences() { - if (pushToApplicationPreferences != null) { - return pushToApplicationPreferences; - } - - Map applicationCommands = new HashMap<>(); - // getEmptyIsDefault is used to ensure that an installation of a tool leads to the new path (instead of leaving the empty one) - // Reason: empty string is returned by org.jabref.gui.desktop.os.Windows.detectProgramPath if program is not found. That path is stored in the preferences. - applicationCommands.put(PushToApplications.EMACS, getEmptyIsDefault(PUSH_EMACS_PATH)); - applicationCommands.put(PushToApplications.LYX, getEmptyIsDefault(PUSH_LYXPIPE)); - applicationCommands.put(PushToApplications.TEXMAKER, getEmptyIsDefault(PUSH_TEXMAKER_PATH)); - applicationCommands.put(PushToApplications.TEXSTUDIO, getEmptyIsDefault(PUSH_TEXSTUDIO_PATH)); - applicationCommands.put(PushToApplications.TEXWORKS, getEmptyIsDefault(PUSH_TEXWORKS_PATH)); - applicationCommands.put(PushToApplications.VIM, getEmptyIsDefault(PUSH_VIM)); - applicationCommands.put(PushToApplications.WIN_EDT, getEmptyIsDefault(PUSH_WINEDT_PATH)); - applicationCommands.put(PushToApplications.SUBLIME_TEXT, getEmptyIsDefault(PUSH_SUBLIME_TEXT_PATH)); - applicationCommands.put(PushToApplications.VSCODE, getEmptyIsDefault(PUSH_VSCODE_PATH)); - - pushToApplicationPreferences = new PushToApplicationPreferences( - get(PUSH_TO_APPLICATION), - applicationCommands, - get(PUSH_EMACS_ADDITIONAL_PARAMETERS), - get(PUSH_VIM_SERVER), - CitationCommandString.from(get(PUSH_CITE_COMMAND)), - CitationCommandString.from((String) defaults.get(PUSH_CITE_COMMAND)) - ); - - EasyBind.listen(pushToApplicationPreferences.activeApplicationNameProperty(), (obs, oldValue, newValue) -> put(PUSH_TO_APPLICATION, newValue)); - pushToApplicationPreferences.getCommandPaths().addListener((obs, oldValue, newValue) -> storePushToApplicationPath(newValue)); - EasyBind.listen(pushToApplicationPreferences.emacsArgumentsProperty(), (obs, oldValue, newValue) -> put(PUSH_EMACS_ADDITIONAL_PARAMETERS, newValue)); - EasyBind.listen(pushToApplicationPreferences.vimServerProperty(), (obs, oldValue, newValue) -> put(PUSH_VIM_SERVER, newValue)); - EasyBind.listen(pushToApplicationPreferences.citeCommandProperty(), - (obs, oldValue, newValue) -> put(PUSH_CITE_COMMAND, newValue.toString())); - - return pushToApplicationPreferences; - } - - private void storePushToApplicationPath(Map commandPair) { - commandPair.forEach((key, value) -> { - switch (key) { - case PushToApplications.EMACS -> - put(PUSH_EMACS_PATH, value); - case PushToApplications.LYX -> - put(PUSH_LYXPIPE, value); - case PushToApplications.TEXMAKER -> - put(PUSH_TEXMAKER_PATH, value); - case PushToApplications.TEXSTUDIO -> - put(PUSH_TEXSTUDIO_PATH, value); - case PushToApplications.TEXWORKS -> - put(PUSH_TEXWORKS_PATH, value); - case PushToApplications.VIM -> - put(PUSH_VIM, value); - case PushToApplications.WIN_EDT -> - put(PUSH_WINEDT_PATH, value); - case PushToApplications.SUBLIME_TEXT -> - put(PUSH_SUBLIME_TEXT_PATH, value); - case PushToApplications.VSCODE -> - put(PUSH_VSCODE_PATH, value); - } - }); - } - - // endregion - // region NameDisplayPreferences @Override diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTab.java b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTab.java index 48d8c4b1362..7f3c34c368b 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTab.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTab.java @@ -12,7 +12,7 @@ import org.jabref.gui.help.HelpAction; import org.jabref.gui.preferences.AbstractPreferenceTabView; import org.jabref.gui.preferences.PreferencesTab; -import org.jabref.gui.push.GUIPushToApplication; +import org.jabref.gui.push.GuiPushToApplication; import org.jabref.gui.util.IconValidationDecorator; import org.jabref.gui.util.ViewModelListCellFactory; import org.jabref.logic.help.HelpFile; @@ -25,7 +25,7 @@ public class ExternalTab extends AbstractPreferenceTabView @FXML private TextField eMailReferenceSubject; @FXML private CheckBox autoOpenAttachedFolders; - @FXML private ComboBox pushToApplicationCombo; + @FXML private ComboBox pushToApplicationCombo; @FXML private TextField citeCommand; @FXML private Button autolinkExternalHelp; @@ -53,9 +53,9 @@ public String getTabName() { public void initialize() { this.viewModel = new ExternalTabViewModel(dialogService, preferences); - new ViewModelListCellFactory() - .withText(GUIPushToApplication::getDisplayName) - .withIcon(GUIPushToApplication::getApplicationIcon) + new ViewModelListCellFactory() + .withText(GuiPushToApplication::getDisplayName) + .withIcon(GuiPushToApplication::getApplicationIcon) .install(pushToApplicationCombo); eMailReferenceSubject.textProperty().bindBidirectional(viewModel.eMailReferenceSubjectProperty()); diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java index c41d2749436..59640ac5fda 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java @@ -18,10 +18,10 @@ import org.jabref.gui.frame.ExternalApplicationsPreferences; import org.jabref.gui.preferences.GuiPreferences; import org.jabref.gui.preferences.PreferenceTabViewModel; -import org.jabref.gui.push.GUIPushToApplication; +import org.jabref.gui.push.GuiPushToApplication; import org.jabref.gui.push.GUIPushToApplicationSettings; import org.jabref.gui.push.GUIPushToApplications; -import org.jabref.gui.push.GUIPushToEmacs; +import org.jabref.gui.push.GuiPushToEmacs; import org.jabref.gui.util.FileDialogConfiguration; import org.jabref.logic.l10n.Localization; import org.jabref.logic.push.CitationCommandString; @@ -38,8 +38,8 @@ public class ExternalTabViewModel implements PreferenceTabViewModel { private final StringProperty eMailReferenceSubjectProperty = new SimpleStringProperty(""); private final BooleanProperty autoOpenAttachedFoldersProperty = new SimpleBooleanProperty(); - private final ListProperty pushToApplicationsListProperty = new SimpleListProperty<>(); - private final ObjectProperty selectedPushToApplicationProperty = new SimpleObjectProperty<>(); + private final ListProperty pushToApplicationsListProperty = new SimpleListProperty<>(); + private final ObjectProperty selectedPushToApplicationProperty = new SimpleObjectProperty<>(); private final StringProperty citeCommandProperty = new SimpleStringProperty(""); private final BooleanProperty useCustomTerminalProperty = new SimpleBooleanProperty(); private final StringProperty customTerminalCommandProperty = new SimpleStringProperty(""); @@ -96,10 +96,10 @@ public void setValues() { autoOpenAttachedFoldersProperty.setValue(initialExternalApplicationPreferences.shouldAutoOpenEmailAttachmentsFolder()); pushToApplicationsListProperty.setValue( - FXCollections.observableArrayList(GUIPushToApplications.getAllGUIApplications(dialogService, preferences))); + FXCollections.observableArrayList(GUIPushToApplications.getAllGUIApplications(dialogService, preferences.getPushToApplicationPreferences()))); selectedPushToApplicationProperty.setValue( - GUIPushToApplications.getGUIApplicationByName(initialPushToApplicationPreferences.getActiveApplicationName(), dialogService, preferences) - .orElseGet(() -> new GUIPushToEmacs(dialogService, preferences))); + GUIPushToApplications.getGUIApplicationByName(initialPushToApplicationPreferences.getActiveApplicationName(), dialogService, preferences.getPushToApplicationPreferences()) + .orElseGet(() -> new GuiPushToEmacs(dialogService, preferences.getPushToApplicationPreferences()))); citeCommandProperty.setValue(initialPushToApplicationPreferences.getCiteCommand().toString()); @@ -159,8 +159,8 @@ public boolean validateSettings() { } public void pushToApplicationSettings() { - GUIPushToApplication selectedApplication = selectedPushToApplicationProperty.getValue(); - GUIPushToApplicationSettings settings = selectedApplication.getSettings(selectedApplication, workingPushToApplicationPreferences); + GuiPushToApplication selectedApplication = selectedPushToApplicationProperty.getValue(); + GUIPushToApplicationSettings settings = selectedApplication.getSettings(selectedApplication, dialogService, preferences.getFilePreferences(), workingPushToApplicationPreferences); DialogPane dialogPane = new DialogPane(); dialogPane.setContent(settings.getSettingsPane()); @@ -203,11 +203,11 @@ public BooleanProperty autoOpenAttachedFoldersProperty() { // Push-To-Application - public ListProperty pushToApplicationsListProperty() { + public ListProperty pushToApplicationsListProperty() { return this.pushToApplicationsListProperty; } - public ObjectProperty selectedPushToApplication() { + public ObjectProperty selectedPushToApplication() { return this.selectedPushToApplicationProperty; } diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java deleted file mode 100644 index aff96c476a6..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.jabref.gui.push; - -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; - -public interface GUIPushToApplication extends PushToApplication { - - /** - * Gets a tooltip for the push operation. - */ - String getTooltip(); - - /** - * Gets the icon associated with the application. - * - * @return The icon for the application. - */ - JabRefIcon getApplicationIcon(); - - Action getAction(); - - GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences pushToApplicationPreferences); - - void sendErrorNotification(String title, String message); -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationAction.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationAction.java new file mode 100644 index 00000000000..91ced472676 --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationAction.java @@ -0,0 +1,34 @@ +package org.jabref.gui.push; + +import java.util.Optional; + +import org.jabref.gui.actions.Action; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.gui.keyboard.KeyBinding; +import org.jabref.logic.l10n.Localization; + +public class GUIPushToApplicationAction implements Action { + + private final String displayName; + private JabRefIcon applicationIcon; + + public GUIPushToApplicationAction(String displayName, JabRefIcon applicationIcon) { + this.displayName = displayName; + this.applicationIcon = applicationIcon; + } + + @Override + public String getText() { + return Localization.lang("Push entries to external application (%0)", displayName); + } + + @Override + public Optional getIcon() { + return Optional.of(applicationIcon); + } + + @Override + public Optional getKeyBinding() { + return Optional.of(KeyBinding.PUSH_TO_APPLICATION); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationCommand.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationCommand.java index 0eb29f78ae7..1ce699c2a0a 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationCommand.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationCommand.java @@ -41,7 +41,7 @@ public class GUIPushToApplicationCommand extends SimpleCommand { private final List reconfigurableControls = new ArrayList<>(); private final TaskExecutor taskExecutor; - private GUIPushToApplication application; + private GuiPushToApplication application; public GUIPushToApplicationCommand(StateManager stateManager, DialogService dialogService, GuiPreferences preferences, TaskExecutor taskExecutor) { this.stateManager = stateManager; @@ -73,11 +73,11 @@ public void registerReconfigurable(Object node) { private void setApplication(String applicationName) { final ActionFactory factory = new ActionFactory(); - GUIPushToApplication application = GUIPushToApplications.getGUIApplicationByName( + GuiPushToApplication application = GUIPushToApplications.getGUIApplicationByName( applicationName, dialogService, - preferences) - .orElseGet(() -> new GUIPushToEmacs(dialogService, preferences)); + preferences.getPushToApplicationPreferences()) + .orElseGet(() -> new GuiPushToEmacs(dialogService, preferences.getPushToApplicationPreferences())); preferences.getPushToApplicationPreferences().setActiveApplicationName(application.getDisplayName()); this.application = Objects.requireNonNull(application); diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java index 809bfc7ab8b..1e1a7f455ab 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java @@ -6,36 +6,36 @@ import java.util.Optional; import org.jabref.gui.DialogService; -import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.push.PushToApplicationPreferences; public class GUIPushToApplications { - private static final List APPLICATIONS = new ArrayList<>(); + private static final List APPLICATIONS = new ArrayList<>(); private GUIPushToApplications() { } - public static List getAllGUIApplications(DialogService dialogService, CliPreferences preferences) { + public static List getAllGUIApplications(DialogService dialogService, PushToApplicationPreferences preferences) { if (!APPLICATIONS.isEmpty()) { return Collections.unmodifiableList(APPLICATIONS); } APPLICATIONS.addAll(List.of( - new GUIPushToEmacs(dialogService, preferences), - new GUIPushToLyx(dialogService, preferences), - new GUIPushToSublimeText(dialogService, preferences), - new GUIPushToTexmaker(dialogService, preferences), - new GUIPushToTeXstudio(dialogService, preferences), - new GUIPushToTeXworks(dialogService, preferences), - new GUIPushToVim(dialogService, preferences), - new GUIPushToWinEdt(dialogService, preferences), - new GUIPushToTexShop(dialogService, preferences), - new GUIPushToVScode(dialogService, preferences))); + new GuiPushToEmacs(dialogService, preferences), + new GuiPushToLyx(dialogService, preferences), + new GuiPushToSublimeText(dialogService, preferences), + new GuiPushToTexmaker(dialogService, preferences), + new GuiPushToTeXstudio(dialogService, preferences), + new GuiPushToTeXworks(dialogService, preferences), + new GuiPushToVim(dialogService, preferences), + new GuiPushToWinEdt(dialogService, preferences), + new GuiPushToTexShop(dialogService, preferences), + new GuiPushToVScode(dialogService, preferences))); return APPLICATIONS; } - public static Optional getGUIApplicationByName(String applicationName, DialogService dialogService, CliPreferences preferences) { + public static Optional getGUIApplicationByName(String applicationName, DialogService dialogService, PushToApplicationPreferences preferences) { return getAllGUIApplications(dialogService, preferences).stream() .filter(application -> application.getDisplayName().equals(applicationName)) .findAny(); diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java deleted file mode 100644 index 659cd3d0430..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToEmacs; - -public class GUIPushToEmacs extends PushToEmacs implements GUIPushToApplication { - - private final DialogService dialogService; - - /** - * @param preferences getPushToApplicationPreferences(), getExternalApplicationsPreferences(), and getFilePreferences() are used - */ - public GUIPushToEmacs(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_EMACS; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToEmacsSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java deleted file mode 100644 index 206ee5635f5..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToLyx; - -public class GUIPushToLyx extends PushToLyx implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToLyx(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToLyxSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_LYX; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java deleted file mode 100644 index cfc7fe1f2a5..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToSublimeText; - -public class GUIPushToSublimeText extends PushToSublimeText implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToSublimeText(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_SUBLIMETEXT; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java deleted file mode 100644 index 7fa03c316b7..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToTeXstudio; - -public class GUIPushToTeXstudio extends PushToTeXstudio implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToTeXstudio(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_TEXSTUDIO; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java deleted file mode 100644 index cc83d00dc3a..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToTeXworks; - -public class GUIPushToTeXworks extends PushToTeXworks implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToTeXworks(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_TEXWORS; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java deleted file mode 100644 index 65d9aea09fa..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToTexShop; - -public class GUIPushToTexShop extends PushToTexShop implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToTexShop(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_TEXSHOP; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java deleted file mode 100644 index 02bfa75976a..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToTexmaker; - -public class GUIPushToTexmaker extends PushToTexmaker implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToTexmaker(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_TEXMAKER; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java deleted file mode 100644 index 55d61e46c63..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToVScode; - -public class GUIPushToVScode extends PushToVScode implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToVScode(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_VSCODE; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java deleted file mode 100644 index c9b5c0c562a..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToVim; - -public class GUIPushToVim extends PushToVim implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToVim(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToVimSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_VIM; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java deleted file mode 100644 index fd6c444dd2d..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToWinEdt; - -public class GUIPushToWinEdt extends PushToWinEdt implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToWinEdt(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_WINEDT; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplication.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplication.java new file mode 100644 index 00000000000..1242acd1782 --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplication.java @@ -0,0 +1,36 @@ +package org.jabref.gui.push; + +import org.jabref.gui.DialogService; +import org.jabref.gui.actions.Action; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.logic.FilePreferences; +import org.jabref.logic.l10n.Localization; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; + +public interface GuiPushToApplication extends PushToApplication { + + /** + * Gets a tooltip for the push operation. + */ + default String getTooltip() { + return Localization.lang("Push entries to external application (%0)", getDisplayName()); + } + + /** + * Gets the icon associated with the application. + * + * @return The icon for the application. + */ + JabRefIcon getApplicationIcon(); + + default Action getAction() { + return new GUIPushToApplicationAction(getDisplayName(), getApplicationIcon()); + } + + default GUIPushToApplicationSettings getSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences pushToApplicationPreferences) { + return new GUIPushToApplicationSettings(application, dialogService, filePreferences, pushToApplicationPreferences); + } + + void sendErrorNotification(String title, String message); +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToEmacs.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToEmacs.java new file mode 100644 index 00000000000..75759c2c5d4 --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToEmacs.java @@ -0,0 +1,37 @@ +package org.jabref.gui.push; + +import org.jabref.gui.DialogService; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.logic.FilePreferences; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToEmacs; + +public class GuiPushToEmacs extends PushToEmacs implements GuiPushToApplication { + + private final DialogService dialogService; + + /** + * @param preferences getPushToApplicationPreferences(), getExternalApplicationsPreferences(), and getFilePreferences() are used + */ + public GuiPushToEmacs(DialogService dialogService, PushToApplicationPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public GUIPushToApplicationSettings getSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences pushToApplicationPreferences) { + return new GUIPushToEmacsSettings(application, dialogService, filePreferences, pushToApplicationPreferences); + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_EMACS; + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToLyx.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToLyx.java new file mode 100644 index 00000000000..29d8bb5af8c --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToLyx.java @@ -0,0 +1,34 @@ +package org.jabref.gui.push; + +import org.jabref.gui.DialogService; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.logic.FilePreferences; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToLyx; + +public class GuiPushToLyx extends PushToLyx implements GuiPushToApplication { + + private final DialogService dialogService; + + public GuiPushToLyx(DialogService dialogService, PushToApplicationPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public GUIPushToApplicationSettings getSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences pushToApplicationPreferences) { + return new GUIPushToLyxSettings(application, dialogService, filePreferences, pushToApplicationPreferences); + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_LYX; + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToSublimeText.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToSublimeText.java new file mode 100644 index 00000000000..0f7d2287a7f --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToSublimeText.java @@ -0,0 +1,27 @@ +package org.jabref.gui.push; + +import org.jabref.gui.DialogService; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToSublimeText; + +public class GuiPushToSublimeText extends PushToSublimeText implements GuiPushToApplication { + + private final DialogService dialogService; + + public GuiPushToSublimeText(DialogService dialogService, PushToApplicationPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_SUBLIMETEXT; + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToTeXstudio.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToTeXstudio.java new file mode 100644 index 00000000000..89db38554dc --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToTeXstudio.java @@ -0,0 +1,27 @@ +package org.jabref.gui.push; + +import org.jabref.gui.DialogService; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToTeXstudio; + +public class GuiPushToTeXstudio extends PushToTeXstudio implements GuiPushToApplication { + + private final DialogService dialogService; + + public GuiPushToTeXstudio(DialogService dialogService, PushToApplicationPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_TEXSTUDIO; + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToTeXworks.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToTeXworks.java new file mode 100644 index 00000000000..21b06756a6f --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToTeXworks.java @@ -0,0 +1,27 @@ +package org.jabref.gui.push; + +import org.jabref.gui.DialogService; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToTeXworks; + +public class GuiPushToTeXworks extends PushToTeXworks implements GuiPushToApplication { + + private final DialogService dialogService; + + public GuiPushToTeXworks(DialogService dialogService, PushToApplicationPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_TEXWORS; + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToTexShop.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToTexShop.java new file mode 100644 index 00000000000..347a1473f84 --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToTexShop.java @@ -0,0 +1,27 @@ +package org.jabref.gui.push; + +import org.jabref.gui.DialogService; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToTexShop; + +public class GuiPushToTexShop extends PushToTexShop implements GuiPushToApplication { + + private final DialogService dialogService; + + public GuiPushToTexShop(DialogService dialogService, PushToApplicationPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_TEXSHOP; + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToTexmaker.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToTexmaker.java new file mode 100644 index 00000000000..d3001508836 --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToTexmaker.java @@ -0,0 +1,27 @@ +package org.jabref.gui.push; + +import org.jabref.gui.DialogService; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToTexmaker; + +public class GuiPushToTexmaker extends PushToTexmaker implements GuiPushToApplication { + + private final DialogService dialogService; + + public GuiPushToTexmaker(DialogService dialogService, PushToApplicationPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_TEXMAKER; + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToVScode.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToVScode.java new file mode 100644 index 00000000000..d9fdf339c3e --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToVScode.java @@ -0,0 +1,27 @@ +package org.jabref.gui.push; + +import org.jabref.gui.DialogService; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToVScode; + +public class GuiPushToVScode extends PushToVScode implements GuiPushToApplication { + + private final DialogService dialogService; + + public GuiPushToVScode(DialogService dialogService, PushToApplicationPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_VSCODE; + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToVim.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToVim.java new file mode 100644 index 00000000000..c14c8e58c7d --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToVim.java @@ -0,0 +1,34 @@ +package org.jabref.gui.push; + +import org.jabref.gui.DialogService; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.logic.FilePreferences; +import org.jabref.logic.push.PushToApplication; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToVim; + +public class GuiPushToVim extends PushToVim implements GuiPushToApplication { + + private final DialogService dialogService; + + public GuiPushToVim(DialogService dialogService, PushToApplicationPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public GUIPushToApplicationSettings getSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences preferences) { + return new GUIPushToVimSettings(application, dialogService, filePreferences, preferences); + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_VIM; + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToWinEdt.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToWinEdt.java new file mode 100644 index 00000000000..e13dcd5d94e --- /dev/null +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToWinEdt.java @@ -0,0 +1,27 @@ +package org.jabref.gui.push; + +import org.jabref.gui.DialogService; +import org.jabref.gui.icon.IconTheme; +import org.jabref.gui.icon.JabRefIcon; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.push.PushToWinEdt; + +public class GuiPushToWinEdt extends PushToWinEdt implements GuiPushToApplication { + + private final DialogService dialogService; + + public GuiPushToWinEdt(DialogService dialogService, PushToApplicationPreferences preferences) { + super(dialogService, preferences); + this.dialogService = dialogService; + } + + @Override + public JabRefIcon getApplicationIcon() { + return IconTheme.JabRefIcons.APPLICATION_WINEDT; + } + + @Override + public void sendErrorNotification(String title, String message) { + dialogService.showErrorDialogAndWait(title, message); + } +} diff --git a/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java b/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java index 29a2d2831f9..cef5bc59be8 100644 --- a/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java +++ b/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java @@ -7,7 +7,6 @@ import javafx.collections.ObservableMap; import org.jabref.gui.DialogService; -import org.jabref.gui.preferences.GuiPreferences; import org.jabref.logic.os.OS; import org.jabref.logic.push.PushToApplicationPreferences; @@ -21,12 +20,11 @@ @Disabled("Needs running emacs daemon. Start emacs with --daemon") class PushToEmacsTest { - GUIPushToEmacs pushToEmacs; + GuiPushToEmacs pushToEmacs; @BeforeEach void setup() { DialogService dialogService = mock(DialogService.class, Answers.RETURNS_DEEP_STUBS); - GuiPreferences preferences = mock(GuiPreferences.class); PushToApplicationPreferences pushToApplicationPreferences = mock(PushToApplicationPreferences.class); @@ -37,12 +35,9 @@ void setup() { when(pushToApplicationPreferences.getEmacsArguments()).thenReturn("-n -e"); - when(preferences.getPushToApplicationPreferences()).thenReturn(pushToApplicationPreferences); - when(pushToApplicationPreferences.getCiteCommand().toString()).thenReturn("\\cite{key1,key2}"); - when(preferences.getPushToApplicationPreferences()).thenReturn(pushToApplicationPreferences); - pushToEmacs = new GUIPushToEmacs(dialogService, preferences); + pushToEmacs = new GuiPushToEmacs(dialogService, pushToApplicationPreferences); } @Test diff --git a/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java b/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java index 7041cbbb8c5..37e6796eaaf 100644 --- a/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java +++ b/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java @@ -7,7 +7,6 @@ import javafx.collections.ObservableMap; import org.jabref.gui.DialogService; -import org.jabref.gui.preferences.GuiPreferences; import org.jabref.logic.push.CitationCommandString; import org.jabref.logic.push.PushToApplicationPreferences; @@ -26,29 +25,26 @@ class PushToTeXworksTest { private static final String TEXWORKS_CLIENT_PATH = "/usr/bin/texworks"; private static final String DISPLAY_NAME = "TeXworks"; - private GUIPushToTeXworks pushToTeXworks; + private GuiPushToTeXworks pushToTeXworks; @BeforeEach void setup() { DialogService dialogService = mock(DialogService.class, Answers.RETURNS_DEEP_STUBS); - GuiPreferences preferences = mock(GuiPreferences.class); PushToApplicationPreferences pushToApplicationPreferences = mock(PushToApplicationPreferences.class); // Mock the command path Map commandPaths = Map.of(DISPLAY_NAME, TEXWORKS_CLIENT_PATH); ObservableMap observableCommandPaths = FXCollections.observableMap(commandPaths); when(pushToApplicationPreferences.getCommandPaths()).thenReturn(new SimpleMapProperty<>(observableCommandPaths)); - when(preferences.getPushToApplicationPreferences()).thenReturn(pushToApplicationPreferences); // Mock the return value for getCiteCommand() CitationCommandString mockCiteCommand = mock(CitationCommandString.class); when(mockCiteCommand.prefix()).thenReturn(""); when(mockCiteCommand.suffix()).thenReturn(""); when(pushToApplicationPreferences.getCiteCommand()).thenReturn(mockCiteCommand); - when(preferences.getPushToApplicationPreferences()).thenReturn(pushToApplicationPreferences); // Create a new instance of PushToTeXworks - pushToTeXworks = new GUIPushToTeXworks(dialogService, preferences); + pushToTeXworks = new GuiPushToTeXworks(dialogService, pushToApplicationPreferences); } /** diff --git a/jabgui/src/test/java/org/jabref/gui/push/PushToWinEdtTest.java b/jabgui/src/test/java/org/jabref/gui/push/PushToWinEdtTest.java index a4bb71dca22..768ee3a33bb 100644 --- a/jabgui/src/test/java/org/jabref/gui/push/PushToWinEdtTest.java +++ b/jabgui/src/test/java/org/jabref/gui/push/PushToWinEdtTest.java @@ -25,6 +25,6 @@ void setup() { @Test void jumpToLineCommandlineArguments() { - assertNotNull(new GUIPushToWinEdt(dialogService, preferences).jumpToLineCommandlineArguments(Path.of("test.tex"), 1, 5)); + assertNotNull(new GuiPushToWinEdt(dialogService, preferences.getPushToApplicationPreferences()).jumpToLineCommandlineArguments(Path.of("test.tex"), 1, 5)); } } diff --git a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java index 024cf7c03fc..eccd4751654 100644 --- a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java @@ -816,6 +816,9 @@ public PushToApplicationPreferences getPushToApplicationPreferences() { pushToApplicationPreferences.getCommandPaths().addListener((obs, oldValue, newValue) -> storePushToApplicationPath(newValue)); EasyBind.listen(pushToApplicationPreferences.emacsArgumentsProperty(), (obs, oldValue, newValue) -> put(PUSH_EMACS_ADDITIONAL_PARAMETERS, newValue)); EasyBind.listen(pushToApplicationPreferences.vimServerProperty(), (obs, oldValue, newValue) -> put(PUSH_VIM_SERVER, newValue)); + EasyBind.listen(pushToApplicationPreferences.citeCommandProperty(), + (obs, oldValue, newValue) -> put(PUSH_CITE_COMMAND, newValue.toString())); + return pushToApplicationPreferences; } diff --git a/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java b/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java index a3960d34332..569fbb790bc 100644 --- a/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java +++ b/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java @@ -6,7 +6,6 @@ import org.jabref.logic.l10n.Localization; import org.jabref.logic.os.OS; -import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.NotificationService; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; @@ -29,9 +28,9 @@ public abstract class AbstractPushToApplication implements PushToApplication { protected String commandPath; protected final NotificationService notificationService; - protected final CliPreferences preferences; + protected final PushToApplicationPreferences preferences; - public AbstractPushToApplication(NotificationService notificationService, CliPreferences preferences) { + public AbstractPushToApplication(NotificationService notificationService, PushToApplicationPreferences preferences) { this.notificationService = notificationService; this.preferences = preferences; } @@ -47,7 +46,7 @@ public void pushEntries(BibDatabaseContext database, List entries, Str couldNotCall = false; notDefined = false; - commandPath = preferences.getPushToApplicationPreferences().getCommandPaths().get(this.getDisplayName()); + commandPath = preferences.getCommandPaths().get(this.getDisplayName()); // Check if a path to the command has been specified if (StringUtil.isNullOrEmpty(commandPath)) { @@ -144,19 +143,19 @@ public String getCommandName() { } protected String getCitePrefix() { - return preferences.getPushToApplicationPreferences().getCiteCommand().prefix(); + return preferences.getCiteCommand().prefix(); } public String getDelimiter() { - return preferences.getPushToApplicationPreferences().getCiteCommand().delimiter(); + return preferences.getCiteCommand().delimiter(); } protected String getCiteSuffix() { - return preferences.getPushToApplicationPreferences().getCiteCommand().suffix(); + return preferences.getCiteCommand().suffix(); } public void jumpToLine(Path fileName, int line, int column) { - commandPath = preferences.getPushToApplicationPreferences().getCommandPaths().get(this.getDisplayName()); + commandPath = preferences.getCommandPaths().get(this.getDisplayName()); if (StringUtil.isNullOrEmpty(commandPath)) { notDefined = true; diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java b/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java index 93e9c1b8c02..c0540c54f34 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java @@ -5,7 +5,6 @@ import java.util.List; import java.util.Optional; -import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.NotificationService; public class PushToApplications { @@ -26,7 +25,7 @@ public class PushToApplications { private PushToApplications() { } - public static List getAllApplications(NotificationService notificationService, CliPreferences preferences) { + public static List getAllApplications(NotificationService notificationService, PushToApplicationPreferences preferences) { if (!APPLICATIONS.isEmpty()) { return Collections.unmodifiableList(APPLICATIONS); } @@ -46,8 +45,8 @@ public static List getAllApplications(NotificationService not return APPLICATIONS; } - public static Optional getApplicationByName(String applicationName, NotificationService dialogService, CliPreferences preferences) { - return getAllApplications(dialogService, preferences).stream() + public static Optional getApplicationByName(String applicationName, NotificationService notificationService, PushToApplicationPreferences preferences) { + return getAllApplications(notificationService, preferences).stream() .filter(application -> application.getDisplayName().equals(applicationName)) .findAny(); } diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java b/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java index b0a0c69f287..05eb69aa4ee 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java @@ -8,7 +8,6 @@ import org.jabref.logic.l10n.Localization; import org.jabref.logic.os.OS; -import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.HeadlessExecutorService; import org.jabref.logic.util.NotificationService; import org.jabref.model.database.BibDatabaseContext; @@ -26,7 +25,7 @@ public class PushToEmacs extends AbstractPushToApplication { /** * @param preferences getPushToApplicationPreferences(), getExternalApplicationsPreferences(), and getFilePreferences() are used */ - public PushToEmacs(NotificationService notificationService, CliPreferences preferences) { + public PushToEmacs(NotificationService notificationService, PushToApplicationPreferences preferences) { super(notificationService, preferences); } @@ -41,18 +40,16 @@ public void pushEntries(BibDatabaseContext database, List entries, Str couldNotCall = false; notDefined = false; - PushToApplicationPreferences pushToApplicationPreferences = preferences.getPushToApplicationPreferences(); - - commandPath = pushToApplicationPreferences.getCommandPaths().get(this.getDisplayName()); + commandPath = preferences.getCommandPaths().get(this.getDisplayName()); if ((commandPath == null) || commandPath.trim().isEmpty()) { notDefined = true; return; } - commandPath = pushToApplicationPreferences.getCommandPaths().get(this.getDisplayName()); + commandPath = preferences.getCommandPaths().get(this.getDisplayName()); - String[] addParams = pushToApplicationPreferences.getEmacsArguments().split(" "); + String[] addParams = preferences.getEmacsArguments().split(" "); try { String[] com = new String[addParams.length + 2]; com[0] = commandPath; diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java b/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java index 4b410525e3c..e1cb5c551e0 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java @@ -8,7 +8,6 @@ import java.util.List; import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.HeadlessExecutorService; import org.jabref.logic.util.NotificationService; import org.jabref.model.database.BibDatabaseContext; @@ -23,7 +22,7 @@ public class PushToLyx extends AbstractPushToApplication { private static final Logger LOGGER = LoggerFactory.getLogger(PushToLyx.class); - public PushToLyx(NotificationService dialogService, CliPreferences preferences) { + public PushToLyx(NotificationService dialogService, PushToApplicationPreferences preferences) { super(dialogService, preferences); } @@ -51,7 +50,7 @@ public void pushEntries(BibDatabaseContext database, final List entrie couldNotCall = false; notDefined = false; - commandPath = preferences.getPushToApplicationPreferences().getCommandPaths().get(this.getDisplayName()); + commandPath = preferences.getCommandPaths().get(this.getDisplayName()); if ((commandPath == null) || commandPath.trim().isEmpty()) { notDefined = true; diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java b/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java index a327e8beb55..a472a5e989d 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java @@ -6,7 +6,6 @@ import java.util.Map; import org.jabref.logic.os.OS; -import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.HeadlessExecutorService; import org.jabref.logic.util.NotificationService; import org.jabref.logic.util.StreamGobbler; @@ -23,7 +22,7 @@ public class PushToSublimeText extends AbstractPushToApplication { private static final Logger LOGGER = LoggerFactory.getLogger(PushToSublimeText.class); - public PushToSublimeText(NotificationService notificationService, CliPreferences preferences) { + public PushToSublimeText(NotificationService notificationService, PushToApplicationPreferences preferences) { super(notificationService, preferences); } @@ -38,7 +37,7 @@ public void pushEntries(BibDatabaseContext database, List entries, Str couldNotCall = false; notDefined = false; - commandPath = preferences.getPushToApplicationPreferences().getCommandPaths().get(this.getDisplayName()); + commandPath = preferences.getCommandPaths().get(this.getDisplayName()); // Check if a path to the command has been specified if (StringUtil.isNullOrEmpty(commandPath)) { diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToTeXstudio.java b/jablib/src/main/java/org/jabref/logic/push/PushToTeXstudio.java index bf3783a7e58..5bc6a0c4018 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToTeXstudio.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTeXstudio.java @@ -2,14 +2,13 @@ import java.nio.file.Path; -import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.NotificationService; public class PushToTeXstudio extends AbstractPushToApplication { public static final String NAME = PushToApplications.TEXSTUDIO; - public PushToTeXstudio(NotificationService dialogService, CliPreferences preferences) { + public PushToTeXstudio(NotificationService dialogService, PushToApplicationPreferences preferences) { super(dialogService, preferences); } diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java b/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java index a51aa9b8865..c0476b03546 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java @@ -2,7 +2,6 @@ import java.nio.file.Path; -import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.NotificationService; public class PushToTeXworks extends AbstractPushToApplication { @@ -15,7 +14,7 @@ public class PushToTeXworks extends AbstractPushToApplication { * @param notificationService The dialog service for displaying messages to the user. * @param preferences The service for accessing user preferences. */ - public PushToTeXworks(NotificationService notificationService, CliPreferences preferences) { + public PushToTeXworks(NotificationService notificationService, PushToApplicationPreferences preferences) { super(notificationService, preferences); } diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java b/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java index 6852e28573a..0397b930605 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java @@ -5,7 +5,6 @@ import org.jabref.logic.l10n.Localization; import org.jabref.logic.os.OS; -import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.HeadlessExecutorService; import org.jabref.logic.util.NotificationService; import org.jabref.logic.util.StreamGobbler; @@ -21,7 +20,7 @@ public class PushToTexShop extends AbstractPushToApplication { private static final Logger LOGGER = LoggerFactory.getLogger(PushToTexShop.class); - public PushToTexShop(NotificationService notificationService, CliPreferences preferences) { + public PushToTexShop(NotificationService notificationService, PushToApplicationPreferences preferences) { super(notificationService, preferences); } @@ -36,7 +35,7 @@ public void pushEntries(BibDatabaseContext database, List entries, Str couldNotCall = false; notDefined = false; - commandPath = preferences.getPushToApplicationPreferences().getCommandPaths().get(this.getDisplayName()); + commandPath = preferences.getCommandPaths().get(this.getDisplayName()); try { LOGGER.debug("TexShop string: {}", String.join(" ", getCommandLine(keyString))); diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToTexmaker.java b/jablib/src/main/java/org/jabref/logic/push/PushToTexmaker.java index 823e6e11763..e837f598503 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToTexmaker.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTexmaker.java @@ -2,7 +2,6 @@ import java.nio.file.Path; -import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.NotificationService; /** @@ -12,7 +11,7 @@ public class PushToTexmaker extends AbstractPushToApplication { public static final String NAME = "Texmaker"; - public PushToTexmaker(NotificationService dialogService, CliPreferences preferences) { + public PushToTexmaker(NotificationService dialogService, PushToApplicationPreferences preferences) { super(dialogService, preferences); } diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToVScode.java b/jablib/src/main/java/org/jabref/logic/push/PushToVScode.java index 67c5254903d..140e9b1b917 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToVScode.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToVScode.java @@ -2,14 +2,13 @@ import java.nio.file.Path; -import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.NotificationService; public class PushToVScode extends AbstractPushToApplication { public static final String NAME = PushToApplications.VSCODE; - public PushToVScode(NotificationService notificationService, CliPreferences preferences) { + public PushToVScode(NotificationService notificationService, PushToApplicationPreferences preferences) { super(notificationService, preferences); } diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToVim.java b/jablib/src/main/java/org/jabref/logic/push/PushToVim.java index acbcf7b6453..bb1dc770012 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToVim.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToVim.java @@ -8,7 +8,6 @@ import org.jabref.logic.l10n.Localization; import org.jabref.logic.os.OS; -import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.HeadlessExecutorService; import org.jabref.logic.util.NotificationService; import org.jabref.model.database.BibDatabaseContext; @@ -23,7 +22,7 @@ public class PushToVim extends AbstractPushToApplication { private static final Logger LOGGER = LoggerFactory.getLogger(PushToVim.class); - public PushToVim(NotificationService notificationService, CliPreferences preferences) { + public PushToVim(NotificationService notificationService, PushToApplicationPreferences preferences) { super(notificationService, preferences); } @@ -40,7 +39,7 @@ public void pushEntries(BibDatabaseContext database, List entries, Str try { String[] com = new String[]{commandPath, "--servername", - preferences.getPushToApplicationPreferences().getVimServer(), "--remote-send", + preferences.getVimServer(), "--remote-send", "a" + getCitePrefix() + keys + getCiteSuffix()}; LOGGER.atDebug() @@ -136,7 +135,7 @@ private boolean determineCommandPath() { couldNotCall = false; notDefined = false; - commandPath = preferences.getPushToApplicationPreferences().getCommandPaths().get(this.getDisplayName()); + commandPath = preferences.getCommandPaths().get(this.getDisplayName()); if ((commandPath == null) || commandPath.trim().isEmpty()) { notDefined = true; diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java b/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java index b016a148fe6..e1687f1b65a 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java @@ -2,14 +2,13 @@ import java.nio.file.Path; -import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.NotificationService; public class PushToWinEdt extends AbstractPushToApplication { public static final String NAME = PushToApplications.WIN_EDT; - public PushToWinEdt(NotificationService notificationService, CliPreferences preferences) { + public PushToWinEdt(NotificationService notificationService, PushToApplicationPreferences preferences) { super(notificationService, preferences); } diff --git a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java index 31a4c03fe80..8f181a4cc22 100644 --- a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java +++ b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java @@ -15,6 +15,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; +import java.util.stream.Collectors; import javafx.application.Platform; @@ -28,6 +29,8 @@ import org.jabref.http.server.services.ServerUtils; import org.jabref.logic.importer.fileformat.BibtexImporter; import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.push.CitationCommandString; +import org.jabref.logic.push.PushToApplications; import org.jabref.model.database.BibDatabase; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; @@ -119,6 +122,17 @@ public Response getCitation( systemClipboard.setContents(strSel, null); } + // Push to TexStudio parameter handling + if (queryParams.isTexstudio()) { + CitationCommandString citationCmd = new CitationCommandString("\\".concat(queryParams.getCommand()).concat("{"), ",", "}"); + String keyString = searchResults.stream() + .map(caywEntry -> caywEntry.bibEntry().getCitationKey().orElse("")) + .collect(Collectors.joining(",")); + + PushToApplications.getApplicationByName("TeXstudio", LOGGER::info, preferences.getPushToApplicationPreferences().withCitationCommand(citationCmd)) + .ifPresent(application -> application.pushEntries(databaseContext, searchResults.stream().map(CAYWEntry::bibEntry).toList(), keyString)); + } + return Response.ok(formattedResponse).type(formatter.getMediaType()).build(); } From 566ba96cdf5c22ea63ce77b965b2ca84f4798e0e Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Wed, 9 Jul 2025 11:46:53 +0200 Subject: [PATCH 13/23] Add methods for error notification routing and update citation command handling --- .../org/jabref/logic/push/PushToApplication.java | 2 ++ .../logic/push/PushToApplicationPreferences.java | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToApplication.java b/jablib/src/main/java/org/jabref/logic/push/PushToApplication.java index 79428cfbe45..d217eaa9b80 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToApplication.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToApplication.java @@ -30,8 +30,10 @@ public interface PushToApplication { */ void onOperationCompleted(); + /// Used to route to either the GUI or the CLI - dependent on the usage void sendErrorNotification(String title, String message); + /// Used to route to either the GUI or the CLI - dependent on the usage void sendErrorNotification(String message); /** diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToApplicationPreferences.java b/jablib/src/main/java/org/jabref/logic/push/PushToApplicationPreferences.java index dff091d3360..92c9a4e7160 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToApplicationPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToApplicationPreferences.java @@ -93,4 +93,17 @@ public void setCiteCommand(CitationCommandString citeCommand) { public CitationCommandString getDefaultCiteCommand() { return defaultCiteCommand.getValue(); } + + /// Modifies the current instance to set a new default citation command + /// + /// @return a new independent instance with the updated default citation command + public PushToApplicationPreferences withCitationCommand(CitationCommandString config) { + return new PushToApplicationPreferences( + this.activeApplicationName.get(), + this.commandPaths.get(), + this.emacsArguments.get(), + this.vimServer.get(), + config, + this.defaultCiteCommand.get()); + } } From ba8aa2b4bf8fa6f52701789210f0e1663dbd2667 Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Wed, 9 Jul 2025 11:51:21 +0200 Subject: [PATCH 14/23] delete --- .../jabref/gui/push/GUIPushToApplication.java | 27 -------- .../org/jabref/gui/push/GUIPushToEmacs.java | 69 ------------------- .../org/jabref/gui/push/GUIPushToLyx.java | 66 ------------------ .../jabref/gui/push/GUIPushToSublimeText.java | 66 ------------------ .../jabref/gui/push/GUIPushToTeXstudio.java | 66 ------------------ .../jabref/gui/push/GUIPushToTeXworks.java | 66 ------------------ .../org/jabref/gui/push/GUIPushToTexShop.java | 66 ------------------ .../jabref/gui/push/GUIPushToTexmaker.java | 66 ------------------ .../org/jabref/gui/push/GUIPushToVScode.java | 66 ------------------ .../org/jabref/gui/push/GUIPushToVim.java | 66 ------------------ .../org/jabref/gui/push/GUIPushToWinEdt.java | 66 ------------------ 11 files changed, 690 deletions(-) delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java delete mode 100644 jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java deleted file mode 100644 index aff96c476a6..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplication.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.jabref.gui.push; - -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; - -public interface GUIPushToApplication extends PushToApplication { - - /** - * Gets a tooltip for the push operation. - */ - String getTooltip(); - - /** - * Gets the icon associated with the application. - * - * @return The icon for the application. - */ - JabRefIcon getApplicationIcon(); - - Action getAction(); - - GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences pushToApplicationPreferences); - - void sendErrorNotification(String title, String message); -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java deleted file mode 100644 index 659cd3d0430..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacs.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToEmacs; - -public class GUIPushToEmacs extends PushToEmacs implements GUIPushToApplication { - - private final DialogService dialogService; - - /** - * @param preferences getPushToApplicationPreferences(), getExternalApplicationsPreferences(), and getFilePreferences() are used - */ - public GUIPushToEmacs(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_EMACS; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToEmacsSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java deleted file mode 100644 index 206ee5635f5..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyx.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToLyx; - -public class GUIPushToLyx extends PushToLyx implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToLyx(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToLyxSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_LYX; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java deleted file mode 100644 index cfc7fe1f2a5..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToSublimeText.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToSublimeText; - -public class GUIPushToSublimeText extends PushToSublimeText implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToSublimeText(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_SUBLIMETEXT; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java deleted file mode 100644 index 7fa03c316b7..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXstudio.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToTeXstudio; - -public class GUIPushToTeXstudio extends PushToTeXstudio implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToTeXstudio(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_TEXSTUDIO; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java deleted file mode 100644 index cc83d00dc3a..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTeXworks.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToTeXworks; - -public class GUIPushToTeXworks extends PushToTeXworks implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToTeXworks(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_TEXWORS; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java deleted file mode 100644 index 65d9aea09fa..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexShop.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToTexShop; - -public class GUIPushToTexShop extends PushToTexShop implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToTexShop(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_TEXSHOP; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java deleted file mode 100644 index 02bfa75976a..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToTexmaker.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToTexmaker; - -public class GUIPushToTexmaker extends PushToTexmaker implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToTexmaker(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_TEXMAKER; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java deleted file mode 100644 index 55d61e46c63..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVScode.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToVScode; - -public class GUIPushToVScode extends PushToVScode implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToVScode(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_VSCODE; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java deleted file mode 100644 index c9b5c0c562a..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVim.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToVim; - -public class GUIPushToVim extends PushToVim implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToVim(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToVimSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_VIM; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java b/jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java deleted file mode 100644 index fd6c444dd2d..00000000000 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToWinEdt.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.jabref.gui.push; - -import java.util.Optional; - -import org.jabref.gui.DialogService; -import org.jabref.gui.actions.Action; -import org.jabref.gui.icon.IconTheme; -import org.jabref.gui.icon.JabRefIcon; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.push.PushToApplication; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToWinEdt; - -public class GUIPushToWinEdt extends PushToWinEdt implements GUIPushToApplication { - - private final DialogService dialogService; - - public GUIPushToWinEdt(DialogService dialogService, CliPreferences preferences) { - super(dialogService, preferences); - this.dialogService = dialogService; - } - - @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, PushToApplicationPreferences preferences) { - return new GUIPushToApplicationSettings(application, dialogService, this.preferences.getFilePreferences(), preferences); - } - - @Override - public String getTooltip() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Action getAction() { - return new PushToApplicationAction(); - } - - @Override - public JabRefIcon getApplicationIcon() { - return IconTheme.JabRefIcons.APPLICATION_WINEDT; - } - - protected class PushToApplicationAction implements Action { - @Override - public String getText() { - return Localization.lang("Push entries to external application (%0)", getDisplayName()); - } - - @Override - public Optional getIcon() { - return Optional.of(getApplicationIcon()); - } - - @Override - public Optional getKeyBinding() { - return Optional.of(KeyBinding.PUSH_TO_APPLICATION); - } - } - - @Override - public void sendErrorNotification(String title, String message) { - dialogService.showErrorDialogAndWait(title, message); - } -} From 552206cc7596bf81b3416fe45c04abec2922a458 Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Wed, 9 Jul 2025 11:53:14 +0200 Subject: [PATCH 15/23] rename --- .../gui/entryeditor/LatexCitationsTabViewModel.java | 4 ++-- .../main/java/org/jabref/gui/frame/JabRefFrame.java | 6 +++--- .../src/main/java/org/jabref/gui/frame/MainMenu.java | 6 +++--- .../main/java/org/jabref/gui/frame/MainToolBar.java | 6 +++--- .../preferences/external/ExternalTabViewModel.java | 12 ++++++------ .../org/jabref/gui/push/GuiPushToApplication.java | 6 +++--- ...onAction.java => GuiPushToApplicationAction.java} | 4 ++-- ...Command.java => GuiPushToApplicationCommand.java} | 8 ++++---- ...ttings.java => GuiPushToApplicationSettings.java} | 4 ++-- ...oApplications.java => GuiPushToApplications.java} | 4 ++-- .../java/org/jabref/gui/push/GuiPushToEmacs.java | 4 ++-- ...macsSettings.java => GuiPushToEmacsSettings.java} | 4 ++-- .../main/java/org/jabref/gui/push/GuiPushToLyx.java | 4 ++-- ...hToLyxSettings.java => GuiPushToLyxSettings.java} | 4 ++-- .../main/java/org/jabref/gui/push/GuiPushToVim.java | 4 ++-- ...hToVimSettings.java => GuiPushToVimSettings.java} | 4 ++-- 16 files changed, 42 insertions(+), 42 deletions(-) rename jabgui/src/main/java/org/jabref/gui/push/{GUIPushToApplicationAction.java => GuiPushToApplicationAction.java} (86%) rename jabgui/src/main/java/org/jabref/gui/push/{GUIPushToApplicationCommand.java => GuiPushToApplicationCommand.java} (96%) rename jabgui/src/main/java/org/jabref/gui/push/{GUIPushToApplicationSettings.java => GuiPushToApplicationSettings.java} (97%) rename jabgui/src/main/java/org/jabref/gui/push/{GUIPushToApplications.java => GuiPushToApplications.java} (95%) rename jabgui/src/main/java/org/jabref/gui/push/{GUIPushToEmacsSettings.java => GuiPushToEmacsSettings.java} (89%) rename jabgui/src/main/java/org/jabref/gui/push/{GUIPushToLyxSettings.java => GuiPushToLyxSettings.java} (83%) rename jabgui/src/main/java/org/jabref/gui/push/{GUIPushToVimSettings.java => GuiPushToVimSettings.java} (88%) diff --git a/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java b/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java index 0294f3ebc86..b750e3da8d9 100644 --- a/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/entryeditor/LatexCitationsTabViewModel.java @@ -23,7 +23,7 @@ import org.jabref.gui.LibraryTab; import org.jabref.gui.preferences.GuiPreferences; import org.jabref.gui.push.GuiPushToApplication; -import org.jabref.gui.push.GUIPushToApplications; +import org.jabref.gui.push.GuiPushToApplications; import org.jabref.gui.push.GuiPushToTeXstudio; import org.jabref.gui.texparser.CitationsDisplay; import org.jabref.gui.util.DirectoryDialogConfiguration; @@ -98,7 +98,7 @@ public void handleMouseClick(MouseEvent event, CitationsDisplay citationsDisplay if (event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2 && selectedItem != null) { String applicationName = preferences.getPushToApplicationPreferences() .getActiveApplicationName(); - GuiPushToApplication application = GUIPushToApplications.getGUIApplicationByName( + GuiPushToApplication application = GuiPushToApplications.getGUIApplicationByName( applicationName, dialogService, preferences.getPushToApplicationPreferences()) diff --git a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java index 4ddc5d47d19..d49da339863 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java @@ -44,7 +44,7 @@ import org.jabref.gui.keyboard.KeyBinding; import org.jabref.gui.libraryproperties.LibraryPropertiesAction; import org.jabref.gui.preferences.GuiPreferences; -import org.jabref.gui.push.GUIPushToApplicationCommand; +import org.jabref.gui.push.GuiPushToApplicationCommand; import org.jabref.gui.search.GlobalSearchBar; import org.jabref.gui.search.SearchType; import org.jabref.gui.sidepane.SidePane; @@ -104,7 +104,7 @@ private enum PanelMode { MAIN_TABLE, MAIN_TABLE_AND_ENTRY_EDITOR } private final TaskExecutor taskExecutor; private final JabRefFrameViewModel viewModel; - private final GUIPushToApplicationCommand GUIPushToApplicationCommand; + private final GuiPushToApplicationCommand GUIPushToApplicationCommand; private final SplitPane horizontalSplit = new SplitPane(); private final SidePane sidePane; private final SplitPane verticalSplit = new SplitPane(); @@ -188,7 +188,7 @@ public JabRefFrame(Stage mainStage, clipBoardManager, undoManager); - this.GUIPushToApplicationCommand = new GUIPushToApplicationCommand( + this.GUIPushToApplicationCommand = new GuiPushToApplicationCommand( stateManager, dialogService, this.preferences, diff --git a/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java b/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java index 84d6ccb3716..6b863191fad 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java @@ -62,7 +62,7 @@ import org.jabref.gui.preferences.ShowPreferencesAction; import org.jabref.gui.preview.CopyCitationAction; import org.jabref.gui.preview.PreviewControls; -import org.jabref.gui.push.GUIPushToApplicationCommand; +import org.jabref.gui.push.GuiPushToApplicationCommand; import org.jabref.gui.search.RebuildFulltextSearchIndexAction; import org.jabref.gui.shared.ConnectToSharedDatabaseCommand; import org.jabref.gui.shared.PullChangesFromSharedAction; @@ -98,7 +98,7 @@ public class MainMenu extends MenuBar { private final JabRefFrame frame; private final FileHistoryMenu fileHistoryMenu; private final SidePane sidePane; - private final GUIPushToApplicationCommand GUIPushToApplicationCommand; + private final GuiPushToApplicationCommand GUIPushToApplicationCommand; private final GuiPreferences preferences; private final StateManager stateManager; private final FileUpdateMonitor fileUpdateMonitor; @@ -115,7 +115,7 @@ public class MainMenu extends MenuBar { public MainMenu(JabRefFrame frame, FileHistoryMenu fileHistoryMenu, SidePane sidePane, - GUIPushToApplicationCommand GUIPushToApplicationCommand, + GuiPushToApplicationCommand GUIPushToApplicationCommand, GuiPreferences preferences, StateManager stateManager, FileUpdateMonitor fileUpdateMonitor, diff --git a/jabgui/src/main/java/org/jabref/gui/frame/MainToolBar.java b/jabgui/src/main/java/org/jabref/gui/frame/MainToolBar.java index 64c5ca02bbd..6d98ead44c2 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/MainToolBar.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/MainToolBar.java @@ -28,7 +28,7 @@ import org.jabref.gui.importer.NewEntryAction; import org.jabref.gui.importer.actions.OpenDatabaseAction; import org.jabref.gui.preferences.GuiPreferences; -import org.jabref.gui.push.GUIPushToApplicationCommand; +import org.jabref.gui.push.GuiPushToApplicationCommand; import org.jabref.gui.search.GlobalSearchBar; import org.jabref.gui.theme.ThemeManager; import org.jabref.gui.undo.CountingUndoManager; @@ -47,7 +47,7 @@ public class MainToolBar extends ToolBar { private final LibraryTabContainer frame; - private final GUIPushToApplicationCommand GUIPushToApplicationCommand; + private final GuiPushToApplicationCommand GUIPushToApplicationCommand; private final GlobalSearchBar globalSearchBar; private final DialogService dialogService; private final StateManager stateManager; @@ -64,7 +64,7 @@ public class MainToolBar extends ToolBar { private Subscription taskProgressSubscription; public MainToolBar(LibraryTabContainer tabContainer, - GUIPushToApplicationCommand GUIPushToApplicationCommand, + GuiPushToApplicationCommand GUIPushToApplicationCommand, GlobalSearchBar globalSearchBar, DialogService dialogService, StateManager stateManager, diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java index 59640ac5fda..cc00d452bdd 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/external/ExternalTabViewModel.java @@ -19,8 +19,8 @@ import org.jabref.gui.preferences.GuiPreferences; import org.jabref.gui.preferences.PreferenceTabViewModel; import org.jabref.gui.push.GuiPushToApplication; -import org.jabref.gui.push.GUIPushToApplicationSettings; -import org.jabref.gui.push.GUIPushToApplications; +import org.jabref.gui.push.GuiPushToApplicationSettings; +import org.jabref.gui.push.GuiPushToApplications; import org.jabref.gui.push.GuiPushToEmacs; import org.jabref.gui.util.FileDialogConfiguration; import org.jabref.logic.l10n.Localization; @@ -96,10 +96,10 @@ public void setValues() { autoOpenAttachedFoldersProperty.setValue(initialExternalApplicationPreferences.shouldAutoOpenEmailAttachmentsFolder()); pushToApplicationsListProperty.setValue( - FXCollections.observableArrayList(GUIPushToApplications.getAllGUIApplications(dialogService, preferences.getPushToApplicationPreferences()))); + FXCollections.observableArrayList(GuiPushToApplications.getAllGUIApplications(dialogService, preferences.getPushToApplicationPreferences()))); selectedPushToApplicationProperty.setValue( - GUIPushToApplications.getGUIApplicationByName(initialPushToApplicationPreferences.getActiveApplicationName(), dialogService, preferences.getPushToApplicationPreferences()) - .orElseGet(() -> new GuiPushToEmacs(dialogService, preferences.getPushToApplicationPreferences()))); + GuiPushToApplications.getGUIApplicationByName(initialPushToApplicationPreferences.getActiveApplicationName(), dialogService, preferences.getPushToApplicationPreferences()) + .orElseGet(() -> new GuiPushToEmacs(dialogService, preferences.getPushToApplicationPreferences()))); citeCommandProperty.setValue(initialPushToApplicationPreferences.getCiteCommand().toString()); @@ -160,7 +160,7 @@ public boolean validateSettings() { public void pushToApplicationSettings() { GuiPushToApplication selectedApplication = selectedPushToApplicationProperty.getValue(); - GUIPushToApplicationSettings settings = selectedApplication.getSettings(selectedApplication, dialogService, preferences.getFilePreferences(), workingPushToApplicationPreferences); + GuiPushToApplicationSettings settings = selectedApplication.getSettings(selectedApplication, dialogService, preferences.getFilePreferences(), workingPushToApplicationPreferences); DialogPane dialogPane = new DialogPane(); dialogPane.setContent(settings.getSettingsPane()); diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplication.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplication.java index 1242acd1782..172d847ae45 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplication.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplication.java @@ -25,11 +25,11 @@ default String getTooltip() { JabRefIcon getApplicationIcon(); default Action getAction() { - return new GUIPushToApplicationAction(getDisplayName(), getApplicationIcon()); + return new GuiPushToApplicationAction(getDisplayName(), getApplicationIcon()); } - default GUIPushToApplicationSettings getSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences pushToApplicationPreferences) { - return new GUIPushToApplicationSettings(application, dialogService, filePreferences, pushToApplicationPreferences); + default GuiPushToApplicationSettings getSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences pushToApplicationPreferences) { + return new GuiPushToApplicationSettings(application, dialogService, filePreferences, pushToApplicationPreferences); } void sendErrorNotification(String title, String message); diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationAction.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationAction.java similarity index 86% rename from jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationAction.java rename to jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationAction.java index 91ced472676..a815fb275c8 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationAction.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationAction.java @@ -7,12 +7,12 @@ import org.jabref.gui.keyboard.KeyBinding; import org.jabref.logic.l10n.Localization; -public class GUIPushToApplicationAction implements Action { +public class GuiPushToApplicationAction implements Action { private final String displayName; private JabRefIcon applicationIcon; - public GUIPushToApplicationAction(String displayName, JabRefIcon applicationIcon) { + public GuiPushToApplicationAction(String displayName, JabRefIcon applicationIcon) { this.displayName = displayName; this.applicationIcon = applicationIcon; } diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationCommand.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationCommand.java similarity index 96% rename from jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationCommand.java rename to jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationCommand.java index 1ce699c2a0a..ebf9aab8bff 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationCommand.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationCommand.java @@ -30,9 +30,9 @@ /** * An Action class representing the process of invoking a PushToApplication operation. */ -public class GUIPushToApplicationCommand extends SimpleCommand { +public class GuiPushToApplicationCommand extends SimpleCommand { - private static final Logger LOGGER = LoggerFactory.getLogger(GUIPushToApplicationCommand.class); + private static final Logger LOGGER = LoggerFactory.getLogger(GuiPushToApplicationCommand.class); private final StateManager stateManager; private final DialogService dialogService; @@ -43,7 +43,7 @@ public class GUIPushToApplicationCommand extends SimpleCommand { private GuiPushToApplication application; - public GUIPushToApplicationCommand(StateManager stateManager, DialogService dialogService, GuiPreferences preferences, TaskExecutor taskExecutor) { + public GuiPushToApplicationCommand(StateManager stateManager, DialogService dialogService, GuiPreferences preferences, TaskExecutor taskExecutor) { this.stateManager = stateManager; this.dialogService = dialogService; this.preferences = preferences; @@ -73,7 +73,7 @@ public void registerReconfigurable(Object node) { private void setApplication(String applicationName) { final ActionFactory factory = new ActionFactory(); - GuiPushToApplication application = GUIPushToApplications.getGUIApplicationByName( + GuiPushToApplication application = GuiPushToApplications.getGUIApplicationByName( applicationName, dialogService, preferences.getPushToApplicationPreferences()) diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationSettings.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationSettings.java similarity index 97% rename from jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationSettings.java rename to jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationSettings.java index bd5542cc303..3d49fe154eb 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplicationSettings.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationSettings.java @@ -20,7 +20,7 @@ import org.jabref.logic.push.PushToApplication; import org.jabref.logic.push.PushToApplicationPreferences; -public class GUIPushToApplicationSettings { +public class GuiPushToApplicationSettings { protected final Label commandLabel; protected final TextField path; @@ -28,7 +28,7 @@ public class GUIPushToApplicationSettings { protected final PushToApplicationPreferences preferences; protected final AbstractPushToApplication application; - public GUIPushToApplicationSettings(PushToApplication application, + public GuiPushToApplicationSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences preferences) { diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplications.java similarity index 95% rename from jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java rename to jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplications.java index 1e1a7f455ab..b1f29f5d8a1 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToApplications.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplications.java @@ -8,11 +8,11 @@ import org.jabref.gui.DialogService; import org.jabref.logic.push.PushToApplicationPreferences; -public class GUIPushToApplications { +public class GuiPushToApplications { private static final List APPLICATIONS = new ArrayList<>(); - private GUIPushToApplications() { + private GuiPushToApplications() { } public static List getAllGUIApplications(DialogService dialogService, PushToApplicationPreferences preferences) { diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToEmacs.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToEmacs.java index 75759c2c5d4..4e3291ef3b2 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToEmacs.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToEmacs.java @@ -21,8 +21,8 @@ public GuiPushToEmacs(DialogService dialogService, PushToApplicationPreferences } @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences pushToApplicationPreferences) { - return new GUIPushToEmacsSettings(application, dialogService, filePreferences, pushToApplicationPreferences); + public GuiPushToApplicationSettings getSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences pushToApplicationPreferences) { + return new GuiPushToEmacsSettings(application, dialogService, filePreferences, pushToApplicationPreferences); } @Override diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacsSettings.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToEmacsSettings.java similarity index 89% rename from jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacsSettings.java rename to jabgui/src/main/java/org/jabref/gui/push/GuiPushToEmacsSettings.java index 7f22369d3d8..22aa24e5692 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToEmacsSettings.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToEmacsSettings.java @@ -9,11 +9,11 @@ import org.jabref.logic.push.PushToApplication; import org.jabref.logic.push.PushToApplicationPreferences; -public class GUIPushToEmacsSettings extends GUIPushToApplicationSettings { +public class GuiPushToEmacsSettings extends GuiPushToApplicationSettings { private final TextField additionalParams = new TextField(); - public GUIPushToEmacsSettings(PushToApplication application, + public GuiPushToEmacsSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences preferences) { diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToLyx.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToLyx.java index 29d8bb5af8c..ef2694d5c42 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToLyx.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToLyx.java @@ -18,8 +18,8 @@ public GuiPushToLyx(DialogService dialogService, PushToApplicationPreferences pr } @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences pushToApplicationPreferences) { - return new GUIPushToLyxSettings(application, dialogService, filePreferences, pushToApplicationPreferences); + public GuiPushToApplicationSettings getSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences pushToApplicationPreferences) { + return new GuiPushToLyxSettings(application, dialogService, filePreferences, pushToApplicationPreferences); } @Override diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyxSettings.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToLyxSettings.java similarity index 83% rename from jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyxSettings.java rename to jabgui/src/main/java/org/jabref/gui/push/GuiPushToLyxSettings.java index 90b2d8e633f..737b7aa36e9 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToLyxSettings.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToLyxSettings.java @@ -6,9 +6,9 @@ import org.jabref.logic.push.PushToApplication; import org.jabref.logic.push.PushToApplicationPreferences; -public class GUIPushToLyxSettings extends GUIPushToApplicationSettings { +public class GuiPushToLyxSettings extends GuiPushToApplicationSettings { - public GUIPushToLyxSettings(PushToApplication application, + public GuiPushToLyxSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences preferences) { diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToVim.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToVim.java index c14c8e58c7d..e2d08ecad89 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToVim.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToVim.java @@ -18,8 +18,8 @@ public GuiPushToVim(DialogService dialogService, PushToApplicationPreferences pr } @Override - public GUIPushToApplicationSettings getSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences preferences) { - return new GUIPushToVimSettings(application, dialogService, filePreferences, preferences); + public GuiPushToApplicationSettings getSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences preferences) { + return new GuiPushToVimSettings(application, dialogService, filePreferences, preferences); } @Override diff --git a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVimSettings.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToVimSettings.java similarity index 88% rename from jabgui/src/main/java/org/jabref/gui/push/GUIPushToVimSettings.java rename to jabgui/src/main/java/org/jabref/gui/push/GuiPushToVimSettings.java index ac3dfef683c..7222115c516 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GUIPushToVimSettings.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToVimSettings.java @@ -9,11 +9,11 @@ import org.jabref.logic.push.PushToApplication; import org.jabref.logic.push.PushToApplicationPreferences; -public class GUIPushToVimSettings extends GUIPushToApplicationSettings { +public class GuiPushToVimSettings extends GuiPushToApplicationSettings { private final TextField vimServer = new TextField(); - public GUIPushToVimSettings(PushToApplication application, + public GuiPushToVimSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences preferences) { From 43c632f9d7a207f56eab4c350f59512593ec9d0f Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Wed, 9 Jul 2025 12:18:02 +0200 Subject: [PATCH 16/23] Streamline signature for pushEntries --- .../gui/push/GuiPushToApplicationCommand.java | 25 +-------------- .../org/jabref/gui/push/PushToEmacsTest.java | 8 ++++- .../jabref/gui/push/PushToTeXworksTest.java | 4 ++- .../logic/push/AbstractPushToApplication.java | 31 ++++++++++++++++--- .../jabref/logic/push/PushToApplication.java | 3 +- .../org/jabref/logic/push/PushToEmacs.java | 9 +++--- .../java/org/jabref/logic/push/PushToLyx.java | 4 +-- .../jabref/logic/push/PushToSublimeText.java | 4 +-- .../org/jabref/logic/push/PushToTexShop.java | 4 +-- .../java/org/jabref/logic/push/PushToVim.java | 7 +++-- .../jabref/http/server/cayw/CAYWResource.java | 7 +---- 11 files changed, 54 insertions(+), 52 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationCommand.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationCommand.java index ebf9aab8bff..5523e11cc16 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationCommand.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationCommand.java @@ -3,7 +3,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; -import java.util.Optional; import javafx.scene.control.ButtonBase; import javafx.scene.control.MenuItem; @@ -19,7 +18,6 @@ import org.jabref.logic.l10n.Localization; import org.jabref.logic.util.BackgroundTask; import org.jabref.logic.util.TaskExecutor; -import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.jabref.model.strings.StringUtil; @@ -95,26 +93,6 @@ public Action getAction() { return application.getAction(); } - private static String getKeyString(List entries, String delimiter) { - StringBuilder result = new StringBuilder(); - Optional citeKey; - boolean first = true; - for (BibEntry bes : entries) { - citeKey = bes.getCitationKey(); - if (citeKey.isEmpty() || citeKey.get().isEmpty()) { - LOGGER.warn("Should never occur, because we made sure that all entries have keys"); - continue; - } - if (first) { - result.append(citeKey.get()); - first = false; - } else { - result.append(delimiter).append(citeKey.get()); - } - } - return result.toString(); - } - @Override public void execute() { // If required, check that all entries have citation keys defined: @@ -137,7 +115,6 @@ public void execute() { } private void pushEntries() { - BibDatabaseContext database = stateManager.getActiveDatabase().orElseThrow(() -> new NullPointerException("Database null")); - application.pushEntries(database, stateManager.getSelectedEntries(), getKeyString(stateManager.getSelectedEntries(), application.getDelimiter())); + application.pushEntries(stateManager.getSelectedEntries()); } } diff --git a/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java b/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java index cef5bc59be8..365eead1af4 100644 --- a/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java +++ b/jabgui/src/test/java/org/jabref/gui/push/PushToEmacsTest.java @@ -1,5 +1,6 @@ package org.jabref.gui.push; +import java.util.List; import java.util.Map; import javafx.beans.property.SimpleMapProperty; @@ -9,6 +10,7 @@ import org.jabref.gui.DialogService; import org.jabref.logic.os.OS; import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.model.entry.BibEntry; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; @@ -42,6 +44,10 @@ void setup() { @Test void pushEntries() { - pushToEmacs.pushEntries(null, null, "key1,key2"); + pushToEmacs.pushEntries( + List.of( + new BibEntry().withCitationKey("key1"), + new BibEntry().withCitationKey("key2")) + ); } } diff --git a/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java b/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java index 37e6796eaaf..836adc2e30c 100644 --- a/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java +++ b/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java @@ -1,5 +1,6 @@ package org.jabref.gui.push; +import java.util.List; import java.util.Map; import javafx.beans.property.SimpleMapProperty; @@ -9,6 +10,7 @@ import org.jabref.gui.DialogService; import org.jabref.logic.push.CitationCommandString; import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.model.entry.BibEntry; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -80,7 +82,7 @@ void pushEntries() { String testKey = "TestKey"; String[] expectedCommand = new String[] {TEXWORKS_CLIENT_PATH, "--insert-text", testKey}; - pushToTeXworks.pushEntries(null, null, testKey, processBuilder); + pushToTeXworks.pushEntries(List.of(new BibEntry().withCitationKey(testKey)), processBuilder); verify(processBuilder).command(expectedCommand); } diff --git a/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java b/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java index 569fbb790bc..55ef3526fe1 100644 --- a/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java +++ b/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java @@ -3,11 +3,11 @@ import java.io.IOException; import java.nio.file.Path; import java.util.List; +import java.util.Optional; import org.jabref.logic.l10n.Localization; import org.jabref.logic.os.OS; import org.jabref.logic.util.NotificationService; -import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.jabref.model.strings.StringUtil; @@ -35,13 +35,32 @@ public AbstractPushToApplication(NotificationService notificationService, PushTo this.preferences = preferences; } - @Override - public void pushEntries(BibDatabaseContext database, List entries, String keyString) { - pushEntries(database, entries, keyString, new ProcessBuilder()); + protected String getKeyString(List entries, String delimiter) { + StringBuilder result = new StringBuilder(); + Optional citeKey; + boolean first = true; + for (BibEntry bes : entries) { + citeKey = bes.getCitationKey(); + if (citeKey.isEmpty() || citeKey.get().isEmpty()) { + LOGGER.warn("Should never occur, because we made sure that all entries have keys"); + continue; + } + if (first) { + result.append(citeKey.get()); + first = false; + } else { + result.append(delimiter).append(citeKey.get()); + } + } + return result.toString(); + } + + public void pushEntries(List entries) { + pushEntries(entries, new ProcessBuilder()); } @VisibleForTesting - public void pushEntries(BibDatabaseContext database, List entries, String keyString, ProcessBuilder processBuilder) { + public void pushEntries(List entries, ProcessBuilder processBuilder) { couldNotPush = false; couldNotCall = false; notDefined = false; @@ -54,6 +73,8 @@ public void pushEntries(BibDatabaseContext database, List entries, Str return; } + String keyString = this.getKeyString(entries, getDelimiter()); + // Execute command try { if (OS.OS_X) { diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToApplication.java b/jablib/src/main/java/org/jabref/logic/push/PushToApplication.java index d217eaa9b80..aa577e732fb 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToApplication.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToApplication.java @@ -3,7 +3,6 @@ import java.nio.file.Path; import java.util.List; -import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; /** @@ -23,7 +22,7 @@ public interface PushToApplication { * The actual operation. This method will not be called on the event dispatch thread, so it should not do GUI * operations without utilizing invokeLater(). */ - void pushEntries(BibDatabaseContext database, List entries, String keyString); + void pushEntries(List entries); /** * Reporting etc., this method is called on the event dispatch thread after pushEntries() returns. diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java b/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java index 05eb69aa4ee..82af5ef24a0 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java @@ -10,7 +10,6 @@ import org.jabref.logic.os.OS; import org.jabref.logic.util.HeadlessExecutorService; import org.jabref.logic.util.NotificationService; -import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.slf4j.Logger; @@ -35,7 +34,7 @@ public String getDisplayName() { } @Override - public void pushEntries(BibDatabaseContext database, List entries, String keys) { + public void pushEntries(List entries) { couldNotPush = false; couldNotCall = false; notDefined = false; @@ -49,6 +48,8 @@ public void pushEntries(BibDatabaseContext database, List entries, Str commandPath = preferences.getCommandPaths().get(this.getDisplayName()); + String keyString = getKeyString(entries, getDelimiter()); + String[] addParams = preferences.getEmacsArguments().split(" "); try { String[] com = new String[addParams.length + 2]; @@ -67,7 +68,7 @@ public void pushEntries(BibDatabaseContext database, List entries, Str com[com.length - 1] = prefix.concat("\"" + getCitePrefix().replace("\\", "\\\\") - + keys + + keyString + getCiteSuffix().replace("\\", "\\\\") + "\"").concat(suffix) .replace("\"", "\\\""); @@ -78,7 +79,7 @@ public void pushEntries(BibDatabaseContext database, List entries, Str // so emacs receives: (insert "\cite{Blah2001}") com[com.length - 1] = prefix.concat("\"" + getCitePrefix().replace("\\", "\\\\") - + keys + + keyString + getCiteSuffix().replace("\\", "\\\\") + "\"").concat(suffix); } diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java b/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java index e1cb5c551e0..f2065814ff9 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java @@ -10,7 +10,6 @@ import org.jabref.logic.l10n.Localization; import org.jabref.logic.util.HeadlessExecutorService; import org.jabref.logic.util.NotificationService; -import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.slf4j.Logger; @@ -45,7 +44,7 @@ public void onOperationCompleted() { } @Override - public void pushEntries(BibDatabaseContext database, final List entries, final String keyString) { + public void pushEntries(List entries) { couldNotPush = false; couldNotCall = false; notDefined = false; @@ -70,6 +69,7 @@ public void pushEntries(BibDatabaseContext database, final List entrie final Path lyxPipe = lp; HeadlessExecutorService.INSTANCE.executeAndWait(() -> { + String keyString = this.getKeyString(entries, getDelimiter()); try (BufferedWriter lyxOut = Files.newBufferedWriter(lyxPipe, StandardCharsets.UTF_8)) { String citeStr = "LYXCMD:sampleclient:citation-insert:" + keyString; lyxOut.write(citeStr + "\n"); diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java b/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java index a472a5e989d..29082b5ef88 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java @@ -9,7 +9,6 @@ import org.jabref.logic.util.HeadlessExecutorService; import org.jabref.logic.util.NotificationService; import org.jabref.logic.util.StreamGobbler; -import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.jabref.model.strings.StringUtil; @@ -32,7 +31,7 @@ public String getDisplayName() { } @Override - public void pushEntries(BibDatabaseContext database, List entries, String keyString) { + public void pushEntries(List entries) { couldNotPush = false; couldNotCall = false; notDefined = false; @@ -45,6 +44,7 @@ public void pushEntries(BibDatabaseContext database, List entries, Str return; } try { + String keyString = this.getKeyString(entries, getDelimiter()); LOGGER.debug("Sublime string: {}", String.join(" ", getCommandLine(keyString))); ProcessBuilder processBuilder = new ProcessBuilder(getCommandLine(keyString)); processBuilder.inheritIO(); diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java b/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java index 0397b930605..cbe3288ff59 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java @@ -8,7 +8,6 @@ import org.jabref.logic.util.HeadlessExecutorService; import org.jabref.logic.util.NotificationService; import org.jabref.logic.util.StreamGobbler; -import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.slf4j.Logger; @@ -30,7 +29,7 @@ public String getDisplayName() { } @Override - public void pushEntries(BibDatabaseContext database, List entries, String keyString) { + public void pushEntries(List entries) { couldNotPush = false; couldNotCall = false; notDefined = false; @@ -38,6 +37,7 @@ public void pushEntries(BibDatabaseContext database, List entries, Str commandPath = preferences.getCommandPaths().get(this.getDisplayName()); try { + String keyString = this.getKeyString(entries, getDelimiter()); LOGGER.debug("TexShop string: {}", String.join(" ", getCommandLine(keyString))); ProcessBuilder processBuilder = new ProcessBuilder(getCommandLine(keyString)); processBuilder.inheritIO(); diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToVim.java b/jablib/src/main/java/org/jabref/logic/push/PushToVim.java index bb1dc770012..eeece8a3779 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToVim.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToVim.java @@ -10,7 +10,6 @@ import org.jabref.logic.os.OS; import org.jabref.logic.util.HeadlessExecutorService; import org.jabref.logic.util.NotificationService; -import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.slf4j.Logger; @@ -32,15 +31,17 @@ public String getDisplayName() { } @Override - public void pushEntries(BibDatabaseContext database, List entries, String keys) { + public void pushEntries(List entries) { if (!determineCommandPath()) { return; } + String keyString = this.getKeyString(entries, getDelimiter()); + try { String[] com = new String[]{commandPath, "--servername", preferences.getVimServer(), "--remote-send", - "a" + getCitePrefix() + keys + getCiteSuffix()}; + "a" + getCitePrefix() + keyString + getCiteSuffix()}; LOGGER.atDebug() .setMessage("Executing command {}") diff --git a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java index 8f181a4cc22..ae620a1d189 100644 --- a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java +++ b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java @@ -15,7 +15,6 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; -import java.util.stream.Collectors; import javafx.application.Platform; @@ -125,12 +124,8 @@ public Response getCitation( // Push to TexStudio parameter handling if (queryParams.isTexstudio()) { CitationCommandString citationCmd = new CitationCommandString("\\".concat(queryParams.getCommand()).concat("{"), ",", "}"); - String keyString = searchResults.stream() - .map(caywEntry -> caywEntry.bibEntry().getCitationKey().orElse("")) - .collect(Collectors.joining(",")); - PushToApplications.getApplicationByName("TeXstudio", LOGGER::info, preferences.getPushToApplicationPreferences().withCitationCommand(citationCmd)) - .ifPresent(application -> application.pushEntries(databaseContext, searchResults.stream().map(CAYWEntry::bibEntry).toList(), keyString)); + .ifPresent(application -> application.pushEntries(searchResults.stream().map(CAYWEntry::bibEntry).toList())); } return Response.ok(formattedResponse).type(formatter.getMediaType()).build(); From ec2bc1ee7e81739e978b4cc6491f16162645ee84 Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Wed, 9 Jul 2025 14:18:51 +0200 Subject: [PATCH 17/23] introduce Applications Enum and change CLI PushToApplications factory. --- .../gui/push/GuiPushToApplications.java | 4 +- .../preferences/JabRefCliPreferences.java | 41 +++++++------- .../org/jabref/logic/push/Applications.java | 51 +++++++++++++++++ .../jabref/logic/push/PushToApplications.java | 55 +++++-------------- .../org/jabref/logic/push/PushToEmacs.java | 4 +- .../java/org/jabref/logic/push/PushToLyx.java | 4 +- .../jabref/logic/push/PushToSublimeText.java | 4 +- .../jabref/logic/push/PushToTeXstudio.java | 4 +- .../org/jabref/logic/push/PushToTeXworks.java | 4 +- .../org/jabref/logic/push/PushToTexShop.java | 4 +- .../org/jabref/logic/push/PushToTexmaker.java | 4 +- .../org/jabref/logic/push/PushToVScode.java | 4 +- .../java/org/jabref/logic/push/PushToVim.java | 4 +- .../org/jabref/logic/push/PushToWinEdt.java | 4 +- .../jabref/http/server/cayw/CAYWResource.java | 2 +- 15 files changed, 110 insertions(+), 83 deletions(-) create mode 100644 jablib/src/main/java/org/jabref/logic/push/Applications.java diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplications.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplications.java index b1f29f5d8a1..0abd715ffa9 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplications.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplications.java @@ -32,12 +32,12 @@ public static List getAllGUIApplications(DialogService dia new GuiPushToTexShop(dialogService, preferences), new GuiPushToVScode(dialogService, preferences))); - return APPLICATIONS; + return Collections.unmodifiableList(APPLICATIONS); } public static Optional getGUIApplicationByName(String applicationName, DialogService dialogService, PushToApplicationPreferences preferences) { return getAllGUIApplications(dialogService, preferences).stream() - .filter(application -> application.getDisplayName().equals(applicationName)) + .filter(application -> application.getDisplayName().equalsIgnoreCase(applicationName)) .findAny(); } } diff --git a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java index eccd4751654..3a8d1d04a6b 100644 --- a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java @@ -82,9 +82,9 @@ import org.jabref.logic.os.OS; import org.jabref.logic.protectedterms.ProtectedTermsLoader; import org.jabref.logic.protectedterms.ProtectedTermsPreferences; +import org.jabref.logic.push.Applications; import org.jabref.logic.push.CitationCommandString; import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.push.PushToApplications; import org.jabref.logic.remote.RemotePreferences; import org.jabref.logic.search.SearchPreferences; import org.jabref.logic.shared.prefs.SharedDatabasePreferences; @@ -793,15 +793,15 @@ public PushToApplicationPreferences getPushToApplicationPreferences() { Map applicationCommands = new HashMap<>(); // getEmptyIsDefault is used to ensure that an installation of a tool leads to the new path (instead of leaving the empty one) // Reason: empty string is returned by org.jabref.gui.desktop.os.Windows.detectProgramPath if program is not found. That path is stored in the preferences. - applicationCommands.put(PushToApplications.EMACS, getEmptyIsDefault(PUSH_EMACS_PATH)); - applicationCommands.put(PushToApplications.LYX, getEmptyIsDefault(PUSH_LYXPIPE)); - applicationCommands.put(PushToApplications.TEXMAKER, getEmptyIsDefault(PUSH_TEXMAKER_PATH)); - applicationCommands.put(PushToApplications.TEXSTUDIO, getEmptyIsDefault(PUSH_TEXSTUDIO_PATH)); - applicationCommands.put(PushToApplications.TEXWORKS, getEmptyIsDefault(PUSH_TEXWORKS_PATH)); - applicationCommands.put(PushToApplications.VIM, getEmptyIsDefault(PUSH_VIM)); - applicationCommands.put(PushToApplications.WIN_EDT, getEmptyIsDefault(PUSH_WINEDT_PATH)); - applicationCommands.put(PushToApplications.SUBLIME_TEXT, getEmptyIsDefault(PUSH_SUBLIME_TEXT_PATH)); - applicationCommands.put(PushToApplications.VSCODE, getEmptyIsDefault(PUSH_VSCODE_PATH)); + applicationCommands.put(Applications.EMACS.getDisplayName(), getEmptyIsDefault(PUSH_EMACS_PATH)); + applicationCommands.put(Applications.LYX.getDisplayName(), getEmptyIsDefault(PUSH_LYXPIPE)); + applicationCommands.put(Applications.TEXMAKER.getDisplayName(), getEmptyIsDefault(PUSH_TEXMAKER_PATH)); + applicationCommands.put(Applications.TEXSTUDIO.getDisplayName(), getEmptyIsDefault(PUSH_TEXSTUDIO_PATH)); + applicationCommands.put(Applications.TEXWORKS.getDisplayName(), getEmptyIsDefault(PUSH_TEXWORKS_PATH)); + applicationCommands.put(Applications.VIM.getDisplayName(), getEmptyIsDefault(PUSH_VIM)); + applicationCommands.put(Applications.WIN_EDT.getDisplayName(), getEmptyIsDefault(PUSH_WINEDT_PATH)); + applicationCommands.put(Applications.SUBLIME_TEXT.getDisplayName(), getEmptyIsDefault(PUSH_SUBLIME_TEXT_PATH)); + applicationCommands.put(Applications.VSCODE.getDisplayName(), getEmptyIsDefault(PUSH_VSCODE_PATH)); pushToApplicationPreferences = new PushToApplicationPreferences( get(PUSH_TO_APPLICATION), @@ -824,24 +824,25 @@ public PushToApplicationPreferences getPushToApplicationPreferences() { private void storePushToApplicationPath(Map commandPair) { commandPair.forEach((key, value) -> { - switch (key) { - case PushToApplications.EMACS -> + // is only for the preferences and therefore is okay to throw NoSuchElementException + switch (Applications.getApplicationByDisplayName(key).get()) { + case Applications.EMACS -> put(PUSH_EMACS_PATH, value); - case PushToApplications.LYX -> + case Applications.LYX -> put(PUSH_LYXPIPE, value); - case PushToApplications.TEXMAKER -> + case Applications.TEXMAKER -> put(PUSH_TEXMAKER_PATH, value); - case PushToApplications.TEXSTUDIO -> + case Applications.TEXSTUDIO -> put(PUSH_TEXSTUDIO_PATH, value); - case PushToApplications.TEXWORKS -> + case Applications.TEXWORKS -> put(PUSH_TEXWORKS_PATH, value); - case PushToApplications.VIM -> + case Applications.VIM -> put(PUSH_VIM, value); - case PushToApplications.WIN_EDT -> + case Applications.WIN_EDT -> put(PUSH_WINEDT_PATH, value); - case PushToApplications.SUBLIME_TEXT -> + case Applications.SUBLIME_TEXT -> put(PUSH_SUBLIME_TEXT_PATH, value); - case PushToApplications.VSCODE -> + case Applications.VSCODE -> put(PUSH_VSCODE_PATH, value); } }); diff --git a/jablib/src/main/java/org/jabref/logic/push/Applications.java b/jablib/src/main/java/org/jabref/logic/push/Applications.java new file mode 100644 index 00000000000..c5881973253 --- /dev/null +++ b/jablib/src/main/java/org/jabref/logic/push/Applications.java @@ -0,0 +1,51 @@ +package org.jabref.logic.push; + +import java.util.Optional; + +public enum Applications { + + EMACS("emacs", "Emacs"), + LYX("lyx", "LyX/Kile"), + TEXMAKER("texmaker", "Texmaker"), + TEXSTUDIO("texstudio", "TeXstudio"), + TEXWORKS("texworks", "TeXworks"), + VIM("vim", "Vim"), + WIN_EDT("winedt", "WinEdt"), + SUBLIME_TEXT("sublime", "Sublime Text"), + TEXSHOP("texshop", "TeXShop"), + VSCODE("vscode", "VScode"); + + private final String id; + private final String displayName; + + Applications(String id, String displayName) { + this.id = id; + this.displayName = displayName; + } + + public static Optional getApplicationByDisplayName(String key) { + for (Applications application : Applications.values()) { + if (application.getDisplayName().equalsIgnoreCase(key)) { + return Optional.of(application); + } + } + return Optional.empty(); + } + + public static Optional getApplicationById(String key) { + for (Applications application : Applications.values()) { + if (application.getId().equalsIgnoreCase(key)) { + return Optional.of(application); + } + } + return Optional.empty(); + } + + public String getId() { + return id; + } + + public String getDisplayName() { + return displayName; + } +} diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java b/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java index c0540c54f34..94b8b7ef517 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java @@ -1,53 +1,28 @@ package org.jabref.logic.push; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; import java.util.Optional; import org.jabref.logic.util.NotificationService; public class PushToApplications { - public static final String EMACS = "Emacs"; - public static final String LYX = "LyX/Kile"; - public static final String TEXMAKER = "Texmaker"; - public static final String TEXSTUDIO = "TeXstudio"; - public static final String TEXWORKS = "TeXworks"; - public static final String VIM = "Vim"; - public static final String WIN_EDT = "WinEdt"; - public static final String SUBLIME_TEXT = "Sublime Text"; - public static final String TEXSHOP = "TeXShop"; - public static final String VSCODE = "VScode"; - - private static final List APPLICATIONS = new ArrayList<>(); - private PushToApplications() { } - public static List getAllApplications(NotificationService notificationService, PushToApplicationPreferences preferences) { - if (!APPLICATIONS.isEmpty()) { - return Collections.unmodifiableList(APPLICATIONS); - } - - APPLICATIONS.addAll(List.of( - new PushToEmacs(notificationService, preferences), - new PushToLyx(notificationService, preferences), - new PushToSublimeText(notificationService, preferences), - new PushToTexmaker(notificationService, preferences), - new PushToTeXstudio(notificationService, preferences), - new PushToTeXworks(notificationService, preferences), - new PushToVim(notificationService, preferences), - new PushToWinEdt(notificationService, preferences), - new PushToTexShop(notificationService, preferences), - new PushToVScode(notificationService, preferences))); - - return APPLICATIONS; - } - - public static Optional getApplicationByName(String applicationName, NotificationService notificationService, PushToApplicationPreferences preferences) { - return getAllApplications(notificationService, preferences).stream() - .filter(application -> application.getDisplayName().equals(applicationName)) - .findAny(); + /// @param applicationId Used by the CLI to select the application to run. Example: `texstudio` + public static Optional getApplicationById(String applicationId, NotificationService notificationService, PushToApplicationPreferences preferences) { + return Applications.getApplicationById(applicationId) + .map(application -> switch (application) { + case EMACS -> new PushToEmacs(notificationService, preferences); + case LYX -> new PushToLyx(notificationService, preferences); + case SUBLIME_TEXT -> new PushToSublimeText(notificationService, preferences); + case TEXMAKER -> new PushToTexmaker(notificationService, preferences); + case TEXSTUDIO -> new PushToTeXstudio(notificationService, preferences); + case TEXWORKS -> new PushToTeXworks(notificationService, preferences); + case VIM -> new PushToVim(notificationService, preferences); + case WIN_EDT -> new PushToWinEdt(notificationService, preferences); + case TEXSHOP -> new PushToTexShop(notificationService, preferences); + case VSCODE -> new PushToVScode(notificationService, preferences); + }); } } diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java b/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java index 82af5ef24a0..9073d687ecd 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java @@ -17,7 +17,7 @@ public class PushToEmacs extends AbstractPushToApplication { - public static final String NAME = PushToApplications.EMACS; + public static final Applications APPLICATION = Applications.EMACS; private static final Logger LOGGER = LoggerFactory.getLogger(PushToEmacs.class); @@ -30,7 +30,7 @@ public PushToEmacs(NotificationService notificationService, PushToApplicationPre @Override public String getDisplayName() { - return NAME; + return APPLICATION.getDisplayName(); } @Override diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java b/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java index f2065814ff9..3c07e786d7c 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java @@ -17,7 +17,7 @@ public class PushToLyx extends AbstractPushToApplication { - public static final String NAME = PushToApplications.LYX; + public static final Applications APPLICATION = Applications.LYX; private static final Logger LOGGER = LoggerFactory.getLogger(PushToLyx.class); @@ -27,7 +27,7 @@ public PushToLyx(NotificationService dialogService, PushToApplicationPreferences @Override public String getDisplayName() { - return NAME; + return APPLICATION.getDisplayName(); } @Override diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java b/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java index 29082b5ef88..74cae24e16b 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java @@ -17,7 +17,7 @@ public class PushToSublimeText extends AbstractPushToApplication { - public static final String NAME = PushToApplications.SUBLIME_TEXT; + public static final Applications APPLICATION = Applications.SUBLIME_TEXT; private static final Logger LOGGER = LoggerFactory.getLogger(PushToSublimeText.class); @@ -27,7 +27,7 @@ public PushToSublimeText(NotificationService notificationService, PushToApplicat @Override public String getDisplayName() { - return NAME; + return APPLICATION.getDisplayName(); } @Override diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToTeXstudio.java b/jablib/src/main/java/org/jabref/logic/push/PushToTeXstudio.java index 5bc6a0c4018..63778c0ed68 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToTeXstudio.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTeXstudio.java @@ -6,7 +6,7 @@ public class PushToTeXstudio extends AbstractPushToApplication { - public static final String NAME = PushToApplications.TEXSTUDIO; + public static final Applications APPLICATION = Applications.TEXSTUDIO; public PushToTeXstudio(NotificationService dialogService, PushToApplicationPreferences preferences) { super(dialogService, preferences); @@ -14,7 +14,7 @@ public PushToTeXstudio(NotificationService dialogService, PushToApplicationPrefe @Override public String getDisplayName() { - return NAME; + return APPLICATION.getDisplayName(); } @Override diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java b/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java index c0476b03546..aac600137e5 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java @@ -6,7 +6,7 @@ public class PushToTeXworks extends AbstractPushToApplication { - public static final String NAME = PushToApplications.TEXWORKS; + public static final Applications APPLICATION = Applications.TEXWORKS; /** * Constructs a new {@code PushToTeXworks} instance. @@ -20,7 +20,7 @@ public PushToTeXworks(NotificationService notificationService, PushToApplication @Override public String getDisplayName() { - return NAME; + return APPLICATION.getDisplayName(); } @Override diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java b/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java index cbe3288ff59..704dac26567 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java @@ -15,7 +15,7 @@ public class PushToTexShop extends AbstractPushToApplication { - public static final String NAME = PushToApplications.TEXSHOP; + public static final Applications APPLICATION = Applications.TEXSHOP; private static final Logger LOGGER = LoggerFactory.getLogger(PushToTexShop.class); @@ -25,7 +25,7 @@ public PushToTexShop(NotificationService notificationService, PushToApplicationP @Override public String getDisplayName() { - return NAME; + return APPLICATION.getDisplayName(); } @Override diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToTexmaker.java b/jablib/src/main/java/org/jabref/logic/push/PushToTexmaker.java index e837f598503..383c9e8e423 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToTexmaker.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTexmaker.java @@ -9,7 +9,7 @@ */ public class PushToTexmaker extends AbstractPushToApplication { - public static final String NAME = "Texmaker"; + public static final Applications APPLICATION = Applications.TEXMAKER; public PushToTexmaker(NotificationService dialogService, PushToApplicationPreferences preferences) { super(dialogService, preferences); @@ -17,7 +17,7 @@ public PushToTexmaker(NotificationService dialogService, PushToApplicationPrefer @Override public String getDisplayName() { - return NAME; + return APPLICATION.getDisplayName(); } @Override diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToVScode.java b/jablib/src/main/java/org/jabref/logic/push/PushToVScode.java index 140e9b1b917..bf564d1c1b2 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToVScode.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToVScode.java @@ -6,7 +6,7 @@ public class PushToVScode extends AbstractPushToApplication { - public static final String NAME = PushToApplications.VSCODE; + public static final Applications APPLICATION = Applications.VSCODE; public PushToVScode(NotificationService notificationService, PushToApplicationPreferences preferences) { super(notificationService, preferences); @@ -14,7 +14,7 @@ public PushToVScode(NotificationService notificationService, PushToApplicationPr @Override public String getDisplayName() { - return NAME; + return APPLICATION.getDisplayName(); } @Override diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToVim.java b/jablib/src/main/java/org/jabref/logic/push/PushToVim.java index eeece8a3779..665c117992a 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToVim.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToVim.java @@ -17,7 +17,7 @@ public class PushToVim extends AbstractPushToApplication { - public static final String NAME = PushToApplications.VIM; + public static final Applications APPLICATION = Applications.VIM; private static final Logger LOGGER = LoggerFactory.getLogger(PushToVim.class); @@ -27,7 +27,7 @@ public PushToVim(NotificationService notificationService, PushToApplicationPrefe @Override public String getDisplayName() { - return NAME; + return APPLICATION.getDisplayName(); } @Override diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java b/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java index e1687f1b65a..7f0f46a28eb 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java @@ -6,7 +6,7 @@ public class PushToWinEdt extends AbstractPushToApplication { - public static final String NAME = PushToApplications.WIN_EDT; + public static final Applications APPLICATION = Applications.WIN_EDT; public PushToWinEdt(NotificationService notificationService, PushToApplicationPreferences preferences) { super(notificationService, preferences); @@ -14,7 +14,7 @@ public PushToWinEdt(NotificationService notificationService, PushToApplicationPr @Override public String getDisplayName() { - return NAME; + return APPLICATION.getDisplayName(); } @Override diff --git a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java index ae620a1d189..2f577d0db19 100644 --- a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java +++ b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java @@ -124,7 +124,7 @@ public Response getCitation( // Push to TexStudio parameter handling if (queryParams.isTexstudio()) { CitationCommandString citationCmd = new CitationCommandString("\\".concat(queryParams.getCommand()).concat("{"), ",", "}"); - PushToApplications.getApplicationByName("TeXstudio", LOGGER::info, preferences.getPushToApplicationPreferences().withCitationCommand(citationCmd)) + PushToApplications.getApplicationById("TeXstudio", LOGGER::info, preferences.getPushToApplicationPreferences().withCitationCommand(citationCmd)) .ifPresent(application -> application.pushEntries(searchResults.stream().map(CAYWEntry::bibEntry).toList())); } From b78f9b8a103e2ec3241f2194652d5d8e48be78e8 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Wed, 9 Jul 2025 14:19:33 +0200 Subject: [PATCH 18/23] Add doc --- .../src/main/java/org/jabref/gui/push/GuiPushToApplications.java | 1 + 1 file changed, 1 insertion(+) diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplications.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplications.java index 0abd715ffa9..8cd5668f394 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplications.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplications.java @@ -35,6 +35,7 @@ public static List getAllGUIApplications(DialogService dia return Collections.unmodifiableList(APPLICATIONS); } + /// In case object "preferences" changes for itself, that update won't be propagated. Does not harm as the current callers do not change that reference itself. public static Optional getGUIApplicationByName(String applicationName, DialogService dialogService, PushToApplicationPreferences preferences) { return getAllGUIApplications(dialogService, preferences).stream() .filter(application -> application.getDisplayName().equalsIgnoreCase(applicationName)) From 12d89f04bff0bb68e8bbfc5dc54344f865eb4ea0 Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Wed, 9 Jul 2025 16:23:23 +0200 Subject: [PATCH 19/23] refactor --- .../jabref/gui/push/GuiPushToApplication.java | 2 - .../gui/push/GuiPushToApplicationAction.java | 2 +- .../org/jabref/gui/push/GuiPushToEmacs.java | 3 - .../preferences/JabRefCliPreferences.java | 40 ++++++------- .../logic/push/AbstractPushToApplication.java | 24 +++----- ...pplications.java => PushApplications.java} | 12 ++-- .../jabref/logic/push/PushToApplication.java | 5 ++ .../jabref/logic/push/PushToApplications.java | 4 +- .../org/jabref/logic/push/PushToEmacs.java | 2 +- .../java/org/jabref/logic/push/PushToLyx.java | 2 +- .../jabref/logic/push/PushToSublimeText.java | 2 +- .../jabref/logic/push/PushToTeXstudio.java | 2 +- .../org/jabref/logic/push/PushToTeXworks.java | 2 +- .../org/jabref/logic/push/PushToTexShop.java | 2 +- .../org/jabref/logic/push/PushToTexmaker.java | 2 +- .../org/jabref/logic/push/PushToVScode.java | 2 +- .../java/org/jabref/logic/push/PushToVim.java | 2 +- .../org/jabref/logic/push/PushToWinEdt.java | 2 +- .../http/server/cayw/CAYWQueryParams.java | 7 +++ .../jabref/http/server/cayw/CAYWResource.java | 60 ++++++++++--------- 20 files changed, 91 insertions(+), 88 deletions(-) rename jablib/src/main/java/org/jabref/logic/push/{Applications.java => PushApplications.java} (72%) diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplication.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplication.java index 172d847ae45..d776f344f57 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplication.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplication.java @@ -31,6 +31,4 @@ default Action getAction() { default GuiPushToApplicationSettings getSettings(PushToApplication application, DialogService dialogService, FilePreferences filePreferences, PushToApplicationPreferences pushToApplicationPreferences) { return new GuiPushToApplicationSettings(application, dialogService, filePreferences, pushToApplicationPreferences); } - - void sendErrorNotification(String title, String message); } diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationAction.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationAction.java index a815fb275c8..8e574e3c1bb 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationAction.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToApplicationAction.java @@ -10,7 +10,7 @@ public class GuiPushToApplicationAction implements Action { private final String displayName; - private JabRefIcon applicationIcon; + private final JabRefIcon applicationIcon; public GuiPushToApplicationAction(String displayName, JabRefIcon applicationIcon) { this.displayName = displayName; diff --git a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToEmacs.java b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToEmacs.java index 4e3291ef3b2..70cc3dc93ca 100644 --- a/jabgui/src/main/java/org/jabref/gui/push/GuiPushToEmacs.java +++ b/jabgui/src/main/java/org/jabref/gui/push/GuiPushToEmacs.java @@ -12,9 +12,6 @@ public class GuiPushToEmacs extends PushToEmacs implements GuiPushToApplication private final DialogService dialogService; - /** - * @param preferences getPushToApplicationPreferences(), getExternalApplicationsPreferences(), and getFilePreferences() are used - */ public GuiPushToEmacs(DialogService dialogService, PushToApplicationPreferences preferences) { super(dialogService, preferences); this.dialogService = dialogService; diff --git a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java index 3a8d1d04a6b..042e6ae42b0 100644 --- a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java @@ -82,7 +82,7 @@ import org.jabref.logic.os.OS; import org.jabref.logic.protectedterms.ProtectedTermsLoader; import org.jabref.logic.protectedterms.ProtectedTermsPreferences; -import org.jabref.logic.push.Applications; +import org.jabref.logic.push.PushApplications; import org.jabref.logic.push.CitationCommandString; import org.jabref.logic.push.PushToApplicationPreferences; import org.jabref.logic.remote.RemotePreferences; @@ -793,15 +793,15 @@ public PushToApplicationPreferences getPushToApplicationPreferences() { Map applicationCommands = new HashMap<>(); // getEmptyIsDefault is used to ensure that an installation of a tool leads to the new path (instead of leaving the empty one) // Reason: empty string is returned by org.jabref.gui.desktop.os.Windows.detectProgramPath if program is not found. That path is stored in the preferences. - applicationCommands.put(Applications.EMACS.getDisplayName(), getEmptyIsDefault(PUSH_EMACS_PATH)); - applicationCommands.put(Applications.LYX.getDisplayName(), getEmptyIsDefault(PUSH_LYXPIPE)); - applicationCommands.put(Applications.TEXMAKER.getDisplayName(), getEmptyIsDefault(PUSH_TEXMAKER_PATH)); - applicationCommands.put(Applications.TEXSTUDIO.getDisplayName(), getEmptyIsDefault(PUSH_TEXSTUDIO_PATH)); - applicationCommands.put(Applications.TEXWORKS.getDisplayName(), getEmptyIsDefault(PUSH_TEXWORKS_PATH)); - applicationCommands.put(Applications.VIM.getDisplayName(), getEmptyIsDefault(PUSH_VIM)); - applicationCommands.put(Applications.WIN_EDT.getDisplayName(), getEmptyIsDefault(PUSH_WINEDT_PATH)); - applicationCommands.put(Applications.SUBLIME_TEXT.getDisplayName(), getEmptyIsDefault(PUSH_SUBLIME_TEXT_PATH)); - applicationCommands.put(Applications.VSCODE.getDisplayName(), getEmptyIsDefault(PUSH_VSCODE_PATH)); + applicationCommands.put(PushApplications.EMACS.getDisplayName(), getEmptyIsDefault(PUSH_EMACS_PATH)); + applicationCommands.put(PushApplications.LYX.getDisplayName(), getEmptyIsDefault(PUSH_LYXPIPE)); + applicationCommands.put(PushApplications.TEXMAKER.getDisplayName(), getEmptyIsDefault(PUSH_TEXMAKER_PATH)); + applicationCommands.put(PushApplications.TEXSTUDIO.getDisplayName(), getEmptyIsDefault(PUSH_TEXSTUDIO_PATH)); + applicationCommands.put(PushApplications.TEXWORKS.getDisplayName(), getEmptyIsDefault(PUSH_TEXWORKS_PATH)); + applicationCommands.put(PushApplications.VIM.getDisplayName(), getEmptyIsDefault(PUSH_VIM)); + applicationCommands.put(PushApplications.WIN_EDT.getDisplayName(), getEmptyIsDefault(PUSH_WINEDT_PATH)); + applicationCommands.put(PushApplications.SUBLIME_TEXT.getDisplayName(), getEmptyIsDefault(PUSH_SUBLIME_TEXT_PATH)); + applicationCommands.put(PushApplications.VSCODE.getDisplayName(), getEmptyIsDefault(PUSH_VSCODE_PATH)); pushToApplicationPreferences = new PushToApplicationPreferences( get(PUSH_TO_APPLICATION), @@ -825,24 +825,24 @@ public PushToApplicationPreferences getPushToApplicationPreferences() { private void storePushToApplicationPath(Map commandPair) { commandPair.forEach((key, value) -> { // is only for the preferences and therefore is okay to throw NoSuchElementException - switch (Applications.getApplicationByDisplayName(key).get()) { - case Applications.EMACS -> + switch (PushApplications.getApplicationByDisplayName(key).get()) { + case PushApplications.EMACS -> put(PUSH_EMACS_PATH, value); - case Applications.LYX -> + case PushApplications.LYX -> put(PUSH_LYXPIPE, value); - case Applications.TEXMAKER -> + case PushApplications.TEXMAKER -> put(PUSH_TEXMAKER_PATH, value); - case Applications.TEXSTUDIO -> + case PushApplications.TEXSTUDIO -> put(PUSH_TEXSTUDIO_PATH, value); - case Applications.TEXWORKS -> + case PushApplications.TEXWORKS -> put(PUSH_TEXWORKS_PATH, value); - case Applications.VIM -> + case PushApplications.VIM -> put(PUSH_VIM, value); - case Applications.WIN_EDT -> + case PushApplications.WIN_EDT -> put(PUSH_WINEDT_PATH, value); - case Applications.SUBLIME_TEXT -> + case PushApplications.SUBLIME_TEXT -> put(PUSH_SUBLIME_TEXT_PATH, value); - case Applications.VSCODE -> + case PushApplications.VSCODE -> put(PUSH_VSCODE_PATH, value); } }); diff --git a/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java b/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java index 55ef3526fe1..5773c542675 100644 --- a/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java +++ b/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java @@ -4,6 +4,7 @@ import java.nio.file.Path; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; import org.jabref.logic.l10n.Localization; import org.jabref.logic.os.OS; @@ -36,23 +37,12 @@ public AbstractPushToApplication(NotificationService notificationService, PushTo } protected String getKeyString(List entries, String delimiter) { - StringBuilder result = new StringBuilder(); - Optional citeKey; - boolean first = true; - for (BibEntry bes : entries) { - citeKey = bes.getCitationKey(); - if (citeKey.isEmpty() || citeKey.get().isEmpty()) { - LOGGER.warn("Should never occur, because we made sure that all entries have keys"); - continue; - } - if (first) { - result.append(citeKey.get()); - first = false; - } else { - result.append(delimiter).append(citeKey.get()); - } - } - return result.toString(); + return entries.stream() + .map(BibEntry::getCitationKey) + .filter(Optional::isPresent) + .map(Optional::get) + .filter(key -> !key.isEmpty()) + .collect(Collectors.joining(delimiter)); } public void pushEntries(List entries) { diff --git a/jablib/src/main/java/org/jabref/logic/push/Applications.java b/jablib/src/main/java/org/jabref/logic/push/PushApplications.java similarity index 72% rename from jablib/src/main/java/org/jabref/logic/push/Applications.java rename to jablib/src/main/java/org/jabref/logic/push/PushApplications.java index c5881973253..6b68dabbb7c 100644 --- a/jablib/src/main/java/org/jabref/logic/push/Applications.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushApplications.java @@ -2,7 +2,7 @@ import java.util.Optional; -public enum Applications { +public enum PushApplications { EMACS("emacs", "Emacs"), LYX("lyx", "LyX/Kile"), @@ -18,13 +18,13 @@ public enum Applications { private final String id; private final String displayName; - Applications(String id, String displayName) { + PushApplications(String id, String displayName) { this.id = id; this.displayName = displayName; } - public static Optional getApplicationByDisplayName(String key) { - for (Applications application : Applications.values()) { + public static Optional getApplicationByDisplayName(String key) { + for (PushApplications application : PushApplications.values()) { if (application.getDisplayName().equalsIgnoreCase(key)) { return Optional.of(application); } @@ -32,8 +32,8 @@ public static Optional getApplicationByDisplayName(String key) { return Optional.empty(); } - public static Optional getApplicationById(String key) { - for (Applications application : Applications.values()) { + public static Optional getApplicationById(String key) { + for (PushApplications application : PushApplications.values()) { if (application.getId().equalsIgnoreCase(key)) { return Optional.of(application); } diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToApplication.java b/jablib/src/main/java/org/jabref/logic/push/PushToApplication.java index aa577e732fb..68f9de8adc5 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToApplication.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToApplication.java @@ -43,6 +43,11 @@ public interface PushToApplication { */ boolean requiresCitationKeys(); + /** + * Get the delimiter used to separate citation keys. + * + * @return The delimiter as a String. + */ String getDelimiter(); void jumpToLine(Path fileName, int line, int column); diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java b/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java index 94b8b7ef517..b816a6ddf37 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java @@ -11,8 +11,8 @@ private PushToApplications() { /// @param applicationId Used by the CLI to select the application to run. Example: `texstudio` public static Optional getApplicationById(String applicationId, NotificationService notificationService, PushToApplicationPreferences preferences) { - return Applications.getApplicationById(applicationId) - .map(application -> switch (application) { + return PushApplications.getApplicationById(applicationId) + .map(application -> switch (application) { case EMACS -> new PushToEmacs(notificationService, preferences); case LYX -> new PushToLyx(notificationService, preferences); case SUBLIME_TEXT -> new PushToSublimeText(notificationService, preferences); diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java b/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java index 9073d687ecd..92c055a2673 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToEmacs.java @@ -17,7 +17,7 @@ public class PushToEmacs extends AbstractPushToApplication { - public static final Applications APPLICATION = Applications.EMACS; + public static final PushApplications APPLICATION = PushApplications.EMACS; private static final Logger LOGGER = LoggerFactory.getLogger(PushToEmacs.class); diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java b/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java index 3c07e786d7c..6be6c98589a 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToLyx.java @@ -17,7 +17,7 @@ public class PushToLyx extends AbstractPushToApplication { - public static final Applications APPLICATION = Applications.LYX; + public static final PushApplications APPLICATION = PushApplications.LYX; private static final Logger LOGGER = LoggerFactory.getLogger(PushToLyx.class); diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java b/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java index 74cae24e16b..de4b8bb4ca3 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToSublimeText.java @@ -17,7 +17,7 @@ public class PushToSublimeText extends AbstractPushToApplication { - public static final Applications APPLICATION = Applications.SUBLIME_TEXT; + public static final PushApplications APPLICATION = PushApplications.SUBLIME_TEXT; private static final Logger LOGGER = LoggerFactory.getLogger(PushToSublimeText.class); diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToTeXstudio.java b/jablib/src/main/java/org/jabref/logic/push/PushToTeXstudio.java index 63778c0ed68..2ed335999b9 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToTeXstudio.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTeXstudio.java @@ -6,7 +6,7 @@ public class PushToTeXstudio extends AbstractPushToApplication { - public static final Applications APPLICATION = Applications.TEXSTUDIO; + public static final PushApplications APPLICATION = PushApplications.TEXSTUDIO; public PushToTeXstudio(NotificationService dialogService, PushToApplicationPreferences preferences) { super(dialogService, preferences); diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java b/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java index aac600137e5..43e9b3dfee2 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTeXworks.java @@ -6,7 +6,7 @@ public class PushToTeXworks extends AbstractPushToApplication { - public static final Applications APPLICATION = Applications.TEXWORKS; + public static final PushApplications APPLICATION = PushApplications.TEXWORKS; /** * Constructs a new {@code PushToTeXworks} instance. diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java b/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java index 704dac26567..90ca2d7f81b 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTexShop.java @@ -15,7 +15,7 @@ public class PushToTexShop extends AbstractPushToApplication { - public static final Applications APPLICATION = Applications.TEXSHOP; + public static final PushApplications APPLICATION = PushApplications.TEXSHOP; private static final Logger LOGGER = LoggerFactory.getLogger(PushToTexShop.class); diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToTexmaker.java b/jablib/src/main/java/org/jabref/logic/push/PushToTexmaker.java index 383c9e8e423..a70c245a88e 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToTexmaker.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToTexmaker.java @@ -9,7 +9,7 @@ */ public class PushToTexmaker extends AbstractPushToApplication { - public static final Applications APPLICATION = Applications.TEXMAKER; + public static final PushApplications APPLICATION = PushApplications.TEXMAKER; public PushToTexmaker(NotificationService dialogService, PushToApplicationPreferences preferences) { super(dialogService, preferences); diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToVScode.java b/jablib/src/main/java/org/jabref/logic/push/PushToVScode.java index bf564d1c1b2..f0252be80de 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToVScode.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToVScode.java @@ -6,7 +6,7 @@ public class PushToVScode extends AbstractPushToApplication { - public static final Applications APPLICATION = Applications.VSCODE; + public static final PushApplications APPLICATION = PushApplications.VSCODE; public PushToVScode(NotificationService notificationService, PushToApplicationPreferences preferences) { super(notificationService, preferences); diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToVim.java b/jablib/src/main/java/org/jabref/logic/push/PushToVim.java index 665c117992a..416f61a283b 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToVim.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToVim.java @@ -17,7 +17,7 @@ public class PushToVim extends AbstractPushToApplication { - public static final Applications APPLICATION = Applications.VIM; + public static final PushApplications APPLICATION = PushApplications.VIM; private static final Logger LOGGER = LoggerFactory.getLogger(PushToVim.class); diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java b/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java index 7f0f46a28eb..698d6760f12 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToWinEdt.java @@ -6,7 +6,7 @@ public class PushToWinEdt extends AbstractPushToApplication { - public static final Applications APPLICATION = Applications.WIN_EDT; + public static final PushApplications APPLICATION = PushApplications.WIN_EDT; public PushToWinEdt(NotificationService notificationService, PushToApplicationPreferences preferences) { super(notificationService, preferences); diff --git a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWQueryParams.java b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWQueryParams.java index 4651851dc01..7819931f7f3 100644 --- a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWQueryParams.java +++ b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWQueryParams.java @@ -41,6 +41,9 @@ public class CAYWQueryParams { @QueryParam("libraryid") private String libraryId; + @QueryParam("application") + private String application; + public String getCommand() { return command; } @@ -80,4 +83,8 @@ public Optional getLibraryPath() { public Optional getLibraryId() { return Optional.ofNullable(libraryId); } + + public Optional getApplication() { + return Optional.ofNullable(application); + } } diff --git a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java index 2f577d0db19..f8c9c74f9b0 100644 --- a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java +++ b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java @@ -68,42 +68,20 @@ public class CAYWResource { public Response getCitation( @BeanParam CAYWQueryParams queryParams ) throws IOException, ExecutionException, InterruptedException { + // Probe parameter handling if (queryParams.isProbe()) { return Response.ok("ready").build(); } + BibDatabaseContext databaseContext = getBibDatabaseContext(queryParams); - /* unused until DatabaseSearcher is fixed - PostgreServer postgreServer = new PostgreServer(); - IndexManager.clearOldSearchIndices(); - searcher = new DatabaseSearcher( - databaseContext, - new CurrentThreadTaskExecutor(), - preferences, - postgreServer); - */ - List entries = databaseContext.getEntries() .stream() .map(this::createCAYWEntry) .toList(); initializeGUI(); - - CompletableFuture> future = new CompletableFuture<>(); - Platform.runLater(() -> { - SearchDialog dialog = new SearchDialog(); - // TODO: Using the DatabaseSearcher directly here results in a lot of exceptions being thrown, so we use an alternative for now until we have a nice way of using the DatabaseSearcher class. - // searchDialog.set(new SearchDialog<>(s -> searcher.getMatches(new SearchQuery(s)), entries)); - List results = dialog.show( - searchQuery -> - entries.stream() - .filter(caywEntry -> matches(caywEntry, searchQuery)).toList(), - entries); - future.complete(results); - }); - - List searchResults = future.get(); + List searchResults = openSearchGui(entries); if (searchResults.isEmpty()) { return Response.noContent().build(); @@ -122,15 +100,43 @@ public Response getCitation( } // Push to TexStudio parameter handling - if (queryParams.isTexstudio()) { + if (queryParams.isTexstudio() || queryParams.getApplication().isPresent()) { + String applicationId = queryParams.getApplication().orElse("texstudio"); CitationCommandString citationCmd = new CitationCommandString("\\".concat(queryParams.getCommand()).concat("{"), ",", "}"); - PushToApplications.getApplicationById("TeXstudio", LOGGER::info, preferences.getPushToApplicationPreferences().withCitationCommand(citationCmd)) + PushToApplications.getApplicationById(applicationId, LOGGER::info, preferences.getPushToApplicationPreferences().withCitationCommand(citationCmd)) .ifPresent(application -> application.pushEntries(searchResults.stream().map(CAYWEntry::bibEntry).toList())); } return Response.ok(formattedResponse).type(formatter.getMediaType()).build(); } + private List openSearchGui(List entries) throws InterruptedException, ExecutionException { + /* unused until DatabaseSearcher is fixed + PostgreServer postgreServer = new PostgreServer(); + IndexManager.clearOldSearchIndices(); + searcher = new DatabaseSearcher( + databaseContext, + new CurrentThreadTaskExecutor(), + preferences, + postgreServer); + */ + + CompletableFuture> future = new CompletableFuture<>(); + Platform.runLater(() -> { + SearchDialog dialog = new SearchDialog(); + // TODO: Using the DatabaseSearcher directly here results in a lot of exceptions being thrown, so we use an alternative for now until we have a nice way of using the DatabaseSearcher class. + // searchDialog.set(new SearchDialog<>(s -> searcher.getMatches(new SearchQuery(s)), entries)); + List results = dialog.show( + searchQuery -> + entries.stream() + .filter(caywEntry -> matches(caywEntry, searchQuery)).toList(), + entries); + future.complete(results); + }); + + return future.get(); + } + private BibDatabaseContext getBibDatabaseContext(CAYWQueryParams queryParams) throws IOException { Optional libraryId = queryParams.getLibraryId(); if (libraryId.isPresent()) { From ce96f31384794a78e28b3159a5c96d3d18743c16 Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Wed, 9 Jul 2025 16:53:34 +0200 Subject: [PATCH 20/23] fix tests --- .../test/java/org/jabref/gui/push/PushToTeXworksTest.java | 1 + .../org/jabref/logic/push/AbstractPushToApplication.java | 3 ++- .../java/org/jabref/logic/push/CitationCommandString.java | 5 +++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java b/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java index 836adc2e30c..0a85f03a780 100644 --- a/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java +++ b/jabgui/src/test/java/org/jabref/gui/push/PushToTeXworksTest.java @@ -42,6 +42,7 @@ void setup() { // Mock the return value for getCiteCommand() CitationCommandString mockCiteCommand = mock(CitationCommandString.class); when(mockCiteCommand.prefix()).thenReturn(""); + when(mockCiteCommand.delimiter()).thenReturn(""); when(mockCiteCommand.suffix()).thenReturn(""); when(pushToApplicationPreferences.getCiteCommand()).thenReturn(mockCiteCommand); diff --git a/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java b/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java index 5773c542675..1bf48ffbf74 100644 --- a/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java +++ b/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java @@ -3,6 +3,7 @@ import java.io.IOException; import java.nio.file.Path; import java.util.List; +import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; @@ -42,7 +43,7 @@ protected String getKeyString(List entries, String delimiter) { .filter(Optional::isPresent) .map(Optional::get) .filter(key -> !key.isEmpty()) - .collect(Collectors.joining(delimiter)); + .collect(Collectors.joining(Objects.requireNonNullElse(delimiter, ""))); } public void pushEntries(List entries) { diff --git a/jablib/src/main/java/org/jabref/logic/push/CitationCommandString.java b/jablib/src/main/java/org/jabref/logic/push/CitationCommandString.java index 8a645e51fba..e6dfadef36c 100644 --- a/jablib/src/main/java/org/jabref/logic/push/CitationCommandString.java +++ b/jablib/src/main/java/org/jabref/logic/push/CitationCommandString.java @@ -1,15 +1,16 @@ package org.jabref.logic.push; +import org.jspecify.annotations.NonNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public record CitationCommandString(String prefix, String delimiter, String suffix) { +public record CitationCommandString(@NonNull String prefix, @NonNull String delimiter, @NonNull String suffix) { private static final Logger LOGGER = LoggerFactory.getLogger(CitationCommandString.class); private static final String CITE_KEY1 = "key1"; private static final String CITE_KEY2 = "key2"; @Override - public String toString() { + public @NonNull String toString() { return prefix + CITE_KEY1 + delimiter + CITE_KEY2 + suffix; } From b25a985279e9de9a1110dd4ee3305335ca523704 Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Wed, 9 Jul 2025 17:02:16 +0200 Subject: [PATCH 21/23] fix tests2 --- .../java/org/jabref/logic/preferences/JabRefCliPreferences.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java index 042e6ae42b0..41b44fb45da 100644 --- a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java @@ -82,8 +82,8 @@ import org.jabref.logic.os.OS; import org.jabref.logic.protectedterms.ProtectedTermsLoader; import org.jabref.logic.protectedterms.ProtectedTermsPreferences; -import org.jabref.logic.push.PushApplications; import org.jabref.logic.push.CitationCommandString; +import org.jabref.logic.push.PushApplications; import org.jabref.logic.push.PushToApplicationPreferences; import org.jabref.logic.remote.RemotePreferences; import org.jabref.logic.search.SearchPreferences; From 6be78f213fb1fe7a7a5c9c3f387be84c0a1ccebf Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Thu, 10 Jul 2025 16:05:15 +0200 Subject: [PATCH 22/23] add ability to cayw to push to other applications --- .../jabref/logic/push/AbstractPushToApplication.java | 6 +++--- .../org/jabref/logic/push/PushToApplications.java | 12 ++++++++---- .../org/jabref/http/server/cayw/CAYWQueryParams.java | 9 +++++++-- .../org/jabref/http/server/cayw/CAYWResource.java | 7 +++---- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java b/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java index 1bf48ffbf74..643ac4d9fe0 100644 --- a/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java +++ b/jablib/src/main/java/org/jabref/logic/push/AbstractPushToApplication.java @@ -3,7 +3,6 @@ import java.io.IOException; import java.nio.file.Path; import java.util.List; -import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; @@ -14,6 +13,7 @@ import org.jabref.model.strings.StringUtil; import com.google.common.annotations.VisibleForTesting; +import org.jspecify.annotations.NonNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,13 +37,13 @@ public AbstractPushToApplication(NotificationService notificationService, PushTo this.preferences = preferences; } - protected String getKeyString(List entries, String delimiter) { + protected String getKeyString(List entries, @NonNull String delimiter) { return entries.stream() .map(BibEntry::getCitationKey) .filter(Optional::isPresent) .map(Optional::get) .filter(key -> !key.isEmpty()) - .collect(Collectors.joining(Objects.requireNonNullElse(delimiter, ""))); + .collect(Collectors.joining(delimiter)); } public void pushEntries(List entries) { diff --git a/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java b/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java index b816a6ddf37..24a27fadf2e 100644 --- a/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java +++ b/jablib/src/main/java/org/jabref/logic/push/PushToApplications.java @@ -9,10 +9,14 @@ public class PushToApplications { private PushToApplications() { } - /// @param applicationId Used by the CLI to select the application to run. Example: `texstudio` - public static Optional getApplicationById(String applicationId, NotificationService notificationService, PushToApplicationPreferences preferences) { + public static Optional getApplicationById(String applicationId, NotificationService notificationService, PushToApplicationPreferences pushToApplicationPreferences) { return PushApplications.getApplicationById(applicationId) - .map(application -> switch (application) { + .flatMap(application -> getApplication(application, notificationService, pushToApplicationPreferences)); + } + + /// @param application Used by the CLI to select the application to run. + public static Optional getApplication(PushApplications application, NotificationService notificationService, PushToApplicationPreferences preferences) { + return Optional.of(switch (application) { case EMACS -> new PushToEmacs(notificationService, preferences); case LYX -> new PushToLyx(notificationService, preferences); case SUBLIME_TEXT -> new PushToSublimeText(notificationService, preferences); @@ -23,6 +27,6 @@ public static Optional getApplicationById(String applicationI case WIN_EDT -> new PushToWinEdt(notificationService, preferences); case TEXSHOP -> new PushToTexShop(notificationService, preferences); case VSCODE -> new PushToVScode(notificationService, preferences); - }); + }); } } diff --git a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWQueryParams.java b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWQueryParams.java index 7819931f7f3..a050a4a30ae 100644 --- a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWQueryParams.java +++ b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWQueryParams.java @@ -2,6 +2,8 @@ import java.util.Optional; +import org.jabref.logic.push.PushApplications; + import jakarta.ws.rs.DefaultValue; import jakarta.ws.rs.QueryParam; @@ -84,7 +86,10 @@ public Optional getLibraryId() { return Optional.ofNullable(libraryId); } - public Optional getApplication() { - return Optional.ofNullable(application); + public Optional getApplication() { + if (isTexstudio()) { + return Optional.of(PushApplications.TEXSTUDIO); + } + return PushApplications.getApplicationById(application); } } diff --git a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java index f8c9c74f9b0..5b608e9c72e 100644 --- a/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java +++ b/jabsrv/src/main/java/org/jabref/http/server/cayw/CAYWResource.java @@ -99,11 +99,10 @@ public Response getCitation( systemClipboard.setContents(strSel, null); } - // Push to TexStudio parameter handling - if (queryParams.isTexstudio() || queryParams.getApplication().isPresent()) { - String applicationId = queryParams.getApplication().orElse("texstudio"); + // Push to Application parameter handling + if (queryParams.getApplication().isPresent()) { CitationCommandString citationCmd = new CitationCommandString("\\".concat(queryParams.getCommand()).concat("{"), ",", "}"); - PushToApplications.getApplicationById(applicationId, LOGGER::info, preferences.getPushToApplicationPreferences().withCitationCommand(citationCmd)) + PushToApplications.getApplication(queryParams.getApplication().get(), LOGGER::info, preferences.getPushToApplicationPreferences().withCitationCommand(citationCmd)) .ifPresent(application -> application.pushEntries(searchResults.stream().map(CAYWEntry::bibEntry).toList())); } From e1a9c5299b5a7191dae1fc4e60abc5311fcb36f7 Mon Sep 17 00:00:00 2001 From: Philip <37398281+palukku@users.noreply.github.com> Date: Thu, 10 Jul 2025 19:06:12 +0200 Subject: [PATCH 23/23] rename wrong variables --- .../main/java/org/jabref/gui/frame/JabRefFrame.java | 8 ++++---- .../src/main/java/org/jabref/gui/frame/MainMenu.java | 10 +++++----- .../main/java/org/jabref/gui/frame/MainToolBar.java | 10 +++++----- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java index d49da339863..3f70d2f42f0 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java @@ -104,7 +104,7 @@ private enum PanelMode { MAIN_TABLE, MAIN_TABLE_AND_ENTRY_EDITOR } private final TaskExecutor taskExecutor; private final JabRefFrameViewModel viewModel; - private final GuiPushToApplicationCommand GUIPushToApplicationCommand; + private final GuiPushToApplicationCommand pushToApplicationCommand; private final SplitPane horizontalSplit = new SplitPane(); private final SidePane sidePane; private final SplitPane verticalSplit = new SplitPane(); @@ -188,7 +188,7 @@ public JabRefFrame(Stage mainStage, clipBoardManager, undoManager); - this.GUIPushToApplicationCommand = new GuiPushToApplicationCommand( + this.pushToApplicationCommand = new GuiPushToApplicationCommand( stateManager, dialogService, this.preferences, @@ -218,7 +218,7 @@ public JabRefFrame(Stage mainStage, private void initLayout() { MainToolBar mainToolBar = new MainToolBar( this, - GUIPushToApplicationCommand, + pushToApplicationCommand, globalSearchBar, dialogService, stateManager, @@ -234,7 +234,7 @@ private void initLayout() { this, fileHistory, sidePane, - GUIPushToApplicationCommand, + pushToApplicationCommand, preferences, stateManager, fileUpdateMonitor, diff --git a/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java b/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java index 6b863191fad..a3134de9ae4 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java @@ -98,7 +98,7 @@ public class MainMenu extends MenuBar { private final JabRefFrame frame; private final FileHistoryMenu fileHistoryMenu; private final SidePane sidePane; - private final GuiPushToApplicationCommand GUIPushToApplicationCommand; + private final GuiPushToApplicationCommand pushToApplicationCommand; private final GuiPreferences preferences; private final StateManager stateManager; private final FileUpdateMonitor fileUpdateMonitor; @@ -115,7 +115,7 @@ public class MainMenu extends MenuBar { public MainMenu(JabRefFrame frame, FileHistoryMenu fileHistoryMenu, SidePane sidePane, - GuiPushToApplicationCommand GUIPushToApplicationCommand, + GuiPushToApplicationCommand pushToApplicationCommand, GuiPreferences preferences, StateManager stateManager, FileUpdateMonitor fileUpdateMonitor, @@ -131,7 +131,7 @@ public MainMenu(JabRefFrame frame, this.frame = frame; this.fileHistoryMenu = fileHistoryMenu; this.sidePane = sidePane; - this.GUIPushToApplicationCommand = GUIPushToApplicationCommand; + this.pushToApplicationCommand = pushToApplicationCommand; this.preferences = preferences; this.stateManager = stateManager; this.fileUpdateMonitor = fileUpdateMonitor; @@ -312,8 +312,8 @@ private void createMenu() { // endregion ); - final MenuItem pushToApplicationMenuItem = factory.createMenuItem(GUIPushToApplicationCommand.getAction(), GUIPushToApplicationCommand); - GUIPushToApplicationCommand.registerReconfigurable(pushToApplicationMenuItem); + final MenuItem pushToApplicationMenuItem = factory.createMenuItem(pushToApplicationCommand.getAction(), pushToApplicationCommand); + pushToApplicationCommand.registerReconfigurable(pushToApplicationMenuItem); tools.getItems().addAll( factory.createMenuItem(StandardActions.PARSE_LATEX, new ParseLatexAction(stateManager)), diff --git a/jabgui/src/main/java/org/jabref/gui/frame/MainToolBar.java b/jabgui/src/main/java/org/jabref/gui/frame/MainToolBar.java index 6d98ead44c2..bf27beab906 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/MainToolBar.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/MainToolBar.java @@ -47,7 +47,7 @@ public class MainToolBar extends ToolBar { private final LibraryTabContainer frame; - private final GuiPushToApplicationCommand GUIPushToApplicationCommand; + private final GuiPushToApplicationCommand pushToApplicationCommand; private final GlobalSearchBar globalSearchBar; private final DialogService dialogService; private final StateManager stateManager; @@ -64,7 +64,7 @@ public class MainToolBar extends ToolBar { private Subscription taskProgressSubscription; public MainToolBar(LibraryTabContainer tabContainer, - GuiPushToApplicationCommand GUIPushToApplicationCommand, + GuiPushToApplicationCommand pushToApplicationCommand, GlobalSearchBar globalSearchBar, DialogService dialogService, StateManager stateManager, @@ -76,7 +76,7 @@ public MainToolBar(LibraryTabContainer tabContainer, ClipBoardManager clipBoardManager, CountingUndoManager undoManager) { this.frame = tabContainer; - this.GUIPushToApplicationCommand = GUIPushToApplicationCommand; + this.pushToApplicationCommand = pushToApplicationCommand; this.globalSearchBar = globalSearchBar; this.dialogService = dialogService; this.stateManager = stateManager; @@ -97,8 +97,8 @@ private void createToolBar() { final Region leftSpacer = new Region(); final Region rightSpacer = new Region(); - final Button pushToApplicationButton = factory.createIconButton(GUIPushToApplicationCommand.getAction(), GUIPushToApplicationCommand); - GUIPushToApplicationCommand.registerReconfigurable(pushToApplicationButton); + final Button pushToApplicationButton = factory.createIconButton(pushToApplicationCommand.getAction(), pushToApplicationCommand); + pushToApplicationCommand.registerReconfigurable(pushToApplicationButton); // Setup Toolbar