From 082e2e03c8e2aec5ed651b52bc0168f0ef8bb19f Mon Sep 17 00:00:00 2001
From: 1160300608 <18846010223@163.com>
Date: Wed, 15 Aug 2018 10:25:17 +0800
Subject: [PATCH 1/4] convert the NewEntryType Dialog to javafx
---
src/main/java/org/jabref/gui/BasePanel.java | 9 +-
src/main/java/org/jabref/gui/EntryType.fxml | 70 ++++
.../java/org/jabref/gui/EntryTypeDialog.java | 354 ------------------
.../java/org/jabref/gui/EntryTypeView.java | 293 +++++++++++++++
.../org/jabref/gui/EntryTypeViewModel.java | 13 +
.../jabref/gui/actions/NewEntryAction.java | 8 +-
.../actions/NewEntryFromPlainTextAction.java | 8 +-
7 files changed, 392 insertions(+), 363 deletions(-)
create mode 100644 src/main/java/org/jabref/gui/EntryType.fxml
delete mode 100644 src/main/java/org/jabref/gui/EntryTypeDialog.java
create mode 100644 src/main/java/org/jabref/gui/EntryTypeView.java
create mode 100644 src/main/java/org/jabref/gui/EntryTypeViewModel.java
diff --git a/src/main/java/org/jabref/gui/BasePanel.java b/src/main/java/org/jabref/gui/BasePanel.java
index c7820865c80..9101ef58a86 100644
--- a/src/main/java/org/jabref/gui/BasePanel.java
+++ b/src/main/java/org/jabref/gui/BasePanel.java
@@ -798,10 +798,13 @@ public BibEntry newEntry(EntryType type) {
EntryType actualType = type;
if (actualType == null) {
// Find out what type is wanted.
- final EntryTypeDialog etd = new EntryTypeDialog(frame);
+ //final EntryTypeDialog etd = new EntryTypeDialog(frame);
+ final EntryTypeView etv = new EntryTypeView(frame.getCurrentBasePanel());
// We want to center the dialog, to make it look nicer.
- etd.setVisible(true);
- actualType = etd.getChoice();
+ //etd.setVisible(true);
+ //actualType = etd.getChoice();
+ etv.showAndWait();
+ actualType = etv.getChoice();
}
if (actualType != null) { // Only if the dialog was not canceled.
final BibEntry be = new BibEntry(actualType.getName());
diff --git a/src/main/java/org/jabref/gui/EntryType.fxml b/src/main/java/org/jabref/gui/EntryType.fxml
new file mode 100644
index 00000000000..30d301ffce7
--- /dev/null
+++ b/src/main/java/org/jabref/gui/EntryType.fxml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/org/jabref/gui/EntryTypeDialog.java b/src/main/java/org/jabref/gui/EntryTypeDialog.java
deleted file mode 100644
index d37d398420a..00000000000
--- a/src/main/java/org/jabref/gui/EntryTypeDialog.java
+++ /dev/null
@@ -1,354 +0,0 @@
-package org.jabref.gui;
-
-import java.awt.BorderLayout;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
-import java.awt.Insets;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.util.Collection;
-import java.util.List;
-import java.util.Optional;
-import java.util.concurrent.ExecutionException;
-
-import javax.swing.AbstractAction;
-import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import javax.swing.SwingUtilities;
-import javax.swing.SwingWorker;
-
-import org.jabref.Globals;
-import org.jabref.gui.importer.ImportInspectionDialog;
-import org.jabref.gui.keyboard.KeyBinding;
-import org.jabref.logic.bibtex.DuplicateCheck;
-import org.jabref.logic.bibtexkeypattern.BibtexKeyGenerator;
-import org.jabref.logic.importer.FetcherException;
-import org.jabref.logic.importer.IdBasedFetcher;
-import org.jabref.logic.importer.WebFetchers;
-import org.jabref.logic.l10n.Localization;
-import org.jabref.model.EntryTypes;
-import org.jabref.model.database.BibDatabaseMode;
-import org.jabref.model.entry.BibEntry;
-import org.jabref.model.entry.BiblatexEntryTypes;
-import org.jabref.model.entry.BibtexEntryTypes;
-import org.jabref.model.entry.EntryType;
-import org.jabref.model.entry.IEEETranEntryTypes;
-import org.jabref.preferences.JabRefPreferences;
-
-import com.jgoodies.forms.builder.ButtonBarBuilder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Dialog that prompts the user to choose a type for an entry.
- * Returns null if canceled.
- */
-public class EntryTypeDialog extends JabRefDialog implements ActionListener {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(EntryTypeDialog.class);
- private static final int COLUMN = 3;
- private final JabRefFrame frame;
- private final CancelAction cancelAction = new CancelAction();
- private EntryType type;
- private SwingWorker, Void> fetcherWorker = new FetcherWorker();
- private JButton generateButton;
- private JTextField idTextField;
- private JComboBox comboBox;
-
- public EntryTypeDialog(JabRefFrame frame) {
- // modal dialog
- super(null, true, EntryTypeDialog.class);
-
- this.frame = frame;
-
- setTitle(Localization.lang("Select entry type"));
-
- addWindowListener(new WindowAdapter() {
-
- @Override
- public void windowClosing(WindowEvent e) {
- cancelAction.actionPerformed(null);
- }
- });
-
- getContentPane().setLayout(new BorderLayout());
- getContentPane().add(createCancelButtonBarPanel(), BorderLayout.SOUTH);
- getContentPane().add(createEntryGroupsPanel(), BorderLayout.CENTER);
-
- pack();
- setResizable(false);
- }
-
- private JPanel createEntryGroupsPanel() {
- JPanel panel = new JPanel();
- panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
-
- if (frame.getCurrentBasePanel().getBibDatabaseContext().isBiblatexMode()) {
- panel.add(createEntryGroupPanel("biblatex", BiblatexEntryTypes.ALL));
-
- List customTypes = EntryTypes.getAllCustomTypes(BibDatabaseMode.BIBLATEX);
- if (!customTypes.isEmpty()) {
- panel.add(createEntryGroupPanel(Localization.lang("Custom"), customTypes));
- }
- } else {
- panel.add(createEntryGroupPanel("BibTeX", BibtexEntryTypes.ALL));
- panel.add(createEntryGroupPanel("IEEETran", IEEETranEntryTypes.ALL));
-
- List customTypes = EntryTypes.getAllCustomTypes(BibDatabaseMode.BIBTEX);
- if (!customTypes.isEmpty()) {
- panel.add(createEntryGroupPanel(Localization.lang("Custom"), customTypes));
- }
- }
- panel.add(createIdFetcherPanel());
-
- return panel;
- }
-
- private JPanel createCancelButtonBarPanel() {
- JButton cancel = new JButton(Localization.lang("Cancel"));
- cancel.addActionListener(this);
-
- // Make ESC close dialog, equivalent to clicking Cancel.
- cancel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(Globals.getKeyPrefs().getKey(KeyBinding.CLOSE), "close");
- cancel.getActionMap().put("close", cancelAction);
-
- JPanel buttons = new JPanel();
- ButtonBarBuilder bb = new ButtonBarBuilder(buttons);
- bb.addGlue();
- bb.addButton(cancel);
- bb.addGlue();
- return buttons;
- }
-
- private JPanel createEntryGroupPanel(String groupTitle, Collection extends EntryType> entries) {
- JPanel panel = new JPanel();
- GridBagLayout bagLayout = new GridBagLayout();
- panel.setLayout(bagLayout);
- GridBagConstraints constraints = new GridBagConstraints();
- constraints.anchor = GridBagConstraints.WEST;
- constraints.fill = GridBagConstraints.HORIZONTAL;
- constraints.insets = new Insets(4, 4, 4, 4);
- // column count
- int col = 0;
-
- for (EntryType entryType : entries) {
- TypeButton entryButton = new TypeButton(entryType.getName(), entryType);
- entryButton.addActionListener(this);
- // Check if we should finish the row.
- col++;
- if (col == EntryTypeDialog.COLUMN) {
- col = 0;
- constraints.gridwidth = GridBagConstraints.REMAINDER;
- } else {
- constraints.gridwidth = 1;
- }
- bagLayout.setConstraints(entryButton, constraints);
- panel.add(entryButton);
- }
- panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), groupTitle));
-
- return panel;
- }
-
- private JPanel createIdFetcherPanel() {
- JLabel fetcherLabel = new JLabel(Localization.lang("ID type"));
- JLabel idLabel = new JLabel(Localization.lang("ID"));
- generateButton = new JButton(Localization.lang("Generate"));
- idTextField = new JTextField("");
- comboBox = new JComboBox<>();
-
- WebFetchers.getIdBasedFetchers(Globals.prefs.getImportFormatPreferences()).forEach(fetcher -> comboBox.addItem(fetcher.getName()));
-
- comboBox.setSelectedItem(Globals.prefs.get(JabRefPreferences.ID_ENTRY_GENERATOR));
-
- generateButton.addActionListener(action -> {
- fetcherWorker.execute();
- });
-
- comboBox.addActionListener(e -> {
- idTextField.requestFocus();
- idTextField.selectAll();
- });
-
- idTextField.addActionListener(event -> fetcherWorker.execute());
-
- JPanel jPanel = new JPanel();
-
- GridBagConstraints constraints = new GridBagConstraints();
- constraints.insets = new Insets(4, 4, 4, 4);
-
- GridBagLayout layout = new GridBagLayout();
- jPanel.setLayout(layout);
-
- constraints.fill = GridBagConstraints.HORIZONTAL;
-
- constraints.gridx = 0;
- constraints.gridy = 0;
- constraints.weightx = 1;
- jPanel.add(fetcherLabel, constraints);
-
- constraints.gridx = 1;
- constraints.gridy = 0;
- constraints.weightx = 2;
- jPanel.add(comboBox, constraints);
-
- constraints.gridx = 0;
- constraints.gridy = 1;
- constraints.weightx = 1;
- jPanel.add(idLabel, constraints);
-
- constraints.gridx = 1;
- constraints.gridy = 1;
- constraints.weightx = 2;
- jPanel.add(idTextField, constraints);
-
- constraints.gridy = 2;
- constraints.gridx = 0;
- constraints.gridwidth = 2;
- constraints.fill = GridBagConstraints.NONE;
- jPanel.add(generateButton, constraints);
-
- jPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Localization.lang("ID-based entry generator")));
-
- SwingUtilities.invokeLater(() -> idTextField.requestFocus());
-
- return jPanel;
- }
-
- private void stopFetching() {
- if (fetcherWorker.getState() == SwingWorker.StateValue.STARTED) {
- fetcherWorker.cancel(true);
- }
- }
-
- @Override
- public void actionPerformed(ActionEvent e) {
- if (e.getSource() instanceof TypeButton) {
- type = ((TypeButton) e.getSource()).getType();
- }
- stopFetching();
- dispose();
- }
-
- public EntryType getChoice() {
- return type;
- }
-
- static class TypeButton extends JButton implements Comparable {
-
- private final EntryType type;
-
- TypeButton(String label, EntryType type) {
- super(label);
- this.type = type;
- }
-
- @Override
- public int compareTo(TypeButton o) {
- return type.getName().compareTo(o.type.getName());
- }
-
- public EntryType getType() {
- return type;
- }
- }
-
- class CancelAction extends AbstractAction {
-
- public CancelAction() {
- super("Cancel");
- }
-
- @Override
- public void actionPerformed(ActionEvent e) {
- stopFetching();
- dispose();
- }
- }
-
- private class FetcherWorker extends SwingWorker, Void> {
-
- private boolean fetcherException = false;
- private String fetcherExceptionMessage = "";
- private IdBasedFetcher fetcher = null;
- private String searchID = "";
-
- @Override
- protected Optional doInBackground() throws Exception {
- Optional bibEntry = Optional.empty();
- SwingUtilities.invokeLater(() -> {
- generateButton.setEnabled(false);
- generateButton.setText(Localization.lang("Searching..."));
- });
-
- Globals.prefs.put(JabRefPreferences.ID_ENTRY_GENERATOR, String.valueOf(comboBox.getSelectedItem()));
- fetcher = WebFetchers.getIdBasedFetchers(Globals.prefs.getImportFormatPreferences()).get(comboBox.getSelectedIndex());
- searchID = idTextField.getText();
- if (!searchID.isEmpty()) {
- try {
- bibEntry = fetcher.performSearchById(searchID);
- } catch (FetcherException e) {
- LOGGER.error(e.getMessage(), e);
- fetcherException = true;
- fetcherExceptionMessage = e.getMessage();
- }
- }
- return bibEntry;
- }
-
- @Override
- protected void done() {
- try {
- Optional result = get();
- if (result.isPresent()) {
- final BibEntry bibEntry = result.get();
- if ((DuplicateCheck.containsDuplicate(frame.getCurrentBasePanel().getDatabase(), bibEntry, frame.getCurrentBasePanel().getBibDatabaseContext().getMode()).isPresent())) {
- //If there are duplicates starts ImportInspectionDialog
- final BasePanel panel = frame.getCurrentBasePanel();
-
- ImportInspectionDialog diag = new ImportInspectionDialog(frame, panel, Localization.lang("Import"), false);
- diag.addEntry(bibEntry);
- diag.entryListComplete();
- diag.setVisible(true);
- diag.toFront();
- } else {
- // Regenerate CiteKey of imported BibEntry
- new BibtexKeyGenerator(frame.getCurrentBasePanel().getBibDatabaseContext(), Globals.prefs.getBibtexKeyPatternPreferences()).generateAndSetKey(bibEntry);
- // Update Timestamps
- if (Globals.prefs.getTimestampPreferences().includeCreatedTimestamp()) {
- bibEntry.setField(Globals.prefs.getTimestampPreferences().getTimestampField(), Globals.prefs.getTimestampPreferences().now());
- }
- frame.getCurrentBasePanel().insertEntry(bibEntry);
- }
-
- dispose();
- } else if (searchID.trim().isEmpty()) {
- frame.getDialogService().showWarningDialogAndWait(Localization.lang("Empty search ID"),
- Localization.lang("The given search ID was empty."));
- } else if (!fetcherException) {
- frame.getDialogService().showErrorDialogAndWait(Localization.lang("No files found.",
- Localization.lang("Fetcher '%0' did not find an entry for id '%1'.", fetcher.getName(), searchID) + "\n" + fetcherExceptionMessage));
- } else {
- frame.getDialogService().showErrorDialogAndWait(Localization.lang("Error"), Localization.lang("Error while fetching from %0", fetcher.getName()) + "." + "\n" + fetcherExceptionMessage);
- }
- fetcherWorker = new FetcherWorker();
- SwingUtilities.invokeLater(() -> {
- idTextField.requestFocus();
- idTextField.selectAll();
- generateButton.setText(Localization.lang("Generate"));
- generateButton.setEnabled(true);
- });
- } catch (ExecutionException | InterruptedException e) {
- LOGGER.error(String.format("Exception during fetching when using fetcher '%s' with entry id '%s'.", searchID, fetcher.getName()), e);
- }
- }
- }
-}
diff --git a/src/main/java/org/jabref/gui/EntryTypeView.java b/src/main/java/org/jabref/gui/EntryTypeView.java
new file mode 100644
index 00000000000..2c83c929a36
--- /dev/null
+++ b/src/main/java/org/jabref/gui/EntryTypeView.java
@@ -0,0 +1,293 @@
+package org.jabref.gui;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.ExecutionException;
+
+import javafx.application.Platform;
+import javafx.concurrent.Task;
+import javafx.concurrent.Worker;
+import javafx.event.Event;
+import javafx.fxml.FXML;
+import javafx.geometry.HPos;
+import javafx.geometry.Insets;
+import javafx.scene.control.Button;
+import javafx.scene.control.ButtonType;
+import javafx.scene.control.ComboBox;
+import javafx.scene.control.TextField;
+import javafx.scene.control.TitledPane;
+import javafx.scene.layout.GridPane;
+import javafx.scene.layout.VBox;
+import javafx.stage.Window;
+
+import org.jabref.Globals;
+import org.jabref.gui.importer.ImportInspectionDialog;
+import org.jabref.gui.util.BaseDialog;
+import org.jabref.gui.util.IconValidationDecorator;
+import org.jabref.logic.bibtex.DuplicateCheck;
+import org.jabref.logic.bibtexkeypattern.BibtexKeyGenerator;
+import org.jabref.logic.importer.FetcherException;
+import org.jabref.logic.importer.IdBasedFetcher;
+import org.jabref.logic.importer.WebFetchers;
+import org.jabref.logic.l10n.Localization;
+import org.jabref.model.EntryTypes;
+import org.jabref.model.database.BibDatabaseMode;
+import org.jabref.model.entry.BibEntry;
+import org.jabref.model.entry.BiblatexEntryTypes;
+import org.jabref.model.entry.BibtexEntryTypes;
+import org.jabref.model.entry.EntryType;
+import org.jabref.model.entry.IEEETranEntryTypes;
+import org.jabref.preferences.JabRefPreferences;
+
+import com.airhacks.afterburner.views.ViewLoader;
+import de.saxsys.mvvmfx.utils.validation.visualization.ControlsFxVisualizer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Dialog that prompts the user to choose a type for an entry.
+ * Returns null if canceled.
+ */
+public class EntryTypeView extends BaseDialog {
+
+ @FXML private Button generateButton;
+ @FXML private Button cancelButton;
+ @FXML private ButtonType button;
+ @FXML private TextField idTextField;
+ @FXML private ComboBox comboBox;
+ @FXML private TitledPane biblatexPane;
+ @FXML private TitledPane bibTexPane;
+ @FXML private TitledPane ieeetranPane;
+ @FXML private TitledPane customPane;
+ @FXML private VBox vBox;
+
+ private EntryType type;
+ private static final int COLUMN = 3;
+ private static final Logger LOGGER = LoggerFactory.getLogger(EntryTypeView.class);
+
+ private final ControlsFxVisualizer visualizer = new ControlsFxVisualizer();
+ private final BasePanel basePanel;
+ private Task> fetcherWorker = new FetcherWorker();
+
+ public EntryTypeView(BasePanel basePanel) {
+ this.basePanel = basePanel;
+ this.setTitle(Localization.lang("Select entry type"));
+ //viewModel = new EntryTypeViewModel(basePanel);
+ ViewLoader.view(this)
+ .load()
+ .setAsDialogPane(this);
+
+ //ControlHelper.setAction(cancelButton, getDialogPane(), event -> cancelHandle(event));
+ cancelButton.setOnAction(event -> cancelHandle(event));
+
+ //cancelButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(Globals.getKeyPrefs().getKey(KeyBinding.CLOSE), "close");
+ //cancelButton.getActionMap().put("close", cancelAction);
+ //ControlHelper.setAction(generateButton, getDialogPane(), action -> {
+ // fetcherWorker.run();
+ //});
+ generateButton.setOnAction(action -> {
+ fetcherWorker.run();
+ });
+ comboBox.onActionProperty().addListener(e -> {
+ idTextField.requestFocus();
+ idTextField.selectAll();
+ });
+
+ idTextField.onActionProperty().addListener(event -> fetcherWorker.run());
+
+ if (basePanel.getBibDatabaseContext().isBiblatexMode()) {
+ biblatexPane.setContent(createPane(BiblatexEntryTypes.ALL));
+ vBox.getChildren().remove(bibTexPane);
+ vBox.getChildren().remove(ieeetranPane);
+ List customTypes = EntryTypes.getAllCustomTypes(BibDatabaseMode.BIBLATEX);
+ if (EntryTypes.getAllCustomTypes(BibDatabaseMode.BIBLATEX).isEmpty()) {
+ vBox.getChildren().remove(customPane);
+ } else {
+ customPane.setContent(createPane(customTypes));
+ }
+ //vBox.getChildren().remove(customPane);
+ //bibTexPane.setVisible(false);
+ //ieeetranPane.setVisible(false);
+ } else {
+ bibTexPane.setContent(createPane(BibtexEntryTypes.ALL));
+ ieeetranPane.setContent(createPane(IEEETranEntryTypes.ALL));
+ vBox.getChildren().remove(biblatexPane);
+
+ List customTypes = EntryTypes.getAllCustomTypes(BibDatabaseMode.BIBTEX);
+ if (EntryTypes.getAllCustomTypes(BibDatabaseMode.BIBTEX).isEmpty()) {
+ vBox.getChildren().remove(customPane);
+ } else {
+ customPane.setContent(createPane(customTypes));
+ }
+ //vBox.getChildren().remove(customPane);
+ //biblatexPane.setVisible(false);
+ }
+
+ }
+
+ private GridPane createPane(Collection extends EntryType> entries) {
+ GridPane gridpane = new GridPane();
+ gridpane.setPadding(new Insets(4));
+ gridpane.setVgap(4);
+ // row count
+ int row = 0;
+ // col count
+ int col = 0;
+ for (EntryType entryType : entries) {
+ TypeButton entryButton = new TypeButton(entryType.getName(), entryType);
+ entryButton.setOnAction(event -> cancelHandle(event));
+ if (col == EntryTypeView.COLUMN) {
+ col = 0;
+ row++;
+ //constraints.gridwidth = GridBagConstraints.REMAINDER;
+ } else {
+ //constraints.gridwidth = 1;
+ }
+ GridPane.setHalignment(entryButton, HPos.CENTER);
+ gridpane.add(entryButton, col, row);
+ col++;
+ }
+ return gridpane;
+ }
+
+ @FXML
+ public void initialize() {
+ visualizer.setDecoration(new IconValidationDecorator());
+
+ WebFetchers.getIdBasedFetchers(Globals.prefs.getImportFormatPreferences()).forEach(fetcher -> comboBox.getItems().add(fetcher.getName()));
+ comboBox.setValue(Globals.prefs.get(JabRefPreferences.ID_ENTRY_GENERATOR));
+
+ Window window = this.getDialogPane().getScene().getWindow();
+ window.setOnCloseRequest(event -> window.hide());
+ // this.getDialogPane().getButtonTypes().add(ButtonType.CLOSE);
+ // Node closeButton = this.getDialogPane().lookupButton(ButtonType.CLOSE);
+ //
+ // closeButton.managedProperty().bind(closeButton.visibleProperty());
+ // closeButton.setVisible(false);
+ //bibTexPane.managedProperty().bind(biblatexPane.visibleProperty());
+ //ieeetranPane.managedProperty().bind(ieeetranPane.visibleProperty());
+ //biblatexPane.managedProperty().bind(biblatexPane.visibleProperty());
+ }
+
+ public EntryType getChoice() {
+ return type;
+ }
+
+ private void stopFetching() {
+ if (fetcherWorker.getState() == Worker.State.RUNNING) {
+ fetcherWorker.cancel(true);
+ }
+ }
+
+ static class TypeButton extends Button implements Comparable {
+
+ private final EntryType type;
+
+ TypeButton(String label, EntryType type) {
+ super(label);
+ this.type = type;
+ }
+
+ @Override
+ public int compareTo(TypeButton o) {
+ return type.getName().compareTo(o.type.getName());
+ }
+
+ public EntryType getType() {
+ return type;
+ }
+ }
+
+ private class FetcherWorker extends Task> {
+
+ private boolean fetcherException = false;
+ private String fetcherExceptionMessage = "";
+ private IdBasedFetcher fetcher = null;
+ private String searchID = "";
+
+ @Override
+ protected void done() {
+ try {
+ Optional result = get();
+ if (result.isPresent()) {
+ final BibEntry bibEntry = result.get();
+ if ((DuplicateCheck.containsDuplicate(basePanel.getDatabase(), bibEntry, basePanel.getBibDatabaseContext().getMode()).isPresent())) {
+ //If there are duplicates starts ImportInspectionDialog
+ final BasePanel panel = basePanel;
+
+ ImportInspectionDialog diag = new ImportInspectionDialog(basePanel.frame(), panel, Localization.lang("Import"), false);
+ diag.addEntry(bibEntry);
+ diag.entryListComplete();
+ diag.setVisible(true);
+ diag.toFront();
+ } else {
+ // Regenerate CiteKey of imported BibEntry
+ new BibtexKeyGenerator(basePanel.getBibDatabaseContext(), Globals.prefs.getBibtexKeyPatternPreferences()).generateAndSetKey(bibEntry);
+ // Update Timestamps
+ if (Globals.prefs.getTimestampPreferences().includeCreatedTimestamp()) {
+ bibEntry.setField(Globals.prefs.getTimestampPreferences().getTimestampField(), Globals.prefs.getTimestampPreferences().now());
+ }
+ basePanel.insertEntry(bibEntry);
+ }
+
+ close();
+ } else if (searchID.trim().isEmpty()) {
+ basePanel.frame().getDialogService().showWarningDialogAndWait(Localization.lang("Empty search ID"),
+ Localization.lang("The given search ID was empty."));
+ } else if (!fetcherException) {
+ basePanel.frame().getDialogService().showErrorDialogAndWait(Localization.lang("No files found.",
+ Localization.lang("Fetcher '%0' did not find an entry for id '%1'.", fetcher.getName(), searchID) + "\n" + fetcherExceptionMessage));
+ } else {
+ basePanel.frame().getDialogService().showErrorDialogAndWait(Localization.lang("Error"), Localization.lang("Error while fetching from %0", fetcher.getName()) + "." + "\n" + fetcherExceptionMessage);
+ }
+ fetcherWorker = new FetcherWorker();
+ Platform.runLater(() -> {
+ idTextField.requestFocus();
+ idTextField.selectAll();
+ //((Button) (getDialogPane().lookupButton(generateButton))).setText(Localization.lang("Generate"));
+ //((Button) (getDialogPane().lookupButton(generateButton))).setDisable(true);
+ generateButton.setText(Localization.lang("Generate"));
+ generateButton.setDisable(true);
+ });
+ } catch (ExecutionException | InterruptedException e) {
+ LOGGER.error(String.format("Exception during fetching when using fetcher '%s' with entry id '%s'.", searchID, fetcher.getName()), e);
+ }
+ }
+
+ @Override
+ protected Optional call() throws Exception {
+ Optional bibEntry = Optional.empty();
+ Platform.runLater(() -> {
+ //((Button) (getDialogPane().lookupButton(generateButton))).setText(Localization.lang("Searching..."));
+ //((Button) (getDialogPane().lookupButton(generateButton))).setDisable(true);
+ generateButton.setDisable(true);
+ generateButton.setText(Localization.lang("Searching..."));
+ });
+
+ Globals.prefs.put(JabRefPreferences.ID_ENTRY_GENERATOR, String.valueOf(comboBox.getSelectionModel().getSelectedItem()));
+ fetcher = WebFetchers.getIdBasedFetchers(Globals.prefs.getImportFormatPreferences()).get(comboBox.getSelectionModel().getSelectedIndex());
+ searchID = idTextField.getText();
+ if (!searchID.isEmpty()) {
+ try {
+ bibEntry = fetcher.performSearchById(searchID);
+ } catch (FetcherException e) {
+ LOGGER.error(e.getMessage(), e);
+ fetcherException = true;
+ fetcherExceptionMessage = e.getMessage();
+ }
+ }
+ return bibEntry;
+ }
+ }
+
+
+ @FXML
+ private void cancelHandle(Event event) {
+ if (event.getSource() instanceof TypeButton) {
+ type = ((TypeButton) event.getSource()).getType();
+ }
+ stopFetching();
+ this.getDialogPane().getScene().getWindow().hide();
+ }
+}
diff --git a/src/main/java/org/jabref/gui/EntryTypeViewModel.java b/src/main/java/org/jabref/gui/EntryTypeViewModel.java
new file mode 100644
index 00000000000..bcec627e7c3
--- /dev/null
+++ b/src/main/java/org/jabref/gui/EntryTypeViewModel.java
@@ -0,0 +1,13 @@
+package org.jabref.gui;
+
+import java.util.Objects;
+
+public class EntryTypeViewModel extends AbstractViewModel {
+
+ private final BasePanel panel;
+
+ public EntryTypeViewModel(BasePanel basePanel) {
+ Objects.requireNonNull(basePanel);
+ this.panel = basePanel;
+ }
+}
diff --git a/src/main/java/org/jabref/gui/actions/NewEntryAction.java b/src/main/java/org/jabref/gui/actions/NewEntryAction.java
index 72e657e2fb8..4ff85828234 100644
--- a/src/main/java/org/jabref/gui/actions/NewEntryAction.java
+++ b/src/main/java/org/jabref/gui/actions/NewEntryAction.java
@@ -5,7 +5,7 @@
import java.util.Optional;
import org.jabref.Globals;
-import org.jabref.gui.EntryTypeDialog;
+import org.jabref.gui.EntryTypeView;
import org.jabref.gui.JabRefFrame;
import org.jabref.model.entry.EntryType;
@@ -42,8 +42,10 @@ public void execute() {
if (type.isPresent()) {
jabRefFrame.getCurrentBasePanel().newEntry(type.get());
} else {
- EntryTypeDialog typeChoiceDialog = new EntryTypeDialog(jabRefFrame);
- typeChoiceDialog.setVisible(true);
+ //EntryTypeDialog typeChoiceDialog = new EntryTypeDialog(jabRefFrame);
+ //typeChoiceDialog.setVisible(true);
+ EntryTypeView typeChoiceDialog = new EntryTypeView(jabRefFrame.getCurrentBasePanel());
+ typeChoiceDialog.showAndWait();
EntryType selectedType = typeChoiceDialog.getChoice();
if (selectedType == null) {
return;
diff --git a/src/main/java/org/jabref/gui/actions/NewEntryFromPlainTextAction.java b/src/main/java/org/jabref/gui/actions/NewEntryFromPlainTextAction.java
index 0c048ea7ed8..a33c0121d35 100644
--- a/src/main/java/org/jabref/gui/actions/NewEntryFromPlainTextAction.java
+++ b/src/main/java/org/jabref/gui/actions/NewEntryFromPlainTextAction.java
@@ -1,6 +1,6 @@
package org.jabref.gui.actions;
-import org.jabref.gui.EntryTypeDialog;
+import org.jabref.gui.EntryTypeView;
import org.jabref.gui.JabRefFrame;
import org.jabref.gui.plaintextimport.TextInputDialog;
import org.jabref.logic.util.UpdateField;
@@ -31,8 +31,10 @@ public void execute() {
return;
}
- EntryTypeDialog typeChoiceDialog = new EntryTypeDialog(jabRefFrame);
- typeChoiceDialog.setVisible(true);
+ //EntryTypeDialog typeChoiceDialog = new EntryTypeDialog(jabRefFrame);
+ EntryTypeView typeChoiceDialog = new EntryTypeView(jabRefFrame.getCurrentBasePanel());
+ //typeChoiceDialog.setVisible(true);
+ typeChoiceDialog.showAndWait();
EntryType selectedType = typeChoiceDialog.getChoice();
if (selectedType == null) {
return;
From 78db8ec22caa65f52de9c3623d87dc09ccff057e Mon Sep 17 00:00:00 2001
From: 1160300608 <18846010223@163.com>
Date: Wed, 15 Aug 2018 10:31:30 +0800
Subject: [PATCH 2/4] delete useless class file
---
.../java/org/jabref/gui/EntryTypeViewModel.java | 13 -------------
1 file changed, 13 deletions(-)
delete mode 100644 src/main/java/org/jabref/gui/EntryTypeViewModel.java
diff --git a/src/main/java/org/jabref/gui/EntryTypeViewModel.java b/src/main/java/org/jabref/gui/EntryTypeViewModel.java
deleted file mode 100644
index bcec627e7c3..00000000000
--- a/src/main/java/org/jabref/gui/EntryTypeViewModel.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.jabref.gui;
-
-import java.util.Objects;
-
-public class EntryTypeViewModel extends AbstractViewModel {
-
- private final BasePanel panel;
-
- public EntryTypeViewModel(BasePanel basePanel) {
- Objects.requireNonNull(basePanel);
- this.panel = basePanel;
- }
-}
From b4193289031f9cd08b905792e89c480ad1414fb9 Mon Sep 17 00:00:00 2001
From: 1160300608 <18846010223@163.com>
Date: Wed, 15 Aug 2018 11:06:25 +0800
Subject: [PATCH 3/4] fix order and empty else statement
---
src/main/java/org/jabref/gui/EntryTypeView.java | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/src/main/java/org/jabref/gui/EntryTypeView.java b/src/main/java/org/jabref/gui/EntryTypeView.java
index 2c83c929a36..ddce6052f45 100644
--- a/src/main/java/org/jabref/gui/EntryTypeView.java
+++ b/src/main/java/org/jabref/gui/EntryTypeView.java
@@ -13,7 +13,6 @@
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.scene.control.Button;
-import javafx.scene.control.ButtonType;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
import javafx.scene.control.TitledPane;
@@ -51,9 +50,11 @@
*/
public class EntryTypeView extends BaseDialog {
+ private static final int COLUMN = 3;
+ private static final Logger LOGGER = LoggerFactory.getLogger(EntryTypeView.class);
+
@FXML private Button generateButton;
@FXML private Button cancelButton;
- @FXML private ButtonType button;
@FXML private TextField idTextField;
@FXML private ComboBox comboBox;
@FXML private TitledPane biblatexPane;
@@ -62,12 +63,9 @@ public class EntryTypeView extends BaseDialog {
@FXML private TitledPane customPane;
@FXML private VBox vBox;
- private EntryType type;
- private static final int COLUMN = 3;
- private static final Logger LOGGER = LoggerFactory.getLogger(EntryTypeView.class);
-
private final ControlsFxVisualizer visualizer = new ControlsFxVisualizer();
private final BasePanel basePanel;
+ private EntryType type;
private Task> fetcherWorker = new FetcherWorker();
public EntryTypeView(BasePanel basePanel) {
@@ -141,9 +139,10 @@ private GridPane createPane(Collection extends EntryType> entries) {
col = 0;
row++;
//constraints.gridwidth = GridBagConstraints.REMAINDER;
- } else {
- //constraints.gridwidth = 1;
}
+ //else {
+ //constraints.gridwidth = 1;
+ //}
GridPane.setHalignment(entryButton, HPos.CENTER);
gridpane.add(entryButton, col, row);
col++;
@@ -281,7 +280,6 @@ protected Optional call() throws Exception {
}
}
-
@FXML
private void cancelHandle(Event event) {
if (event.getSource() instanceof TypeButton) {
From 0d39e1e5003ce927639914af1593fd748c5bddda Mon Sep 17 00:00:00 2001
From: 1160300608 <18846010223@163.com>
Date: Wed, 15 Aug 2018 16:41:42 +0800
Subject: [PATCH 4/4] fix pdfImport old dialog problem
---
src/main/java/org/jabref/pdfimport/PdfImporter.java | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/src/main/java/org/jabref/pdfimport/PdfImporter.java b/src/main/java/org/jabref/pdfimport/PdfImporter.java
index 78428efab3e..691a88fa31c 100644
--- a/src/main/java/org/jabref/pdfimport/PdfImporter.java
+++ b/src/main/java/org/jabref/pdfimport/PdfImporter.java
@@ -14,7 +14,7 @@
import org.jabref.Globals;
import org.jabref.gui.BasePanel;
import org.jabref.gui.BasePanelMode;
-import org.jabref.gui.EntryTypeDialog;
+import org.jabref.gui.EntryTypeView;
import org.jabref.gui.JabRefFrame;
import org.jabref.gui.externalfiles.DroppedFileHandler;
import org.jabref.gui.externalfiletype.ExternalFileTypes;
@@ -224,8 +224,10 @@ private void doContentImport(String fileName, List res) {
private Optional createNewEntry() {
// Find out what type is desired
- EntryTypeDialog etd = new EntryTypeDialog(frame);
- etd.setVisible(true);
+ //EntryTypeDialog etd = new EntryTypeDialog(frame);
+ EntryTypeView etd = new EntryTypeView(frame.getCurrentBasePanel());
+ //etd.setVisible(true);
+ etd.showAndWait();
EntryType type = etd.getChoice();
if (type != null) { // Only if the dialog was not canceled.