diff --git a/src/main/java/org/jabref/gui/shared/MergeSharedEntryDialog.java b/src/main/java/org/jabref/gui/shared/MergeSharedEntryDialog.java
deleted file mode 100644
index 44a26afd33b..00000000000
--- a/src/main/java/org/jabref/gui/shared/MergeSharedEntryDialog.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package org.jabref.gui.shared;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-
-import javax.swing.JButton;
-import javax.swing.JDialog;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.WindowConstants;
-import javax.swing.border.EmptyBorder;
-
-import javafx.scene.Scene;
-
-import org.jabref.gui.JabRefFrame;
-import org.jabref.gui.customjfx.CustomJFXPanel;
-import org.jabref.gui.mergeentries.MergeEntries;
-import org.jabref.logic.l10n.Localization;
-import org.jabref.model.database.BibDatabaseMode;
-import org.jabref.model.database.shared.DatabaseSynchronizer;
-import org.jabref.model.entry.BibEntry;
-
-public class MergeSharedEntryDialog {
-
- private final JabRefFrame jabRefFrame;
- private final DatabaseSynchronizer dbmsSynchronizer;
- private final BibEntry localBibEntry;
- private final BibEntry sharedBibEntry;
- private final JDialog mergeDialog;
- private final MergeEntries mergeEntries;
-
-
- public MergeSharedEntryDialog(JabRefFrame jabRefFrame, DatabaseSynchronizer dbmsSynchronizer, BibEntry localBibEntry,
- BibEntry sharedBibEntry, BibDatabaseMode bibDatabaseMode) {
- this.jabRefFrame = jabRefFrame;
- this.dbmsSynchronizer = dbmsSynchronizer;
- this.localBibEntry = localBibEntry;
- this.sharedBibEntry = sharedBibEntry;
- this.mergeDialog = new JDialog((JFrame) null, Localization.lang("Update refused"), true);
- this.mergeEntries = new MergeEntries(sharedBibEntry, localBibEntry, Localization.lang("Shared entry"),
- Localization.lang("Local entry"), bibDatabaseMode);
- }
-
- public void showMergeDialog() {
-
- mergeDialog.setMinimumSize(new Dimension(600, 600));
-
- StringBuilder message = new StringBuilder();
- message.append("");
- message.append("");
- message.append(Localization.lang("Update could not be performed due to existing change conflicts."));
- message.append("");
- message.append("
");
- message.append(Localization.lang("You are not working on the newest version of BibEntry."));
- message.append("
");
- message.append(Localization.lang("Shared version: %0", String.valueOf(sharedBibEntry.getSharedBibEntryData().getVersion())));
- message.append("
");
- message.append(Localization.lang("Local version: %0", String.valueOf(localBibEntry.getSharedBibEntryData().getVersion())));
- message.append("
");
- message.append(Localization.lang("Please merge the shared entry with yours and press \"Merge entries\" to resolve this problem."));
- message.append("
");
-
- JLabel mergeInnformation = new JLabel(message.toString());
- mergeInnformation.setBorder(new EmptyBorder(9, 9, 9, 9));
-
- mergeDialog.add(mergeInnformation, BorderLayout.NORTH);
- mergeDialog.add(CustomJFXPanel.wrap(new Scene(mergeEntries)), BorderLayout.CENTER);
-
- JButton mergeButton = new JButton(Localization.lang("Merge entries"));
- mergeButton.addActionListener(e -> mergeEntries());
-
- JButton cancelButton = new JButton(Localization.lang("Cancel"));
- cancelButton.addActionListener(e -> showConfirmationDialog());
-
- JPanel buttonPanel = new JPanel();
- buttonPanel.add(mergeButton, BorderLayout.WEST);
- buttonPanel.add(cancelButton, BorderLayout.EAST);
-
- mergeDialog.add(buttonPanel, BorderLayout.SOUTH);
- mergeDialog.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
- mergeDialog.addWindowListener(new WindowAdapter() {
- @Override
- public void windowClosing(WindowEvent e) {
- showConfirmationDialog();
- }
- });
-
- mergeDialog.pack();
- mergeDialog.setVisible(true);
- }
-
- private void showConfirmationDialog() {
- int answer = JOptionPane.showConfirmDialog(mergeDialog,
- Localization.lang("Canceling this operation will leave your changes unsynchronized. Cancel anyway?"),
- Localization.lang("Warning"), JOptionPane.YES_NO_OPTION);
-
- if (answer == 0) {
- mergeDialog.dispose();
- }
- }
-
- private void mergeEntries() {
- BibEntry mergedBibEntry = mergeEntries.getMergeEntry();
- mergedBibEntry.getSharedBibEntryData().setSharedID(sharedBibEntry.getSharedBibEntryData().getSharedID());
- mergedBibEntry.getSharedBibEntryData().setVersion(sharedBibEntry.getSharedBibEntryData().getVersion());
-
- mergeDialog.dispose(); // dispose before synchronizing to avoid multiple merge windows in case of new conflict.
-
- dbmsSynchronizer.synchronizeSharedEntry(mergedBibEntry);
- dbmsSynchronizer.synchronizeLocalDatabase();
- }
-}
diff --git a/src/main/java/org/jabref/gui/shared/SharedDatabaseUIManager.java b/src/main/java/org/jabref/gui/shared/SharedDatabaseUIManager.java
index 1d9de038f98..85d6683915e 100644
--- a/src/main/java/org/jabref/gui/shared/SharedDatabaseUIManager.java
+++ b/src/main/java/org/jabref/gui/shared/SharedDatabaseUIManager.java
@@ -5,6 +5,7 @@
import java.util.Optional;
import javafx.scene.control.Alert.AlertType;
+import javafx.scene.control.ButtonBar;
import javafx.scene.control.ButtonBar.ButtonData;
import javafx.scene.control.ButtonType;
@@ -14,6 +15,7 @@
import org.jabref.gui.JabRefFrame;
import org.jabref.gui.entryeditor.EntryEditor;
import org.jabref.gui.exporter.SaveDatabaseAction;
+import org.jabref.gui.mergeentries.MergeEntriesDialog;
import org.jabref.gui.undo.UndoableRemoveEntry;
import org.jabref.logic.importer.ParserResult;
import org.jabref.logic.l10n.Localization;
@@ -31,6 +33,7 @@
import org.jabref.model.database.BibDatabaseMode;
import org.jabref.model.database.shared.DatabaseNotSupportedException;
import org.jabref.model.database.shared.DatabaseSynchronizer;
+import org.jabref.model.entry.BibEntry;
import com.google.common.eventbus.Subscribe;
@@ -81,9 +84,40 @@ public void listen(UpdateRefusedEvent updateRefusedEvent) {
jabRefFrame.getDialogService().notify(Localization.lang("Update refused."));
- new MergeSharedEntryDialog(jabRefFrame, dbmsSynchronizer, updateRefusedEvent.getLocalBibEntry(),
- updateRefusedEvent.getSharedBibEntry(),
- updateRefusedEvent.getBibDatabaseContext().getMode()).showMergeDialog();
+ BibEntry localBibEntry = updateRefusedEvent.getLocalBibEntry();
+ BibEntry sharedBibEntry = updateRefusedEvent.getSharedBibEntry();
+
+ StringBuilder message = new StringBuilder();
+ message.append(Localization.lang("Update could not be performed due to existing change conflicts."));
+ message.append("\r\n");
+ message.append(Localization.lang("You are not working on the newest version of BibEntry."));
+ message.append("\r\n");
+ message.append(Localization.lang("Shared version: %0", String.valueOf(sharedBibEntry.getSharedBibEntryData().getVersion())));
+ message.append("\r\n");
+ message.append(Localization.lang("Local version: %0", String.valueOf(localBibEntry.getSharedBibEntryData().getVersion())));
+ message.append("\r\n");
+ message.append(Localization.lang("Press \"Merge entries\" to merge the changes and resolve this problem."));
+ message.append("\r\n");
+ message.append(Localization.lang("Canceling this operation will leave your changes unsynchronized."));
+
+ ButtonType merge = new ButtonType(Localization.lang("Merge entries"), ButtonBar.ButtonData.YES);
+
+ Optional response = dialogService.showCustomButtonDialogAndWait(AlertType.CONFIRMATION, Localization.lang("Update refused"), message.toString(), ButtonType.CANCEL, merge);
+
+ if (response.isPresent() && response.get().equals(merge)) {
+ MergeEntriesDialog dialog = new MergeEntriesDialog(localBibEntry, sharedBibEntry, updateRefusedEvent.getBibDatabaseContext().getMode());
+ Optional mergedEntry = dialog.showAndWait();
+
+ mergedEntry.ifPresent(mergedBibEntry -> {
+ mergedBibEntry.getSharedBibEntryData().setSharedID(sharedBibEntry.getSharedBibEntryData().getSharedID());
+ mergedBibEntry.getSharedBibEntryData().setVersion(sharedBibEntry.getSharedBibEntryData().getVersion());
+
+ dbmsSynchronizer.synchronizeSharedEntry(mergedBibEntry);
+ dbmsSynchronizer.synchronizeLocalDatabase();
+ });
+
+ }
+
}
@Subscribe
diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties
index 28e5ce1f177..eb1ffbb0894 100644
--- a/src/main/resources/l10n/JabRef_en.properties
+++ b/src/main/resources/l10n/JabRef_en.properties
@@ -1753,14 +1753,12 @@ Work\ offline=Work offline
Working\ offline.=Working offline.
Update\ refused.=Update refused.
Update\ refused=Update refused
-Local\ entry=Local entry
-Shared\ entry=Shared entry
Update\ could\ not\ be\ performed\ due\ to\ existing\ change\ conflicts.=Update could not be performed due to existing change conflicts.
You\ are\ not\ working\ on\ the\ newest\ version\ of\ BibEntry.=You are not working on the newest version of BibEntry.
Local\ version\:\ %0=Local version: %0
Shared\ version\:\ %0=Shared version: %0
-Please\ merge\ the\ shared\ entry\ with\ yours\ and\ press\ "Merge\ entries"\ to\ resolve\ this\ problem.=Please merge the shared entry with yours and press "Merge entries" to resolve this problem.
-Canceling\ this\ operation\ will\ leave\ your\ changes\ unsynchronized.\ Cancel\ anyway?=Canceling this operation will leave your changes unsynchronized. Cancel anyway?
+Press\ "Merge\ entries"\ to\ merge\ the\ changes\ and\ resolve\ this\ problem.=Press "Merge entries" to merge the changes and resolve this problem.
+Canceling\ this\ operation\ will\ leave\ your\ changes\ unsynchronized.=Canceling this operation will leave your changes unsynchronized.
Shared\ entry\ is\ no\ longer\ present=Shared entry is no longer present
The\ entry\ you\ currently\ work\ on\ has\ been\ deleted\ on\ the\ shared\ side.=The entry you currently work on has been deleted on the shared side.
You\ can\ restore\ the\ entry\ using\ the\ "Undo"\ operation.=You can restore the entry using the "Undo" operation.