From 02d25f161e2e75edadfa011b15d13f3d74d75848 Mon Sep 17 00:00:00 2001 From: motokito Date: Mon, 15 Aug 2016 15:51:22 +0200 Subject: [PATCH 01/12] result conflict ErrorConsoleDialog --- CHANGELOG.md | 1 + build.gradle | 2 + src/main/java/net/sf/jabref/gui/FXAlert.java | 22 +-- .../java/net/sf/jabref/gui/FXDialogs.java | 4 +- .../java/net/sf/jabref/gui/JabRefFrame.java | 2 +- .../gui/actions/ErrorConsoleAction.java | 58 +------ .../gui/errorconsole/ErrorConsoleView.java | 93 +++++++++++ .../errorconsole/ErrorConsoleViewModel.java | 147 ++++++++++++++++++ .../sf/jabref/gui/help/AboutDialogView.java | 2 +- .../gui/keyboard/KeyBindingsDialogView.java | 2 +- .../jabref/logic/error/MessagePriority.java | 5 + .../error/ObservableMessageWithPriority.java | 48 ++++++ .../logic/error/StreamEavesdropper.java | 22 ++- .../net/sf/jabref/logic/error/TeeStream.java | 11 +- .../net/sf/jabref/logic/logging/Cache.java | 10 +- .../logic/logging/ObservableMessages.java | 25 +++ src/main/resources/l10n/JabRef_da.properties | 16 ++ src/main/resources/l10n/JabRef_de.properties | 17 ++ src/main/resources/l10n/JabRef_en.properties | 14 ++ src/main/resources/l10n/JabRef_es.properties | 16 ++ src/main/resources/l10n/JabRef_fa.properties | 16 ++ src/main/resources/l10n/JabRef_fr.properties | 16 ++ src/main/resources/l10n/JabRef_in.properties | 16 ++ src/main/resources/l10n/JabRef_it.properties | 16 ++ src/main/resources/l10n/JabRef_ja.properties | 16 ++ src/main/resources/l10n/JabRef_nl.properties | 16 ++ src/main/resources/l10n/JabRef_no.properties | 18 +++ .../resources/l10n/JabRef_pt_BR.properties | 16 ++ src/main/resources/l10n/JabRef_ru.properties | 16 ++ src/main/resources/l10n/JabRef_sv.properties | 16 ++ src/main/resources/l10n/JabRef_tr.properties | 16 ++ src/main/resources/l10n/JabRef_vi.properties | 16 ++ src/main/resources/l10n/JabRef_zh.properties | 16 ++ src/main/resources/l10n/Menu_da.properties | 1 + src/main/resources/l10n/Menu_de.properties | 1 + src/main/resources/l10n/Menu_en.properties | 1 + src/main/resources/l10n/Menu_es.properties | 1 + src/main/resources/l10n/Menu_fa.properties | 2 +- src/main/resources/l10n/Menu_fr.properties | 1 + src/main/resources/l10n/Menu_in.properties | 1 + src/main/resources/l10n/Menu_it.properties | 1 + src/main/resources/l10n/Menu_ja.properties | 1 + src/main/resources/l10n/Menu_nl.properties | 1 + src/main/resources/l10n/Menu_no.properties | 1 + src/main/resources/l10n/Menu_pt_BR.properties | 1 + src/main/resources/l10n/Menu_ru.properties | 1 + src/main/resources/l10n/Menu_sv.properties | 1 + src/main/resources/l10n/Menu_tr.properties | 1 + src/main/resources/l10n/Menu_vi.properties | 1 + src/main/resources/l10n/Menu_zh.properties | 1 + .../jabref/gui/errorconsole/ErrorConsole.css | 24 +++ .../jabref/gui/errorconsole/ErrorConsole.fxml | 31 ++++ 52 files changed, 716 insertions(+), 84 deletions(-) create mode 100644 src/main/java/net/sf/jabref/gui/errorconsole/ErrorConsoleView.java create mode 100644 src/main/java/net/sf/jabref/gui/errorconsole/ErrorConsoleViewModel.java create mode 100644 src/main/java/net/sf/jabref/logic/error/MessagePriority.java create mode 100644 src/main/java/net/sf/jabref/logic/error/ObservableMessageWithPriority.java create mode 100644 src/main/java/net/sf/jabref/logic/logging/ObservableMessages.java create mode 100644 src/main/resources/net/sf/jabref/gui/errorconsole/ErrorConsole.css create mode 100644 src/main/resources/net/sf/jabref/gui/errorconsole/ErrorConsole.fxml diff --git a/CHANGELOG.md b/CHANGELOG.md index 3bb897e55f7..13bc5918da3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `# - Redesigned about dialog. - Redesigned key bindings dialog. - Redesigned journal abbreviations dialog. + - Redesigned error console. ### Changed diff --git a/build.gradle b/build.gradle index ef43fc87127..106a1a25e04 100644 --- a/build.gradle +++ b/build.gradle @@ -117,6 +117,8 @@ dependencies { compile 'org.apache.logging.log4j:log4j-api:2.6.2' compile 'org.apache.logging.log4j:log4j-core:2.6.2' + compile 'de.saxsys:mvvmfx:1.3.0' + testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:1.10.19' testCompile 'com.github.tomakehurst:wiremock:2.1.9' diff --git a/src/main/java/net/sf/jabref/gui/FXAlert.java b/src/main/java/net/sf/jabref/gui/FXAlert.java index 36cc652b81c..9dbdd4875bb 100644 --- a/src/main/java/net/sf/jabref/gui/FXAlert.java +++ b/src/main/java/net/sf/jabref/gui/FXAlert.java @@ -23,6 +23,7 @@ import javafx.fxml.FXMLLoader; import javafx.scene.control.Alert; import javafx.scene.image.Image; +import javafx.stage.Modality; import javafx.stage.Stage; import net.sf.jabref.Globals; @@ -71,26 +72,29 @@ public void windowGainedFocus(WindowEvent e) { } }; - - public FXAlert(AlertType type, String title, Image image) { - this(type, title); + public FXAlert(AlertType type, String title, Image image, boolean isModal) { + this(type, title, isModal); setDialogIcon(image); } - public FXAlert(AlertType type, String title) { - this(type); + public FXAlert(AlertType type, String title, boolean isModal) { + this(type, isModal); setTitle(title); } - public FXAlert(AlertType type) { + public FXAlert(AlertType type, boolean isModal) { super(type); Stage fxDialogWindow = getDialogWindow(); - + fxDialogWindow.setOnCloseRequest(evt -> this.close()); + if (isModal) { + initModality(Modality.APPLICATION_MODAL); + } else { + initModality(Modality.NONE); + } fxDialogWindow.setOnShown(evt -> { - setSwingWindowsEnabledAndFocusable(false); + setSwingWindowsEnabledAndFocusable(!isModal); setLocationRelativeToMainWindow(); }); - fxDialogWindow.setOnHiding(evt -> setSwingWindowsEnabledAndFocusable(true)); fxDialogWindow.setOnCloseRequest(evt -> this.close()); diff --git a/src/main/java/net/sf/jabref/gui/FXDialogs.java b/src/main/java/net/sf/jabref/gui/FXDialogs.java index 25fcec6fd52..daac9f1785e 100644 --- a/src/main/java/net/sf/jabref/gui/FXDialogs.java +++ b/src/main/java/net/sf/jabref/gui/FXDialogs.java @@ -119,14 +119,14 @@ public static Optional showCustomButtonDialogAndWait(AlertType type, */ public static Optional showCustomDialogAndWait(String title, DialogPane contentPane, ButtonType... buttonTypes) { - FXAlert alert = new FXAlert(AlertType.NONE, title); + FXAlert alert = new FXAlert(AlertType.NONE, title, true); alert.setDialogPane(contentPane); alert.getButtonTypes().setAll(buttonTypes); return alert.showAndWait(); } private static FXAlert createDialog(AlertType type, String title, String content) { - FXAlert alert = new FXAlert(type, title); + FXAlert alert = new FXAlert(type, title, true); alert.setHeaderText(null); alert.setContentText(content); return alert; diff --git a/src/main/java/net/sf/jabref/gui/JabRefFrame.java b/src/main/java/net/sf/jabref/gui/JabRefFrame.java index 584bdb0c309..6f3d52638e0 100644 --- a/src/main/java/net/sf/jabref/gui/JabRefFrame.java +++ b/src/main/java/net/sf/jabref/gui/JabRefFrame.java @@ -419,7 +419,7 @@ public void actionPerformed(ActionEvent e) { private final AbstractAction manageJournals = new ManageJournalsAction(); private final AbstractAction databaseProperties = new DatabasePropertiesAction(); private final AbstractAction bibtexKeyPattern = new BibtexKeyPatternAction(); - private final AbstractAction errorConsole = new ErrorConsoleAction(this, Globals.getStreamEavesdropper(), GuiAppender.CACHE); + private final AbstractAction errorConsole = new ErrorConsoleAction(Globals.getStreamEavesdropper(), GuiAppender.CACHE); private final AbstractAction dbConnect = new GeneralAction(Actions.DB_CONNECT, Localization.menuTitle("Connect to external SQL database"), diff --git a/src/main/java/net/sf/jabref/gui/actions/ErrorConsoleAction.java b/src/main/java/net/sf/jabref/gui/actions/ErrorConsoleAction.java index 0379bc3a750..a35620b2909 100644 --- a/src/main/java/net/sf/jabref/gui/actions/ErrorConsoleAction.java +++ b/src/main/java/net/sf/jabref/gui/actions/ErrorConsoleAction.java @@ -15,17 +15,14 @@ */ package net.sf.jabref.gui.actions; -import java.awt.Dimension; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.Action; -import javax.swing.JFrame; -import javax.swing.JOptionPane; -import javax.swing.JScrollPane; -import javax.swing.JTabbedPane; -import javax.swing.JTextArea; +import javafx.application.Platform; + +import net.sf.jabref.gui.errorconsole.ErrorConsoleView; import net.sf.jabref.logic.error.StreamEavesdropper; import net.sf.jabref.logic.l10n.Localization; import net.sf.jabref.logic.logging.Cache; @@ -39,57 +36,14 @@ */ public class ErrorConsoleAction extends AbstractAction { - private final JFrame frame; - private final StreamEavesdropper streamEavesdropper; - private final Cache cache; - - public ErrorConsoleAction(JFrame frame, StreamEavesdropper streamEavesdropper, Cache cache) { - super(Localization.menuTitle("Show error console")); - this.streamEavesdropper = streamEavesdropper; - this.cache = cache; + public ErrorConsoleAction(StreamEavesdropper streamEavesdropper, Cache cache) { + super(Localization.menuTitle("Show developer information")); putValue(Action.SHORT_DESCRIPTION, Localization.lang("Display all error messages")); - this.frame = frame; } @Override public void actionPerformed(ActionEvent e) { - displayErrorConsole(frame); - } - - private void displayErrorConsole(JFrame parent) { - JTabbedPane tabbed = new JTabbedPane(); - - addTextArea(tabbed, Localization.lang("Log"), cache.get()); - addTextArea(tabbed, Localization.lang("Exceptions"), streamEavesdropper.getErrorMessages(), - Localization.lang("No exceptions have occurred.")); - addTextArea(tabbed, Localization.lang("Output"), streamEavesdropper.getOutput()); - - tabbed.setPreferredSize(new Dimension(500, 500)); - - JOptionPane.showMessageDialog(parent, tabbed, - Localization.lang("Program output"), JOptionPane.ERROR_MESSAGE); + Platform.runLater(() -> new ErrorConsoleView().show()); } - /** - * @param tabbed the tabbed pane to add the tab to - * @param output the text to display in the tab - * @param ifEmpty Text to output if textbox is emtpy. may be null - */ - private static void addTextArea(JTabbedPane tabbed, String title, String output, String ifEmpty) { - JTextArea ta = new JTextArea(output); - ta.setEditable(false); - if ((ifEmpty != null) && (ta.getText().isEmpty())) { - ta.setText(ifEmpty); - } - JScrollPane sp = new JScrollPane(ta); - tabbed.addTab(title, sp); - } - - /** - * @param tabbed the tabbed pane to add the tab to - * @param output the text to display in the tab - */ - private static void addTextArea(JTabbedPane tabbed, String title, String output) { - addTextArea(tabbed, title, output, null); - } } diff --git a/src/main/java/net/sf/jabref/gui/errorconsole/ErrorConsoleView.java b/src/main/java/net/sf/jabref/gui/errorconsole/ErrorConsoleView.java new file mode 100644 index 00000000000..047c37ae0d6 --- /dev/null +++ b/src/main/java/net/sf/jabref/gui/errorconsole/ErrorConsoleView.java @@ -0,0 +1,93 @@ +/* Copyright (C) 2016 JabRef contributors. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +package net.sf.jabref.gui.errorconsole; + +import javafx.fxml.FXML; +import javafx.scene.control.Alert.AlertType; +import javafx.scene.control.Button; +import javafx.scene.control.ButtonBar; +import javafx.scene.control.DialogPane; +import javafx.scene.control.Label; +import javafx.scene.control.ListView; +import javafx.scene.control.ToggleButton; +import javafx.stage.Stage; + +import net.sf.jabref.gui.FXAlert; +import net.sf.jabref.logic.error.ObservableMessageWithPriority; +import net.sf.jabref.logic.l10n.Localization; + +import com.airhacks.afterburner.views.FXMLView; + +public class ErrorConsoleView extends FXMLView { + + private final ErrorConsoleViewModel errorViewModel = new ErrorConsoleViewModel(); + + @FXML + private Button closeButton; + @FXML + private Button copyLogButton; + @FXML + private Button createIssueButton; + @FXML + private ToggleButton developerButton; + @FXML + private ListView allMessage; + + public ErrorConsoleView() { + super(); + bundle = Localization.getMessages(); + } + + public void show() { + FXAlert errorConsole = new FXAlert(AlertType.ERROR, Localization.lang("Developer information"), false); + + // create extra Error-Icon for Dialogpane in JavaFX + Label img = new Label(); + img.getStyleClass().addAll("alert", "error", "dialog-pane"); + img.setScaleX(1.5); + img.setScaleY(1.5); + DialogPane pane = (DialogPane) this.getView(); + pane.setGraphic(img); + errorConsole.setDialogPane(pane); + errorConsole.setResizable(true); + errorConsole.show(); + } + + @FXML + private void initialize() { + ButtonBar.setButtonData(developerButton, ButtonBar.ButtonData.LEFT); + ButtonBar.setButtonData(createIssueButton, ButtonBar.ButtonData.LEFT); + errorViewModel.setUpListView(allMessage, developerButton); + } + + @FXML + private void copyLogButton() { + errorViewModel.copyLog(); + } + + @FXML + private void createIssueButton() { + errorViewModel.createIssue(); + } + + // handler for close of error console + @FXML + private void closeErrorDialog() { + Stage stage = (Stage) closeButton.getScene().getWindow(); + stage.close(); + } + +} diff --git a/src/main/java/net/sf/jabref/gui/errorconsole/ErrorConsoleViewModel.java b/src/main/java/net/sf/jabref/gui/errorconsole/ErrorConsoleViewModel.java new file mode 100644 index 00000000000..74c148bf3b9 --- /dev/null +++ b/src/main/java/net/sf/jabref/gui/errorconsole/ErrorConsoleViewModel.java @@ -0,0 +1,147 @@ +/* Copyright (C) 2016 JabRef contributors. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ +package net.sf.jabref.gui.errorconsole; + +import java.io.IOException; +import java.net.URLEncoder; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; + +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.collections.ObservableList; +import javafx.collections.transformation.FilteredList; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.scene.control.ToggleButton; +import javafx.util.Callback; + +import net.sf.jabref.Globals; +import net.sf.jabref.JabRefGUI; +import net.sf.jabref.gui.ClipBoardManager; +import net.sf.jabref.gui.FXDialogs; +import net.sf.jabref.gui.desktop.JabRefDesktop; +import net.sf.jabref.logic.error.MessagePriority; +import net.sf.jabref.logic.error.ObservableMessageWithPriority; +import net.sf.jabref.logic.l10n.Localization; +import net.sf.jabref.logic.logging.ObservableMessages; +import net.sf.jabref.logic.util.BuildInfo; + +public class ErrorConsoleViewModel { + + private BooleanProperty developerInformation = new SimpleBooleanProperty(); + private final String CREATEISSUEURL = "https://github.com/JabRef/jabref/issues/new"; + private final DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + private final Date date = new Date(); + + /** + * Create allMessage ListView, which shows the filtered entries (default at first only the Log entries), + * when the ToggleButton "developerButton" is disable. + * If ToggleButton "developerButton" is enable, then it should show all entries + * @param allMessage + * @param developerButton (default is disable at start) + */ + + public void setUpListView(ListView allMessage, ToggleButton developerButton) { + ObservableList masterData = ObservableMessages.INSTANCE.messagesPropety(); + + FilteredList filteredList = new FilteredList<>(masterData, t -> !t.isFilteredProperty().get()); + allMessage.setItems(filteredList); + + developerInformation.bind(developerButton.selectedProperty()); + developerInformation.addListener((observable, oldValue, newValue) -> { + if (newValue) { + masterData.forEach(message -> message.setIsFiltered(false)); + + } else { + masterData.forEach(message -> message.setIsFiltered(message.getPriority() != MessagePriority.LOW)); + } + }); + + // handler for listCell appearance (example for exception Cell) + allMessage.setCellFactory(new Callback, ListCell>() { + @Override + public ListCell call(ListView listView) { + return new ListCell() { + @Override + public void updateItem(ObservableMessageWithPriority omp, boolean empty) { + super.updateItem(omp, empty); + if (omp != null) { + setText(omp.getMessage()); + getStyleClass().clear(); + if (omp.getPriority() == MessagePriority.HIGH) { + if (developerInformation.getValue()) { + getStyleClass().add("exception"); + } + } else if (omp.getPriority() == MessagePriority.MEDIUM) { + if (developerInformation.getValue()) { + getStyleClass().add("output"); + } + } else { + getStyleClass().add("log"); + } + } else { + setText(""); + } + } + }; + } + }); + } + + // handler for copy of Log Entry in the List by click of Copy Log Button + public void copyLog() { + ObservableList masterData = ObservableMessages.INSTANCE.messagesPropety(); + masterData.forEach(message -> message.setIsFiltered(message.getPriority() != MessagePriority.LOW)); + FilteredList filteredLowPriorityList = new FilteredList<>(masterData, t -> !t.isFilteredProperty().get()); + String logContentCopy = ""; + + for (ObservableMessageWithPriority message : filteredLowPriorityList) { + logContentCopy += message.getMessage() + System.lineSeparator(); + } + new ClipBoardManager().setClipboardContents(logContentCopy); + JabRefGUI.getMainFrame().output(Localization.lang("Log is copied")); + } + + // handler for create Issues on GitHub by click of Create Issue Button + public void createIssue() { + try { + String info = String.format("JabRef %s%n%s %s %s %nJava %s\n\n", Globals.BUILD_INFO.getVersion(), BuildInfo.OS, + BuildInfo.OS_VERSION, BuildInfo.OS_ARCH, BuildInfo.JAVA_VERSION); + String issueTitle = "?title=" + URLEncoder.encode(Localization.lang("Automatic Bug Report-") + dateFormat.format(date), "UTF-8"); + String issueBody = "&body=" + URLEncoder.encode(info, "UTF-8"); + JabRefGUI.getMainFrame().output(Localization.lang("Create Issue on GitHub is successful!")); + FXDialogs.showInformationDialogAndWait(Localization.lang("Create Issue successful!"), + Localization.lang("Your issue was created in your browser!") + "\n\n" + + Localization.lang("The log and exception information was copied to your clipboard.") + "\n\n" + + Localization.lang("Please paste this information (with Ctrl+V) in the issue description!")); + JabRefDesktop.openBrowser(CREATEISSUEURL + issueTitle + issueBody); + //get contents of listview + ObservableList masterData = ObservableMessages.INSTANCE.messagesPropety(); + String listViewContent = ""; + for (ObservableMessageWithPriority message : masterData) { + listViewContent += message.getMessage() + System.lineSeparator(); + } + // format the contents of listview in Issue Description + String issueDetails = ("
\n" + "" + Localization.lang("Detail information:") + "\n```\n" + listViewContent + "\n```\n
"); + new ClipBoardManager().setClipboardContents(issueDetails); + } catch (IOException e) { + e.printStackTrace(); + } + + } +} diff --git a/src/main/java/net/sf/jabref/gui/help/AboutDialogView.java b/src/main/java/net/sf/jabref/gui/help/AboutDialogView.java index 4a0b2c62928..9faa43ef71e 100644 --- a/src/main/java/net/sf/jabref/gui/help/AboutDialogView.java +++ b/src/main/java/net/sf/jabref/gui/help/AboutDialogView.java @@ -31,7 +31,7 @@ public AboutDialogView() { } public void show() { - FXAlert aboutDialog = new FXAlert(AlertType.INFORMATION, Localization.lang("About JabRef")); + FXAlert aboutDialog = new FXAlert(AlertType.INFORMATION, Localization.lang("About JabRef"), true); aboutDialog.setDialogPane((DialogPane) this.getView()); aboutDialog.show(); } diff --git a/src/main/java/net/sf/jabref/gui/keyboard/KeyBindingsDialogView.java b/src/main/java/net/sf/jabref/gui/keyboard/KeyBindingsDialogView.java index bd4d1471ad3..0098032bfd7 100644 --- a/src/main/java/net/sf/jabref/gui/keyboard/KeyBindingsDialogView.java +++ b/src/main/java/net/sf/jabref/gui/keyboard/KeyBindingsDialogView.java @@ -17,7 +17,7 @@ public KeyBindingsDialogView() { } public void show(KeyBindingPreferences keyBindingPreferences) { - FXAlert keyBindingsDialog = new FXAlert(AlertType.INFORMATION, Localization.lang("Key bindings")); + FXAlert keyBindingsDialog = new FXAlert(AlertType.INFORMATION, Localization.lang("Key bindings"),true); keyBindingsDialog.setDialogPane((DialogPane) this.getView()); KeyBindingsDialogViewModel controller = (KeyBindingsDialogViewModel) fxmlLoader.getController(); controller.setKeyBindingPreferences(keyBindingPreferences); diff --git a/src/main/java/net/sf/jabref/logic/error/MessagePriority.java b/src/main/java/net/sf/jabref/logic/error/MessagePriority.java new file mode 100644 index 00000000000..bcd4b852116 --- /dev/null +++ b/src/main/java/net/sf/jabref/logic/error/MessagePriority.java @@ -0,0 +1,5 @@ +package net.sf.jabref.logic.error; + +public enum MessagePriority { + LOW, MEDIUM, HIGH; +} diff --git a/src/main/java/net/sf/jabref/logic/error/ObservableMessageWithPriority.java b/src/main/java/net/sf/jabref/logic/error/ObservableMessageWithPriority.java new file mode 100644 index 00000000000..6418e2d7db1 --- /dev/null +++ b/src/main/java/net/sf/jabref/logic/error/ObservableMessageWithPriority.java @@ -0,0 +1,48 @@ +package net.sf.jabref.logic.error; + +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.SimpleBooleanProperty; + +public class ObservableMessageWithPriority { + + private String message; + + private MessagePriority priority; + + private BooleanProperty isFiltered = new SimpleBooleanProperty(); + + public ObservableMessageWithPriority(String message, MessagePriority priority) { + this.message = message; + this.priority = priority; + isFiltered.set(priority != MessagePriority.LOW); + } + + public MessagePriority getPriority() { + return priority; + } + + public void setPriority(MessagePriority priority) { + this.priority = priority; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public boolean getIsFiltered() { + return isFiltered.get(); + } + + public void setIsFiltered(boolean isFiltered) { + this.isFiltered.set(isFiltered); + } + + public BooleanProperty isFilteredProperty() { + return isFiltered; + } + +} diff --git a/src/main/java/net/sf/jabref/logic/error/StreamEavesdropper.java b/src/main/java/net/sf/jabref/logic/error/StreamEavesdropper.java index db17bfd7c58..07bb545116b 100644 --- a/src/main/java/net/sf/jabref/logic/error/StreamEavesdropper.java +++ b/src/main/java/net/sf/jabref/logic/error/StreamEavesdropper.java @@ -32,6 +32,11 @@ public class StreamEavesdropper { private final PrintStream systemErr; + public StreamEavesdropper(PrintStream systemOut, PrintStream systemErr) { + this.systemOut = systemOut; + this.systemErr = systemErr; + } + public static StreamEavesdropper eavesdropOnSystem() { StreamEavesdropper streamEavesdropper = new StreamEavesdropper(System.out, System.err); System.setOut(streamEavesdropper.getOutStream()); @@ -39,23 +44,14 @@ public static StreamEavesdropper eavesdropOnSystem() { return streamEavesdropper; } - public StreamEavesdropper(PrintStream systemOut, PrintStream systemErr) { - this.systemOut = systemOut; - this.systemErr = systemErr; - } - - public PrintStream getOutStream() { + public TeeStream getOutStream() { PrintStream consoleOut = new PrintStream(outByteStream); - return new TeeStream(consoleOut, systemOut); + return new TeeStream(consoleOut, systemOut, MessagePriority.MEDIUM); } - public PrintStream getErrStream() { + public TeeStream getErrStream() { PrintStream consoleErr = new PrintStream(errByteStream); - return new TeeStream(consoleErr, systemErr); - } - - public String getErrorMessages() { - return errByteStream.toString(); + return new TeeStream(consoleErr, systemErr, MessagePriority.HIGH); } public String getOutput() { diff --git a/src/main/java/net/sf/jabref/logic/error/TeeStream.java b/src/main/java/net/sf/jabref/logic/error/TeeStream.java index bfa9ec7a54a..d53f246ad6a 100644 --- a/src/main/java/net/sf/jabref/logic/error/TeeStream.java +++ b/src/main/java/net/sf/jabref/logic/error/TeeStream.java @@ -18,6 +18,8 @@ import java.io.PrintStream; +import net.sf.jabref.logic.logging.ObservableMessages; + /** * All writes to this print stream are copied to two print streams *

@@ -26,10 +28,12 @@ public class TeeStream extends PrintStream { private final PrintStream outStream; + private final MessagePriority priority; - public TeeStream(PrintStream out1, PrintStream out2) { + public TeeStream(PrintStream out1, PrintStream out2, MessagePriority priority) { super(out1); this.outStream = out2; + this.priority = priority; } @Override @@ -37,6 +41,11 @@ public void write(byte[] buf, int off, int len) { try { super.write(buf, off, len); outStream.write(buf, off, len); + String s = new String(buf, off, len); + if (!s.equals(System.lineSeparator())) { + ObservableMessageWithPriority messageWithPriority = new ObservableMessageWithPriority(s.replaceAll(System.lineSeparator(), ""), priority); + ObservableMessages.INSTANCE.add(messageWithPriority); + } } catch (Exception ignored) { // Ignored } diff --git a/src/main/java/net/sf/jabref/logic/logging/Cache.java b/src/main/java/net/sf/jabref/logic/logging/Cache.java index eb704b6e96e..c666c828a94 100644 --- a/src/main/java/net/sf/jabref/logic/logging/Cache.java +++ b/src/main/java/net/sf/jabref/logic/logging/Cache.java @@ -18,6 +18,9 @@ import java.util.LinkedList; import java.util.Queue; +import net.sf.jabref.logic.error.MessagePriority; +import net.sf.jabref.logic.error.ObservableMessageWithPriority; + /** * Enables caching of messages */ @@ -38,9 +41,8 @@ public Cache(int capacity) { this.capacity = capacity; } - public synchronized String get() { - ensureCacheIsFresh(); - return cache; + public Queue get() { + return queue; } private void ensureCacheIsFresh() { @@ -51,6 +53,8 @@ private void ensureCacheIsFresh() { public synchronized void add(String message) { queue.add(message); + ObservableMessageWithPriority messageWithPriority = new ObservableMessageWithPriority(message.replaceAll(System.lineSeparator(), ""), MessagePriority.LOW); + ObservableMessages.INSTANCE.add(messageWithPriority); if (isCapacityExceeded()) { // if we reached capacity, we switch to the "real" caching method and remove old lines diff --git a/src/main/java/net/sf/jabref/logic/logging/ObservableMessages.java b/src/main/java/net/sf/jabref/logic/logging/ObservableMessages.java new file mode 100644 index 00000000000..179a4c4526d --- /dev/null +++ b/src/main/java/net/sf/jabref/logic/logging/ObservableMessages.java @@ -0,0 +1,25 @@ +package net.sf.jabref.logic.logging; + +import javafx.beans.Observable; +import javafx.beans.property.ListProperty; +import javafx.beans.property.SimpleListProperty; +import javafx.collections.FXCollections; + +import net.sf.jabref.logic.error.ObservableMessageWithPriority; + +public enum ObservableMessages { + + INSTANCE; + + private final ListProperty messages = new SimpleListProperty<>(FXCollections.observableArrayList((item -> + new Observable[]{item.isFilteredProperty()}))); + + public ListProperty messagesPropety() { + return messages; + } + + public void add(ObservableMessageWithPriority s) { + messages.add(s); + } + +} diff --git a/src/main/resources/l10n/JabRef_da.properties b/src/main/resources/l10n/JabRef_da.properties index be8dea997c1..2f195caa01d 100644 --- a/src/main/resources/l10n/JabRef_da.properties +++ b/src/main/resources/l10n/JabRef_da.properties @@ -1663,10 +1663,21 @@ Copy_version_to_clipboard= Copied_version_to_clipboard= BibTeX_key= Message= +Log_is_copied= MathSciNet_Review= Reset_Bindings= +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= Get_fulltext= @@ -1754,6 +1765,7 @@ Entry_from_%0=Post_fra_%0 Merge_entry_with_%0_information= Updated_entry_with_info_from_%0= +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list= @@ -1778,3 +1790,7 @@ Duplicated_journal_abbreviation= Duplicated_Journal_File= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/JabRef_de.properties b/src/main/resources/l10n/JabRef_de.properties index 6e6139c041f..865bf4fba62 100644 --- a/src/main/resources/l10n/JabRef_de.properties +++ b/src/main/resources/l10n/JabRef_de.properties @@ -2378,8 +2378,20 @@ Copy_version_to_clipboard=Kopiere_Version_in_die_Zwischenablage Copied_version_to_clipboard=Version_in_die_Zwischenablage_kopiert BibTeX_key= Message= +Log_is_copied= MathSciNet_Review= +Reset_Bindings=Schnellzugriffe_zur�cksetzten +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= Reset_Bindings=Schnellzugriffe_zurücksetzten Audio_CD=Audio_CD @@ -2527,6 +2539,7 @@ Entry_from_%0=Eintrag_basierend_auf_%0 Merge_entry_with_%0_information=Eintrag_mit_%0-Informationen_zusammenführen Updated_entry_with_info_from_%0=Eintrag_wurde_mit_%0-Information_aktualisiert. +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list= @@ -2552,3 +2565,7 @@ Duplicated_Journal_File= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index 2caaa2a0459..0a450e9bd5c 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -2238,10 +2238,24 @@ Copied_version_to_clipboard=Copied_version_to_clipboard BibTeX_key=BibTeX_key Message=Message +Log_is_copied=Log_is_copied MathSciNet_Review=MathSciNet_Review Reset_Bindings=Reset_Bindings +Detail_information\:=Detail_information\: +Automatic_Bug_Report-=Automatic_Bug_Report- +Create_Issue_on_GitHub_is_successful!=Create_Issue_on_GitHub_is_successful! +Create_Issue_successful!=Create_Issue_successful! +Your_issue_was_created_in_your_browser!=Your_issue_was_created_in_your_browser! +The_log_and_exception_information_was_copied_to_your_clipboard.=The_log_and_exception_information_was_copied_to_your_clipboard. +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!=Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description! + + +Developer_information=Developer_information +Create_Issue=Create_Issue +*incl._log_and_error_details=*incl._log_and_error_details +Details_infomation=Details_infomation: Decryption_not_supported.=Decryption_not_supported. diff --git a/src/main/resources/l10n/JabRef_es.properties b/src/main/resources/l10n/JabRef_es.properties index b575e9bb95d..bbb49ce97aa 100644 --- a/src/main/resources/l10n/JabRef_es.properties +++ b/src/main/resources/l10n/JabRef_es.properties @@ -1565,10 +1565,21 @@ Copy_version_to_clipboard= Copied_version_to_clipboard= BibTeX_key= Message= +Log_is_copied= MathSciNet_Review= Reset_Bindings= +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= Get_fulltext= @@ -1655,6 +1666,7 @@ Entry_from_%0=Entrada_desde_%0 Merge_entry_with_%0_information=Fusionar_entrada_con_informaciçon_%0 Updated_entry_with_info_from_%0=Entrada_actualizada_con_información_del_%0 +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list= @@ -1680,3 +1692,7 @@ Duplicated_Journal_File= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/JabRef_fa.properties b/src/main/resources/l10n/JabRef_fa.properties index c61925d2266..c5f54b018d6 100644 --- a/src/main/resources/l10n/JabRef_fa.properties +++ b/src/main/resources/l10n/JabRef_fa.properties @@ -2345,10 +2345,21 @@ Copy_version_to_clipboard= Copied_version_to_clipboard= BibTeX_key= Message= +Log_is_copied= MathSciNet_Review= Reset_Bindings= +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= Get_fulltext= @@ -2435,6 +2446,7 @@ Updated_entry_with_info_from_%0= Get_BibTeX_data_from_%0= No_%0_found= +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list= @@ -2460,3 +2472,7 @@ Duplicated_Journal_File= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/JabRef_fr.properties b/src/main/resources/l10n/JabRef_fr.properties index f5f051d5ca6..02372704431 100644 --- a/src/main/resources/l10n/JabRef_fr.properties +++ b/src/main/resources/l10n/JabRef_fr.properties @@ -1610,8 +1610,19 @@ booktitle_ends_with_'conference_on'=le_titre_d'ouvrage_se_termine_par_'conferenc BibTeX_key= Message= +Log_is_copied= MathSciNet_Review= Reset_Bindings= +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= BibTeX_key=Clef_BibTeX Message=Message @@ -1698,6 +1709,7 @@ Entry_from_%0=Entrée_à_partir_du_%0 Merge_entry_with_%0_information=Fusionner_l'entrée_sur_la_base_des_informations_du_%0 Updated_entry_with_info_from_%0=Entrée_mise_à_jour_à_partir_des_informations_du_%0 +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list= @@ -1723,3 +1735,7 @@ Duplicated_Journal_File= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/JabRef_in.properties b/src/main/resources/l10n/JabRef_in.properties index 55989f6b9db..6791de2aaa1 100644 --- a/src/main/resources/l10n/JabRef_in.properties +++ b/src/main/resources/l10n/JabRef_in.properties @@ -1584,10 +1584,21 @@ Copy_version_to_clipboard= Copied_version_to_clipboard= BibTeX_key= Message= +Log_is_copied= MathSciNet_Review= Reset_Bindings= +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= Get_fulltext= @@ -1672,6 +1683,7 @@ Entry_from_%0=Entri_dari_%0 Merge_entry_with_%0_information=Gabung_entri_dengan_informasi_%0 Updated_entry_with_info_from_%0=Entri_diperbarui_dengan_informasi_dari_%0 +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list= @@ -1697,3 +1709,7 @@ Duplicated_Journal_File= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/JabRef_it.properties b/src/main/resources/l10n/JabRef_it.properties index 0d978b6f86f..2aaaeb5e6b0 100644 --- a/src/main/resources/l10n/JabRef_it.properties +++ b/src/main/resources/l10n/JabRef_it.properties @@ -1684,10 +1684,21 @@ Copy_version_to_clipboard= Copied_version_to_clipboard= BibTeX_key= Message= +Log_is_copied= MathSciNet_Review= Reset_Bindings= +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= Get_fulltext= @@ -1773,6 +1784,7 @@ Entry_from_%0= Merge_entry_with_%0_information= Updated_entry_with_info_from_%0= +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list= @@ -1798,3 +1810,7 @@ Duplicated_Journal_File= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/JabRef_ja.properties b/src/main/resources/l10n/JabRef_ja.properties index 3cc12ebe5b8..3a5bb4f170c 100644 --- a/src/main/resources/l10n/JabRef_ja.properties +++ b/src/main/resources/l10n/JabRef_ja.properties @@ -2326,9 +2326,20 @@ Copied_version_to_clipboard=クリップボードにコピーされたバージ booktitle_ends_with_'conference_on'= BibTeX_key= Message= +Log_is_copied= MathSciNet_Review= Reset_Bindings= +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= booktitle_ends_with_'conference_on'=「conference_on」で終わるbooktitle BibTeX_key=BibTeX鍵 @@ -2418,6 +2429,7 @@ Entry_from_%0=%0からの項目 Merge_entry_with_%0_information=項目を%0情報とマージ Updated_entry_with_info_from_%0=%0からの情報で項目を更新しました +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list @@ -2444,3 +2456,7 @@ Duplicated_Journal_File= Remove_list= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/JabRef_nl.properties b/src/main/resources/l10n/JabRef_nl.properties index f6fc6ad5f48..b72ffbf398b 100644 --- a/src/main/resources/l10n/JabRef_nl.properties +++ b/src/main/resources/l10n/JabRef_nl.properties @@ -2357,10 +2357,21 @@ Copy_version_to_clipboard= Copied_version_to_clipboard= BibTeX_key= Message= +Log_is_copied= MathSciNet_Review= Reset_Bindings= +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= Get_fulltext= @@ -2447,6 +2458,7 @@ Entry_from_%0= Merge_entry_with_%0_information= Updated_entry_with_info_from_%0= +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list= @@ -2472,3 +2484,7 @@ Duplicated_Journal_File= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/JabRef_no.properties b/src/main/resources/l10n/JabRef_no.properties index d099aa99e31..325084a6896 100644 --- a/src/main/resources/l10n/JabRef_no.properties +++ b/src/main/resources/l10n/JabRef_no.properties @@ -2753,6 +2753,19 @@ Copy_version_to_clipboard= Copied_version_to_clipboard= BibTeX_key= Message= +Log_is_copied= +MathSciNet_Review= +Reset_Bindings= +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= MathSciNet_Review= @@ -2839,6 +2852,7 @@ Entry_from_%0= Merge_entry_with_%0_information= Updated_entry_with_info_from_%0= +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list= @@ -2864,3 +2878,7 @@ Duplicated_Journal_File= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/JabRef_pt_BR.properties b/src/main/resources/l10n/JabRef_pt_BR.properties index 8428e055b27..833accf9c59 100644 --- a/src/main/resources/l10n/JabRef_pt_BR.properties +++ b/src/main/resources/l10n/JabRef_pt_BR.properties @@ -1579,10 +1579,21 @@ Copy_version_to_clipboard= Copied_version_to_clipboard= BibTeX_key= Message= +Log_is_copied= MathSciNet_Review= Reset_Bindings= +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= Get_fulltext= @@ -1669,6 +1680,7 @@ Entry_from_%0= Merge_entry_with_%0_information= Updated_entry_with_info_from_%0= +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list= @@ -1694,3 +1706,7 @@ Duplicated_Journal_File= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/JabRef_ru.properties b/src/main/resources/l10n/JabRef_ru.properties index 7ddada2b4e3..b5b26fa5dc8 100644 --- a/src/main/resources/l10n/JabRef_ru.properties +++ b/src/main/resources/l10n/JabRef_ru.properties @@ -2325,10 +2325,21 @@ Copy_version_to_clipboard= Copied_version_to_clipboard= BibTeX_key= Message= +Log_is_copied= MathSciNet_Review= Reset_Bindings= +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= Get_fulltext= @@ -2414,6 +2425,7 @@ Entry_from_%0= Merge_entry_with_%0_information= Updated_entry_with_info_from_%0= +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list= @@ -2439,3 +2451,7 @@ Duplicated_Journal_File= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/JabRef_sv.properties b/src/main/resources/l10n/JabRef_sv.properties index cf7bdc20d6a..39a94d894a4 100644 --- a/src/main/resources/l10n/JabRef_sv.properties +++ b/src/main/resources/l10n/JabRef_sv.properties @@ -1529,6 +1529,17 @@ Message= MathSciNet_Review= Reset_Bindings= +Log_is_copied= +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= BibTeX_key=BibTeX-nyckel Message=Meddelande @@ -1617,6 +1628,7 @@ Entry_from_%0=Post_från_%0 Merge_entry_with_%0_information=Kombinera_post_med_information_från_%0 Updated_entry_with_info_from_%0=Uppdaterade_post_med_information_från_%0 +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list= @@ -1642,3 +1654,7 @@ Duplicated_Journal_File= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/JabRef_tr.properties b/src/main/resources/l10n/JabRef_tr.properties index 7cec8ef8d14..0f89fc3e143 100644 --- a/src/main/resources/l10n/JabRef_tr.properties +++ b/src/main/resources/l10n/JabRef_tr.properties @@ -1599,9 +1599,20 @@ Copied_version_to_clipboard=Sürüm_panoya_kopyalandı BibTeX_key= Message= +Log_is_copied= MathSciNet_Review= Reset_Bindings= +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= BibTeX_key=BibTeX_anahtarı Message=Mesaj @@ -1690,6 +1701,7 @@ Entry_from_%0=%0'den_girdi Merge_entry_with_%0_information=%0_bilgisiyle_girdiyi_birleştir Updated_entry_with_info_from_%0=%0'den_edinilen_bilgiyle_girdi_güncellendi +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list= @@ -1715,3 +1727,7 @@ Duplicated_Journal_File= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/JabRef_vi.properties b/src/main/resources/l10n/JabRef_vi.properties index 7fc559f7c2d..29637eaa555 100644 --- a/src/main/resources/l10n/JabRef_vi.properties +++ b/src/main/resources/l10n/JabRef_vi.properties @@ -2349,10 +2349,21 @@ Copy_version_to_clipboard= Copied_version_to_clipboard= BibTeX_key= Message= +Log_is_copied= MathSciNet_Review= Reset_Bindings= +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= Get_fulltext= @@ -2440,6 +2451,7 @@ Entry_from_%0= Merge_entry_with_%0_information= Updated_entry_with_info_from_%0= +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list= @@ -2465,3 +2477,7 @@ Duplicated_Journal_File= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/JabRef_zh.properties b/src/main/resources/l10n/JabRef_zh.properties index 21c762d1f36..2bd76f4fa03 100644 --- a/src/main/resources/l10n/JabRef_zh.properties +++ b/src/main/resources/l10n/JabRef_zh.properties @@ -1591,10 +1591,21 @@ Copy_version_to_clipboard= Copied_version_to_clipboard= BibTeX_key= Message= +Log_is_copied= MathSciNet_Review= Reset_Bindings= +Developer_information= +Create_Issue= +*incl._log_and_error_details= +Automatic_Bug_Report-= +Create_Issue_on_GitHub_is_successful!= +Create_Issue_successful!= +Detail_information\:= +Your_issue_was_created_in_your_browser!= +The_log_and_exception_information_was_copied_to_your_clipboard.= +Please_paste_this_information_(with_Ctrl+V)_in_the_issue_description!= Get_fulltext= @@ -1681,6 +1692,7 @@ Entry_from_%0= Merge_entry_with_%0_information= Updated_entry_with_info_from_%0=已根据_%0_更新记录 +<<<<<<< 94f3d138ab452bf75072736eaa65cabe0bf06d13 Add_existing_file= Create_new_list= Remove_list= @@ -1706,3 +1718,7 @@ Duplicated_Journal_File= JabRef_built_in_list= IEEE_built_in_list= +======= + +Details_infomation= +>>>>>>> result conflict ErrorConsoleDialog diff --git a/src/main/resources/l10n/Menu_da.properties b/src/main/resources/l10n/Menu_da.properties index 41b42e25280..de1c0d72e7b 100644 --- a/src/main/resources/l10n/Menu_da.properties +++ b/src/main/resources/l10n/Menu_da.properties @@ -110,6 +110,7 @@ Quality=Kvalitet New_%0_database=Ny_%0-database Disable_highlight_groups_matching_entries=Deaktiver_fremhævningen_af_grupperede_indgange +Show_developer_information= Online_help_forum= diff --git a/src/main/resources/l10n/Menu_de.properties b/src/main/resources/l10n/Menu_de.properties index 88c08890144..9857dbbb1fc 100644 --- a/src/main/resources/l10n/Menu_de.properties +++ b/src/main/resources/l10n/Menu_de.properties @@ -207,6 +207,7 @@ Quality=Qualität New_%0_database=Neue_%0_Datenbank Disable_highlight_groups_matching_entries=Keine_Gruppen_hervorheben +Show_developer_information= Online_help_forum=Online-Hilfeforum diff --git a/src/main/resources/l10n/Menu_en.properties b/src/main/resources/l10n/Menu_en.properties index d9d1998a274..db83e5416fa 100644 --- a/src/main/resources/l10n/Menu_en.properties +++ b/src/main/resources/l10n/Menu_en.properties @@ -31,6 +31,7 @@ Disable_highlight_groups_matching_entries=Disable_highlight_groups_matching_entr # Help Online_help=Online_help +Show_developer_information=Show_developer information Donate_to_JabRef=Donate_to_JabRef Manage_content_selectors=Manage_&content_selectors Manage_custom_exports=&Manage_custom_exports diff --git a/src/main/resources/l10n/Menu_es.properties b/src/main/resources/l10n/Menu_es.properties index a613bfddc53..eeec2806a06 100644 --- a/src/main/resources/l10n/Menu_es.properties +++ b/src/main/resources/l10n/Menu_es.properties @@ -136,6 +136,7 @@ Quality=Calidad New_%0_database=Nueva_base_de_datos_%0 Disable_highlight_groups_matching_entries=Inhabilitar_grupos_destacados_coincidentes_con_las_entradas +Show_developer_information= Online_help_forum= diff --git a/src/main/resources/l10n/Menu_fa.properties b/src/main/resources/l10n/Menu_fa.properties index f38641cb3f9..ca65f263692 100644 --- a/src/main/resources/l10n/Menu_fa.properties +++ b/src/main/resources/l10n/Menu_fa.properties @@ -133,7 +133,7 @@ Quality=کیفیت New_%0_database=پایگاه‌داده‌ی_%0_جدید Disable_highlight_groups_matching_entries=گروه‌های_مشخص_شده‌ی_مطابق_با_مدخل‌ها_را_حذف_کن - +Show_developer_information= Online_help_forum= diff --git a/src/main/resources/l10n/Menu_fr.properties b/src/main/resources/l10n/Menu_fr.properties index d3dfeb69c39..18c5842bf85 100644 --- a/src/main/resources/l10n/Menu_fr.properties +++ b/src/main/resources/l10n/Menu_fr.properties @@ -122,6 +122,7 @@ Quality=Qualité New_%0_database=Nouvelle_base_%0 Disable_highlight_groups_matching_entries=Désactiver_le_surlignement_des_groupes_correspondant_à_des_entrées +Show_developer_information= Online_help_forum=Forum_d'aide_en_ligne diff --git a/src/main/resources/l10n/Menu_in.properties b/src/main/resources/l10n/Menu_in.properties index 9ee687a33ed..33e6e96f2bf 100644 --- a/src/main/resources/l10n/Menu_in.properties +++ b/src/main/resources/l10n/Menu_in.properties @@ -107,6 +107,7 @@ Quality=Kualitas New_%0_database=Basisdata_%0_baru Disable_highlight_groups_matching_entries=Pewarnaan_grup_entri_yang_sesuai_tidak_aktif +Show_developer_information= Online_help_forum= diff --git a/src/main/resources/l10n/Menu_it.properties b/src/main/resources/l10n/Menu_it.properties index cfaadac1afa..78f1f13e880 100644 --- a/src/main/resources/l10n/Menu_it.properties +++ b/src/main/resources/l10n/Menu_it.properties @@ -128,6 +128,7 @@ Quality=Qualità New_%0_database=Nuovo_database_%0 Disable_highlight_groups_matching_entries=Disattiva_l'evidenziazione_dei_gruppi_corrispondenti_alle_voci +Show_developer_information= Online_help_forum= diff --git a/src/main/resources/l10n/Menu_ja.properties b/src/main/resources/l10n/Menu_ja.properties index 1eb8fac63b5..f0ba463785b 100644 --- a/src/main/resources/l10n/Menu_ja.properties +++ b/src/main/resources/l10n/Menu_ja.properties @@ -135,6 +135,7 @@ Quality=品質 New_%0_database=新しい%0データベース Disable_highlight_groups_matching_entries=項目に一致するグループの着色を無効化 +Show_developer_information= Online_help_forum= diff --git a/src/main/resources/l10n/Menu_nl.properties b/src/main/resources/l10n/Menu_nl.properties index 69f1cba0aff..5412267d326 100644 --- a/src/main/resources/l10n/Menu_nl.properties +++ b/src/main/resources/l10n/Menu_nl.properties @@ -215,6 +215,7 @@ Quality=Kwaliteit New_%0_database=Nieuwe_%0_database Disable_highlight_groups_matching_entries=Overeenkomende_groepen_van_invoer_oplichten_uitschakelen +Show_developer_information= Online_help_forum= diff --git a/src/main/resources/l10n/Menu_no.properties b/src/main/resources/l10n/Menu_no.properties index dccdceb312c..f82c530fb1b 100644 --- a/src/main/resources/l10n/Menu_no.properties +++ b/src/main/resources/l10n/Menu_no.properties @@ -128,6 +128,7 @@ Quality=Kvalitet New_%0_database=Ny %0-database Disable_highlight_groups_matching_entries=Deaktiver markerte samsvarende oppføringer +Show_developer_information= Online_help_forum= diff --git a/src/main/resources/l10n/Menu_pt_BR.properties b/src/main/resources/l10n/Menu_pt_BR.properties index e86922a3058..f851332c90a 100644 --- a/src/main/resources/l10n/Menu_pt_BR.properties +++ b/src/main/resources/l10n/Menu_pt_BR.properties @@ -109,6 +109,7 @@ Quality=Qualidade New_%0_database=%0_novas_bases_de_dados Disable_highlight_groups_matching_entries=Desabilitar_destacar_grupos_contendo_referências +Show_developer_information= Online_help_forum= diff --git a/src/main/resources/l10n/Menu_ru.properties b/src/main/resources/l10n/Menu_ru.properties index 99edd470395..526fd96c844 100644 --- a/src/main/resources/l10n/Menu_ru.properties +++ b/src/main/resources/l10n/Menu_ru.properties @@ -132,6 +132,7 @@ Quality=Качество New_%0_database=Новая_база_данных_%0 Disable_highlight_groups_matching_entries=Отключить_выделение_групп,_соответствующих_выделенным_записям +Show_developer_information= Online_help_forum= diff --git a/src/main/resources/l10n/Menu_sv.properties b/src/main/resources/l10n/Menu_sv.properties index 08a77ba35f5..98f2672a200 100644 --- a/src/main/resources/l10n/Menu_sv.properties +++ b/src/main/resources/l10n/Menu_sv.properties @@ -98,6 +98,7 @@ Groups=&Grupper Delete_entry=Radera_post Check_integrity=Testa_&integriteten Quality=&Kvalitet +Show_developer_information= Online_help_forum=Onlineforum diff --git a/src/main/resources/l10n/Menu_tr.properties b/src/main/resources/l10n/Menu_tr.properties index dccfd74960c..c35f5e2879c 100644 --- a/src/main/resources/l10n/Menu_tr.properties +++ b/src/main/resources/l10n/Menu_tr.properties @@ -111,6 +111,7 @@ Quality=Kalite New_%0_database=Yeni_%0_veri_tabanı Disable_highlight_groups_matching_entries=Vurgulu_gruplarla_eşleşen_girdileri_etkisizleştir +Show_developer_information= Online_help_forum= diff --git a/src/main/resources/l10n/Menu_vi.properties b/src/main/resources/l10n/Menu_vi.properties index 12e3ad6768c..2e7ae36ea52 100644 --- a/src/main/resources/l10n/Menu_vi.properties +++ b/src/main/resources/l10n/Menu_vi.properties @@ -134,6 +134,7 @@ Quality= New_%0_database= Disable_highlight_groups_matching_entries= +Show_developer_information= Online_help_forum= diff --git a/src/main/resources/l10n/Menu_zh.properties b/src/main/resources/l10n/Menu_zh.properties index 939d20cc897..d5e3e44ed31 100644 --- a/src/main/resources/l10n/Menu_zh.properties +++ b/src/main/resources/l10n/Menu_zh.properties @@ -133,6 +133,7 @@ Quality=质量 New_%0_database=新建_%0_数据库 Disable_highlight_groups_matching_entries=禁用高亮显示包含选中记录的分组 +Show_developer_information= Online_help_forum= diff --git a/src/main/resources/net/sf/jabref/gui/errorconsole/ErrorConsole.css b/src/main/resources/net/sf/jabref/gui/errorconsole/ErrorConsole.css new file mode 100644 index 00000000000..57fb8c8250e --- /dev/null +++ b/src/main/resources/net/sf/jabref/gui/errorconsole/ErrorConsole.css @@ -0,0 +1,24 @@ +.info-sections { + -fx-padding: 5px; +} + +.exception{ + -fx-text-fill: red; +} + +.log { +-fx-text-fill: blue; +} + +.output { +-fx-text-fill: black; +} + +.custom-buttons { + -fx-padding: 5px; +} + +.dialog-pane *.button-bar { + -fx-max-height: 0; + -fx-pref-height: 0; +} diff --git a/src/main/resources/net/sf/jabref/gui/errorconsole/ErrorConsole.fxml b/src/main/resources/net/sf/jabref/gui/errorconsole/ErrorConsole.fxml new file mode 100644 index 00000000000..bdf8c298485 --- /dev/null +++ b/src/main/resources/net/sf/jabref/gui/errorconsole/ErrorConsole.fxml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + +