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.