From fada1d270ff700bfffb6c1ddce1603a91fe77de2 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Thu, 31 Jan 2019 12:22:02 +0100 Subject: [PATCH 1/6] Fix NPE and not on FX Thread in PreviewPrefs Tabs Remove obsolete swing stuff Create proper javafx binding Fixes #4621 Fixes #4622 Fix another issue where the Preview stlye is not set correctly --- .../java/org/jabref/gui/PreviewPanel.java | 30 ++-- .../gui/preferences/PreviewPrefsTab.java | 139 ++++++++---------- 2 files changed, 75 insertions(+), 94 deletions(-) diff --git a/src/main/java/org/jabref/gui/PreviewPanel.java b/src/main/java/org/jabref/gui/PreviewPanel.java index 95323116271..8dd6946b68a 100644 --- a/src/main/java/org/jabref/gui/PreviewPanel.java +++ b/src/main/java/org/jabref/gui/PreviewPanel.java @@ -94,10 +94,10 @@ public PreviewPanel(BasePanel panel, BibDatabaseContext databaseContext, KeyBind this.keyBindingRepository = keyBindingRepository; fileHandler = new NewDroppedFileHandler(dialogService, databaseContext, externalFileTypes, - Globals.prefs.getFilePreferences(), + Globals.prefs.getFilePreferences(), Globals.prefs.getImportFormatPreferences(), Globals.prefs.getUpdateFieldPreferences(), - Globals.getFileUpdateMonitor()); + Globals.getFileUpdateMonitor()); // Set up scroll pane for preview pane setFitToHeight(true); @@ -231,19 +231,19 @@ private void updateLayout(PreviewPreferences previewPreferences, boolean init) { if (CitationStyle.isCitationStyleFile(style)) { layout = Optional.empty(); CitationStyle.createCitationStyleFromFile(style) - .ifPresent(cs -> { - citationStyle = cs; - if (!init) { - basePanel.get().output(Localization.lang("Preview style changed to: %0", citationStyle.getTitle())); - } - }); + .ifPresent(cs -> { + citationStyle = cs; + if (!init) { + basePanel.get().output(Localization.lang("Preview style changed to: %0", citationStyle.getTitle())); + } + }); previewStyle = style; - } else { - previewStyle = defaultPreviewStyle; - updatePreviewLayout(previewPreferences.getPreviewStyle(), previewPreferences.getLayoutFormatterPreferences()); - if (!init) { - basePanel.get().output(Localization.lang("Preview style changed to: %0", Localization.lang("Preview"))); - } + } + } else { + previewStyle = defaultPreviewStyle; + updatePreviewLayout(previewPreferences.getPreviewStyle(), previewPreferences.getLayoutFormatterPreferences()); + if (!init) { + basePanel.get().output(Localization.lang("Preview style changed to: %0", Localization.lang("Preview"))); } } @@ -301,7 +301,7 @@ public void update() { .doLayout(entry, databaseContext.getDatabase()))); setPreviewLabel(sb.toString()); } else if (basePanel.isPresent() && bibEntry.isPresent()) { - if (citationStyle != null && !previewStyle.equals(defaultPreviewStyle)) { + if ((citationStyle != null) && !previewStyle.equals(defaultPreviewStyle)) { basePanel.get().getCitationStyleCache().setCitationStyle(citationStyle); } Future citationStyleWorker = BackgroundTask diff --git a/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java b/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java index 76fc314f1b8..2568075f788 100644 --- a/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java +++ b/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java @@ -4,13 +4,11 @@ import java.util.Comparator; import java.util.List; import java.util.Optional; -import java.util.concurrent.ExecutionException; - -import javax.swing.JPanel; -import javax.swing.SwingWorker; +import javafx.beans.binding.Bindings; import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import javafx.concurrent.Task; import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.control.ButtonType; @@ -21,14 +19,13 @@ import javafx.scene.control.TextArea; import javafx.scene.layout.GridPane; import javafx.scene.layout.VBox; - import org.jabref.Globals; import org.jabref.JabRefGUI; import org.jabref.gui.BasePanel; import org.jabref.gui.DialogService; import org.jabref.gui.PreviewPanel; import org.jabref.gui.externalfiletype.ExternalFileTypes; -import org.jabref.gui.util.DefaultTaskExecutor; +import org.jabref.gui.util.TaskExecutor; import org.jabref.logic.citationstyle.CitationStyle; import org.jabref.logic.l10n.Localization; import org.jabref.logic.util.TestEntry; @@ -38,12 +35,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class PreviewPrefsTab extends JPanel implements PrefsTab { +public class PreviewPrefsTab implements PrefsTab { private static final Logger LOGGER = LoggerFactory.getLogger(PreviewPrefsTab.class); - private SwingWorker, Void> discoverCitationStyleWorker; - private final ObservableList availableModel = FXCollections.observableArrayList(); private final ObservableList chosenModel = FXCollections.observableArrayList(); @@ -61,25 +56,24 @@ public class PreviewPrefsTab extends JPanel implements PrefsTab { private final ScrollPane scrollPane = new ScrollPane(layout); private final DialogService dialogService; private final ExternalFileTypes externalFileTypes; + private final TaskExecutor taskExecutor; + + private Task> citationDiscovery; public PreviewPrefsTab(DialogService dialogService, ExternalFileTypes externalFileTypes) { this.dialogService = dialogService; this.externalFileTypes = externalFileTypes; + this.taskExecutor = Globals.TASK_EXECUTOR; setupLogic(); setupGui(); } private void setupLogic() { - chosen.getSelectionModel().selectedItemProperty().addListener(event -> { - if (chosen.getSelectionModel().getSelectedIndices().isEmpty()) { - btnLeft.setDisable(true); - btnDown.setDisable(true); - btnUp.setDisable(true); - } - }); - available.getSelectionModel().selectedItemProperty().addListener( - e -> btnRight.setDisable(available.getSelectionModel().getSelectedIndices().isEmpty())); + btnLeft.disableProperty().bind(Bindings.isEmpty(chosen.getSelectionModel().getSelectedItems())); + btnDown.disableProperty().bind(Bindings.isEmpty(chosen.getSelectionModel().getSelectedItems())); + btnUp.disableProperty().bind(Bindings.isEmpty(chosen.getSelectionModel().getSelectedItems())); + btnRight.disableProperty().bind(Bindings.isEmpty(available.getSelectionModel().getSelectedItems())); btnRight.setOnAction(event -> { for (Object object : available.getSelectionModel().getSelectedItems()) { @@ -110,9 +104,9 @@ private void setupLogic() { btnDown.setOnAction(event -> { List newSelectedIndices = new ArrayList<>(); - ObservableList selectedIndices = chosen.getSelectionModel().getSelectedIndices(); + ObservableList selectedIndices = chosen.getSelectionModel().getSelectedIndices(); for (int i = selectedIndices.size() - 1; i >= 0; i--) { - int oldIndex = (int)selectedIndices.get(i); + int oldIndex = selectedIndices.get(i); boolean alreadyTaken = newSelectedIndices.contains(oldIndex + 1); int newIndex = ((oldIndex < (chosenModel.size() - 1)) && !alreadyTaken) ? oldIndex + 1 : oldIndex; chosenModel.add(newIndex, chosenModel.remove(oldIndex)); @@ -122,41 +116,34 @@ private void setupLogic() { }); btnDefault.setOnAction(event -> layout.setText(Globals.prefs.getPreviewPreferences() - .getPreviewStyleDefault() - .replace("__NEWLINE__", "\n"))); + .getPreviewStyleDefault() + .replace("__NEWLINE__", "\n"))); btnTest.setOnAction(event -> { try { - DefaultTaskExecutor.runInJavaFXThread(() -> { - PreviewPanel testPane = new PreviewPanel(null, new BibDatabaseContext(), Globals.getKeyPrefs(), Globals.prefs.getPreviewPreferences(), dialogService, externalFileTypes); - if (chosen.getSelectionModel().getSelectedItems().isEmpty()) { - testPane.setFixedLayout(layout.getText()); - testPane.setEntry(TestEntry.getTestEntry()); - } - else { - int indexStyle = chosen.getSelectionModel().getSelectedIndex(); - PreviewPreferences preferences = Globals.prefs.getPreviewPreferences(); - preferences = new PreviewPreferences(preferences.getPreviewCycle(),indexStyle,preferences.getPreviewPanelDividerPosition(),preferences.isPreviewPanelEnabled(), preferences.getPreviewStyle(),preferences.getPreviewStyleDefault()); - testPane = new PreviewPanel(JabRefGUI.getMainFrame().getCurrentBasePanel(), new BibDatabaseContext(), Globals.getKeyPrefs(), preferences, dialogService, externalFileTypes); - testPane.setEntry(TestEntry.getTestEntry()); - testPane.updateLayout(preferences); - } - - DialogPane pane = new DialogPane(); - pane.setContent(testPane); + PreviewPanel testPane = new PreviewPanel(null, new BibDatabaseContext(), Globals.getKeyPrefs(), Globals.prefs.getPreviewPreferences(), dialogService, externalFileTypes); + if (chosen.getSelectionModel().getSelectedItems().isEmpty()) { + testPane.setFixedLayout(layout.getText()); + testPane.setEntry(TestEntry.getTestEntry()); + } else { + int indexStyle = chosen.getSelectionModel().getSelectedIndex(); + PreviewPreferences preferences = Globals.prefs.getPreviewPreferences(); + preferences = new PreviewPreferences(preferences.getPreviewCycle(), indexStyle, preferences.getPreviewPanelDividerPosition(), preferences.isPreviewPanelEnabled(), preferences.getPreviewStyle(), preferences.getPreviewStyleDefault()); + + testPane = new PreviewPanel(JabRefGUI.getMainFrame().getCurrentBasePanel(), new BibDatabaseContext(), Globals.getKeyPrefs(), preferences, dialogService, externalFileTypes); + testPane.setEntry(TestEntry.getTestEntry()); + testPane.updateLayout(preferences); + } - dialogService.showCustomDialogAndWait(Localization.lang("Preview"), pane, ButtonType.OK); + DialogPane pane = new DialogPane(); + pane.setContent(testPane); - }); + dialogService.showCustomDialogAndWait(Localization.lang("Preview"), pane, ButtonType.OK); } catch (StringIndexOutOfBoundsException exception) { LOGGER.warn("Parsing error.", exception); - - DefaultTaskExecutor.runInJavaFXThread(()-> dialogService.showErrorDialogAndWait(Localization.lang("Parsing error"), - Localization.lang("Parsing error") + ": " + Localization.lang("illegal backslash expression"), - exception)); - + dialogService.showErrorDialogAndWait(Localization.lang("Parsing error"), Localization.lang("Parsing error") + ": " + Localization.lang("illegal backslash expression"), exception); } }); } @@ -167,9 +154,9 @@ private void setupGui() { btnLeft.setPrefSize(80, 20); btnUp.setPrefSize(80, 20); btnDown.setPrefSize(80, 20); - vBox.getChildren().addAll(new Label(""), new Label(""), new Label(""), new Label(""), new Label(""), - new Label(""), new Label(""), btnRight, btnLeft, new Label(""), new Label(""), new Label(""), - btnUp, btnDown); + vBox.getChildren().addAll(new Label(""), new Label(""), new Label(""), new Label(""), new Label(""), + new Label(""), new Label(""), btnRight, btnLeft, new Label(""), new Label(""), new Label(""), + btnUp, btnDown); Label currentPreview = new Label(Localization.lang("Current Preview")); currentPreview.getStyleClass().add("sectionHeader"); gridPane.add(currentPreview, 1, 1); @@ -180,8 +167,10 @@ private void setupGui() { gridPane.add(btnDefault, 3, 6); layout.setPrefSize(600, 300); gridPane.add(scrollPane, 1, 9); + } + @Override public Node getBuilder() { return gridPane; } @@ -212,39 +201,27 @@ public void setValues() { availableModel.add(Localization.lang("Preview")); } - btnLeft.setDisable(!chosen.getSelectionModel().getSelectedItems().isEmpty()); - btnRight.setDisable(available.getSelectionModel().getSelectedIndices().isEmpty()); - btnUp.setDisable(!chosen.getSelectionModel().getSelectedIndices().isEmpty()); - btnDown.setDisable(!chosen.getSelectionModel().getSelectedIndices().isEmpty()); - - if (discoverCitationStyleWorker != null) { - discoverCitationStyleWorker.cancel(true); + if (citationDiscovery != null) { + citationDiscovery.cancel(); } + citationDiscovery = new Task>() { - discoverCitationStyleWorker = new SwingWorker, Void>() { @Override - protected List doInBackground() throws Exception { + protected List call() throws Exception { return CitationStyle.discoverCitationStyles(); } - @Override - public void done() { - if (this.isCancelled()) { - return; - } - try { - get().stream() - .filter(style -> !previewPreferences.getPreviewCycle().contains(style.getFilePath())) - .sorted(Comparator.comparing(CitationStyle::getTitle)) - .forEach(availableModel::add); - - btnRight.setDisable(availableModel.isEmpty()); - } catch (InterruptedException | ExecutionException e) { - LOGGER.error("something went wrong while adding the discovered CitationStyles to the list "); - } - } }; - discoverCitationStyleWorker.execute(); + + citationDiscovery.setOnSucceeded(value -> { + citationDiscovery.getValue().stream() + .filter(style -> !previewPreferences.getPreviewCycle().contains(style.getFilePath())) + .sorted(Comparator.comparing(CitationStyle::getTitle)) + .forEach(availableModel::add); + }); + + citationDiscovery.setOnFailed(value -> LOGGER.error("something went wrong while adding the discovered CitationStyles to the list ", citationDiscovery.getException())); + taskExecutor.execute(citationDiscovery); layout.setText(Globals.prefs.getPreviewPreferences().getPreviewStyle().replace("__NEWLINE__", "\n")); } @@ -252,6 +229,10 @@ public void done() { @Override public void storeSettings() { List styles = new ArrayList<>(); + + if (chosenModel.isEmpty()) { + chosenModel.add(Localization.lang("Preview")); + } for (Object obj : chosenModel) { if (obj instanceof CitationStyle) { styles.add(((CitationStyle) obj).getFilePath()); @@ -260,10 +241,10 @@ public void storeSettings() { } } PreviewPreferences previewPreferences = Globals.prefs.getPreviewPreferences() - .getBuilder() - .withPreviewCycle(styles) - .withPreviewStyle(layout.getText().replace("\n", "__NEWLINE__")) - .build(); + .getBuilder() + .withPreviewCycle(styles) + .withPreviewStyle(layout.getText().replace("\n", "__NEWLINE__")) + .build(); if (!chosen.getSelectionModel().isEmpty()) { previewPreferences = previewPreferences.getBuilder().withPreviewCyclePosition(chosen.getSelectionModel().getSelectedIndex()).build(); } From 59ae78c918329bc2ded536a03c07cc88a4849f22 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Thu, 31 Jan 2019 12:31:43 +0100 Subject: [PATCH 2/6] fix checkstyle Signed-off-by: Siedlerchr --- src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java b/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java index 2568075f788..72f1d69c49a 100644 --- a/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java +++ b/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java @@ -19,6 +19,7 @@ import javafx.scene.control.TextArea; import javafx.scene.layout.GridPane; import javafx.scene.layout.VBox; + import org.jabref.Globals; import org.jabref.JabRefGUI; import org.jabref.gui.BasePanel; From 884d47884cbb4a09206a5ac675638e90723d100f Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Thu, 31 Jan 2019 18:30:16 +0100 Subject: [PATCH 3/6] fix copying of entry preview --- src/main/java/org/jabref/gui/PreviewPanel.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/jabref/gui/PreviewPanel.java b/src/main/java/org/jabref/gui/PreviewPanel.java index 8dd6946b68a..ff8d6db01bd 100644 --- a/src/main/java/org/jabref/gui/PreviewPanel.java +++ b/src/main/java/org/jabref/gui/PreviewPanel.java @@ -368,11 +368,13 @@ public void close() { private void copyPreviewToClipBoard() { StringBuilder previewStringContent = new StringBuilder(); Document document = previewView.getEngine().getDocument(); - NodeList nodeList = document.getElementsByTagName("*"); + NodeList nodeList = document.getElementsByTagName("html"); + + //Nodelist does not implement iterable for (int i = 0; i < nodeList.getLength(); i++) { Element element = (Element) nodeList.item(i); - previewStringContent.append(element.getNodeValue()).append("\n"); + previewStringContent.append(element.getTextContent()); } ClipboardContent content = new ClipboardContent(); From c7e03d7eaf605fb4d9b51240043683bbf268d6f7 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Thu, 31 Jan 2019 18:45:48 +0100 Subject: [PATCH 4/6] prevent divide by zero excpetion --- .../jabref/preferences/PreviewPreferences.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/jabref/preferences/PreviewPreferences.java b/src/main/java/org/jabref/preferences/PreviewPreferences.java index 835b4fd7da7..c8d879e1a70 100644 --- a/src/main/java/org/jabref/preferences/PreviewPreferences.java +++ b/src/main/java/org/jabref/preferences/PreviewPreferences.java @@ -8,7 +8,7 @@ public class PreviewPreferences { private final List previewCycle; - private int previewCyclePosition; + private final int previewCyclePosition; private final Number previewPanelDividerPosition; private final boolean previewPanelEnabled; private final String previewStyle; @@ -60,6 +60,7 @@ public LayoutFormatterPreferences getLayoutFormatterPreferences() { } public static class Builder { + private List previewCycle; private int previeCyclePosition; private Number previewPanelDividerPosition; @@ -67,7 +68,6 @@ public static class Builder { private String previewStyle; private final String previewStyleDefault; - public Builder(PreviewPreferences previewPreferences) { this.previewCycle = previewPreferences.getPreviewCycle(); this.previeCyclePosition = previewPreferences.getPreviewCyclePosition(); @@ -83,11 +83,15 @@ public Builder withPreviewCycle(List previewCycle) { } public Builder withPreviewCyclePosition(int position) { - previeCyclePosition = position; - while (previeCyclePosition < 0) { - previeCyclePosition += previewCycle.size(); + if (previewCycle.isEmpty()) { + previeCyclePosition = 0; + } else { + previeCyclePosition = position; + while (previeCyclePosition < 0) { + previeCyclePosition += previewCycle.size(); + } + previeCyclePosition %= previewCycle.size(); } - previeCyclePosition %= previewCycle.size(); return this; } From 664917958c291f26506ab6a98b7af0f2e02da099 Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Fri, 1 Feb 2019 12:02:00 +0100 Subject: [PATCH 5/6] Pass task executor as variable Use Background Task add error message improve binding --- src/main/java/org/jabref/gui/JabRefFrame.java | 27 +++++----- .../gui/actions/ShowPreferencesAction.java | 8 ++- .../gui/preferences/PreferencesDialog.java | 53 +++++++++---------- .../gui/preferences/PreviewPrefsTab.java | 50 +++++++---------- src/main/resources/l10n/JabRef_en.properties | 2 + 5 files changed, 67 insertions(+), 73 deletions(-) diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index b1872641c36..76e14c8e6ce 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -923,24 +923,23 @@ private MenuBar createMenu() { ); options.getItems().addAll( - factory.createMenuItem(StandardActions.SHOW_PREFS, new ShowPreferencesAction(this)), + factory.createMenuItem(StandardActions.SHOW_PREFS, new ShowPreferencesAction(this, Globals.TASK_EXECUTOR)), - new SeparatorMenuItem(), + new SeparatorMenuItem(), - factory.createMenuItem(StandardActions.SETUP_GENERAL_FIELDS, new SetupGeneralFieldsAction()), - factory.createMenuItem(StandardActions.MANAGE_CUSTOM_IMPORTS, new ManageCustomImportsAction()), - factory.createMenuItem(StandardActions.MANAGE_CUSTOM_EXPORTS, new ManageCustomExportsAction()), - factory.createMenuItem(StandardActions.MANAGE_EXTERNAL_FILETYPES, new EditExternalFileTypesAction()), - factory.createMenuItem(StandardActions.MANAGE_JOURNALS, new ManageJournalsAction()), - factory.createMenuItem(StandardActions.CUSTOMIZE_KEYBINDING, new CustomizeKeyBindingAction()), - factory.createMenuItem(StandardActions.MANAGE_PROTECTED_TERMS, new ManageProtectedTermsAction(this, Globals.protectedTermsLoader)), + factory.createMenuItem(StandardActions.SETUP_GENERAL_FIELDS, new SetupGeneralFieldsAction()), + factory.createMenuItem(StandardActions.MANAGE_CUSTOM_IMPORTS, new ManageCustomImportsAction()), + factory.createMenuItem(StandardActions.MANAGE_CUSTOM_EXPORTS, new ManageCustomExportsAction()), + factory.createMenuItem(StandardActions.MANAGE_EXTERNAL_FILETYPES, new EditExternalFileTypesAction()), + factory.createMenuItem(StandardActions.MANAGE_JOURNALS, new ManageJournalsAction()), + factory.createMenuItem(StandardActions.CUSTOMIZE_KEYBINDING, new CustomizeKeyBindingAction()), + factory.createMenuItem(StandardActions.MANAGE_PROTECTED_TERMS, new ManageProtectedTermsAction(this, Globals.protectedTermsLoader)), - new SeparatorMenuItem(), + new SeparatorMenuItem(), - factory.createMenuItem(StandardActions.MANAGE_CONTENT_SELECTORS, new OldDatabaseCommandWrapper(Actions.MANAGE_SELECTORS, this, Globals.stateManager)), - factory.createMenuItem(StandardActions.CUSTOMIZE_ENTRY_TYPES, new CustomizeEntryAction(this)), - factory.createMenuItem(StandardActions.MANAGE_CITE_KEY_PATTERNS, new BibtexKeyPatternAction(this)) - ); + factory.createMenuItem(StandardActions.MANAGE_CONTENT_SELECTORS, new OldDatabaseCommandWrapper(Actions.MANAGE_SELECTORS, this, Globals.stateManager)), + factory.createMenuItem(StandardActions.CUSTOMIZE_ENTRY_TYPES, new CustomizeEntryAction(this)), + factory.createMenuItem(StandardActions.MANAGE_CITE_KEY_PATTERNS, new BibtexKeyPatternAction(this))); help.getItems().addAll( factory.createMenuItem(StandardActions.HELP, HelpAction.getMainHelpPageCommand()), diff --git a/src/main/java/org/jabref/gui/actions/ShowPreferencesAction.java b/src/main/java/org/jabref/gui/actions/ShowPreferencesAction.java index 7c13cbcc250..e6c0a29684c 100644 --- a/src/main/java/org/jabref/gui/actions/ShowPreferencesAction.java +++ b/src/main/java/org/jabref/gui/actions/ShowPreferencesAction.java @@ -2,17 +2,21 @@ import org.jabref.gui.JabRefFrame; import org.jabref.gui.preferences.PreferencesDialog; +import org.jabref.gui.util.TaskExecutor; public class ShowPreferencesAction extends SimpleCommand { private final JabRefFrame jabRefFrame; - public ShowPreferencesAction(JabRefFrame jabRefFrame) { + private final TaskExecutor taskExecutor; + + public ShowPreferencesAction(JabRefFrame jabRefFrame, TaskExecutor taskExecutor) { this.jabRefFrame = jabRefFrame; + this.taskExecutor = taskExecutor; } @Override public void execute() { - PreferencesDialog preferencesDialog = new PreferencesDialog(jabRefFrame); + PreferencesDialog preferencesDialog = new PreferencesDialog(jabRefFrame, taskExecutor); preferencesDialog.showAndWait(); } } diff --git a/src/main/java/org/jabref/gui/preferences/PreferencesDialog.java b/src/main/java/org/jabref/gui/preferences/PreferencesDialog.java index a2571e4e5fd..25837b9b62c 100644 --- a/src/main/java/org/jabref/gui/preferences/PreferencesDialog.java +++ b/src/main/java/org/jabref/gui/preferences/PreferencesDialog.java @@ -25,6 +25,7 @@ import org.jabref.gui.util.BaseDialog; import org.jabref.gui.util.ControlHelper; import org.jabref.gui.util.FileDialogConfiguration; +import org.jabref.gui.util.TaskExecutor; import org.jabref.gui.util.ViewModelListCellFactory; import org.jabref.logic.exporter.ExporterFactory; import org.jabref.logic.exporter.SavePreferences; @@ -57,7 +58,7 @@ public class PreferencesDialog extends BaseDialog { private final JabRefPreferences prefs; private final ObservableList preferenceTabs; - public PreferencesDialog(JabRefFrame parent) { + public PreferencesDialog(JabRefFrame parent, TaskExecutor taskExecutor) { setTitle(Localization.lang("JabRef preferences")); getDialogPane().getScene().getStylesheets().add(this.getClass().getResource("PreferencesDialog.css").toExternalForm()); @@ -68,7 +69,7 @@ public PreferencesDialog(JabRefFrame parent) { close(); }); - prefs = JabRefPreferences.getInstance(); + prefs = Globals.prefs; frame = parent; dialogService = frame.getDialogService(); @@ -77,7 +78,7 @@ public PreferencesDialog(JabRefFrame parent) { preferenceTabs.add(new FileTab(dialogService, prefs)); preferenceTabs.add(new TablePrefsTab(prefs)); preferenceTabs.add(new TableColumnsTab(prefs, frame)); - preferenceTabs.add(new PreviewPrefsTab(dialogService, ExternalFileTypes.getInstance())); + preferenceTabs.add(new PreviewPrefsTab(dialogService, ExternalFileTypes.getInstance(), taskExecutor)); preferenceTabs.add(new ExternalTab(frame, this, prefs)); preferenceTabs.add(new GroupsPrefsTab(prefs)); preferenceTabs.add(new EntryEditorPrefsTab(prefs)); @@ -111,8 +112,8 @@ private void construct() { }); tabsList.getSelectionModel().selectFirst(); new ViewModelListCellFactory() - .withText(PrefsTab::getTabName) - .install(tabsList); + .withText(PrefsTab::getTabName) + .install(tabsList); VBox buttonContainer = new VBox(); buttonContainer.setAlignment(Pos.BOTTOM_LEFT); @@ -132,21 +133,19 @@ private void construct() { resetPreferences.setOnAction(e -> resetPreferences()); resetPreferences.setMaxWidth(Double.MAX_VALUE); buttonContainer.getChildren().addAll( - importPreferences, - exportPreferences, - showPreferences, - resetPreferences - ); + importPreferences, + exportPreferences, + showPreferences, + resetPreferences); VBox spacer = new VBox(); spacer.setPrefHeight(10.0); VBox.setVgrow(tabsList, Priority.ALWAYS); VBox.setVgrow(spacer, Priority.SOMETIMES); vBox.getChildren().addAll( - tabsList, - spacer, - buttonContainer - ); + tabsList, + spacer, + buttonContainer); container.setLeft(vBox); @@ -155,16 +154,16 @@ private void construct() { private void resetPreferences() { boolean resetPreferencesConfirmed = dialogService.showConfirmationDialogAndWait( - Localization.lang("Reset preferences"), - Localization.lang("Are you sure you want to reset all settings to default values?"), - Localization.lang("Reset preferences"), - Localization.lang("Cancel")); + Localization.lang("Reset preferences"), + Localization.lang("Are you sure you want to reset all settings to default values?"), + Localization.lang("Reset preferences"), + Localization.lang("Cancel")); if (resetPreferencesConfirmed) { try { prefs.clear(); dialogService.showWarningDialogAndWait(Localization.lang("Reset preferences"), - Localization.lang("You must restart JabRef for this to come into effect.")); + Localization.lang("You must restart JabRef for this to come into effect.")); } catch (BackingStoreException ex) { LOGGER.error("Error while resetting preferences", ex); dialogService.showErrorDialogAndWait(Localization.lang("Reset preferences"), ex); @@ -175,9 +174,9 @@ private void resetPreferences() { private void importPreferences() { FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() - .addExtensionFilter(StandardFileType.XML) - .withDefaultExtension(StandardFileType.XML) - .withInitialDirectory(prefs.setLastPreferencesExportPath()).build(); + .addExtensionFilter(StandardFileType.XML) + .withDefaultExtension(StandardFileType.XML) + .withInitialDirectory(prefs.setLastPreferencesExportPath()).build(); dialogService.showFileOpenDialog(fileDialogConfiguration).ifPresent(file -> { try { @@ -185,7 +184,7 @@ private void importPreferences() { updateAfterPreferenceChanges(); dialogService.showWarningDialogAndWait(Localization.lang("Import preferences"), - Localization.lang("You must restart JabRef for this to come into effect.")); + Localization.lang("You must restart JabRef for this to come into effect.")); } catch (JabRefException ex) { LOGGER.error("Error while importing preferences", ex); dialogService.showErrorDialogAndWait(Localization.lang("Import preferences"), ex); @@ -230,10 +229,10 @@ public void setValues() { private void exportPreferences() { FileDialogConfiguration fileDialogConfiguration = new FileDialogConfiguration.Builder() - .addExtensionFilter(StandardFileType.XML) - .withDefaultExtension(StandardFileType.XML) - .withInitialDirectory(prefs.setLastPreferencesExportPath()) - .build(); + .addExtensionFilter(StandardFileType.XML) + .withDefaultExtension(StandardFileType.XML) + .withInitialDirectory(prefs.setLastPreferencesExportPath()) + .build(); dialogService.showFileSaveDialog(fileDialogConfiguration) .ifPresent(exportFile -> { diff --git a/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java b/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java index 72f1d69c49a..bc9be7df4fb 100644 --- a/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java +++ b/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java @@ -6,9 +6,9 @@ import java.util.Optional; import javafx.beans.binding.Bindings; +import javafx.beans.binding.BooleanBinding; import javafx.collections.FXCollections; import javafx.collections.ObservableList; -import javafx.concurrent.Task; import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.control.ButtonType; @@ -26,6 +26,7 @@ import org.jabref.gui.DialogService; import org.jabref.gui.PreviewPanel; import org.jabref.gui.externalfiletype.ExternalFileTypes; +import org.jabref.gui.util.BackgroundTask; import org.jabref.gui.util.TaskExecutor; import org.jabref.logic.citationstyle.CitationStyle; import org.jabref.logic.l10n.Localization; @@ -59,21 +60,21 @@ public class PreviewPrefsTab implements PrefsTab { private final ExternalFileTypes externalFileTypes; private final TaskExecutor taskExecutor; - private Task> citationDiscovery; - - public PreviewPrefsTab(DialogService dialogService, ExternalFileTypes externalFileTypes) { + public PreviewPrefsTab(DialogService dialogService, ExternalFileTypes externalFileTypes, TaskExecutor taskExecutor) { this.dialogService = dialogService; this.externalFileTypes = externalFileTypes; - this.taskExecutor = Globals.TASK_EXECUTOR; + this.taskExecutor = taskExecutor; setupLogic(); setupGui(); } private void setupLogic() { - btnLeft.disableProperty().bind(Bindings.isEmpty(chosen.getSelectionModel().getSelectedItems())); - btnDown.disableProperty().bind(Bindings.isEmpty(chosen.getSelectionModel().getSelectedItems())); - btnUp.disableProperty().bind(Bindings.isEmpty(chosen.getSelectionModel().getSelectedItems())); + BooleanBinding nothingSelectedFromChosen = Bindings.isEmpty(chosen.getSelectionModel().getSelectedItems()); + + btnLeft.disableProperty().bind(nothingSelectedFromChosen); + btnDown.disableProperty().bind(nothingSelectedFromChosen); + btnUp.disableProperty().bind(nothingSelectedFromChosen); btnRight.disableProperty().bind(Bindings.isEmpty(available.getSelectionModel().getSelectedItems())); btnRight.setOnAction(event -> { @@ -168,7 +169,6 @@ private void setupGui() { gridPane.add(btnDefault, 3, 6); layout.setPrefSize(600, 300); gridPane.add(scrollPane, 1, 9); - } @Override @@ -202,27 +202,17 @@ public void setValues() { availableModel.add(Localization.lang("Preview")); } - if (citationDiscovery != null) { - citationDiscovery.cancel(); - } - citationDiscovery = new Task>() { - - @Override - protected List call() throws Exception { - return CitationStyle.discoverCitationStyles(); - } - - }; - - citationDiscovery.setOnSucceeded(value -> { - citationDiscovery.getValue().stream() - .filter(style -> !previewPreferences.getPreviewCycle().contains(style.getFilePath())) - .sorted(Comparator.comparing(CitationStyle::getTitle)) - .forEach(availableModel::add); - }); - - citationDiscovery.setOnFailed(value -> LOGGER.error("something went wrong while adding the discovered CitationStyles to the list ", citationDiscovery.getException())); - taskExecutor.execute(citationDiscovery); + BackgroundTask.wrap(() -> CitationStyle.discoverCitationStyles()) + .onSuccess(value -> { + value.stream() + .filter(style -> !previewPreferences.getPreviewCycle().contains(style.getFilePath())) + .sorted(Comparator.comparing(CitationStyle::getTitle)) + .forEach(availableModel::add); + }) + .onFailure(ex -> { + LOGGER.error("something went wrong while adding the discovered CitationStyles to the list ", ex); + dialogService.showErrorDialogAndWait(Localization.lang("Error adding discovered CitationStyles"), ex); + }).executeWith(taskExecutor); layout.setText(Globals.prefs.getPreviewPreferences().getPreviewStyle().replace("__NEWLINE__", "\n")); } diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index 5b5e6925b1e..6e5e0d1a2af 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -2216,3 +2216,5 @@ File\ extension\:=File extension\: Export\ format\ name\:=Export format name\: Cleared\ connection\ settings=Cleared connection settings + +Error\ adding\ discovered\ CitationStyles=Error adding discovered CitationStyles From 0e5f84e989b61ab91a09407ee5efaf67c8ab638b Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Fri, 1 Feb 2019 12:03:41 +0100 Subject: [PATCH 6/6] remove empty line --- src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java b/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java index bc9be7df4fb..5ace5352e0a 100644 --- a/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java +++ b/src/main/java/org/jabref/gui/preferences/PreviewPrefsTab.java @@ -140,7 +140,6 @@ private void setupLogic() { DialogPane pane = new DialogPane(); pane.setContent(testPane); - dialogService.showCustomDialogAndWait(Localization.lang("Preview"), pane, ButtonType.OK); } catch (StringIndexOutOfBoundsException exception) {