diff --git a/CHANGELOG.md b/CHANGELOG.md index 441fdc92039..deb8f167fb6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `# - We improved the way metadata is updated in remote databases. [#3235](https://github.com/JabRef/jabref/issues/3235) - We improved font rendering of the Entry Editor for Linux based systems [#3295](https://github.com/JabRef/jabref/issues/3295) - We fixed an issue where JabRef would freeze when trying to replace the original entry after a merge with new information from identifiers like DOI/ISBN etc. [3294](https://github.com/JabRef/jabref/issues/3294) + - We no longer allow to add a field multiple times in customized entry types and thereby fix an issue in the entry editor that resulted from having a field multiple times. [#3046](https://github.com/JabRef/jabref/issues/3046) - We fixed an issue where JabRef would not show the translated content at some points, although there existed a translation - We fixed an issue where editing in the source tab would override content of other entries [#3352](https://github.com/JabRef/jabref/issues/3352#issue-268580818) - We fixed several issues with the automatic linking of files in the entry editor where files were not found or not correctly saved in the bibtex source [#3346](https://github.com/JabRef/jabref/issues/3346) diff --git a/src/main/java/org/jabref/gui/customentrytypes/EntryCustomizationDialog.java b/src/main/java/org/jabref/gui/customentrytypes/EntryCustomizationDialog.java index 5005644c299..5263eb1f0af 100644 --- a/src/main/java/org/jabref/gui/customentrytypes/EntryCustomizationDialog.java +++ b/src/main/java/org/jabref/gui/customentrytypes/EntryCustomizationDialog.java @@ -66,9 +66,9 @@ public class EntryCustomizationDialog extends JabRefDialog implements ListSelect private JButton apply; private final List preset = InternalBibtexFields.getAllPublicFieldNames(); private String lastSelected; - private final Map> reqLists = new HashMap<>(); - private final Map> optLists = new HashMap<>(); - private final Map> opt2Lists = new HashMap<>(); + private final Map> reqLists = new HashMap<>(); + private final Map> optLists = new HashMap<>(); + private final Map> opt2Lists = new HashMap<>(); private final Set defaulted = new HashSet<>(); private final Set changed = new HashSet<>(); @@ -198,17 +198,17 @@ public void valueChanged(ListSelectionEvent e) { if (selectedTypeName == null) { return; } - List requiredFieldsSelectedType = reqLists.get(selectedTypeName); + Set requiredFieldsSelectedType = reqLists.get(selectedTypeName); if (requiredFieldsSelectedType == null) { Optional type = EntryTypes.getType(selectedTypeName, bibDatabaseMode); if (type.isPresent()) { - List req = type.get().getRequiredFields(); + Set req = type.get().getRequiredFields(); - List opt; + Set opt; if (biblatexMode) { opt = type.get().getPrimaryOptionalFields(); - List opt2 = type.get().getSecondaryOptionalFields(); + Set opt2 = type.get().getSecondaryOptionalFields(); optComp2.setFields(opt2); optComp2.setEnabled(true); @@ -221,12 +221,12 @@ public void valueChanged(ListSelectionEvent e) { optComp.setEnabled(true); } else { // New entry - reqComp.setFields(new ArrayList<>()); + reqComp.setFields(new HashSet<>()); reqComp.setEnabled(true); - optComp.setFields(new ArrayList<>()); + optComp.setFields(new HashSet<>()); optComp.setEnabled(true); if (biblatexMode) { - optComp2.setFields(new ArrayList<>()); + optComp2.setFields(new HashSet<>()); optComp2.setEnabled(true); } reqComp.requestFocus(); @@ -249,18 +249,18 @@ private void applyChanges() { List actuallyChangedTypes = new ArrayList<>(); // Iterate over our map of required fields, and list those types if necessary: - List types = typeComp.getFields(); - for (Map.Entry> stringListEntry : reqLists.entrySet()) { + Set types = typeComp.getFields(); + for (Map.Entry> stringListEntry : reqLists.entrySet()) { if (!types.contains(stringListEntry.getKey())) { continue; } - List requiredFieldsList = stringListEntry.getValue(); - List optionalFieldsList = optLists.get(stringListEntry.getKey()); - List secondaryOptionalFieldsLists = opt2Lists.get(stringListEntry.getKey()); + Set requiredFieldsList = stringListEntry.getValue(); + Set optionalFieldsList = optLists.get(stringListEntry.getKey()); + Set secondaryOptionalFieldsLists = opt2Lists.get(stringListEntry.getKey()); if (secondaryOptionalFieldsLists == null) { - secondaryOptionalFieldsLists = new ArrayList<>(0); + secondaryOptionalFieldsLists = new HashSet<>(0); } // If this type is already existing, check if any changes have @@ -278,16 +278,16 @@ private void applyChanges() { Optional oldType = EntryTypes.getType(stringListEntry.getKey(), bibDatabaseMode); if (oldType.isPresent()) { - List oldRequiredFieldsList = oldType.get().getRequiredFieldsFlat(); - List oldOptionalFieldsList = oldType.get().getOptionalFields(); + Set oldRequiredFieldsList = oldType.get().getRequiredFieldsFlat(); + Set oldOptionalFieldsList = oldType.get().getOptionalFields(); if (biblatexMode) { - List oldPrimaryOptionalFieldsLists = oldType.get().getPrimaryOptionalFields(); - List oldSecondaryOptionalFieldsList = oldType.get().getSecondaryOptionalFields(); - if (equalLists(oldRequiredFieldsList, requiredFieldsList) && equalLists(oldPrimaryOptionalFieldsLists, optionalFieldsList) && - equalLists(oldSecondaryOptionalFieldsList, secondaryOptionalFieldsLists)) { + Set oldPrimaryOptionalFieldsLists = oldType.get().getPrimaryOptionalFields(); + Set oldSecondaryOptionalFieldsList = oldType.get().getSecondaryOptionalFields(); + if (oldRequiredFieldsList.equals(requiredFieldsList) && oldPrimaryOptionalFieldsLists.equals(optionalFieldsList) && + oldSecondaryOptionalFieldsList.equals(secondaryOptionalFieldsLists)) { changesMade = false; } - } else if (equalLists(oldRequiredFieldsList, requiredFieldsList) && equalLists(oldOptionalFieldsList, optionalFieldsList)) { + } else if (oldRequiredFieldsList.equals(requiredFieldsList) && oldOptionalFieldsList.equals(optionalFieldsList)) { changesMade = false; } } @@ -352,26 +352,6 @@ private void deleteType(String name) { } } - private static boolean equalLists(List one, List two) { - if ((one == null) && (two == null)) { - return true; // Both null. - } - if ((one == null) || (two == null)) { - return false; // One of them null, the other not. - } - if (one.size() != two.size()) { - return false; // Different length. - } - // If we get here, we know that both are non-null, and that they have the same length. - for (int i = 0; i < one.size(); i++) { - if (!one.get(i).equals(two.get(i))) { - return false; - } - } - // If we get here, all entries have matched. - return true; - } - private void updateEntriesForChangedTypes(List actuallyChangedTypes) { for (BasePanel bp : frame.getBasePanelList()) { // get all affected entries @@ -403,10 +383,10 @@ public void actionPerformed(ActionEvent e) { Optional type = EntryTypes.getStandardType(lastSelected, bibDatabaseMode); if (type.isPresent()) { - List of = type.get().getOptionalFields(); - List req = type.get().getRequiredFields(); - List opt1 = new ArrayList<>(); - List opt2 = new ArrayList<>(); + Set of = type.get().getOptionalFields(); + Set req = type.get().getRequiredFields(); + Set opt1 = new HashSet<>(); + Set opt2 = new HashSet<>(); if (!(of.isEmpty())) { if (biblatexMode) { diff --git a/src/main/java/org/jabref/gui/customentrytypes/FieldSetComponent.java b/src/main/java/org/jabref/gui/customentrytypes/FieldSetComponent.java index b65f477db5e..cf57d0d4347 100644 --- a/src/main/java/org/jabref/gui/customentrytypes/FieldSetComponent.java +++ b/src/main/java/org/jabref/gui/customentrytypes/FieldSetComponent.java @@ -9,7 +9,6 @@ import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; -import java.util.ArrayList; import java.util.Enumeration; import java.util.HashSet; import java.util.List; @@ -217,16 +216,16 @@ public void setEnabled(boolean en) { remove.setEnabled(en); } - public void setFields(List fields) { - DefaultListModel newListModel = new DefaultListModel<>(); - for (String field : fields) { - newListModel.addElement(field); - } - this.listModel = newListModel; - for (ListDataListener modelListener : modelListeners) { - newListModel.addListDataListener(modelListener); + /** + * Return the current list. + */ + public Set getFields() { + Set res = new HashSet<>(listModel.getSize()); + Enumeration elements = listModel.elements(); + while (elements.hasMoreElements()) { + res.add(elements.nextElement()); } - list.setModel(newListModel); + return res; } /** @@ -279,16 +278,16 @@ protected void removeSelected() { } - /** - * Return the current list. - */ - public List getFields() { - List res = new ArrayList<>(listModel.getSize()); - Enumeration elements = listModel.elements(); - while (elements.hasMoreElements()) { - res.add(elements.nextElement()); + public void setFields(Set fields) { + DefaultListModel newListModel = new DefaultListModel<>(); + for (String field : fields) { + newListModel.addElement(field); } - return res; + this.listModel = newListModel; + for (ListDataListener modelListener : modelListeners) { + newListModel.addListDataListener(modelListener); + } + list.setModel(newListModel); } /** diff --git a/src/main/java/org/jabref/gui/entryeditor/DeprecatedFieldsTab.java b/src/main/java/org/jabref/gui/entryeditor/DeprecatedFieldsTab.java index 4be110c1bc6..87279266213 100644 --- a/src/main/java/org/jabref/gui/entryeditor/DeprecatedFieldsTab.java +++ b/src/main/java/org/jabref/gui/entryeditor/DeprecatedFieldsTab.java @@ -1,6 +1,6 @@ package org.jabref.gui.entryeditor; -import java.util.List; +import java.util.Collection; import javafx.scene.control.Tooltip; @@ -21,7 +21,7 @@ public DeprecatedFieldsTab(BibDatabaseContext databaseContext, SuggestionProvide } @Override - protected List determineFieldsToShow(BibEntry entry, EntryType entryType) { + protected Collection determineFieldsToShow(BibEntry entry, EntryType entryType) { return entryType.getDeprecatedFields(); } } diff --git a/src/main/java/org/jabref/gui/entryeditor/FieldsEditorTab.java b/src/main/java/org/jabref/gui/entryeditor/FieldsEditorTab.java index bfedb7a6b5f..e9f89a48cb0 100644 --- a/src/main/java/org/jabref/gui/entryeditor/FieldsEditorTab.java +++ b/src/main/java/org/jabref/gui/entryeditor/FieldsEditorTab.java @@ -1,6 +1,7 @@ package org.jabref.gui.entryeditor; import java.util.ArrayList; +import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -69,7 +70,7 @@ private Region setupPanel(BibEntry entry, boolean compressed, SuggestionProvider List