diff --git a/CHANGELOG.md b/CHANGELOG.md index 212fafd96b1..78d7e18b711 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -83,6 +83,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We changed the behavior of group addition/edit, so that sorting by alphabetical order is not performed by default after the modification [#10017](https://github.com/JabRef/jabref/issues/10017) - We fixed an issue with spacing in the cleanup dialogue. [#10081](https://github.com/JabRef/jabref/issues/10081) - The GVK fetcher now uses the new [K10plus](https://www.bszgbv.de/services/k10plus/) database [#10189](https://github.com/JabRef/jabref/pull/10189) +- The SLR feature adds new entries sorted into the new bib file (and not at the end). ### Fixed diff --git a/build.gradle b/build.gradle index 239a70349ef..64444684c23 100644 --- a/build.gradle +++ b/build.gradle @@ -214,6 +214,9 @@ dependencies { implementation group: 'org.jooq', name: 'jool', version: '0.9.15' + compileOnly 'org.jspecify:jspecify:0.3.0' + testCompileOnly 'org.jspecify:jspecify:0.3.0' + testImplementation 'io.github.classgraph:classgraph:4.8.162' testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0' testImplementation 'org.junit.platform:junit-platform-launcher:1.10.0' diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index e286e123119..432eb848118 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -123,4 +123,6 @@ requires org.eclipse.jgit; uses org.eclipse.jgit.transport.SshSessionFactory; uses org.eclipse.jgit.lib.GpgSigner; + + requires static org.jspecify; } diff --git a/src/main/java/org/jabref/cli/ArgumentProcessor.java b/src/main/java/org/jabref/cli/ArgumentProcessor.java index 0dfd722317e..9882bc4df54 100644 --- a/src/main/java/org/jabref/cli/ArgumentProcessor.java +++ b/src/main/java/org/jabref/cli/ArgumentProcessor.java @@ -601,9 +601,7 @@ private void saveDatabase(BibDatabase newBase, String subName) { try (AtomicFileWriter fileWriter = new AtomicFileWriter(Path.of(subName), StandardCharsets.UTF_8)) { BibWriter bibWriter = new BibWriter(fileWriter, OS.NEWLINE); SaveConfiguration saveConfiguration = new SaveConfiguration() - .withMetadataSaveOrder(true) .withReformatOnSave(preferencesService.getLibraryPreferences().shouldAlwaysReformatOnSave()); - BibDatabaseWriter databaseWriter = new BibtexDatabaseWriter( bibWriter, saveConfiguration, diff --git a/src/main/java/org/jabref/gui/auximport/NewSubLibraryAction.java b/src/main/java/org/jabref/gui/auximport/NewSubLibraryAction.java index 36c426afb17..65cc37abfd9 100644 --- a/src/main/java/org/jabref/gui/auximport/NewSubLibraryAction.java +++ b/src/main/java/org/jabref/gui/auximport/NewSubLibraryAction.java @@ -11,6 +11,8 @@ /** * The action concerned with generate a new (sub-)database from latex AUX file. + * + * A new library is created by {@link org.jabref.gui.importer.NewDatabaseAction} */ public class NewSubLibraryAction extends SimpleCommand { diff --git a/src/main/java/org/jabref/gui/commonfxcontrols/SaveOrderConfigPanelViewModel.java b/src/main/java/org/jabref/gui/commonfxcontrols/SaveOrderConfigPanelViewModel.java index 5407edbcccd..6776df54e47 100644 --- a/src/main/java/org/jabref/gui/commonfxcontrols/SaveOrderConfigPanelViewModel.java +++ b/src/main/java/org/jabref/gui/commonfxcontrols/SaveOrderConfigPanelViewModel.java @@ -9,7 +9,6 @@ import javafx.collections.FXCollections; import org.jabref.model.entry.field.Field; -import org.jabref.model.metadata.SaveOrder; public class SaveOrderConfigPanelViewModel { @@ -24,7 +23,7 @@ public SaveOrderConfigPanelViewModel() { } public void addCriterion() { - selectedSortCriteriaProperty.add(new SortCriterionViewModel(new SaveOrder.SortCriterion())); + selectedSortCriteriaProperty.add(new SortCriterionViewModel()); } public void removeCriterion(SortCriterionViewModel sortCriterionViewModel) { diff --git a/src/main/java/org/jabref/gui/commonfxcontrols/SortCriterionViewModel.java b/src/main/java/org/jabref/gui/commonfxcontrols/SortCriterionViewModel.java index 6d1d21a9ee5..19edca1f9d9 100644 --- a/src/main/java/org/jabref/gui/commonfxcontrols/SortCriterionViewModel.java +++ b/src/main/java/org/jabref/gui/commonfxcontrols/SortCriterionViewModel.java @@ -6,6 +6,7 @@ import javafx.beans.property.SimpleObjectProperty; import org.jabref.model.entry.field.Field; +import org.jabref.model.entry.field.StandardField; import org.jabref.model.metadata.SaveOrder; public class SortCriterionViewModel { @@ -18,6 +19,11 @@ public SortCriterionViewModel(SaveOrder.SortCriterion criterion) { this.descendingProperty.setValue(criterion.descending); } + public SortCriterionViewModel() { + this.fieldProperty.setValue(StandardField.AUTHOR); + this.descendingProperty.setValue(false); + } + public ObjectProperty fieldProperty() { return fieldProperty; } diff --git a/src/main/java/org/jabref/gui/exporter/CreateModifyExporterDialogViewModel.java b/src/main/java/org/jabref/gui/exporter/CreateModifyExporterDialogViewModel.java index 0fcc7b12fde..7d279d9a609 100644 --- a/src/main/java/org/jabref/gui/exporter/CreateModifyExporterDialogViewModel.java +++ b/src/main/java/org/jabref/gui/exporter/CreateModifyExporterDialogViewModel.java @@ -67,7 +67,7 @@ public ExporterViewModel saveExporter() { layoutFile.get(), extension.get(), preferences.getLayoutFormatterPreferences(), - preferences.getExportConfiguration()); + preferences.getExportConfiguration().getSaveOrder()); format.setCustomExport(true); return new ExporterViewModel(format); } diff --git a/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java b/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java index 1a57b1f2bd5..f56852c25a8 100644 --- a/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java +++ b/src/main/java/org/jabref/gui/exporter/SaveDatabaseAction.java @@ -37,6 +37,7 @@ import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.event.ChangePropagation; import org.jabref.model.entry.BibEntryTypesManager; +import org.jabref.model.metadata.SaveOrder; import org.jabref.preferences.PreferencesService; import org.slf4j.Logger; @@ -79,7 +80,7 @@ public boolean save(SaveDatabaseMode mode) { } /** - * Asks the user for the path and saves afterwards + * Asks the user for the path and saves afterward */ public void saveAs() { askForSavePath().ifPresent(this::saveAs); @@ -92,7 +93,8 @@ public boolean saveAs(Path file) { public void saveSelectedAsPlain() { askForSavePath().ifPresent(path -> { try { - saveDatabase(path, true, StandardCharsets.UTF_8, BibDatabaseWriter.SaveType.PLAIN_BIBTEX); + saveDatabase(path, true, StandardCharsets.UTF_8, BibDatabaseWriter.SaveType.PLAIN_BIBTEX, + libraryTab.getBibDatabaseContext().getMetaData().getSaveOrder().orElse(SaveOrder.getDefaultSaveOrder())); frame.getFileHistory().newFile(path); dialogService.notify(Localization.lang("Saved selected to '%0'.", path.toString())); } catch (SaveException ex) { @@ -210,7 +212,8 @@ private boolean save(Path targetPath, SaveDatabaseMode mode) { libraryTab.getBibDatabaseContext().getMetaData().setEncoding(encoding, ChangePropagation.DO_NOT_POST_EVENT); // Save the database - boolean success = saveDatabase(targetPath, false, encoding, BibDatabaseWriter.SaveType.ALL); + boolean success = saveDatabase(targetPath, false, encoding, BibDatabaseWriter.SaveType.WITH_JABREF_META_DATA, + libraryTab.getBibDatabaseContext().getMetaData().getSaveOrder().orElse(SaveOrder.getDefaultSaveOrder())); if (success) { libraryTab.getUndoManager().markUnchanged(); @@ -228,12 +231,12 @@ private boolean save(Path targetPath, SaveDatabaseMode mode) { } } - private boolean saveDatabase(Path file, boolean selectedOnly, Charset encoding, BibDatabaseWriter.SaveType saveType) throws SaveException { + private boolean saveDatabase(Path file, boolean selectedOnly, Charset encoding, BibDatabaseWriter.SaveType saveType, SaveOrder saveOrder) throws SaveException { // if this code is adapted, please also adapt org.jabref.logic.autosaveandbackup.BackupManager.performBackup SaveConfiguration saveConfiguration = new SaveConfiguration() .withSaveType(saveType) - .withMetadataSaveOrder(true) + .withSaveOrder(saveOrder) .withReformatOnSave(preferences.getLibraryPreferences().shouldAlwaysReformatOnSave()); BibDatabaseContext bibDatabaseContext = libraryTab.getBibDatabaseContext(); synchronized (bibDatabaseContext) { @@ -255,7 +258,7 @@ private boolean saveDatabase(Path file, boolean selectedOnly, Charset encoding, libraryTab.registerUndoableChanges(databaseWriter.getSaveActionsFieldChanges()); if (fileWriter.hasEncodingProblems()) { - saveWithDifferentEncoding(file, selectedOnly, encoding, fileWriter.getEncodingProblems(), saveType); + saveWithDifferentEncoding(file, selectedOnly, encoding, fileWriter.getEncodingProblems(), saveType, saveOrder); } } catch (UnsupportedCharsetException ex) { throw new SaveException(Localization.lang("Character encoding '%0' is not supported.", encoding.displayName()), ex); @@ -266,7 +269,7 @@ private boolean saveDatabase(Path file, boolean selectedOnly, Charset encoding, } } - private void saveWithDifferentEncoding(Path file, boolean selectedOnly, Charset encoding, Set encodingProblems, BibDatabaseWriter.SaveType saveType) throws SaveException { + private void saveWithDifferentEncoding(Path file, boolean selectedOnly, Charset encoding, Set encodingProblems, BibDatabaseWriter.SaveType saveType, SaveOrder saveOrder) throws SaveException { DialogPane pane = new DialogPane(); VBox vbox = new VBox(); vbox.getChildren().addAll( @@ -288,7 +291,7 @@ private void saveWithDifferentEncoding(Path file, boolean selectedOnly, Charset // Make sure to remember which encoding we used. libraryTab.getBibDatabaseContext().getMetaData().setEncoding(newEncoding.get(), ChangePropagation.DO_NOT_POST_EVENT); - saveDatabase(file, selectedOnly, newEncoding.get(), saveType); + saveDatabase(file, selectedOnly, newEncoding.get(), saveType, saveOrder); } } } diff --git a/src/main/java/org/jabref/gui/libraryproperties/saving/SavingPropertiesViewModel.java b/src/main/java/org/jabref/gui/libraryproperties/saving/SavingPropertiesViewModel.java index 15955183f52..9e01a3a76eb 100644 --- a/src/main/java/org/jabref/gui/libraryproperties/saving/SavingPropertiesViewModel.java +++ b/src/main/java/org/jabref/gui/libraryproperties/saving/SavingPropertiesViewModel.java @@ -1,6 +1,7 @@ package org.jabref.gui.libraryproperties.saving; import java.util.ArrayList; +import java.util.List; import java.util.Optional; import java.util.Set; @@ -18,6 +19,7 @@ import org.jabref.model.entry.field.Field; import org.jabref.model.entry.field.FieldFactory; import org.jabref.model.entry.field.InternalField; +import org.jabref.model.entry.field.StandardField; import org.jabref.model.metadata.MetaData; import org.jabref.model.metadata.SaveOrder; import org.jabref.preferences.CleanupPreferences; @@ -25,6 +27,14 @@ public class SavingPropertiesViewModel implements PropertiesTabViewModel { + private static final SaveOrder UI_DEFAULT_SAVE_ORDER = new SaveOrder(SaveOrder.OrderType.ORIGINAL, List.of( + new SaveOrder.SortCriterion(StandardField.AUTHOR), + new SaveOrder.SortCriterion(StandardField.YEAR), + new SaveOrder.SortCriterion(StandardField.TITLE), + // Pro users generate their citation keys well. They can just delete the above three proposals and get a well-sorted library. + new SaveOrder.SortCriterion(InternalField.KEY_FIELD) + )); + private final BooleanProperty protectDisableProperty = new SimpleBooleanProperty(); private final BooleanProperty libraryProtectedProperty = new SimpleBooleanProperty(); @@ -41,24 +51,23 @@ public class SavingPropertiesViewModel implements PropertiesTabViewModel { private final BibDatabaseContext databaseContext; private final MetaData initialMetaData; - private final SaveOrder exportSaveOrder; + private final SaveOrder saveOrder; private final PreferencesService preferencesService; public SavingPropertiesViewModel(BibDatabaseContext databaseContext, PreferencesService preferencesService) { this.databaseContext = databaseContext; this.preferencesService = preferencesService; this.initialMetaData = databaseContext.getMetaData(); - this.exportSaveOrder = initialMetaData.getSaveOrderConfig() - .orElseGet(() -> preferencesService.getExportPreferences().getExportSaveOrder()); + this.saveOrder = initialMetaData.getSaveOrder().orElse(UI_DEFAULT_SAVE_ORDER); } @Override public void setValues() { libraryProtectedProperty.setValue(initialMetaData.isProtected()); - // SaveOrderConfigPanel + // SaveOrderConfigPanel, included via in FXML - switch (exportSaveOrder.getOrderType()) { + switch (saveOrder.getOrderType()) { case SPECIFIED -> saveInSpecifiedOrderProperty.setValue(true); case ORIGINAL -> saveInOriginalProperty.setValue(true); case TABLE -> saveInTableOrderProperty.setValue(true); @@ -74,11 +83,11 @@ public void setValues() { sortableFieldsProperty.addAll(FieldFactory.getStandardFieldsWithCitationKey()); sortCriteriaProperty.clear(); - sortCriteriaProperty.addAll(exportSaveOrder.getSortCriteria().stream() - .map(SortCriterionViewModel::new) - .toList()); + sortCriteriaProperty.addAll(saveOrder.getSortCriteria().stream() + .map(SortCriterionViewModel::new) + .toList()); - // FieldFormatterCleanupsPanel + // FieldFormatterCleanupsPanel, included via in FXML Optional saveActions = initialMetaData.getSaveActions(); saveActions.ifPresentOrElse(value -> { @@ -120,11 +129,11 @@ public void storeSettings() { SaveOrder.OrderType.fromBooleans(saveInSpecifiedOrderProperty.getValue(), saveInOriginalProperty.getValue()), sortCriteriaProperty.stream().map(SortCriterionViewModel::getCriterion).toList()); - if (!newSaveOrder.equals(exportSaveOrder)) { + if (!newSaveOrder.equals(saveOrder)) { if (newSaveOrder.equals(SaveOrder.getDefaultSaveOrder())) { - newMetaData.clearSaveOrderConfig(); + newMetaData.clearSaveOrder(); } else { - newMetaData.setSaveOrderConfig(newSaveOrder); + newMetaData.setSaveOrder(newSaveOrder); } } diff --git a/src/main/java/org/jabref/logic/autosaveandbackup/BackupManager.java b/src/main/java/org/jabref/logic/autosaveandbackup/BackupManager.java index e4d9c3e29db..e3e5805df78 100644 --- a/src/main/java/org/jabref/logic/autosaveandbackup/BackupManager.java +++ b/src/main/java/org/jabref/logic/autosaveandbackup/BackupManager.java @@ -30,6 +30,7 @@ import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.event.BibDatabaseContextChangedEvent; import org.jabref.model.entry.BibEntryTypesManager; +import org.jabref.model.metadata.SaveOrder; import org.jabref.preferences.PreferencesService; import com.google.common.eventbus.Subscribe; @@ -225,7 +226,7 @@ void performBackup(Path backupPath) { // code similar to org.jabref.gui.exporter.SaveDatabaseAction.saveDatabase SaveConfiguration saveConfiguration = new SaveConfiguration() .withMakeBackup(false) - .withMetadataSaveOrder(true) + .withSaveOrder(bibDatabaseContext.getMetaData().getSaveOrder().orElse(SaveOrder.getDefaultSaveOrder())) .withReformatOnSave(preferences.getLibraryPreferences().shouldAlwaysReformatOnSave()); Charset encoding = bibDatabaseContext.getMetaData().getEncoding().orElse(StandardCharsets.UTF_8); diff --git a/src/main/java/org/jabref/logic/bibtex/comparator/MetaDataDiff.java b/src/main/java/org/jabref/logic/bibtex/comparator/MetaDataDiff.java index 5f49073981a..a1805862508 100644 --- a/src/main/java/org/jabref/logic/bibtex/comparator/MetaDataDiff.java +++ b/src/main/java/org/jabref/logic/bibtex/comparator/MetaDataDiff.java @@ -56,7 +56,7 @@ public EnumSet getDifferences(PreferencesService preferences) { if (!Objects.equals(originalMetaData.getEncoding(), newMetaData.getEncoding())) { changes.add(Difference.ENCODING); } - if (!Objects.equals(originalMetaData.getSaveOrderConfig(), newMetaData.getSaveOrderConfig())) { + if (!Objects.equals(originalMetaData.getSaveOrder(), newMetaData.getSaveOrder())) { changes.add(Difference.SAVE_SORT_ORDER); } if (!Objects.equals( diff --git a/src/main/java/org/jabref/logic/crawler/StudyRepository.java b/src/main/java/org/jabref/logic/crawler/StudyRepository.java index eac8c5d11c9..6291b94cbbf 100644 --- a/src/main/java/org/jabref/logic/crawler/StudyRepository.java +++ b/src/main/java/org/jabref/logic/crawler/StudyRepository.java @@ -27,6 +27,8 @@ import org.jabref.model.database.BibDatabase; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntryTypesManager; +import org.jabref.model.entry.field.StandardField; +import org.jabref.model.metadata.SaveOrder; import org.jabref.model.study.FetchResult; import org.jabref.model.study.QueryResult; import org.jabref.model.study.Study; @@ -60,6 +62,11 @@ public class StudyRepository { private static final String WORK_BRANCH = "work"; private static final String SEARCH_BRANCH = "search"; + private static final SaveOrder SAVE_ORDER = new SaveOrder(SaveOrder.OrderType.SPECIFIED, + List.of(new SaveOrder.SortCriterion(StandardField.AUTHOR, false), + new SaveOrder.SortCriterion(StandardField.YEAR, true), + new SaveOrder.SortCriterion(StandardField.TITLE, false))); + private final Path repositoryPath; private final Path studyDefinitionFile; private final SlrGitHandler gitHandler; @@ -426,7 +433,7 @@ private void generateCiteKeys(BibDatabaseContext existingEntries, BibDatabase ta private void writeResultToFile(Path pathToFile, BibDatabase entries) throws SaveException { try (AtomicFileWriter fileWriter = new AtomicFileWriter(pathToFile, StandardCharsets.UTF_8)) { SaveConfiguration saveConfiguration = new SaveConfiguration() - .withMetadataSaveOrder(true) + .withSaveOrder(SAVE_ORDER) .withReformatOnSave(preferencesService.getLibraryPreferences().shouldAlwaysReformatOnSave()); BibWriter bibWriter = new BibWriter(fileWriter, OS.NEWLINE); BibtexDatabaseWriter databaseWriter = new BibtexDatabaseWriter( diff --git a/src/main/java/org/jabref/logic/exporter/BibDatabaseWriter.java b/src/main/java/org/jabref/logic/exporter/BibDatabaseWriter.java index 37c447017fc..bb4b81cd528 100644 --- a/src/main/java/org/jabref/logic/exporter/BibDatabaseWriter.java +++ b/src/main/java/org/jabref/logic/exporter/BibDatabaseWriter.java @@ -7,7 +7,6 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Objects; @@ -43,6 +42,7 @@ import org.jabref.model.strings.StringUtil; import org.jooq.lambda.Unchecked; +import org.jspecify.annotations.NullMarked; /** * A generic writer for our database. This is independent of the concrete serialization format. @@ -52,9 +52,10 @@ *

* The opposite class is {@link org.jabref.logic.importer.fileformat.BibtexParser} */ +@NullMarked public abstract class BibDatabaseWriter { - public enum SaveType { ALL, PLAIN_BIBTEX } + public enum SaveType { WITH_JABREF_META_DATA, PLAIN_BIBTEX } private static final Pattern REFERENCE_PATTERN = Pattern.compile("(#[A-Za-z]+#)"); // Used to detect string references in strings protected final BibWriter bibWriter; @@ -102,21 +103,19 @@ public static List applySaveActions(BibEntry entry, MetaData metaDa return applySaveActions(Collections.singletonList(entry), metaData); } - private static List> getSaveComparators(MetaData metaData, SaveConfiguration preferences) { + private static List> getSaveComparators(SaveOrder saveOrder) { List> comparators = new ArrayList<>(); - Optional saveOrder = getSaveOrder(metaData, preferences); // Take care, using CrossRefEntry-Comparator, that referred entries occur after referring // ones. This is a necessary requirement for BibTeX to be able to resolve referenced entries correctly. comparators.add(new CrossRefEntryComparator()); - if (saveOrder.isEmpty() || saveOrder.get().getOrderType() == SaveOrder.OrderType.ORIGINAL) { + if (saveOrder.getOrderType() == SaveOrder.OrderType.ORIGINAL) { // entries will be sorted based on their internal IDs comparators.add(new IdComparator()); } else { // use configured sorting strategy - List fieldComparators = saveOrder.get() - .getSortCriteria().stream() + List fieldComparators = saveOrder.getSortCriteria().stream() .map(FieldComparator::new) .toList(); comparators.addAll(fieldComparators); @@ -127,20 +126,15 @@ private static List> getSaveComparators(MetaData metaData, } /** - * We have begun to use getSortedEntries() for both database save operations and non-database save operations. In a + * We have begun to use getSortedEntries() for both database save operations and non-database save operations. In a * non-database save operation (such as the exportDatabase call), we do not wish to use the global preference of * saving in standard order. */ - public static List getSortedEntries(BibDatabaseContext bibDatabaseContext, List entriesToSort, SaveConfiguration preferences) { - Objects.requireNonNull(bibDatabaseContext); + public static List getSortedEntries(List entriesToSort, SaveOrder saveOrder) { Objects.requireNonNull(entriesToSort); + Objects.requireNonNull(saveOrder); - // if no meta data are present, simply return in original order - if (bibDatabaseContext.getMetaData() == null) { - return new LinkedList<>(entriesToSort); - } - - List> comparators = getSaveComparators(bibDatabaseContext.getMetaData(), preferences); + List> comparators = getSaveComparators(saveOrder); FieldComparatorStack comparatorStack = new FieldComparatorStack<>(comparators); List sorted = new ArrayList<>(entriesToSort); @@ -148,23 +142,6 @@ public static List getSortedEntries(BibDatabaseContext bibDatabaseCont return sorted; } - private static Optional getSaveOrder(MetaData metaData, SaveConfiguration saveConfiguration) { - /* two options: - * 1. order specified in metaData - * 2. original order - */ - - if (saveConfiguration.useMetadataSaveOrder()) { - return metaData.getSaveOrderConfig(); - } - - if (saveConfiguration.getSaveOrder().getOrderType() == SaveOrder.OrderType.ORIGINAL) { - return Optional.empty(); - } - - return Optional.ofNullable(saveConfiguration.getSaveOrder()); - } - public List getSaveActionsFieldChanges() { return Collections.unmodifiableList(saveActionsFieldChanges); } @@ -190,7 +167,7 @@ public void savePartOfDatabase(BibDatabaseContext bibDatabaseContext, List writeDatabaseID(id))); // Some file formats write something at the start of the file (like the encoding) - if (saveConfiguration.getSaveType() != SaveType.PLAIN_BIBTEX) { + if (saveConfiguration.getSaveType() == SaveType.WITH_JABREF_META_DATA) { Charset charset = bibDatabaseContext.getMetaData().getEncoding().orElse(StandardCharsets.UTF_8); writeProlog(bibDatabaseContext, charset); } @@ -204,7 +181,7 @@ public void savePartOfDatabase(BibDatabaseContext bibDatabaseContext, List sortedEntries = getSortedEntries(bibDatabaseContext, entries, saveConfiguration); + List sortedEntries = getSortedEntries(entries, saveConfiguration.getSaveOrder()); List saveActionChanges = applySaveActions(sortedEntries, bibDatabaseContext.getMetaData()); saveActionsFieldChanges.addAll(saveActionChanges); if (keyPatternPreferences.shouldGenerateCiteKeysBeforeSaving()) { @@ -228,7 +205,7 @@ public void savePartOfDatabase(BibDatabaseContext bibDatabaseContext, List customFormats = preferencesService.getExportPreferences().getCustomExporters(); LayoutFormatterPreferences layoutPreferences = preferencesService.getLayoutFormatterPreferences(); - SaveConfiguration saveConfiguration = preferencesService.getExportConfiguration(); + SaveOrder saveOrder = preferencesService.getExportConfiguration().getSaveOrder(); XmpPreferences xmpPreferences = preferencesService.getXmpPreferences(); FieldPreferences fieldPreferences = preferencesService.getFieldPreferences(); BibDatabaseMode bibDatabaseMode = preferencesService.getLibraryPreferences().getDefaultBibDatabaseMode(); @@ -36,23 +37,23 @@ public static ExporterFactory create(PreferencesService preferencesService, List exporters = new ArrayList<>(); // Initialize build-in exporters - exporters.add(new TemplateExporter("HTML", "html", "html", null, StandardFileType.HTML, layoutPreferences, saveConfiguration)); - exporters.add(new TemplateExporter(Localization.lang("Simple HTML"), "simplehtml", "simplehtml", null, StandardFileType.HTML, layoutPreferences, saveConfiguration)); - exporters.add(new TemplateExporter("DocBook 5.1", "docbook5", "docbook5", null, StandardFileType.XML, layoutPreferences, saveConfiguration)); - exporters.add(new TemplateExporter("DocBook 4", "docbook4", "docbook4", null, StandardFileType.XML, layoutPreferences, saveConfiguration)); - exporters.add(new TemplateExporter("DIN 1505", "din1505", "din1505winword", "din1505", StandardFileType.RTF, layoutPreferences, saveConfiguration)); - exporters.add(new TemplateExporter("BibO RDF", "bibordf", "bibordf", null, StandardFileType.RDF, layoutPreferences, saveConfiguration)); - exporters.add(new TemplateExporter(Localization.lang("HTML table"), "tablerefs", "tablerefs", "tablerefs", StandardFileType.HTML, layoutPreferences, saveConfiguration)); - exporters.add(new TemplateExporter(Localization.lang("HTML list"), "listrefs", "listrefs", "listrefs", StandardFileType.HTML, layoutPreferences, saveConfiguration)); - exporters.add(new TemplateExporter(Localization.lang("HTML table (with Abstract & BibTeX)"), "tablerefsabsbib", "tablerefsabsbib", "tablerefsabsbib", StandardFileType.HTML, layoutPreferences, saveConfiguration)); - exporters.add(new TemplateExporter("Harvard RTF", "harvard", "harvard", "harvard", StandardFileType.RTF, layoutPreferences, saveConfiguration)); - exporters.add(new TemplateExporter("ISO 690 RTF", "iso690rtf", "iso690RTF", "iso690rtf", StandardFileType.RTF, layoutPreferences, saveConfiguration)); - exporters.add(new TemplateExporter("ISO 690", "iso690txt", "iso690", "iso690txt", StandardFileType.TXT, layoutPreferences, saveConfiguration)); - exporters.add(new TemplateExporter("Endnote", "endnote", "EndNote", "endnote", StandardFileType.TXT, layoutPreferences, saveConfiguration)); - exporters.add(new TemplateExporter("OpenOffice/LibreOffice CSV", "oocsv", "openoffice-csv", "openoffice", StandardFileType.CSV, layoutPreferences, saveConfiguration)); - exporters.add(new TemplateExporter("RIS", "ris", "ris", "ris", StandardFileType.RIS, layoutPreferences, saveConfiguration, BlankLineBehaviour.DELETE_BLANKS)); - exporters.add(new TemplateExporter("MIS Quarterly", "misq", "misq", "misq", StandardFileType.RTF, layoutPreferences, saveConfiguration)); - exporters.add(new TemplateExporter("CSL YAML", "yaml", "yaml", null, StandardFileType.YAML, layoutPreferences, saveConfiguration, BlankLineBehaviour.DELETE_BLANKS)); + exporters.add(new TemplateExporter("HTML", "html", "html", null, StandardFileType.HTML, layoutPreferences, saveOrder)); + exporters.add(new TemplateExporter(Localization.lang("Simple HTML"), "simplehtml", "simplehtml", null, StandardFileType.HTML, layoutPreferences, saveOrder)); + exporters.add(new TemplateExporter("DocBook 5.1", "docbook5", "docbook5", null, StandardFileType.XML, layoutPreferences, saveOrder)); + exporters.add(new TemplateExporter("DocBook 4", "docbook4", "docbook4", null, StandardFileType.XML, layoutPreferences, saveOrder)); + exporters.add(new TemplateExporter("DIN 1505", "din1505", "din1505winword", "din1505", StandardFileType.RTF, layoutPreferences, saveOrder)); + exporters.add(new TemplateExporter("BibO RDF", "bibordf", "bibordf", null, StandardFileType.RDF, layoutPreferences, saveOrder)); + exporters.add(new TemplateExporter(Localization.lang("HTML table"), "tablerefs", "tablerefs", "tablerefs", StandardFileType.HTML, layoutPreferences, saveOrder)); + exporters.add(new TemplateExporter(Localization.lang("HTML list"), "listrefs", "listrefs", "listrefs", StandardFileType.HTML, layoutPreferences, saveOrder)); + exporters.add(new TemplateExporter(Localization.lang("HTML table (with Abstract & BibTeX)"), "tablerefsabsbib", "tablerefsabsbib", "tablerefsabsbib", StandardFileType.HTML, layoutPreferences, saveOrder)); + exporters.add(new TemplateExporter("Harvard RTF", "harvard", "harvard", "harvard", StandardFileType.RTF, layoutPreferences, saveOrder)); + exporters.add(new TemplateExporter("ISO 690 RTF", "iso690rtf", "iso690RTF", "iso690rtf", StandardFileType.RTF, layoutPreferences, saveOrder)); + exporters.add(new TemplateExporter("ISO 690", "iso690txt", "iso690", "iso690txt", StandardFileType.TXT, layoutPreferences, saveOrder)); + exporters.add(new TemplateExporter("Endnote", "endnote", "EndNote", "endnote", StandardFileType.TXT, layoutPreferences, saveOrder)); + exporters.add(new TemplateExporter("OpenOffice/LibreOffice CSV", "oocsv", "openoffice-csv", "openoffice", StandardFileType.CSV, layoutPreferences, saveOrder)); + exporters.add(new TemplateExporter("RIS", "ris", "ris", "ris", StandardFileType.RIS, layoutPreferences, saveOrder, BlankLineBehaviour.DELETE_BLANKS)); + exporters.add(new TemplateExporter("MIS Quarterly", "misq", "misq", "misq", StandardFileType.RTF, layoutPreferences, saveOrder)); + exporters.add(new TemplateExporter("CSL YAML", "yaml", "yaml", null, StandardFileType.YAML, layoutPreferences, saveOrder, BlankLineBehaviour.DELETE_BLANKS)); exporters.add(new OpenOfficeDocumentCreator()); exporters.add(new OpenDocumentSpreadsheetCreator()); exporters.add(new MSBibExporter()); diff --git a/src/main/java/org/jabref/logic/exporter/MetaDataSerializer.java b/src/main/java/org/jabref/logic/exporter/MetaDataSerializer.java index 150dab34e66..60c143dab88 100644 --- a/src/main/java/org/jabref/logic/exporter/MetaDataSerializer.java +++ b/src/main/java/org/jabref/logic/exporter/MetaDataSerializer.java @@ -42,7 +42,7 @@ public static Map getSerializedStringMap(MetaData metaData, Map> stringyMetaData = new HashMap<>(); // First write all meta data except groups - metaData.getSaveOrderConfig().ifPresent( + metaData.getSaveOrder().ifPresent( saveOrderConfig -> stringyMetaData.put(MetaData.SAVE_ORDER_CONFIG, saveOrderConfig.getAsStringList())); metaData.getSaveActions().ifPresent( saveActions -> stringyMetaData.put(MetaData.SAVE_ACTIONS, saveActions.getAsStringList(OS.NEWLINE))); diff --git a/src/main/java/org/jabref/logic/exporter/SaveConfiguration.java b/src/main/java/org/jabref/logic/exporter/SaveConfiguration.java index 7e0bc84eb7b..9a93467390f 100644 --- a/src/main/java/org/jabref/logic/exporter/SaveConfiguration.java +++ b/src/main/java/org/jabref/logic/exporter/SaveConfiguration.java @@ -11,37 +11,24 @@ public class SaveConfiguration { private SaveOrder saveOrder; private boolean makeBackup; private BibDatabaseWriter.SaveType saveType; - private boolean useMetadataSaveOrder; public SaveConfiguration(SaveOrder saveOrder, Boolean makeBackup, BibDatabaseWriter.SaveType saveType, - Boolean useMetadataSaveOrder, Boolean reformatFile) { this.saveOrder = saveOrder; this.makeBackup = makeBackup; this.saveType = saveType; - this.useMetadataSaveOrder = useMetadataSaveOrder; this.reformatFile = reformatFile; } public SaveConfiguration() { this(SaveOrder.getDefaultSaveOrder(), false, - BibDatabaseWriter.SaveType.ALL, - true, + BibDatabaseWriter.SaveType.WITH_JABREF_META_DATA, false); } - public boolean useMetadataSaveOrder() { - return useMetadataSaveOrder; - } - - public SaveConfiguration withMetadataSaveOrder(boolean newTakeMetadataSaveOrderInAccount) { - this.useMetadataSaveOrder = newTakeMetadataSaveOrderInAccount; - return this; - } - public SaveOrder getSaveOrder() { return saveOrder; } diff --git a/src/main/java/org/jabref/logic/exporter/TemplateExporter.java b/src/main/java/org/jabref/logic/exporter/TemplateExporter.java index d05d99212a3..3334ba094ea 100644 --- a/src/main/java/org/jabref/logic/exporter/TemplateExporter.java +++ b/src/main/java/org/jabref/logic/exporter/TemplateExporter.java @@ -28,7 +28,10 @@ import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.types.EntryType; +import org.jabref.model.metadata.SaveOrder; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,7 +52,7 @@ public class TemplateExporter extends Exporter { private final String lfFileName; private final String directory; private final LayoutFormatterPreferences layoutPreferences; - private final SaveConfiguration saveConfiguration; + private final SaveOrder saveOrder; private boolean customExport; private BlankLineBehaviour blankLineBehaviour; @@ -76,21 +79,19 @@ public TemplateExporter(String displayName, * @param name to display to the user and to call this format in the console. * @param lfFileName Name of the main layout file. * @param extension May or may not contain the . (for instance .txt). - * @param layoutPreferences Preferences for the layout - * @param saveConfiguration Preferences for saving */ public TemplateExporter(String name, String lfFileName, String extension, LayoutFormatterPreferences layoutPreferences, - SaveConfiguration saveConfiguration) { + SaveOrder saveOrder) { this(name, name, lfFileName, null, StandardFileType.fromExtensions(extension), layoutPreferences, - saveConfiguration); + saveOrder); } /** @@ -101,25 +102,15 @@ public TemplateExporter(String name, * @param lfFileName Name of the main layout file. * @param directory Directory in which to find the layout file. * @param extension Should contain the . (for instance .txt). - * @param layoutPreferences Preferences for layout - * @param saveConfiguration Preferences for saving */ - public TemplateExporter(String displayName, - String consoleName, - String lfFileName, - String directory, - FileType extension, + public TemplateExporter(@NonNull String displayName, + @NonNull String consoleName, + @NonNull String lfFileName, + @Nullable String directory, + @NonNull FileType extension, LayoutFormatterPreferences layoutPreferences, - SaveConfiguration saveConfiguration) { - super(consoleName, displayName, extension); - if (Objects.requireNonNull(lfFileName).endsWith(LAYOUT_EXTENSION)) { - this.lfFileName = lfFileName.substring(0, lfFileName.length() - LAYOUT_EXTENSION.length()); - } else { - this.lfFileName = lfFileName; - } - this.directory = directory; - this.layoutPreferences = layoutPreferences; - this.saveConfiguration = saveConfiguration; + SaveOrder saveOrder) { + this(displayName, consoleName, lfFileName, directory, extension, layoutPreferences, saveOrder, null); } /** @@ -131,7 +122,6 @@ public TemplateExporter(String displayName, * @param directory Directory in which to find the layout file. * @param extension Should contain the . (for instance .txt). * @param layoutPreferences Preferences for layout - * @param saveConfiguration Preferences for saving * @param blankLineBehaviour how to behave regarding blank lines. */ public TemplateExporter(String displayName, @@ -140,7 +130,7 @@ public TemplateExporter(String displayName, String directory, FileType extension, LayoutFormatterPreferences layoutPreferences, - SaveConfiguration saveConfiguration, + SaveOrder saveOrder, BlankLineBehaviour blankLineBehaviour) { super(consoleName, displayName, extension); if (Objects.requireNonNull(lfFileName).endsWith(LAYOUT_EXTENSION)) { @@ -150,7 +140,7 @@ public TemplateExporter(String displayName, } this.directory = directory; this.layoutPreferences = layoutPreferences; - this.saveConfiguration = saveConfiguration; + this.saveOrder = saveOrder == null ? SaveOrder.getDefaultSaveOrder() : saveOrder; this.blankLineBehaviour = blankLineBehaviour; } @@ -247,12 +237,9 @@ public void export(final BibDatabaseContext databaseContext, /* * Write database entries; entries will be sorted as they appear on the - * screen, or sorted by author, depending on Preferences. We also supply - * the Set entries - if we are to export only certain entries, it will - * be non-null, and be used to choose entries. Otherwise, it will be - * null, and be ignored. + * screen, or sorted by author, depending on Preferences. */ - List sorted = BibDatabaseWriter.getSortedEntries(databaseContext, entries, saveConfiguration); + List sorted = BibDatabaseWriter.getSortedEntries(entries, saveOrder); // Load default layout Layout defLayout; diff --git a/src/main/java/org/jabref/logic/importer/util/MetaDataParser.java b/src/main/java/org/jabref/logic/importer/util/MetaDataParser.java index 57c66e12889..b5b733f7973 100644 --- a/src/main/java/org/jabref/logic/importer/util/MetaDataParser.java +++ b/src/main/java/org/jabref/logic/importer/util/MetaDataParser.java @@ -120,7 +120,7 @@ public MetaData parse(MetaData metaData, Map data, Character key metaData.markAsNotProtected(); } } else if (entry.getKey().equals(MetaData.SAVE_ORDER_CONFIG)) { - metaData.setSaveOrderConfig(SaveOrder.parse(values)); + metaData.setSaveOrder(SaveOrder.parse(values)); } else if (entry.getKey().equals(MetaData.GROUPSTREE) || entry.getKey().equals(MetaData.GROUPSTREE_LEGACY)) { metaData.setGroups(GroupsParser.importGroups(values, keywordSeparator, fileMonitor, metaData)); } else if (entry.getKey().equals(MetaData.VERSION_DB_STRUCT)) { diff --git a/src/main/java/org/jabref/model/metadata/MetaData.java b/src/main/java/org/jabref/model/metadata/MetaData.java index a8ddc4b3d74..faf537a59ef 100644 --- a/src/main/java/org/jabref/model/metadata/MetaData.java +++ b/src/main/java/org/jabref/model/metadata/MetaData.java @@ -81,11 +81,11 @@ public MetaData() { // Do nothing } - public Optional getSaveOrderConfig() { + public Optional getSaveOrder() { return Optional.ofNullable(saveOrder); } - public void setSaveOrderConfig(SaveOrder saveOrder) { + public void setSaveOrder(SaveOrder saveOrder) { this.saveOrder = saveOrder; postChange(); } @@ -270,7 +270,7 @@ public void clearSaveActions() { postChange(); } - public void clearSaveOrderConfig() { + public void clearSaveOrder() { saveOrder = null; postChange(); } diff --git a/src/main/java/org/jabref/model/metadata/SaveOrder.java b/src/main/java/org/jabref/model/metadata/SaveOrder.java index 499d9f5d161..2161d7526c5 100644 --- a/src/main/java/org/jabref/model/metadata/SaveOrder.java +++ b/src/main/java/org/jabref/model/metadata/SaveOrder.java @@ -13,49 +13,18 @@ /** * Stores the save order config from MetaData *

- * Format: <choice>, pair of field + ascending (boolean) + * Format: <choice>, a pair of field + ascending (boolean) */ public class SaveOrder { - public enum OrderType { - SPECIFIED("specified"), - ORIGINAL("original"), - TABLE("table"); - - private final String name; - - OrderType(String name) { - this.name = name; - } - - @Override - public String toString() { - return name; - } - - public static SaveOrder.OrderType fromBooleans(boolean saveInSpecifiedOrder, boolean saveInOriginalOrder) { - SaveOrder.OrderType orderType = SaveOrder.OrderType.TABLE; - if (saveInSpecifiedOrder) { - orderType = SaveOrder.OrderType.SPECIFIED; - } else if (saveInOriginalOrder) { - orderType = SaveOrder.OrderType.ORIGINAL; - } - - return orderType; - } - } - private static final Logger LOGGER = LoggerFactory.getLogger(SaveOrder.class); - private final List sortCriteria = new ArrayList<>(); - private OrderType orderType; - - private SaveOrder() { - } + private final OrderType orderType; + private final List sortCriteria; public SaveOrder(OrderType orderType, List sortCriteria) { this.orderType = orderType; - this.sortCriteria.addAll(sortCriteria); + this.sortCriteria = sortCriteria; } private SaveOrder(List data) { @@ -65,22 +34,27 @@ private SaveOrder(List data) { throw new IllegalArgumentException(); } + OrderType orderType; try { - this.orderType = OrderType.valueOf(data.get(0).toUpperCase()); + orderType = OrderType.valueOf(data.get(0).toUpperCase()); } catch (IllegalArgumentException ex) { if (data.size() > 1 && data.size() % 2 == 1) { LOGGER.warn("Could not parse sort order: {} - trying to parse the sort criteria", data.get(0)); - this.orderType = OrderType.SPECIFIED; + orderType = OrderType.SPECIFIED; } else { LOGGER.warn("Could not parse sort order: {}", data.get(0)); + this.sortCriteria = List.of(); this.orderType = OrderType.ORIGINAL; return; } } + this.orderType = orderType; + List sortCriteria = new ArrayList<>(data.size() / 2); for (int index = 1; index < data.size(); index = index + 2) { sortCriteria.add(new SortCriterion(FieldFactory.parseField(data.get(index)), data.get(index + 1))); } + this.sortCriteria = sortCriteria; } public static SaveOrder parse(List orderedData) { @@ -88,9 +62,7 @@ public static SaveOrder parse(List orderedData) { } public static SaveOrder getDefaultSaveOrder() { - SaveOrder standard = new SaveOrder(); - standard.orderType = OrderType.ORIGINAL; - return standard; + return new SaveOrder(OrderType.ORIGINAL, List.of()); } public OrderType getOrderType() { @@ -146,12 +118,18 @@ public List getAsStringList() { public static class SortCriterion { - public Field field; + public final Field field; - public boolean descending; + public final boolean descending; + + /** + * Given field sorted ascending + */ + public SortCriterion(Field field) { + this(field, false); + } /** - * * @param field The field * @param descending Must be a boolean value as string, e.g. "true", "false" */ @@ -165,9 +143,6 @@ public SortCriterion(Field field, boolean descending) { this.descending = descending; } - public SortCriterion() { - } - @Override public String toString() { return "SortCriterion{" + "field='" + field + '\'' + @@ -193,4 +168,32 @@ public int hashCode() { return Objects.hash(field, descending); } } + + public enum OrderType { + SPECIFIED("specified"), + ORIGINAL("original"), + TABLE("table"); + + private final String name; + + OrderType(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } + + public static SaveOrder.OrderType fromBooleans(boolean saveInSpecifiedOrder, boolean saveInOriginalOrder) { + SaveOrder.OrderType orderType = SaveOrder.OrderType.TABLE; + if (saveInSpecifiedOrder) { + orderType = SaveOrder.OrderType.SPECIFIED; + } else if (saveInOriginalOrder) { + orderType = SaveOrder.OrderType.ORIGINAL; + } + + return orderType; + } + } } diff --git a/src/main/java/org/jabref/preferences/JabRefPreferences.java b/src/main/java/org/jabref/preferences/JabRefPreferences.java index 1d8924bb830..e48e39553c1 100644 --- a/src/main/java/org/jabref/preferences/JabRefPreferences.java +++ b/src/main/java/org/jabref/preferences/JabRefPreferences.java @@ -588,7 +588,7 @@ private JabRefPreferences() { defaults.put(EXPORT_SECONDARY_SORT_FIELD, StandardField.AUTHOR.getName()); defaults.put(EXPORT_SECONDARY_SORT_DESCENDING, Boolean.FALSE); defaults.put(EXPORT_TERTIARY_SORT_FIELD, StandardField.TITLE.getName()); - defaults.put(EXPORT_TERTIARY_SORT_DESCENDING, Boolean.TRUE); + defaults.put(EXPORT_TERTIARY_SORT_DESCENDING, Boolean.FALSE); defaults.put(NEWLINE, System.lineSeparator()); @@ -2279,7 +2279,6 @@ public SaveConfiguration getExportConfiguration() { return new SaveConfiguration() .withSaveOrder(saveOrder) - .withMetadataSaveOrder(false) .withReformatOnSave(getLibraryPreferences().shouldAlwaysReformatOnSave()); } @@ -2295,7 +2294,7 @@ private List getCustomExportFormats() { formatData.get(EXPORTER_FILENAME_INDEX), formatData.get(EXPORTER_EXTENSION_INDEX), layoutPreferences, - saveConfiguration); + saveConfiguration.getSaveOrder()); format.setCustomExport(true); formats.add(format); } diff --git a/src/test/java/org/jabref/logic/crawler/CrawlerTest.java b/src/test/java/org/jabref/logic/crawler/CrawlerTest.java index fe63cc22dba..3bb915cf568 100644 --- a/src/test/java/org/jabref/logic/crawler/CrawlerTest.java +++ b/src/test/java/org/jabref/logic/crawler/CrawlerTest.java @@ -72,7 +72,6 @@ public void setUp() throws Exception { importerPreferences = mock(ImporterPreferences.class); saveConfiguration = mock(SaveConfiguration.class, Answers.RETURNS_DEEP_STUBS); when(saveConfiguration.getSaveOrder()).thenReturn(SaveOrder.getDefaultSaveOrder()); - when(saveConfiguration.useMetadataSaveOrder()).thenReturn(true); when(importerPreferences.getApiKeys()).thenReturn(FXCollections.emptyObservableSet()); when(importFormatPreferences.bibEntryPreferences().getKeywordSeparator()).thenReturn(','); diff --git a/src/test/java/org/jabref/logic/crawler/StudyCatalogToFetcherConverterTest.java b/src/test/java/org/jabref/logic/crawler/StudyCatalogToFetcherConverterTest.java index 9b73a8ad2d9..e3bee090ebf 100644 --- a/src/test/java/org/jabref/logic/crawler/StudyCatalogToFetcherConverterTest.java +++ b/src/test/java/org/jabref/logic/crawler/StudyCatalogToFetcherConverterTest.java @@ -40,7 +40,6 @@ void setUpMocks() { preferencesService = mock(PreferencesService.class, Answers.RETURNS_DEEP_STUBS); saveConfiguration = mock(SaveConfiguration.class, Answers.RETURNS_DEEP_STUBS); when(saveConfiguration.getSaveOrder()).thenReturn(SaveOrder.getDefaultSaveOrder()); - when(saveConfiguration.useMetadataSaveOrder()).thenReturn(true); when(preferencesService.getBibEntryPreferences().getKeywordSeparator()).thenReturn(','); when(preferencesService.getImporterPreferences().getApiKeys()).thenReturn(FXCollections.emptyObservableSet()); diff --git a/src/test/java/org/jabref/logic/exporter/BibtexDatabaseWriterTest.java b/src/test/java/org/jabref/logic/exporter/BibtexDatabaseWriterTest.java index dd765793e33..88b1273843a 100644 --- a/src/test/java/org/jabref/logic/exporter/BibtexDatabaseWriterTest.java +++ b/src/test/java/org/jabref/logic/exporter/BibtexDatabaseWriterTest.java @@ -84,7 +84,6 @@ void setUp() { fieldPreferences = new FieldPreferences(true, Collections.emptyList(), Collections.emptyList()); saveConfiguration = mock(SaveConfiguration.class, Answers.RETURNS_DEEP_STUBS); when(saveConfiguration.getSaveOrder()).thenReturn(SaveOrder.getDefaultSaveOrder()); - when(saveConfiguration.useMetadataSaveOrder()).thenReturn(true); citationKeyPatternPreferences = mock(CitationKeyPatternPreferences.class, Answers.RETURNS_DEEP_STUBS); entryTypesManager = new BibEntryTypesManager(); stringWriter = new StringWriter(); @@ -738,7 +737,7 @@ void writeSaveOrderConfig() throws Exception { List.of(new SaveOrder.SortCriterion(StandardField.AUTHOR, false), new SaveOrder.SortCriterion(StandardField.YEAR, true), new SaveOrder.SortCriterion(StandardField.ABSTRACT, false))); - metaData.setSaveOrderConfig(saveOrder); + metaData.setSaveOrder(saveOrder); databaseWriter.savePartOfDatabase(bibtexContext, Collections.emptyList()); @@ -799,7 +798,7 @@ void writeEntriesSorted() throws Exception { List.of(new SaveOrder.SortCriterion(StandardField.AUTHOR, false), new SaveOrder.SortCriterion(StandardField.YEAR, true), new SaveOrder.SortCriterion(StandardField.ABSTRACT, false))); - metaData.setSaveOrderConfig(saveOrder); + metaData.setSaveOrder(saveOrder); BibEntry firstEntry = new BibEntry(StandardEntryType.Article) .withField(StandardField.AUTHOR, "A") diff --git a/src/test/java/org/jabref/logic/exporter/CsvExportFormatTest.java b/src/test/java/org/jabref/logic/exporter/CsvExportFormatTest.java index f551cdec9b0..53342e7d7fa 100644 --- a/src/test/java/org/jabref/logic/exporter/CsvExportFormatTest.java +++ b/src/test/java/org/jabref/logic/exporter/CsvExportFormatTest.java @@ -20,7 +20,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; public class CsvExportFormatTest { @@ -29,9 +28,6 @@ public class CsvExportFormatTest { @BeforeEach public void setUp() { - SaveConfiguration saveConfiguration = mock(SaveConfiguration.class); - when(saveConfiguration.getSaveOrder()).thenReturn(SaveOrder.getDefaultSaveOrder()); - exportFormat = new TemplateExporter( "OpenOffice/LibreOffice CSV", "oocsv", @@ -39,7 +35,7 @@ public void setUp() { "openoffice", StandardFileType.CSV, mock(LayoutFormatterPreferences.class, Answers.RETURNS_DEEP_STUBS), - saveConfiguration); + SaveOrder.getDefaultSaveOrder()); databaseContext = new BibDatabaseContext(); } @@ -101,8 +97,8 @@ public void testPerformExportForSingleEditor(@TempDir Path testFolder) throws Ex public void testPerformExportForMultipleEditors(@TempDir Path testFolder) throws Exception { Path path = testFolder.resolve("ThisIsARandomlyNamedFile"); File tmpFile = path.toFile(); - BibEntry entry = new BibEntry(); - entry.setField(StandardField.EDITOR, "von Neumann, John and Smith, John and Black Brown, Peter"); + BibEntry entry = new BibEntry() + .withField(StandardField.EDITOR, "von Neumann, John and Smith, John and Black Brown, Peter"); List entries = List.of(entry); exportFormat.export(databaseContext, tmpFile.toPath(), entries); diff --git a/src/test/java/org/jabref/logic/exporter/DocBook5ExporterTest.java b/src/test/java/org/jabref/logic/exporter/DocBook5ExporterTest.java index b46b12c7fdf..da3308f2a96 100644 --- a/src/test/java/org/jabref/logic/exporter/DocBook5ExporterTest.java +++ b/src/test/java/org/jabref/logic/exporter/DocBook5ExporterTest.java @@ -29,7 +29,6 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; public class DocBook5ExporterTest { @@ -42,9 +41,6 @@ public class DocBook5ExporterTest { @BeforeEach void setUp() throws URISyntaxException { - SaveConfiguration saveConfiguration = mock(SaveConfiguration.class); - when(saveConfiguration.getSaveOrder()).thenReturn(SaveOrder.getDefaultSaveOrder()); - exporter = new TemplateExporter( "DocBook 5.1", "docbook5", @@ -52,19 +48,19 @@ void setUp() throws URISyntaxException { null, StandardFileType.XML, mock(LayoutFormatterPreferences.class, Answers.RETURNS_DEEP_STUBS), - saveConfiguration); + SaveOrder.getDefaultSaveOrder()); LocalDate myDate = LocalDate.of(2018, 1, 1); xmlFile = Path.of(DocBook5ExporterTest.class.getResource("Docbook5ExportFormat.xml").toURI()); databaseContext = new BibDatabaseContext(); charset = StandardCharsets.UTF_8; - BibEntry entry = new BibEntry(StandardEntryType.Book); - entry.setField(StandardField.TITLE, "my paper title"); - entry.setField(StandardField.AUTHOR, "Stefan Kolb and Tobias Diez"); - entry.setField(StandardField.ISBN, "1-2-34"); - entry.setCitationKey("mykey"); - entry.setDate(new org.jabref.model.entry.Date(myDate)); + BibEntry entry = new BibEntry(StandardEntryType.Book) + .withField(StandardField.TITLE, "my paper title") + .withField(StandardField.AUTHOR, "Stefan Kolb and Tobias Diez") + .withField(StandardField.ISBN, "1-2-34") + .withCitationKey("mykey") + .withDate(new org.jabref.model.entry.Date(myDate)); entries = Collections.singletonList(entry); } diff --git a/src/test/java/org/jabref/logic/exporter/DocbookExporterTest.java b/src/test/java/org/jabref/logic/exporter/DocbookExporterTest.java index e3b38e8918f..23221d0311a 100644 --- a/src/test/java/org/jabref/logic/exporter/DocbookExporterTest.java +++ b/src/test/java/org/jabref/logic/exporter/DocbookExporterTest.java @@ -21,7 +21,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; public class DocbookExporterTest { @@ -32,9 +31,6 @@ public class DocbookExporterTest { @BeforeEach public void setUp() { - SaveConfiguration saveConfiguration = mock(SaveConfiguration.class); - when(saveConfiguration.getSaveOrder()).thenReturn(SaveOrder.getDefaultSaveOrder()); - exportFormat = new TemplateExporter( "DocBook 4", "docbook4", @@ -42,7 +38,7 @@ public void setUp() { null, StandardFileType.XML, mock(LayoutFormatterPreferences.class, Answers.RETURNS_DEEP_STUBS), - saveConfiguration); + SaveOrder.getDefaultSaveOrder()); } @Test diff --git a/src/test/java/org/jabref/logic/exporter/HtmlExportFormatTest.java b/src/test/java/org/jabref/logic/exporter/HtmlExportFormatTest.java index 3f18d4704b1..b684e84a2e4 100644 --- a/src/test/java/org/jabref/logic/exporter/HtmlExportFormatTest.java +++ b/src/test/java/org/jabref/logic/exporter/HtmlExportFormatTest.java @@ -21,7 +21,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; public class HtmlExportFormatTest { public BibDatabaseContext databaseContext; @@ -31,16 +30,13 @@ public class HtmlExportFormatTest { @BeforeEach public void setUp() { - SaveConfiguration saveConfiguration = mock(SaveConfiguration.class); - when(saveConfiguration.getSaveOrder()).thenReturn(SaveOrder.getDefaultSaveOrder()); - exportFormat = new TemplateExporter("HTML", "html", "html", null, StandardFileType.HTML, mock(LayoutFormatterPreferences.class, Answers.RETURNS_DEEP_STUBS), - saveConfiguration); + SaveOrder.getDefaultSaveOrder()); databaseContext = new BibDatabaseContext(); charset = StandardCharsets.UTF_8; diff --git a/src/test/java/org/jabref/logic/exporter/YamlExporterTest.java b/src/test/java/org/jabref/logic/exporter/YamlExporterTest.java index 36f9665b094..db42e79dbbc 100644 --- a/src/test/java/org/jabref/logic/exporter/YamlExporterTest.java +++ b/src/test/java/org/jabref/logic/exporter/YamlExporterTest.java @@ -20,7 +20,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; public class YamlExporterTest { @@ -29,9 +28,6 @@ public class YamlExporterTest { @BeforeAll static void setUp() { - SaveConfiguration saveConfiguration = mock(SaveConfiguration.class); - when(saveConfiguration.getSaveOrder()).thenReturn(SaveOrder.getDefaultSaveOrder()); - yamlExporter = new TemplateExporter( "CSL YAML", "yaml", @@ -39,7 +35,7 @@ static void setUp() { null, StandardFileType.YAML, mock(LayoutFormatterPreferences.class, Answers.RETURNS_DEEP_STUBS), - saveConfiguration, + SaveOrder.getDefaultSaveOrder(), BlankLineBehaviour.DELETE_BLANKS); databaseContext = new BibDatabaseContext(); diff --git a/src/test/java/org/jabref/logic/importer/fileformat/BibtexParserTest.java b/src/test/java/org/jabref/logic/importer/fileformat/BibtexParserTest.java index 3017bb603a8..bdfc7a8718c 100644 --- a/src/test/java/org/jabref/logic/importer/fileformat/BibtexParserTest.java +++ b/src/test/java/org/jabref/logic/importer/fileformat/BibtexParserTest.java @@ -1322,7 +1322,7 @@ void integrationTestSaveOrderConfig() throws IOException { new StringReader( "@Comment{jabref-meta: saveOrderConfig:specified;author;false;year;true;abstract;false;}")); - Optional saveOrderConfig = result.getMetaData().getSaveOrderConfig(); + Optional saveOrderConfig = result.getMetaData().getSaveOrder(); assertEquals(new SaveOrder(SaveOrder.OrderType.SPECIFIED, List.of( new SaveOrder.SortCriterion(StandardField.AUTHOR, false),