From 94e1770839f5d71f3556370ce9ed90dce0d4f44e Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Mon, 1 Sep 2025 11:42:56 +0200 Subject: [PATCH 01/34] feat: draft PR for substituting `BibEntryTypesManager` instead of `BiblatexEntryTypeDefinitions#ALL` --- .../BibliographyConsistencyCheck.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index 8e36e545140..7598050fdbb 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -20,6 +20,7 @@ import org.jabref.model.database.BibDatabaseMode; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.BibEntryType; +import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.model.entry.field.Field; import org.jabref.model.entry.field.InternalField; import org.jabref.model.entry.field.SpecialField; @@ -33,13 +34,18 @@ public class BibliographyConsistencyCheck { - private static final Set BIBLATEX_TYPES = BiblatexEntryTypeDefinitions.ALL.stream() - .map(BibEntryType::getType) - .collect(Collectors.toSet()); + // private static final Set BIBLATEX_TYPES = BiblatexEntryTypeDefinitions.ALL.stream() + // .map(BibEntryType::getType) + // .collect(Collectors.toSet()); - private static final Set BIBTEX_TYPES = BibtexEntryTypeDefinitions.ALL.stream() - .map(BibEntryType::getType) - .collect(Collectors.toSet()); + private static final Set BIBLATEX_TYPES = new HashSet<>(new BibEntryTypesManager() + .getAllTypes(BibDatabaseMode.BIBLATEX)); + + // private static final Set BIBTEX_TYPES = BibtexEntryTypeDefinitions.ALL.stream() + // .map(BibEntryType::getType) + // .collect(Collectors.toSet()); + private static final Set BIBTEX_TYPES = new HashSet<>(new BibEntryTypesManager() + .getAllTypes(BibDatabaseMode.BIBTEX)); private static final Set EXPLICITLY_EXCLUDED_FIELDS = Set.of( InternalField.KEY_FIELD, // Citation key @@ -174,7 +180,7 @@ private static void collectEntriesIntoMaps(BibDatabaseContext bibContext, Map entries = bibContext.getEntries(); - Set typeSet = switch (mode) { + Set typeSet = switch (mode) { case BIBLATEX -> BIBLATEX_TYPES; case BIBTEX -> BIBTEX_TYPES; }; From 274d8591d05d43b1c8e6a245d0a393177878267c Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Tue, 2 Sep 2025 10:03:19 +0200 Subject: [PATCH 02/34] fix: removing comments --- .../BibliographyConsistencyCheck.java | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index 7598050fdbb..42a7ae1aea6 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -26,26 +26,17 @@ import org.jabref.model.entry.field.SpecialField; import org.jabref.model.entry.field.StandardField; import org.jabref.model.entry.field.UserSpecificCommentField; -import org.jabref.model.entry.types.BiblatexEntryTypeDefinitions; -import org.jabref.model.entry.types.BibtexEntryTypeDefinitions; import org.jabref.model.entry.types.EntryType; import com.google.common.annotations.VisibleForTesting; public class BibliographyConsistencyCheck { - // private static final Set BIBLATEX_TYPES = BiblatexEntryTypeDefinitions.ALL.stream() - // .map(BibEntryType::getType) - // .collect(Collectors.toSet()); + private static final Set BIBLATEX_TYPES = new HashSet<>(new BibEntryTypesManager() + .getAllTypes(BibDatabaseMode.BIBLATEX)).stream().map(e -> e.getType()).collect(Collectors.toSet()); - private static final Set BIBLATEX_TYPES = new HashSet<>(new BibEntryTypesManager() - .getAllTypes(BibDatabaseMode.BIBLATEX)); - - // private static final Set BIBTEX_TYPES = BibtexEntryTypeDefinitions.ALL.stream() - // .map(BibEntryType::getType) - // .collect(Collectors.toSet()); - private static final Set BIBTEX_TYPES = new HashSet<>(new BibEntryTypesManager() - .getAllTypes(BibDatabaseMode.BIBTEX)); + private static final Set BIBTEX_TYPES = new HashSet<>(new BibEntryTypesManager() + .getAllTypes(BibDatabaseMode.BIBTEX)).stream().map(e -> e.getType()).collect(Collectors.toSet()); private static final Set EXPLICITLY_EXCLUDED_FIELDS = Set.of( InternalField.KEY_FIELD, // Citation key @@ -128,9 +119,9 @@ public Result check(BibDatabaseContext bibContext, BiConsumer List entryTypeDefinitions; if (bibContext.getMode() == BibDatabaseMode.BIBLATEX) { - entryTypeDefinitions = BiblatexEntryTypeDefinitions.ALL; + entryTypeDefinitions = new BibEntryTypesManager().getAllTypes(BibDatabaseMode.BIBLATEX).stream().toList(); } else { - entryTypeDefinitions = BibtexEntryTypeDefinitions.ALL; + entryTypeDefinitions = new BibEntryTypesManager().getAllTypes(BibDatabaseMode.BIBTEX).stream().toList(); } // Use LinkedHashMap to preserve the order of Bib(tex|latex)EntryTypeDefinitions.ALL @@ -180,7 +171,7 @@ private static void collectEntriesIntoMaps(BibDatabaseContext bibContext, Map entries = bibContext.getEntries(); - Set typeSet = switch (mode) { + Set typeSet = switch (mode) { case BIBLATEX -> BIBLATEX_TYPES; case BIBTEX -> BIBTEX_TYPES; }; From b9d69c237d5e78e7668cae7f5bf42365ad3bfc2e Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Tue, 2 Sep 2025 10:34:50 +0200 Subject: [PATCH 03/34] fix: resolving conflicts --- .../consistency/BibliographyConsistencyCheck.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index 42a7ae1aea6..2312b9c0e57 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -32,12 +32,6 @@ public class BibliographyConsistencyCheck { - private static final Set BIBLATEX_TYPES = new HashSet<>(new BibEntryTypesManager() - .getAllTypes(BibDatabaseMode.BIBLATEX)).stream().map(e -> e.getType()).collect(Collectors.toSet()); - - private static final Set BIBTEX_TYPES = new HashSet<>(new BibEntryTypesManager() - .getAllTypes(BibDatabaseMode.BIBTEX)).stream().map(e -> e.getType()).collect(Collectors.toSet()); - private static final Set EXPLICITLY_EXCLUDED_FIELDS = Set.of( InternalField.KEY_FIELD, // Citation key StandardField.KEY, @@ -60,6 +54,12 @@ public class BibliographyConsistencyCheck { StandardField.MODIFICATIONDATE ); + private static final Set BIBLATEX_TYPES = new HashSet<>(new BibEntryTypesManager() + .getAllTypes(BibDatabaseMode.BIBLATEX)).stream().map(e -> e.getType()).collect(Collectors.toSet()); + + private static final Set BIBTEX_TYPES = new HashSet<>(new BibEntryTypesManager() + .getAllTypes(BibDatabaseMode.BIBTEX)).stream().map(e -> e.getType()).collect(Collectors.toSet()); + private static Set filterExcludedFields(Collection fields) { return fields.stream() .filter(field -> !EXPLICITLY_EXCLUDED_FIELDS.contains(field)) From 9942817e3be5f64a9f60a81072efef863a272fdb Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Wed, 3 Sep 2025 09:04:38 +0200 Subject: [PATCH 04/34] fix: modern best practices: Set.copyOf() instead of new HashSet<>() --- .../quality/consistency/BibliographyConsistencyCheck.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index 6a198a4b4d5..fa97c81fec4 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -54,11 +54,11 @@ public class BibliographyConsistencyCheck { StandardField.MODIFICATIONDATE ); - private static final Set BIBLATEX_TYPES = new HashSet<>(new BibEntryTypesManager() - .getAllTypes(BibDatabaseMode.BIBLATEX)).stream().map(e -> e.getType()).collect(Collectors.toSet()); + private static final Set BIBLATEX_TYPES = Set.copyOf(new BibEntryTypesManager() + .getAllTypes(BibDatabaseMode.BIBLATEX)).stream().map(BibEntryType::getType).collect(Collectors.toSet()); - private static final Set BIBTEX_TYPES = new HashSet<>(new BibEntryTypesManager() - .getAllTypes(BibDatabaseMode.BIBTEX)).stream().map(e -> e.getType()).collect(Collectors.toSet()); + private static final Set BIBTEX_TYPES = Set.copyOf(new BibEntryTypesManager() + .getAllTypes(BibDatabaseMode.BIBTEX)).stream().map(BibEntryType::getType).collect(Collectors.toSet()); private static Set filterExcludedFields(Collection fields) { return fields.stream() From d45351630e50ad8d6fdb3564463191aa385f4621 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Wed, 3 Sep 2025 09:46:44 +0200 Subject: [PATCH 05/34] feat: double constructor: a default and accepting manager constructor --- .../BibliographyConsistencyCheck.java | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index fa97c81fec4..2bf2ec44ab5 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -17,7 +17,6 @@ import org.jabref.logic.bibtex.comparator.BibEntryByFieldsComparator; import org.jabref.logic.bibtex.comparator.FieldComparatorStack; import org.jabref.model.database.BibDatabaseContext; -import org.jabref.model.database.BibDatabaseMode; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.BibEntryType; import org.jabref.model.entry.BibEntryTypesManager; @@ -54,11 +53,18 @@ public class BibliographyConsistencyCheck { StandardField.MODIFICATIONDATE ); - private static final Set BIBLATEX_TYPES = Set.copyOf(new BibEntryTypesManager() - .getAllTypes(BibDatabaseMode.BIBLATEX)).stream().map(BibEntryType::getType).collect(Collectors.toSet()); + private final BibEntryTypesManager bibEntryTypesManager; - private static final Set BIBTEX_TYPES = Set.copyOf(new BibEntryTypesManager() - .getAllTypes(BibDatabaseMode.BIBTEX)).stream().map(BibEntryType::getType).collect(Collectors.toSet()); + // Default constructor + public BibliographyConsistencyCheck() { + this(new BibEntryTypesManager()); + } + + // Accepting manager constructor + @VisibleForTesting + BibliographyConsistencyCheck(BibEntryTypesManager bibEntryTypesManager) { + this.bibEntryTypesManager = bibEntryTypesManager; + } private static Set filterExcludedFields(Collection fields) { return fields.stream() @@ -117,12 +123,10 @@ public Result check(BibDatabaseContext bibContext, BiConsumer collectEntriesIntoMaps(bibContext, entryTypeToFieldsInAnyEntryMap, entryTypeToFieldsInAllEntriesMap, entryTypeToEntriesMap); - List entryTypeDefinitions; - if (bibContext.getMode() == BibDatabaseMode.BIBLATEX) { - entryTypeDefinitions = new BibEntryTypesManager().getAllTypes(BibDatabaseMode.BIBLATEX).stream().toList(); - } else { - entryTypeDefinitions = new BibEntryTypesManager().getAllTypes(BibDatabaseMode.BIBTEX).stream().toList(); - } + List entryTypeDefinitions = bibEntryTypesManager + .getAllTypes(bibContext.getMode()) + .stream() + .toList(); // Use LinkedHashMap to preserve the order of Bib(tex|latex)EntryTypeDefinitions.ALL Map resultMap = new LinkedHashMap<>(); @@ -166,7 +170,6 @@ public Result check(BibDatabaseContext bibContext, BiConsumer } private static void collectEntriesIntoMaps(BibDatabaseContext bibContext, Map> entryTypeToFieldsInAnyEntryMap, Map> entryTypeToFieldsInAllEntriesMap, Map> entryTypeToEntriesMap) { - BibDatabaseMode mode = bibContext.getMode(); List entries = bibContext.getEntries(); for (BibEntry entry : entries) { From 53b83d979c4cffb81dd4c762c0992991bcf72dca Mon Sep 17 00:00:00 2001 From: Daniele Carpentiero <140635529+dcarpentiero@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:12:00 +0200 Subject: [PATCH 06/34] Update jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java Co-authored-by: Oliver Kopp --- .../logic/quality/consistency/BibliographyConsistencyCheck.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index 2bf2ec44ab5..b51c018d629 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -60,8 +60,6 @@ public BibliographyConsistencyCheck() { this(new BibEntryTypesManager()); } - // Accepting manager constructor - @VisibleForTesting BibliographyConsistencyCheck(BibEntryTypesManager bibEntryTypesManager) { this.bibEntryTypesManager = bibEntryTypesManager; } From b7145af86b704959056b51f6acd24fcc13219511 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Thu, 4 Sep 2025 11:14:38 +0200 Subject: [PATCH 07/34] feat: passing down the BibEntryTypes manager to BibliographyConsistencyCheck constructor --- .../consistency/BibliographyConsistencyCheck.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index b51c018d629..b653a93fdc5 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -55,13 +55,8 @@ public class BibliographyConsistencyCheck { private final BibEntryTypesManager bibEntryTypesManager; - // Default constructor - public BibliographyConsistencyCheck() { - this(new BibEntryTypesManager()); - } - - BibliographyConsistencyCheck(BibEntryTypesManager bibEntryTypesManager) { - this.bibEntryTypesManager = bibEntryTypesManager; + BibliographyConsistencyCheck(org.jabref.logic.preferences.JabRefCliPreferences bibEntryTypesManager) { + this.bibEntryTypesManager = bibEntryTypesManager.getCustomEntryTypesRepository(); } private static Set filterExcludedFields(Collection fields) { From baeff030aaca51f568a1c3176af07985c440426c Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Thu, 4 Sep 2025 12:24:18 +0200 Subject: [PATCH 08/34] feat: starting substituting CliPreferences with JabRefCliPreferences where needed --- .../consistency/BibliographyConsistencyCheck.java | 2 +- .../jabref/languageserver/LspClientHandler.java | 6 +++--- .../org/jabref/languageserver/LspLauncher.java | 14 +++++++------- .../controller/LanguageServerController.java | 10 +++++----- .../languageserver/util/LspConsistencyCheck.java | 5 +++-- .../languageserver/util/LspDiagnosticHandler.java | 11 ++++++----- 6 files changed, 25 insertions(+), 23 deletions(-) diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index b653a93fdc5..1a830ac4360 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -55,7 +55,7 @@ public class BibliographyConsistencyCheck { private final BibEntryTypesManager bibEntryTypesManager; - BibliographyConsistencyCheck(org.jabref.logic.preferences.JabRefCliPreferences bibEntryTypesManager) { + public BibliographyConsistencyCheck(org.jabref.logic.preferences.JabRefCliPreferences bibEntryTypesManager) { this.bibEntryTypesManager = bibEntryTypesManager.getCustomEntryTypesRepository(); } diff --git a/jabls/src/main/java/org/jabref/languageserver/LspClientHandler.java b/jabls/src/main/java/org/jabref/languageserver/LspClientHandler.java index 01b719b3132..e3603db72fc 100644 --- a/jabls/src/main/java/org/jabref/languageserver/LspClientHandler.java +++ b/jabls/src/main/java/org/jabref/languageserver/LspClientHandler.java @@ -4,7 +4,7 @@ import org.jabref.languageserver.util.LspDiagnosticHandler; import org.jabref.logic.journals.JournalAbbreviationRepository; -import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.preferences.JabRefCliPreferences; import org.eclipse.lsp4j.InitializeParams; import org.eclipse.lsp4j.InitializeResult; @@ -33,9 +33,9 @@ public class LspClientHandler implements LanguageServer, LanguageClientAware { private LanguageClient client; - public LspClientHandler(CliPreferences cliPreferences, JournalAbbreviationRepository abbreviationRepository) { + public LspClientHandler(JabRefCliPreferences jabRefCliPreferences, JournalAbbreviationRepository abbreviationRepository) { this.settings = ExtensionSettings.getDefaultSettings(); - this.diagnosticHandler = new LspDiagnosticHandler(this, cliPreferences, abbreviationRepository); + this.diagnosticHandler = new LspDiagnosticHandler(this, jabRefCliPreferences, abbreviationRepository); this.workspaceService = new BibtexWorkspaceService(this, diagnosticHandler); this.textDocumentService = new BibtexTextDocumentService(diagnosticHandler); } diff --git a/jabls/src/main/java/org/jabref/languageserver/LspLauncher.java b/jabls/src/main/java/org/jabref/languageserver/LspLauncher.java index 207f3e83087..e7aebbffb35 100644 --- a/jabls/src/main/java/org/jabref/languageserver/LspLauncher.java +++ b/jabls/src/main/java/org/jabref/languageserver/LspLauncher.java @@ -11,7 +11,7 @@ import org.jabref.logic.journals.JournalAbbreviationLoader; import org.jabref.logic.journals.JournalAbbreviationRepository; -import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.preferences.JabRefCliPreferences; import org.eclipse.lsp4j.jsonrpc.Launcher; import org.eclipse.lsp4j.services.LanguageClient; @@ -22,7 +22,7 @@ public class LspLauncher extends Thread { private static final Logger LOGGER = LoggerFactory.getLogger(LspLauncher.class); - private final CliPreferences cliPreferences; + private final JabRefCliPreferences jabRefCliPreferences; private final JournalAbbreviationRepository abbreviationRepository; private final ExecutorService threadPool; @@ -30,16 +30,16 @@ public class LspLauncher extends Thread { private volatile boolean running; private ServerSocket serverSocket; - public LspLauncher(CliPreferences cliPreferences, JournalAbbreviationRepository abbreviationRepository, int port) { - this.cliPreferences = cliPreferences; + public LspLauncher(JabRefCliPreferences jabRefCliPreferences, JournalAbbreviationRepository abbreviationRepository, int port) { + this.jabRefCliPreferences = jabRefCliPreferences; this.abbreviationRepository = abbreviationRepository; this.threadPool = Executors.newCachedThreadPool(); this.port = port; this.setName("JabLs - JabRef Language Server on: " + port); } - public LspLauncher(CliPreferences cliPreferences, int port) { - this(cliPreferences, JournalAbbreviationLoader.loadRepository(cliPreferences.getJournalAbbreviationPreferences()), port); + public LspLauncher(JabRefCliPreferences jabRefCliPreferences, int port) { + this(jabRefCliPreferences, JournalAbbreviationLoader.loadRepository(jabRefCliPreferences.getJournalAbbreviationPreferences()), port); } @Override @@ -69,7 +69,7 @@ public void run() { } private void handleClient(Socket socket) { - LspClientHandler clientHandler = new LspClientHandler(cliPreferences, abbreviationRepository); + LspClientHandler clientHandler = new LspClientHandler(jabRefCliPreferences, abbreviationRepository); LOGGER.debug("LSP clientHandler started."); try (socket; // socket should be closed on error InputStream in = socket.getInputStream(); diff --git a/jabls/src/main/java/org/jabref/languageserver/controller/LanguageServerController.java b/jabls/src/main/java/org/jabref/languageserver/controller/LanguageServerController.java index 84a4992bded..8896d6f8ef1 100644 --- a/jabls/src/main/java/org/jabref/languageserver/controller/LanguageServerController.java +++ b/jabls/src/main/java/org/jabref/languageserver/controller/LanguageServerController.java @@ -2,7 +2,7 @@ import org.jabref.languageserver.LspLauncher; import org.jabref.logic.journals.JournalAbbreviationRepository; -import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.preferences.JabRefCliPreferences; import org.jspecify.annotations.Nullable; import org.slf4j.Logger; @@ -13,13 +13,13 @@ public class LanguageServerController implements AutoCloseable { private static final Logger LOGGER = LoggerFactory.getLogger(LanguageServerController.class); - private final CliPreferences cliPreferences; + private final JabRefCliPreferences jabRefCliPreferences; private final JournalAbbreviationRepository abbreviationRepository; @Nullable private LspLauncher lspLauncher; - public LanguageServerController(CliPreferences cliPreferences, JournalAbbreviationRepository abbreviationRepository) { - this.cliPreferences = cliPreferences; + public LanguageServerController(JabRefCliPreferences jabRefCliPreferences, JournalAbbreviationRepository abbreviationRepository) { + this.jabRefCliPreferences = jabRefCliPreferences; this.abbreviationRepository = abbreviationRepository; LOGGER.debug("LanguageServerController initialized."); } @@ -30,7 +30,7 @@ public synchronized void start(int port) { return; } - lspLauncher = new LspLauncher(cliPreferences, abbreviationRepository, port); + lspLauncher = new LspLauncher(jabRefCliPreferences, abbreviationRepository, port); // This enqueues the thread to run in the background // The JVM will take care of running it at some point in time in the future // Thus, we cannot check directly if it really runs diff --git a/jabls/src/main/java/org/jabref/languageserver/util/LspConsistencyCheck.java b/jabls/src/main/java/org/jabref/languageserver/util/LspConsistencyCheck.java index d2ce167a137..23b4d014fe0 100644 --- a/jabls/src/main/java/org/jabref/languageserver/util/LspConsistencyCheck.java +++ b/jabls/src/main/java/org/jabref/languageserver/util/LspConsistencyCheck.java @@ -9,6 +9,7 @@ import java.util.stream.Collectors; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preferences.JabRefCliPreferences; import org.jabref.logic.quality.consistency.BibliographyConsistencyCheck; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntryType; @@ -21,9 +22,9 @@ public class LspConsistencyCheck { - public List check(BibDatabaseContext bibDatabaseContext, String content) { + public List check(BibDatabaseContext bibDatabaseContext, String content, JabRefCliPreferences jabRefCliPreferences) { List diagnostics = new ArrayList<>(); - BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(); + BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(jabRefCliPreferences); BibliographyConsistencyCheck.Result result = consistencyCheck.check(bibDatabaseContext, (_, _) -> { }); diff --git a/jabls/src/main/java/org/jabref/languageserver/util/LspDiagnosticHandler.java b/jabls/src/main/java/org/jabref/languageserver/util/LspDiagnosticHandler.java index 77397cb90a1..2125e075633 100644 --- a/jabls/src/main/java/org/jabref/languageserver/util/LspDiagnosticHandler.java +++ b/jabls/src/main/java/org/jabref/languageserver/util/LspDiagnosticHandler.java @@ -13,6 +13,7 @@ import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.logic.l10n.Localization; import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.preferences.JabRefCliPreferences; import org.jabref.model.database.BibDatabaseContext; import org.eclipse.lsp4j.Diagnostic; @@ -27,7 +28,7 @@ public class LspDiagnosticHandler { private static final Logger LOGGER = LoggerFactory.getLogger(LspDiagnosticHandler.class); private static final int NO_VERSION = -1; - private final CliPreferences jabRefCliPreferences; + private final JabRefCliPreferences jabRefCliPreferences; private final LspIntegrityCheck lspIntegrityCheck; private final LspConsistencyCheck lspConsistencyCheck; private final LspClientHandler clientHandler; @@ -36,10 +37,10 @@ public class LspDiagnosticHandler { private LanguageClient client; - public LspDiagnosticHandler(LspClientHandler clientHandler, CliPreferences cliPreferences, JournalAbbreviationRepository abbreviationRepository) { + public LspDiagnosticHandler(LspClientHandler clientHandler, JabRefCliPreferences jabRefCliPreferences, JournalAbbreviationRepository abbreviationRepository) { this.clientHandler = clientHandler; - this.jabRefCliPreferences = cliPreferences; - this.lspIntegrityCheck = new LspIntegrityCheck(cliPreferences, abbreviationRepository); + this.jabRefCliPreferences = jabRefCliPreferences; + this.lspIntegrityCheck = new LspIntegrityCheck(jabRefCliPreferences, abbreviationRepository); this.lspConsistencyCheck = new LspConsistencyCheck(); this.integrityDiagnosticsCache = new ConcurrentHashMap<>(); this.consistencyDiagnosticsCache = new ConcurrentHashMap<>(); @@ -79,7 +80,7 @@ private List computeDiagnostics(String content, String uri) { } if (clientHandler.getSettings().isConsistencyCheck()) { - consistencyDiagnosticsCache.put(uri, lspConsistencyCheck.check(bibDatabaseContext, content)); + consistencyDiagnosticsCache.put(uri, lspConsistencyCheck.check(bibDatabaseContext, content, jabRefCliPreferences)); LOGGER.debug("Cached consistency diagnostics for {}", uri); } From d302f7c131537fe2cc08b54ff931c6e942dd4b15 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Thu, 4 Sep 2025 15:40:28 +0200 Subject: [PATCH 09/34] fix: BibliographyConsistencyCheck now accept a CliPreference passed down as parameter --- .../gui/consistency/ConsistencyCheckAction.java | 2 +- .../consistency/BibliographyConsistencyCheck.java | 4 ++-- .../jabref/languageserver/LspClientHandler.java | 6 +++--- .../org/jabref/languageserver/LspLauncher.java | 14 +++++++------- .../controller/LanguageServerController.java | 10 +++++----- .../languageserver/util/LspConsistencyCheck.java | 6 +++--- .../languageserver/util/LspDiagnosticHandler.java | 13 ++++++------- 7 files changed, 27 insertions(+), 28 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckAction.java b/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckAction.java index 9849988667a..92f968aa9f5 100644 --- a/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckAction.java +++ b/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckAction.java @@ -62,7 +62,7 @@ public BibliographyConsistencyCheck.Result call() { BibDatabaseContext bibContext = databaseContext.get(); - BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(); + BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(preferences); return consistencyCheck.check(bibContext, (count, total) -> UiTaskExecutor.runInJavaFXThread(() -> { updateProgress(count, total); diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index 1a830ac4360..0779f81b1f8 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -55,8 +55,8 @@ public class BibliographyConsistencyCheck { private final BibEntryTypesManager bibEntryTypesManager; - public BibliographyConsistencyCheck(org.jabref.logic.preferences.JabRefCliPreferences bibEntryTypesManager) { - this.bibEntryTypesManager = bibEntryTypesManager.getCustomEntryTypesRepository(); + public BibliographyConsistencyCheck(org.jabref.logic.preferences.CliPreferences cliPreferences) { + this.bibEntryTypesManager = cliPreferences.getCustomEntryTypesRepository(); } private static Set filterExcludedFields(Collection fields) { diff --git a/jabls/src/main/java/org/jabref/languageserver/LspClientHandler.java b/jabls/src/main/java/org/jabref/languageserver/LspClientHandler.java index e3603db72fc..01b719b3132 100644 --- a/jabls/src/main/java/org/jabref/languageserver/LspClientHandler.java +++ b/jabls/src/main/java/org/jabref/languageserver/LspClientHandler.java @@ -4,7 +4,7 @@ import org.jabref.languageserver.util.LspDiagnosticHandler; import org.jabref.logic.journals.JournalAbbreviationRepository; -import org.jabref.logic.preferences.JabRefCliPreferences; +import org.jabref.logic.preferences.CliPreferences; import org.eclipse.lsp4j.InitializeParams; import org.eclipse.lsp4j.InitializeResult; @@ -33,9 +33,9 @@ public class LspClientHandler implements LanguageServer, LanguageClientAware { private LanguageClient client; - public LspClientHandler(JabRefCliPreferences jabRefCliPreferences, JournalAbbreviationRepository abbreviationRepository) { + public LspClientHandler(CliPreferences cliPreferences, JournalAbbreviationRepository abbreviationRepository) { this.settings = ExtensionSettings.getDefaultSettings(); - this.diagnosticHandler = new LspDiagnosticHandler(this, jabRefCliPreferences, abbreviationRepository); + this.diagnosticHandler = new LspDiagnosticHandler(this, cliPreferences, abbreviationRepository); this.workspaceService = new BibtexWorkspaceService(this, diagnosticHandler); this.textDocumentService = new BibtexTextDocumentService(diagnosticHandler); } diff --git a/jabls/src/main/java/org/jabref/languageserver/LspLauncher.java b/jabls/src/main/java/org/jabref/languageserver/LspLauncher.java index e7aebbffb35..207f3e83087 100644 --- a/jabls/src/main/java/org/jabref/languageserver/LspLauncher.java +++ b/jabls/src/main/java/org/jabref/languageserver/LspLauncher.java @@ -11,7 +11,7 @@ import org.jabref.logic.journals.JournalAbbreviationLoader; import org.jabref.logic.journals.JournalAbbreviationRepository; -import org.jabref.logic.preferences.JabRefCliPreferences; +import org.jabref.logic.preferences.CliPreferences; import org.eclipse.lsp4j.jsonrpc.Launcher; import org.eclipse.lsp4j.services.LanguageClient; @@ -22,7 +22,7 @@ public class LspLauncher extends Thread { private static final Logger LOGGER = LoggerFactory.getLogger(LspLauncher.class); - private final JabRefCliPreferences jabRefCliPreferences; + private final CliPreferences cliPreferences; private final JournalAbbreviationRepository abbreviationRepository; private final ExecutorService threadPool; @@ -30,16 +30,16 @@ public class LspLauncher extends Thread { private volatile boolean running; private ServerSocket serverSocket; - public LspLauncher(JabRefCliPreferences jabRefCliPreferences, JournalAbbreviationRepository abbreviationRepository, int port) { - this.jabRefCliPreferences = jabRefCliPreferences; + public LspLauncher(CliPreferences cliPreferences, JournalAbbreviationRepository abbreviationRepository, int port) { + this.cliPreferences = cliPreferences; this.abbreviationRepository = abbreviationRepository; this.threadPool = Executors.newCachedThreadPool(); this.port = port; this.setName("JabLs - JabRef Language Server on: " + port); } - public LspLauncher(JabRefCliPreferences jabRefCliPreferences, int port) { - this(jabRefCliPreferences, JournalAbbreviationLoader.loadRepository(jabRefCliPreferences.getJournalAbbreviationPreferences()), port); + public LspLauncher(CliPreferences cliPreferences, int port) { + this(cliPreferences, JournalAbbreviationLoader.loadRepository(cliPreferences.getJournalAbbreviationPreferences()), port); } @Override @@ -69,7 +69,7 @@ public void run() { } private void handleClient(Socket socket) { - LspClientHandler clientHandler = new LspClientHandler(jabRefCliPreferences, abbreviationRepository); + LspClientHandler clientHandler = new LspClientHandler(cliPreferences, abbreviationRepository); LOGGER.debug("LSP clientHandler started."); try (socket; // socket should be closed on error InputStream in = socket.getInputStream(); diff --git a/jabls/src/main/java/org/jabref/languageserver/controller/LanguageServerController.java b/jabls/src/main/java/org/jabref/languageserver/controller/LanguageServerController.java index 8896d6f8ef1..84a4992bded 100644 --- a/jabls/src/main/java/org/jabref/languageserver/controller/LanguageServerController.java +++ b/jabls/src/main/java/org/jabref/languageserver/controller/LanguageServerController.java @@ -2,7 +2,7 @@ import org.jabref.languageserver.LspLauncher; import org.jabref.logic.journals.JournalAbbreviationRepository; -import org.jabref.logic.preferences.JabRefCliPreferences; +import org.jabref.logic.preferences.CliPreferences; import org.jspecify.annotations.Nullable; import org.slf4j.Logger; @@ -13,13 +13,13 @@ public class LanguageServerController implements AutoCloseable { private static final Logger LOGGER = LoggerFactory.getLogger(LanguageServerController.class); - private final JabRefCliPreferences jabRefCliPreferences; + private final CliPreferences cliPreferences; private final JournalAbbreviationRepository abbreviationRepository; @Nullable private LspLauncher lspLauncher; - public LanguageServerController(JabRefCliPreferences jabRefCliPreferences, JournalAbbreviationRepository abbreviationRepository) { - this.jabRefCliPreferences = jabRefCliPreferences; + public LanguageServerController(CliPreferences cliPreferences, JournalAbbreviationRepository abbreviationRepository) { + this.cliPreferences = cliPreferences; this.abbreviationRepository = abbreviationRepository; LOGGER.debug("LanguageServerController initialized."); } @@ -30,7 +30,7 @@ public synchronized void start(int port) { return; } - lspLauncher = new LspLauncher(jabRefCliPreferences, abbreviationRepository, port); + lspLauncher = new LspLauncher(cliPreferences, abbreviationRepository, port); // This enqueues the thread to run in the background // The JVM will take care of running it at some point in time in the future // Thus, we cannot check directly if it really runs diff --git a/jabls/src/main/java/org/jabref/languageserver/util/LspConsistencyCheck.java b/jabls/src/main/java/org/jabref/languageserver/util/LspConsistencyCheck.java index 23b4d014fe0..823a480fabc 100644 --- a/jabls/src/main/java/org/jabref/languageserver/util/LspConsistencyCheck.java +++ b/jabls/src/main/java/org/jabref/languageserver/util/LspConsistencyCheck.java @@ -9,7 +9,7 @@ import java.util.stream.Collectors; import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.JabRefCliPreferences; +import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.quality.consistency.BibliographyConsistencyCheck; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntryType; @@ -22,9 +22,9 @@ public class LspConsistencyCheck { - public List check(BibDatabaseContext bibDatabaseContext, String content, JabRefCliPreferences jabRefCliPreferences) { + public List check(BibDatabaseContext bibDatabaseContext, String content, CliPreferences cliPreferences) { List diagnostics = new ArrayList<>(); - BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(jabRefCliPreferences); + BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(cliPreferences); BibliographyConsistencyCheck.Result result = consistencyCheck.check(bibDatabaseContext, (_, _) -> { }); diff --git a/jabls/src/main/java/org/jabref/languageserver/util/LspDiagnosticHandler.java b/jabls/src/main/java/org/jabref/languageserver/util/LspDiagnosticHandler.java index 2125e075633..7eab0677f51 100644 --- a/jabls/src/main/java/org/jabref/languageserver/util/LspDiagnosticHandler.java +++ b/jabls/src/main/java/org/jabref/languageserver/util/LspDiagnosticHandler.java @@ -13,7 +13,6 @@ import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.logic.l10n.Localization; import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.preferences.JabRefCliPreferences; import org.jabref.model.database.BibDatabaseContext; import org.eclipse.lsp4j.Diagnostic; @@ -28,7 +27,7 @@ public class LspDiagnosticHandler { private static final Logger LOGGER = LoggerFactory.getLogger(LspDiagnosticHandler.class); private static final int NO_VERSION = -1; - private final JabRefCliPreferences jabRefCliPreferences; + private final CliPreferences cliPreferences; private final LspIntegrityCheck lspIntegrityCheck; private final LspConsistencyCheck lspConsistencyCheck; private final LspClientHandler clientHandler; @@ -37,10 +36,10 @@ public class LspDiagnosticHandler { private LanguageClient client; - public LspDiagnosticHandler(LspClientHandler clientHandler, JabRefCliPreferences jabRefCliPreferences, JournalAbbreviationRepository abbreviationRepository) { + public LspDiagnosticHandler(LspClientHandler clientHandler, CliPreferences cliPreferences, JournalAbbreviationRepository abbreviationRepository) { this.clientHandler = clientHandler; - this.jabRefCliPreferences = jabRefCliPreferences; - this.lspIntegrityCheck = new LspIntegrityCheck(jabRefCliPreferences, abbreviationRepository); + this.cliPreferences = cliPreferences; + this.lspIntegrityCheck = new LspIntegrityCheck(cliPreferences, abbreviationRepository); this.lspConsistencyCheck = new LspConsistencyCheck(); this.integrityDiagnosticsCache = new ConcurrentHashMap<>(); this.consistencyDiagnosticsCache = new ConcurrentHashMap<>(); @@ -66,7 +65,7 @@ public void publishDiagnostics(LanguageClient client, String uri, List computeDiagnostics(String content, String uri) { BibDatabaseContext bibDatabaseContext; try { - bibDatabaseContext = BibDatabaseContext.of(content, jabRefCliPreferences.getImportFormatPreferences()); + bibDatabaseContext = BibDatabaseContext.of(content, cliPreferences.getImportFormatPreferences()); } catch (JabRefException e) { Diagnostic parseDiagnostic = LspDiagnosticBuilder.create(Localization.lang( "Failed to parse entries.\nThe following error was encountered:\n%0", @@ -80,7 +79,7 @@ private List computeDiagnostics(String content, String uri) { } if (clientHandler.getSettings().isConsistencyCheck()) { - consistencyDiagnosticsCache.put(uri, lspConsistencyCheck.check(bibDatabaseContext, content, jabRefCliPreferences)); + consistencyDiagnosticsCache.put(uri, lspConsistencyCheck.check(bibDatabaseContext, content, cliPreferences)); LOGGER.debug("Cached consistency diagnostics for {}", uri); } From 3f97a75e4a67c156d20992816c5578989086a65b Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Mon, 8 Sep 2025 13:34:03 +0200 Subject: [PATCH 10/34] feat: `BibliographyConsistencyCheckTest`, `BibliographyConsistencyCheckResultTxtWriterTest` and `BibliographyConsistencyCsvWriterTest` testing with `CliPreference` parameter --- jabgui/src/main/java/org/jabref/Launcher.java | 4 +- .../main/java/org/jabref/gui/JabRefGUI.java | 6 +- .../consistency/ConsistencyCheckAction.java | 6 +- .../org/jabref/gui/frame/JabRefFrame.java | 5 + .../java/org/jabref/gui/frame/MainMenu.java | 6 +- .../preferences/PreferencesDialogView.java | 4 +- .../PreferencesDialogViewModel.java | 8 +- .../customentrytypes/CustomEntryTypesTab.java | 3 +- .../migrations/PreferencesMigrations.java | 4 +- .../logic/exporter/ExporterFactory.java | 4 +- .../logic/preferences/CliPreferences.java | 2 +- .../preferences/JabRefCliPreferences.java | 3 +- .../BibliographyConsistencyCheck.java | 4 +- .../jabref/logic/exporter/ExporterTest.java | 3 +- ...hyConsistencyCheckResultCsvWriterTest.java | 257 ++++++++++++++++- ...hyConsistencyCheckResultTxtWriterTest.java | 264 ++++++++++++++++- .../BibliographyConsistencyCheckTest.java | 265 +++++++++++++++++- .../util/LspConsistencyCheck.java | 3 +- 18 files changed, 807 insertions(+), 44 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/Launcher.java b/jabgui/src/main/java/org/jabref/Launcher.java index 2d8e9c2ba57..44ecc895ff3 100644 --- a/jabgui/src/main/java/org/jabref/Launcher.java +++ b/jabgui/src/main/java/org/jabref/Launcher.java @@ -27,6 +27,7 @@ import org.jabref.logic.util.BuildInfo; import org.jabref.logic.util.Directories; import org.jabref.migrations.PreferencesMigrations; +import org.jabref.model.entry.BibEntryTypesManager; import com.airhacks.afterburner.injection.Injector; import org.slf4j.Logger; @@ -56,6 +57,7 @@ public static void main(String[] args) { Injector.setModelOrService(BuildInfo.class, new BuildInfo()); final JabRefGuiPreferences preferences = JabRefGuiPreferences.getInstance(); + final BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); ArgumentProcessor argumentProcessor = new ArgumentProcessor( args, @@ -87,7 +89,7 @@ public static void main(String[] args) { systemExit(); } - PreferencesMigrations.runMigrations(preferences); + PreferencesMigrations.runMigrations(preferences, bibEntryTypesManager); PostgreServer postgreServer = new PostgreServer(); Injector.setModelOrService(PostgreServer.class, postgreServer); diff --git a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java index 46a3b209c72..562038abb5a 100644 --- a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java +++ b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java @@ -42,6 +42,7 @@ import org.jabref.logic.l10n.Localization; import org.jabref.logic.net.ProxyRegisterer; import org.jabref.logic.os.OS; +import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.protectedterms.ProtectedTermsLoader; import org.jabref.logic.remote.RemotePreferences; import org.jabref.logic.remote.server.RemoteListenerServerManager; @@ -70,6 +71,7 @@ public class JabRefGUI extends Application { private static List uiCommands; private static GuiPreferences preferences; + private static CliPreferences cliPreferences; // AI Service handles chat messages etc. Therefore, it is tightly coupled to the GUI. private static AiService aiService; @@ -84,6 +86,7 @@ public class JabRefGUI extends Application { private static ClipBoardManager clipBoardManager; private static DialogService dialogService; private static JabRefFrame mainFrame; + private static BibEntryTypesManager bibEntryTypesManager; private static RemoteListenerServerManager remoteListenerServerManager; private static HttpServerManager httpServerManager; @@ -114,6 +117,7 @@ public void start(Stage stage) { dialogService, fileUpdateMonitor, preferences, + cliPreferences, aiService, stateManager, countingUndoManager, @@ -157,7 +161,7 @@ public void initialize() { DirectoryMonitor directoryMonitor = new DirectoryMonitor(); Injector.setModelOrService(DirectoryMonitor.class, directoryMonitor); - BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(); + BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(bibEntryTypesManager); JournalAbbreviationRepository journalAbbreviationRepository = JournalAbbreviationLoader.loadRepository(preferences.getJournalAbbreviationPreferences()); Injector.setModelOrService(BibEntryTypesManager.class, entryTypesManager); Injector.setModelOrService(JournalAbbreviationRepository.class, journalAbbreviationRepository); diff --git a/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckAction.java b/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckAction.java index 92f968aa9f5..d676e4da0b4 100644 --- a/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckAction.java +++ b/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckAction.java @@ -13,6 +13,7 @@ import org.jabref.gui.preferences.GuiPreferences; import org.jabref.gui.util.UiTaskExecutor; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.quality.consistency.BibliographyConsistencyCheck; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntryTypesManager; @@ -29,6 +30,7 @@ public class ConsistencyCheckAction extends SimpleCommand { private final DialogService dialogService; private final StateManager stateManager; private final GuiPreferences preferences; + private final CliPreferences cliPreferences; private final BibEntryTypesManager entryTypesManager; private final UiTaskExecutor taskExecutor; @@ -36,12 +38,14 @@ public ConsistencyCheckAction(Supplier tabSupplier, DialogService dialogService, StateManager stateManager, GuiPreferences preferences, + CliPreferences cliPreferences, BibEntryTypesManager entryTypesManager, UiTaskExecutor taskExecutor) { this.tabSupplier = tabSupplier; this.dialogService = dialogService; this.stateManager = stateManager; this.preferences = preferences; + this.cliPreferences = cliPreferences; this.entryTypesManager = entryTypesManager; this.taskExecutor = taskExecutor; @@ -62,7 +66,7 @@ public BibliographyConsistencyCheck.Result call() { BibDatabaseContext bibContext = databaseContext.get(); - BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(preferences); + BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(cliPreferences, entryTypesManager); return consistencyCheck.check(bibContext, (count, total) -> UiTaskExecutor.runInJavaFXThread(() -> { updateProgress(count, total); diff --git a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java index aeb7217775d..409ba81543b 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java @@ -56,6 +56,7 @@ import org.jabref.logic.UiCommand; import org.jabref.logic.ai.AiService; import org.jabref.logic.journals.JournalAbbreviationRepository; +import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.BuildInfo; import org.jabref.logic.util.TaskExecutor; import org.jabref.model.database.BibDatabaseContext; @@ -87,6 +88,7 @@ private enum PanelMode { MAIN_TABLE, MAIN_TABLE_AND_ENTRY_EDITOR } private static final Logger LOGGER = LoggerFactory.getLogger(JabRefFrame.class); private final GuiPreferences preferences; + private final CliPreferences cliPreferences; private final AiService aiService; private final GlobalSearchBar globalSearchBar; @@ -120,6 +122,7 @@ public JabRefFrame(Stage mainStage, DialogService dialogService, FileUpdateMonitor fileUpdateMonitor, GuiPreferences preferences, + CliPreferences cliPreferences, AiService aiService, StateManager stateManager, CountingUndoManager undoManager, @@ -130,6 +133,7 @@ public JabRefFrame(Stage mainStage, this.dialogService = dialogService; this.fileUpdateMonitor = fileUpdateMonitor; this.preferences = preferences; + this.cliPreferences = cliPreferences; this.aiService = aiService; this.stateManager = stateManager; this.undoManager = undoManager; @@ -236,6 +240,7 @@ private void initLayout() { sidePane, pushToApplicationCommand, preferences, + cliPreferences, stateManager, fileUpdateMonitor, taskExecutor, diff --git a/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java b/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java index 5e563d70dec..6dbd54c7b96 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java @@ -87,6 +87,7 @@ import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.logic.l10n.Localization; import org.jabref.logic.os.OS; +import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.TaskExecutor; import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.model.entry.field.SpecialField; @@ -100,6 +101,7 @@ public class MainMenu extends MenuBar { private final SidePane sidePane; private final GuiPushToApplicationCommand pushToApplicationCommand; private final GuiPreferences preferences; + private final CliPreferences cliPreferences; private final StateManager stateManager; private final FileUpdateMonitor fileUpdateMonitor; private final TaskExecutor taskExecutor; @@ -117,6 +119,7 @@ public MainMenu(JabRefFrame frame, SidePane sidePane, GuiPushToApplicationCommand pushToApplicationCommand, GuiPreferences preferences, + CliPreferences cliPreferences, StateManager stateManager, FileUpdateMonitor fileUpdateMonitor, TaskExecutor taskExecutor, @@ -133,6 +136,7 @@ public MainMenu(JabRefFrame frame, this.sidePane = sidePane; this.pushToApplicationCommand = pushToApplicationCommand; this.preferences = preferences; + this.cliPreferences = cliPreferences; this.stateManager = stateManager; this.fileUpdateMonitor = fileUpdateMonitor; this.taskExecutor = taskExecutor; @@ -270,7 +274,7 @@ private void createMenu() { factory.createMenuItem(StandardActions.FIND_DUPLICATES, new DuplicateSearch(frame::getCurrentLibraryTab, dialogService, stateManager, preferences, entryTypesManager, taskExecutor)), factory.createMenuItem(StandardActions.MERGE_ENTRIES, new MergeEntriesAction(dialogService, stateManager, undoManager, preferences)), factory.createMenuItem(StandardActions.CHECK_INTEGRITY, new IntegrityCheckAction(frame::getCurrentLibraryTab, preferences, dialogService, stateManager, (UiTaskExecutor) taskExecutor, abbreviationRepository)), - factory.createMenuItem(StandardActions.CHECK_CONSISTENCY, new ConsistencyCheckAction(frame::getCurrentLibraryTab, dialogService, stateManager, preferences, entryTypesManager, (UiTaskExecutor) taskExecutor)), + factory.createMenuItem(StandardActions.CHECK_CONSISTENCY, new ConsistencyCheckAction(frame::getCurrentLibraryTab, dialogService, stateManager, preferences, cliPreferences, entryTypesManager, (UiTaskExecutor) taskExecutor)), factory.createMenuItem(StandardActions.CLEANUP_ENTRIES, new CleanupAction(frame::getCurrentLibraryTab, preferences, dialogService, stateManager, taskExecutor, undoManager)), new SeparatorMenuItem(), diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/PreferencesDialogView.java b/jabgui/src/main/java/org/jabref/gui/preferences/PreferencesDialogView.java index 9ffc9f0a9a3..e7e0e01f14f 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/PreferencesDialogView.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/PreferencesDialogView.java @@ -17,6 +17,7 @@ import org.jabref.gui.util.ControlHelper; import org.jabref.gui.util.ViewModelListCellFactory; import org.jabref.logic.l10n.Localization; +import org.jabref.model.entry.BibEntryTypesManager; import com.airhacks.afterburner.views.ViewLoader; import com.tobiasdiez.easybind.EasyBind; @@ -39,6 +40,7 @@ public class PreferencesDialogView extends BaseDialog preferencesTabToSelectClass; @@ -67,7 +69,7 @@ public PreferencesDialogViewModel getViewModel() { @FXML private void initialize() { - viewModel = new PreferencesDialogViewModel(dialogService, preferences); + viewModel = new PreferencesDialogViewModel(dialogService, preferences, bibEntryTypesManager); preferenceTabList.itemsProperty().setValue(viewModel.getPreferenceTabs()); diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java b/jabgui/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java index 5836422f225..c0e1adf5108 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java @@ -54,10 +54,12 @@ public class PreferencesDialogViewModel extends AbstractViewModel { private final DialogService dialogService; private final GuiPreferences preferences; private final ObservableList preferenceTabs; + private final BibEntryTypesManager bibEntryTypesManager; - public PreferencesDialogViewModel(DialogService dialogService, GuiPreferences preferences) { + public PreferencesDialogViewModel(DialogService dialogService, GuiPreferences preferences, BibEntryTypesManager bibEntryTypesManager) { this.dialogService = dialogService; this.preferences = preferences; + this.bibEntryTypesManager = bibEntryTypesManager; // This enables passing unsaved preference values from the AI tab to the "web search" tab. AiTab aiTab = new AiTab(); @@ -190,9 +192,9 @@ public void storeAllSettings() { + Localization.lang("You must restart JabRef for this to come into effect.")); } - Injector.setModelOrService(BibEntryTypesManager.class, preferences.getCustomEntryTypesRepository()); + Injector.setModelOrService(BibEntryTypesManager.class, preferences.getCustomEntryTypesRepository(bibEntryTypesManager)); dialogService.notify(Localization.lang("Preferences recorded.")); - } + }; /** * Inserts the preference values into the Properties of the ViewModel diff --git a/jabgui/src/main/java/org/jabref/gui/preferences/customentrytypes/CustomEntryTypesTab.java b/jabgui/src/main/java/org/jabref/gui/preferences/customentrytypes/CustomEntryTypesTab.java index 832cde6eb81..51d95428c6f 100644 --- a/jabgui/src/main/java/org/jabref/gui/preferences/customentrytypes/CustomEntryTypesTab.java +++ b/jabgui/src/main/java/org/jabref/gui/preferences/customentrytypes/CustomEntryTypesTab.java @@ -57,6 +57,7 @@ public class CustomEntryTypesTab extends AbstractPreferenceTabView exporters = new ArrayList<>(); @@ -59,7 +61,7 @@ public static ExporterFactory create(CliPreferences preferences) { exporters.add(new ModsExporter()); exporters.add(new XmpExporter(xmpPreferences)); exporters.add(new XmpPdfExporter(xmpPreferences)); - exporters.add(new EmbeddedBibFilePdfExporter(bibDatabaseMode, preferences.getCustomEntryTypesRepository(), fieldPreferences)); + exporters.add(new EmbeddedBibFilePdfExporter(bibDatabaseMode, preferences.getCustomEntryTypesRepository(bibEntryTypesManager), fieldPreferences)); exporters.add(new CffExporter()); exporters.add(new EndnoteXmlExporter(preferences.getBibEntryPreferences())); diff --git a/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java b/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java index f1a40419522..a56cc982988 100644 --- a/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java @@ -69,7 +69,7 @@ public interface CliPreferences { */ SelfContainedSaveConfiguration getSelfContainedExportConfiguration(); - BibEntryTypesManager getCustomEntryTypesRepository(); + BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager); void storeCustomEntryTypesRepository(BibEntryTypesManager entryTypesManager); diff --git a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java index 2df96e6b608..1f942fa843a 100644 --- a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java @@ -1222,8 +1222,7 @@ public JournalAbbreviationPreferences getJournalAbbreviationPreferences() { //************************************************************************************************************* @Override - public BibEntryTypesManager getCustomEntryTypesRepository() { - BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); + public BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager) { EnumSet.allOf(BibDatabaseMode.class).forEach(mode -> bibEntryTypesManager.addCustomOrModifiedTypes(getBibEntryTypes(mode), mode)); return bibEntryTypesManager; diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index 0779f81b1f8..43adff52a94 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -55,8 +55,8 @@ public class BibliographyConsistencyCheck { private final BibEntryTypesManager bibEntryTypesManager; - public BibliographyConsistencyCheck(org.jabref.logic.preferences.CliPreferences cliPreferences) { - this.bibEntryTypesManager = cliPreferences.getCustomEntryTypesRepository(); + public BibliographyConsistencyCheck(org.jabref.logic.preferences.CliPreferences cliPreferences, BibEntryTypesManager bibEntryTypesManager) { + this.bibEntryTypesManager = cliPreferences.getCustomEntryTypesRepository(bibEntryTypesManager); } private static Set filterExcludedFields(Collection fields) { diff --git a/jablib/src/test/java/org/jabref/logic/exporter/ExporterTest.java b/jablib/src/test/java/org/jabref/logic/exporter/ExporterTest.java index 28602d4cc84..9774e1d4e98 100644 --- a/jablib/src/test/java/org/jabref/logic/exporter/ExporterTest.java +++ b/jablib/src/test/java/org/jabref/logic/exporter/ExporterTest.java @@ -32,9 +32,10 @@ public class ExporterTest { private static Stream exportFormats() { CliPreferences preferences = mock(CliPreferences.class, Answers.RETURNS_DEEP_STUBS); + BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); when(preferences.getExportPreferences().getExportSaveOrder()).thenReturn(SaveOrder.getDefaultSaveOrder()); when(preferences.getExportPreferences().getCustomExporters()).thenReturn(FXCollections.emptyObservableList()); - when(preferences.getCustomEntryTypesRepository()).thenReturn(mock(BibEntryTypesManager.class)); + when(preferences.getCustomEntryTypesRepository(bibEntryTypesManager)).thenReturn(mock(BibEntryTypesManager.class)); ExporterFactory exporterFactory = ExporterFactory.create(preferences); diff --git a/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultCsvWriterTest.java b/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultCsvWriterTest.java index 0d9707b7521..5bec5c08c44 100644 --- a/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultCsvWriterTest.java +++ b/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultCsvWriterTest.java @@ -5,13 +5,49 @@ import java.io.Writer; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Map; +import java.util.prefs.BackingStoreException; +import org.jabref.logic.FilePreferences; +import org.jabref.logic.InternalPreferences; +import org.jabref.logic.JabRefException; +import org.jabref.logic.LibraryPreferences; +import org.jabref.logic.ai.AiPreferences; +import org.jabref.logic.bibtex.FieldPreferences; +import org.jabref.logic.citationkeypattern.CitationKeyPatternPreferences; +import org.jabref.logic.cleanup.CleanupPreferences; +import org.jabref.logic.exporter.ExportPreferences; +import org.jabref.logic.exporter.SelfContainedSaveConfiguration; +import org.jabref.logic.git.preferences.GitPreferences; import org.jabref.logic.importer.ImportFormatPreferences; +import org.jabref.logic.importer.ImporterPreferences; +import org.jabref.logic.importer.fetcher.MrDlibPreferences; import org.jabref.logic.importer.fileformat.BibtexImporter; +import org.jabref.logic.importer.util.GrobidPreferences; +import org.jabref.logic.journals.JournalAbbreviationPreferences; +import org.jabref.logic.journals.JournalAbbreviationRepository; +import org.jabref.logic.layout.LayoutFormatterPreferences; +import org.jabref.logic.layout.format.NameFormatterPreferences; +import org.jabref.logic.net.ProxyPreferences; +import org.jabref.logic.net.ssl.SSLPreferences; +import org.jabref.logic.openoffice.OpenOfficePreferences; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.preferences.DOIPreferences; +import org.jabref.logic.preferences.LastFilesOpenedPreferences; +import org.jabref.logic.preferences.OwnerPreferences; +import org.jabref.logic.preferences.TimestampPreferences; +import org.jabref.logic.protectedterms.ProtectedTermsPreferences; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.remote.RemotePreferences; +import org.jabref.logic.search.SearchPreferences; +import org.jabref.logic.util.io.AutoLinkPreferences; +import org.jabref.logic.xmp.XmpPreferences; import org.jabref.model.database.BibDatabase; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.BibDatabaseMode; import org.jabref.model.entry.BibEntry; +import org.jabref.model.entry.BibEntryPreferences; +import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.model.entry.field.StandardField; import org.jabref.model.entry.field.UnknownField; import org.jabref.model.entry.types.StandardEntryType; @@ -27,7 +63,218 @@ class BibliographyConsistencyCheckResultCsvWriterTest { + private final BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); private final BibtexImporter importer = new BibtexImporter(mock(ImportFormatPreferences.class, Answers.RETURNS_DEEP_STUBS), new DummyFileUpdateMonitor()); + private final CliPreferences cliPreferences = new CliPreferences() { + @Override + public void clear() throws BackingStoreException { + + } + + @Override + public BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager) { + return bibEntryTypesManager; + } + + @Override + public void deleteKey(String key) throws IllegalArgumentException { + + } + + @Override + public void flush() { + + } + + @Override + public void exportPreferences(Path file) throws JabRefException { + + } + + @Override + public void importPreferences(Path file) throws JabRefException { + + } + + @Override + public InternalPreferences getInternalPreferences() { + return null; + } + + @Override + public BibEntryPreferences getBibEntryPreferences() { + return null; + } + + @Override + public JournalAbbreviationPreferences getJournalAbbreviationPreferences() { + return null; + } + + @Override + public FilePreferences getFilePreferences() { + return null; + } + + @Override + public FieldPreferences getFieldPreferences() { + return null; + } + + @Override + public Map getPreferences() { + return Map.of(); + } + + @Override + public Map getDefaults() { + return Map.of(); + } + + @Override + public LayoutFormatterPreferences getLayoutFormatterPreferences() { + return null; + } + + @Override + public ImportFormatPreferences getImportFormatPreferences() { + return null; + } + + @Override + public SelfContainedSaveConfiguration getSelfContainedExportConfiguration() { + return null; + } + + public BibEntryTypesManager getCustomEntryTypesRepository() { + return null; + } + + @Override + public void storeCustomEntryTypesRepository(BibEntryTypesManager entryTypesManager) { + + } + + @Override + public CleanupPreferences getCleanupPreferences() { + return null; + } + + @Override + public CleanupPreferences getDefaultCleanupPreset() { + return null; + } + + @Override + public LibraryPreferences getLibraryPreferences() { + return null; + } + + @Override + public DOIPreferences getDOIPreferences() { + return null; + } + + @Override + public OwnerPreferences getOwnerPreferences() { + return null; + } + + @Override + public TimestampPreferences getTimestampPreferences() { + return null; + } + + @Override + public RemotePreferences getRemotePreferences() { + return null; + } + + @Override + public ProxyPreferences getProxyPreferences() { + return null; + } + + @Override + public SSLPreferences getSSLPreferences() { + return null; + } + + @Override + public CitationKeyPatternPreferences getCitationKeyPatternPreferences() { + return null; + } + + @Override + public AutoLinkPreferences getAutoLinkPreferences() { + return null; + } + + @Override + public ExportPreferences getExportPreferences() { + return null; + } + + @Override + public ImporterPreferences getImporterPreferences() { + return null; + } + + @Override + public GrobidPreferences getGrobidPreferences() { + return null; + } + + @Override + public XmpPreferences getXmpPreferences() { + return null; + } + + @Override + public NameFormatterPreferences getNameFormatterPreferences() { + return null; + } + + @Override + public SearchPreferences getSearchPreferences() { + return null; + } + + @Override + public MrDlibPreferences getMrDlibPreferences() { + return null; + } + + @Override + public ProtectedTermsPreferences getProtectedTermsPreferences() { + return null; + } + + @Override + public AiPreferences getAiPreferences() { + return null; + } + + @Override + public LastFilesOpenedPreferences getLastFilesOpenedPreferences() { + return null; + } + + @Override + public OpenOfficePreferences getOpenOfficePreferences(JournalAbbreviationRepository journalAbbreviationRepository) { + return null; + } + + @Override + public PushToApplicationPreferences getPushToApplicationPreferences() { + return null; + } + + @Override + public GitPreferences getGitPreferences() { + return null; + } + }; @Test void checkSimpleLibrary(@TempDir Path tempDir) throws IOException { @@ -42,7 +289,7 @@ void checkSimpleLibrary(@TempDir Path tempDir) throws IOException { database.insertEntry(second); BibDatabaseContext bibContext = new BibDatabaseContext(database); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(bibContext, (count, total) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(bibContext, (count, total) -> { }); Path csvFile = tempDir.resolve("checkSimpleLibrary-result.csv"); try (Writer writer = new OutputStreamWriter(Files.newOutputStream(csvFile)); @@ -72,7 +319,7 @@ void checkDifferentOutputSymbols(@TempDir Path tempDir) throws IOException { BibDatabaseContext bibContext = new BibDatabaseContext(database); bibContext.setMode(BibDatabaseMode.BIBTEX); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(bibContext, (count, total) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(bibContext, (count, total) -> { }); Path csvFile = tempDir.resolve("checkDifferentOutputSymbols-result.csv"); try (Writer writer = new OutputStreamWriter(Files.newOutputStream(csvFile)); @@ -117,7 +364,7 @@ void checkComplexLibrary(@TempDir Path tempDir) throws IOException { database.insertEntry(fifth); BibDatabaseContext bibContext = new BibDatabaseContext(database); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(bibContext, (count, total) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(bibContext, (count, total) -> { }); Path csvFile = tempDir.resolve("checkSimpleLibrary-result.csv"); try (Writer writer = new OutputStreamWriter(Files.newOutputStream(csvFile)); @@ -148,7 +395,7 @@ void checkLibraryWithoutIssues(@TempDir Path tempDir) throws IOException { BibDatabaseContext bibContext = new BibDatabaseContext(database); bibContext.setMode(BibDatabaseMode.BIBTEX); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(bibContext, (count, total) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(bibContext, (count, total) -> { }); Path csvFile = tempDir.resolve("checkLibraryWithoutIssues-result.csv"); try (Writer writer = new OutputStreamWriter(Files.newOutputStream(csvFile)); @@ -166,7 +413,7 @@ void checkManualInput() throws IOException { Path file = Path.of("C:\\TEMP\\JabRef\\biblio-anon.bib"); Path csvFile = file.resolveSibling("biblio-cited.csv"); BibDatabaseContext databaseContext = importer.importDatabase(file).getDatabaseContext(); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(databaseContext, (_, _) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(databaseContext, (_, _) -> { }); try (Writer writer = new OutputStreamWriter(Files.newOutputStream(csvFile)); BibliographyConsistencyCheckResultCsvWriter paperConsistencyCheckResultCsvWriter = new BibliographyConsistencyCheckResultCsvWriter(result, writer, true)) { paperConsistencyCheckResultCsvWriter.writeFindings(); diff --git a/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultTxtWriterTest.java b/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultTxtWriterTest.java index 754eb94525d..c6a3ff888a5 100644 --- a/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultTxtWriterTest.java +++ b/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultTxtWriterTest.java @@ -6,13 +6,48 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.List; - +import java.util.Map; +import java.util.prefs.BackingStoreException; + +import org.jabref.logic.FilePreferences; +import org.jabref.logic.InternalPreferences; +import org.jabref.logic.JabRefException; +import org.jabref.logic.LibraryPreferences; +import org.jabref.logic.ai.AiPreferences; +import org.jabref.logic.bibtex.FieldPreferences; +import org.jabref.logic.citationkeypattern.CitationKeyPatternPreferences; +import org.jabref.logic.cleanup.CleanupPreferences; +import org.jabref.logic.exporter.ExportPreferences; +import org.jabref.logic.exporter.SelfContainedSaveConfiguration; +import org.jabref.logic.git.preferences.GitPreferences; import org.jabref.logic.importer.ImportFormatPreferences; +import org.jabref.logic.importer.ImporterPreferences; +import org.jabref.logic.importer.fetcher.MrDlibPreferences; import org.jabref.logic.importer.fileformat.BibtexImporter; +import org.jabref.logic.importer.util.GrobidPreferences; +import org.jabref.logic.journals.JournalAbbreviationPreferences; +import org.jabref.logic.journals.JournalAbbreviationRepository; +import org.jabref.logic.layout.LayoutFormatterPreferences; +import org.jabref.logic.layout.format.NameFormatterPreferences; +import org.jabref.logic.net.ProxyPreferences; +import org.jabref.logic.net.ssl.SSLPreferences; +import org.jabref.logic.openoffice.OpenOfficePreferences; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.preferences.DOIPreferences; +import org.jabref.logic.preferences.LastFilesOpenedPreferences; +import org.jabref.logic.preferences.OwnerPreferences; +import org.jabref.logic.preferences.TimestampPreferences; +import org.jabref.logic.protectedterms.ProtectedTermsPreferences; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.remote.RemotePreferences; +import org.jabref.logic.search.SearchPreferences; +import org.jabref.logic.util.io.AutoLinkPreferences; +import org.jabref.logic.xmp.XmpPreferences; import org.jabref.model.database.BibDatabase; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.BibDatabaseMode; import org.jabref.model.entry.BibEntry; +import org.jabref.model.entry.BibEntryPreferences; import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.model.entry.field.StandardField; import org.jabref.model.entry.field.UnknownField; @@ -29,6 +64,217 @@ class BibliographyConsistencyCheckResultTxtWriterTest { private final BibtexImporter importer = new BibtexImporter(mock(ImportFormatPreferences.class, Answers.RETURNS_DEEP_STUBS), new DummyFileUpdateMonitor()); + private final BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); + private final CliPreferences cliPreferences = new CliPreferences() { + @Override + public void clear() throws BackingStoreException { + + } + + @Override + public void deleteKey(String key) throws IllegalArgumentException { + + } + + @Override + public BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager) { + return bibEntryTypesManager; + } + + @Override + public void flush() { + + } + + @Override + public void exportPreferences(Path file) throws JabRefException { + + } + + @Override + public void importPreferences(Path file) throws JabRefException { + + } + + @Override + public InternalPreferences getInternalPreferences() { + return null; + } + + @Override + public BibEntryPreferences getBibEntryPreferences() { + return null; + } + + @Override + public JournalAbbreviationPreferences getJournalAbbreviationPreferences() { + return null; + } + + @Override + public FilePreferences getFilePreferences() { + return null; + } + + @Override + public FieldPreferences getFieldPreferences() { + return null; + } + + @Override + public Map getPreferences() { + return Map.of(); + } + + @Override + public Map getDefaults() { + return Map.of(); + } + + @Override + public LayoutFormatterPreferences getLayoutFormatterPreferences() { + return null; + } + + @Override + public ImportFormatPreferences getImportFormatPreferences() { + return null; + } + + @Override + public SelfContainedSaveConfiguration getSelfContainedExportConfiguration() { + return null; + } + + public BibEntryTypesManager getCustomEntryTypesRepository() { + return null; + } + + @Override + public void storeCustomEntryTypesRepository(BibEntryTypesManager entryTypesManager) { + + } + + @Override + public CleanupPreferences getCleanupPreferences() { + return null; + } + + @Override + public CleanupPreferences getDefaultCleanupPreset() { + return null; + } + + @Override + public LibraryPreferences getLibraryPreferences() { + return null; + } + + @Override + public DOIPreferences getDOIPreferences() { + return null; + } + + @Override + public OwnerPreferences getOwnerPreferences() { + return null; + } + + @Override + public TimestampPreferences getTimestampPreferences() { + return null; + } + + @Override + public RemotePreferences getRemotePreferences() { + return null; + } + + @Override + public ProxyPreferences getProxyPreferences() { + return null; + } + + @Override + public SSLPreferences getSSLPreferences() { + return null; + } + + @Override + public CitationKeyPatternPreferences getCitationKeyPatternPreferences() { + return null; + } + + @Override + public AutoLinkPreferences getAutoLinkPreferences() { + return null; + } + + @Override + public ExportPreferences getExportPreferences() { + return null; + } + + @Override + public ImporterPreferences getImporterPreferences() { + return null; + } + + @Override + public GrobidPreferences getGrobidPreferences() { + return null; + } + + @Override + public XmpPreferences getXmpPreferences() { + return null; + } + + @Override + public NameFormatterPreferences getNameFormatterPreferences() { + return null; + } + + @Override + public SearchPreferences getSearchPreferences() { + return null; + } + + @Override + public MrDlibPreferences getMrDlibPreferences() { + return null; + } + + @Override + public ProtectedTermsPreferences getProtectedTermsPreferences() { + return null; + } + + @Override + public AiPreferences getAiPreferences() { + return null; + } + + @Override + public LastFilesOpenedPreferences getLastFilesOpenedPreferences() { + return null; + } + + @Override + public OpenOfficePreferences getOpenOfficePreferences(JournalAbbreviationRepository journalAbbreviationRepository) { + return null; + } + + @Override + public PushToApplicationPreferences getPushToApplicationPreferences() { + return null; + } + + @Override + public GitPreferences getGitPreferences() { + return null; + } + }; @Test void checkSimpleLibrary(@TempDir Path tempDir) throws IOException { @@ -44,7 +290,7 @@ void checkSimpleLibrary(@TempDir Path tempDir) throws IOException { BibDatabaseContext bibContext = new BibDatabaseContext(database); bibContext.setMode(BibDatabaseMode.BIBTEX); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(bibContext, (count, total) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(bibContext, (count, total) -> { }); Path txtFile = tempDir.resolve("checkSimpleLibrary-result.txt"); try (Writer writer = new OutputStreamWriter(Files.newOutputStream(txtFile)); @@ -87,7 +333,7 @@ void entriesMissingRequiredFieldsAreReported(@TempDir Path tempDir) throws Excep BibDatabaseContext bibContext = new BibDatabaseContext(bibDatabase); bibContext.setMode(BibDatabaseMode.BIBLATEX); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck() + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager) .check(bibContext, (_, _) -> { }); @@ -130,7 +376,7 @@ void checkDifferentOutputSymbols(@TempDir Path tempDir) throws IOException { BibDatabaseContext bibContext = new BibDatabaseContext(bibDatabase); bibContext.setMode(BibDatabaseMode.BIBTEX); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(bibContext, (_, _) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(bibContext, (_, _) -> { }); Path txtFile = tempDir.resolve("checkDifferentOutputSymbols-result.txt"); try (Writer writer = new OutputStreamWriter(Files.newOutputStream(txtFile)); @@ -169,7 +415,7 @@ void checkVeryLongCitationKey(@TempDir Path tempDir) throws IOException { bibDatabase.insertEntries(bibEntriesList); BibDatabaseContext bibContext = new BibDatabaseContext(bibDatabase); bibContext.setMode(BibDatabaseMode.BIBTEX); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(bibContext, (_, _) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(bibContext, (_, _) -> { }); Path txtFile = tempDir.resolve("checkDifferentOutputSymbols-result.txt"); try (Writer writer = new OutputStreamWriter(Files.newOutputStream(txtFile)); @@ -225,7 +471,7 @@ void checkComplexLibrary(@TempDir Path tempDir) throws IOException { bibDatabase.insertEntries(bibEntriesList); BibDatabaseContext bibContext = new BibDatabaseContext(bibDatabase); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(bibContext, (_, _) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(bibContext, (_, _) -> { }); Path txtFile = tempDir.resolve("checkSimpleLibrary-result.txt"); try (Writer writer = new OutputStreamWriter(Files.newOutputStream(txtFile)); @@ -266,7 +512,7 @@ void checkLibraryWithoutIssuesWithOutPorcelain(@TempDir Path tempDir) throws IOE bibDatabase.insertEntries(bibEntriesList); BibDatabaseContext bibContext = new BibDatabaseContext(bibDatabase); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(bibContext, (_, _) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(bibContext, (_, _) -> { }); Path txtFile = tempDir.resolve("checkLibraryWithoutIssues-result.txt"); try (Writer writer = new OutputStreamWriter(Files.newOutputStream(txtFile)); @@ -293,7 +539,7 @@ void checkLibraryWithoutIssuesWithPorcelain(@TempDir Path tempDir) throws IOExce bibDatabase.insertEntries(bibEntriesList); BibDatabaseContext bibContext = new BibDatabaseContext(bibDatabase); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(bibContext, (_, _) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(bibContext, (_, _) -> { }); Path txtFile = tempDir.resolve("checkLibraryWithoutIssues-result.txt"); try (Writer writer = new OutputStreamWriter(Files.newOutputStream(txtFile)); @@ -309,7 +555,7 @@ void checkManualInput() throws IOException { Path file = Path.of("C:\\TEMP\\JabRef\\biblio-anon.bib"); Path txtFile = file.resolveSibling("biblio-cited.txt"); BibDatabaseContext databaseContext = importer.importDatabase(file).getDatabaseContext(); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(databaseContext, (_, _) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(databaseContext, (_, _) -> { }); try (Writer writer = new OutputStreamWriter(Files.newOutputStream(txtFile)); BibliographyConsistencyCheckResultTxtWriter txtWriter = new BibliographyConsistencyCheckResultTxtWriter(result, writer, true)) { txtWriter.writeFindings(); diff --git a/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckTest.java b/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckTest.java index 1eb1debd0ac..ede660bdf33 100644 --- a/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckTest.java +++ b/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckTest.java @@ -4,11 +4,47 @@ import java.util.List; import java.util.Map; import java.util.Set; - +import java.util.prefs.BackingStoreException; + +import org.jabref.logic.FilePreferences; +import org.jabref.logic.InternalPreferences; +import org.jabref.logic.JabRefException; +import org.jabref.logic.LibraryPreferences; +import org.jabref.logic.ai.AiPreferences; +import org.jabref.logic.bibtex.FieldPreferences; +import org.jabref.logic.citationkeypattern.CitationKeyPatternPreferences; +import org.jabref.logic.cleanup.CleanupPreferences; +import org.jabref.logic.exporter.ExportPreferences; +import org.jabref.logic.exporter.SelfContainedSaveConfiguration; +import org.jabref.logic.git.preferences.GitPreferences; +import org.jabref.logic.importer.ImportFormatPreferences; +import org.jabref.logic.importer.ImporterPreferences; +import org.jabref.logic.importer.fetcher.MrDlibPreferences; +import org.jabref.logic.importer.util.GrobidPreferences; +import org.jabref.logic.journals.JournalAbbreviationPreferences; +import org.jabref.logic.journals.JournalAbbreviationRepository; +import org.jabref.logic.layout.LayoutFormatterPreferences; +import org.jabref.logic.layout.format.NameFormatterPreferences; +import org.jabref.logic.net.ProxyPreferences; +import org.jabref.logic.net.ssl.SSLPreferences; +import org.jabref.logic.openoffice.OpenOfficePreferences; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.preferences.DOIPreferences; +import org.jabref.logic.preferences.LastFilesOpenedPreferences; +import org.jabref.logic.preferences.OwnerPreferences; +import org.jabref.logic.preferences.TimestampPreferences; +import org.jabref.logic.protectedterms.ProtectedTermsPreferences; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.remote.RemotePreferences; +import org.jabref.logic.search.SearchPreferences; +import org.jabref.logic.util.io.AutoLinkPreferences; +import org.jabref.logic.xmp.XmpPreferences; import org.jabref.model.database.BibDatabase; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.BibDatabaseMode; import org.jabref.model.entry.BibEntry; +import org.jabref.model.entry.BibEntryPreferences; +import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.model.entry.field.Field; import org.jabref.model.entry.field.SpecialField; import org.jabref.model.entry.field.StandardField; @@ -22,6 +58,213 @@ import static org.junit.jupiter.api.Assertions.assertEquals; class BibliographyConsistencyCheckTest { + private final BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); + CliPreferences cliPreferences = new CliPreferences() { + @Override + public void clear() throws BackingStoreException { + + } + + @Override + public void deleteKey(String key) throws IllegalArgumentException { + + } + + @Override + public BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager) { + return bibEntryTypesManager; + } + + @Override + public void flush() { + + } + + @Override + public void exportPreferences(Path file) throws JabRefException { + + } + + @Override + public void importPreferences(Path file) throws JabRefException { + + } + + @Override + public InternalPreferences getInternalPreferences() { + return null; + } + + @Override + public BibEntryPreferences getBibEntryPreferences() { + return null; + } + + @Override + public JournalAbbreviationPreferences getJournalAbbreviationPreferences() { + return null; + } + + @Override + public FilePreferences getFilePreferences() { + return null; + } + + @Override + public FieldPreferences getFieldPreferences() { + return null; + } + + @Override + public Map getPreferences() { + return Map.of(); + } + + @Override + public Map getDefaults() { + return Map.of(); + } + + @Override + public LayoutFormatterPreferences getLayoutFormatterPreferences() { + return null; + } + + @Override + public ImportFormatPreferences getImportFormatPreferences() { + return null; + } + + @Override + public SelfContainedSaveConfiguration getSelfContainedExportConfiguration() { + return null; + } + + @Override + public void storeCustomEntryTypesRepository(BibEntryTypesManager entryTypesManager) { + + } + + @Override + public CleanupPreferences getCleanupPreferences() { + return null; + } + + @Override + public CleanupPreferences getDefaultCleanupPreset() { + return null; + } + + @Override + public LibraryPreferences getLibraryPreferences() { + return null; + } + + @Override + public DOIPreferences getDOIPreferences() { + return null; + } + + @Override + public OwnerPreferences getOwnerPreferences() { + return null; + } + + @Override + public TimestampPreferences getTimestampPreferences() { + return null; + } + + @Override + public RemotePreferences getRemotePreferences() { + return null; + } + + @Override + public ProxyPreferences getProxyPreferences() { + return null; + } + + @Override + public SSLPreferences getSSLPreferences() { + return null; + } + + @Override + public CitationKeyPatternPreferences getCitationKeyPatternPreferences() { + return null; + } + + @Override + public AutoLinkPreferences getAutoLinkPreferences() { + return null; + } + + @Override + public ExportPreferences getExportPreferences() { + return null; + } + + @Override + public ImporterPreferences getImporterPreferences() { + return null; + } + + @Override + public GrobidPreferences getGrobidPreferences() { + return null; + } + + @Override + public XmpPreferences getXmpPreferences() { + return null; + } + + @Override + public NameFormatterPreferences getNameFormatterPreferences() { + return null; + } + + @Override + public SearchPreferences getSearchPreferences() { + return null; + } + + @Override + public MrDlibPreferences getMrDlibPreferences() { + return null; + } + + @Override + public ProtectedTermsPreferences getProtectedTermsPreferences() { + return null; + } + + @Override + public AiPreferences getAiPreferences() { + return null; + } + + @Override + public LastFilesOpenedPreferences getLastFilesOpenedPreferences() { + return null; + } + + @Override + public OpenOfficePreferences getOpenOfficePreferences(JournalAbbreviationRepository journalAbbreviationRepository) { + return null; + } + + @Override + public PushToApplicationPreferences getPushToApplicationPreferences() { + return null; + } + + @Override + public GitPreferences getGitPreferences() { + return null; + } + }; @Test void checkSimpleLibrary(@TempDir Path tempDir) { @@ -34,7 +277,7 @@ void checkSimpleLibrary(@TempDir Path tempDir) { BibDatabase database = new BibDatabase(List.of(first, second)); BibDatabaseContext bibContext = new BibDatabaseContext(database); bibContext.setMode(BibDatabaseMode.BIBTEX); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(bibContext, (count, total) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(bibContext, (count, total) -> { }); BibliographyConsistencyCheck.EntryTypeResult entryTypeResult = new BibliographyConsistencyCheck.EntryTypeResult(Set.of(StandardField.PAGES, StandardField.PUBLISHER), List.of(first, second)); BibliographyConsistencyCheck.Result expected = new BibliographyConsistencyCheck.Result(Map.of(StandardEntryType.Article, entryTypeResult)); @@ -54,7 +297,7 @@ void checkDifferentOutputSymbols(@TempDir Path tempDir) { BibDatabase bibDatabase = new BibDatabase(List.of(first, second)); BibDatabaseContext bibContext = new BibDatabaseContext(bibDatabase); bibContext.setMode(BibDatabaseMode.BIBTEX); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(bibContext, (_, _) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(bibContext, (_, _) -> { }); BibliographyConsistencyCheck.EntryTypeResult entryTypeResult = new BibliographyConsistencyCheck.EntryTypeResult(Set.of(StandardField.PAGES, StandardField.TITLE, customField), List.of(first, second)); BibliographyConsistencyCheck.Result expected = new BibliographyConsistencyCheck.Result(Map.of(StandardEntryType.Article, entryTypeResult)); @@ -86,7 +329,7 @@ void checkComplexLibrary(@TempDir Path tempDir) { BibDatabase bibDatabase = new BibDatabase(List.of(first, second, third, fourth, fifth)); BibDatabaseContext bibContext = new BibDatabaseContext(bibDatabase); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(bibContext, (_, _) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(bibContext, (_, _) -> { }); BibliographyConsistencyCheck.EntryTypeResult articleResult = new BibliographyConsistencyCheck.EntryTypeResult(Set.of(StandardField.PAGES, StandardField.PUBLISHER), List.of(first, second)); BibliographyConsistencyCheck.EntryTypeResult inProceedingsResult = new BibliographyConsistencyCheck.EntryTypeResult(Set.of(StandardField.PAGES, StandardField.PUBLISHER, StandardField.LOCATION), List.of(fifth, fourth, third)); @@ -108,7 +351,7 @@ void checkLibraryWithoutIssues(@TempDir Path tempDir) { BibDatabase bibDatabase = new BibDatabase(List.of(first, second)); BibDatabaseContext bibContext = new BibDatabaseContext(bibDatabase); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck().check(bibContext, (_, _) -> { }); + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(bibContext, (_, _) -> { }); BibliographyConsistencyCheck.Result expected = new BibliographyConsistencyCheck.Result(Map.of()); assertEquals(expected, result); @@ -128,7 +371,7 @@ void filteredFieldsAreIgnored() { BibDatabase bibDatabase = new BibDatabase(List.of(a, b)); BibDatabaseContext bibContext = new BibDatabaseContext(bibDatabase); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck() + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager) .check(bibContext, (_, _) -> { }); assertEquals(Map.of(), result.entryTypeToResultMap(), @@ -144,7 +387,7 @@ void nonFilteredFieldDifferenceIsReported() { BibDatabase bibDatabase = new BibDatabase(List.of(withAuthor, withoutAuthor)); BibDatabaseContext bibContext = new BibDatabaseContext(bibDatabase); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck() + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager) .check(bibContext, (_, _) -> { }); BibliographyConsistencyCheck.EntryTypeResult typeResult = @@ -167,7 +410,7 @@ void unsetRequriedFieldsReported() { BibDatabaseContext bibContext = new BibDatabaseContext(bibDatabase); bibContext.setMode(BibDatabaseMode.BIBLATEX); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck() + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager) .check(bibContext, (_, _) -> { }); BibliographyConsistencyCheck.EntryTypeResult typeResult = @@ -190,7 +433,7 @@ void unsetFieldsReportedInBibtexMode() { BibDatabase bibDatabase = new BibDatabase(List.of(withDate, withoutDate)); BibDatabaseContext bibContext = new BibDatabaseContext(bibDatabase); bibContext.setMode(BibDatabaseMode.BIBTEX); - BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck() + BibliographyConsistencyCheck.Result result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager) .check(bibContext, (_, _) -> { }); BibliographyConsistencyCheck.EntryTypeResult typeResult = result.entryTypeToResultMap().get(StandardEntryType.Online); @@ -226,7 +469,7 @@ void checkFieldEntriesWithFieldDifferences() { new UnknownField("customField"), StandardField.PUBLISHER ); - List result = new BibliographyConsistencyCheck().filterAndSortEntriesWithFieldDifferences( + List result = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).filterAndSortEntriesWithFieldDifferences( Set.of(entry1, entry2, entry3, entry4, entry5), differingFields, Set.of(StandardField.AUTHOR, StandardField.TITLE, StandardField.PAGES, StandardField.PDF)); @@ -260,7 +503,7 @@ void checkComplexLibraryWithAdditionalEntry(@TempDir Path tempDir) { BibDatabase bibDatabase = new BibDatabase(List.of(first, second, third, fourth, fifth, sixth)); BibDatabaseContext bibContext = new BibDatabaseContext(bibDatabase); - BibliographyConsistencyCheck.Result actualResult = new BibliographyConsistencyCheck().check(bibContext, (_, _) -> { }); + BibliographyConsistencyCheck.Result actualResult = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager).check(bibContext, (_, _) -> { }); BibliographyConsistencyCheck.EntryTypeResult articleResult = new BibliographyConsistencyCheck.EntryTypeResult(Set.of(StandardField.PAGES, StandardField.PUBLISHER), List.of(first, second)); BibliographyConsistencyCheck.EntryTypeResult expectedInProceedings = new BibliographyConsistencyCheck.EntryTypeResult(Set.of(StandardField.PAGES, StandardField.PUBLISHER, StandardField.LOCATION, StandardField.YEAR), List.of(fifth, fourth, sixth, third)); diff --git a/jabls/src/main/java/org/jabref/languageserver/util/LspConsistencyCheck.java b/jabls/src/main/java/org/jabref/languageserver/util/LspConsistencyCheck.java index 823a480fabc..53985e96943 100644 --- a/jabls/src/main/java/org/jabref/languageserver/util/LspConsistencyCheck.java +++ b/jabls/src/main/java/org/jabref/languageserver/util/LspConsistencyCheck.java @@ -24,7 +24,8 @@ public class LspConsistencyCheck { public List check(BibDatabaseContext bibDatabaseContext, String content, CliPreferences cliPreferences) { List diagnostics = new ArrayList<>(); - BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(cliPreferences); + BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); + BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager); BibliographyConsistencyCheck.Result result = consistencyCheck.check(bibDatabaseContext, (_, _) -> { }); From 37416ffc009004b81934ef2c20d29c48ad441b00 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Mon, 8 Sep 2025 14:07:21 +0200 Subject: [PATCH 11/34] fix: passing `getCustomEntryTypes` parameter to `JabKit`, `CheckConsistency` and `PdfUpdate` --- jabkit/src/main/java/org/jabref/JabKit.java | 240 ++++++++++++++++- .../java/org/jabref/cli/CheckConsistency.java | 246 +++++++++++++++++- .../main/java/org/jabref/cli/PdfUpdate.java | 241 ++++++++++++++++- 3 files changed, 724 insertions(+), 3 deletions(-) diff --git a/jabkit/src/main/java/org/jabref/JabKit.java b/jabkit/src/main/java/org/jabref/JabKit.java index afb1afefa93..ef99238d7a7 100644 --- a/jabkit/src/main/java/org/jabref/JabKit.java +++ b/jabkit/src/main/java/org/jabref/JabKit.java @@ -9,27 +9,58 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.prefs.BackingStoreException; import java.util.stream.Collectors; import javafx.util.Pair; import org.jabref.cli.ArgumentProcessor; +import org.jabref.logic.FilePreferences; +import org.jabref.logic.InternalPreferences; +import org.jabref.logic.JabRefException; +import org.jabref.logic.LibraryPreferences; +import org.jabref.logic.ai.AiPreferences; +import org.jabref.logic.bibtex.FieldPreferences; +import org.jabref.logic.citationkeypattern.CitationKeyPatternPreferences; +import org.jabref.logic.cleanup.CleanupPreferences; +import org.jabref.logic.exporter.ExportPreferences; +import org.jabref.logic.exporter.SelfContainedSaveConfiguration; +import org.jabref.logic.git.preferences.GitPreferences; +import org.jabref.logic.importer.ImportFormatPreferences; +import org.jabref.logic.importer.ImporterPreferences; import org.jabref.logic.importer.SearchBasedFetcher; import org.jabref.logic.importer.WebFetcher; import org.jabref.logic.importer.WebFetchers; +import org.jabref.logic.importer.fetcher.MrDlibPreferences; +import org.jabref.logic.importer.util.GrobidPreferences; import org.jabref.logic.journals.JournalAbbreviationLoader; +import org.jabref.logic.journals.JournalAbbreviationPreferences; import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.layout.LayoutFormatterPreferences; +import org.jabref.logic.layout.format.NameFormatterPreferences; import org.jabref.logic.net.ProxyAuthenticator; import org.jabref.logic.net.ProxyPreferences; import org.jabref.logic.net.ProxyRegisterer; import org.jabref.logic.net.ssl.SSLPreferences; import org.jabref.logic.net.ssl.TrustStoreManager; +import org.jabref.logic.openoffice.OpenOfficePreferences; import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.preferences.DOIPreferences; import org.jabref.logic.preferences.JabRefCliPreferences; +import org.jabref.logic.preferences.LastFilesOpenedPreferences; +import org.jabref.logic.preferences.OwnerPreferences; +import org.jabref.logic.preferences.TimestampPreferences; import org.jabref.logic.protectedterms.ProtectedTermsLoader; +import org.jabref.logic.protectedterms.ProtectedTermsPreferences; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.remote.RemotePreferences; +import org.jabref.logic.search.SearchPreferences; import org.jabref.logic.util.BuildInfo; import org.jabref.logic.util.Directories; +import org.jabref.logic.util.io.AutoLinkPreferences; +import org.jabref.logic.xmp.XmpPreferences; +import org.jabref.model.entry.BibEntryPreferences; import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.model.strings.StringUtil; import org.jabref.model.util.DummyFileUpdateMonitor; @@ -57,6 +88,213 @@ public class JabKit { private static Logger LOGGER; private static final String JABKIT_BRAND = "JabKit - command line toolkit for JabRef"; + private static final BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); + private static final CliPreferences cliPreferences = new CliPreferences() { + @Override + public void clear() throws BackingStoreException { + + } + + @Override + public void deleteKey(String key) throws IllegalArgumentException { + + } + + @Override + public void flush() { + + } + + @Override + public void exportPreferences(Path file) throws JabRefException { + + } + + @Override + public void importPreferences(Path file) throws JabRefException { + + } + + @Override + public InternalPreferences getInternalPreferences() { + return null; + } + + @Override + public BibEntryPreferences getBibEntryPreferences() { + return null; + } + + @Override + public JournalAbbreviationPreferences getJournalAbbreviationPreferences() { + return null; + } + + @Override + public FilePreferences getFilePreferences() { + return null; + } + + @Override + public FieldPreferences getFieldPreferences() { + return null; + } + + @Override + public Map getPreferences() { + return Map.of(); + } + + @Override + public Map getDefaults() { + return Map.of(); + } + + @Override + public LayoutFormatterPreferences getLayoutFormatterPreferences() { + return null; + } + + @Override + public ImportFormatPreferences getImportFormatPreferences() { + return null; + } + + @Override + public SelfContainedSaveConfiguration getSelfContainedExportConfiguration() { + return null; + } + + @Override + public BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager) { + return bibEntryTypesManager; + } + + @Override + public void storeCustomEntryTypesRepository(BibEntryTypesManager entryTypesManager) { + + } + + @Override + public CleanupPreferences getCleanupPreferences() { + return null; + } + + @Override + public CleanupPreferences getDefaultCleanupPreset() { + return null; + } + + @Override + public LibraryPreferences getLibraryPreferences() { + return null; + } + + @Override + public DOIPreferences getDOIPreferences() { + return null; + } + + @Override + public OwnerPreferences getOwnerPreferences() { + return null; + } + + @Override + public TimestampPreferences getTimestampPreferences() { + return null; + } + + @Override + public RemotePreferences getRemotePreferences() { + return null; + } + + @Override + public ProxyPreferences getProxyPreferences() { + return null; + } + + @Override + public SSLPreferences getSSLPreferences() { + return null; + } + + @Override + public CitationKeyPatternPreferences getCitationKeyPatternPreferences() { + return null; + } + + @Override + public AutoLinkPreferences getAutoLinkPreferences() { + return null; + } + + @Override + public ExportPreferences getExportPreferences() { + return null; + } + + @Override + public ImporterPreferences getImporterPreferences() { + return null; + } + + @Override + public GrobidPreferences getGrobidPreferences() { + return null; + } + + @Override + public XmpPreferences getXmpPreferences() { + return null; + } + + @Override + public NameFormatterPreferences getNameFormatterPreferences() { + return null; + } + + @Override + public SearchPreferences getSearchPreferences() { + return null; + } + + @Override + public MrDlibPreferences getMrDlibPreferences() { + return null; + } + + @Override + public ProtectedTermsPreferences getProtectedTermsPreferences() { + return null; + } + + @Override + public AiPreferences getAiPreferences() { + return null; + } + + @Override + public LastFilesOpenedPreferences getLastFilesOpenedPreferences() { + return null; + } + + @Override + public OpenOfficePreferences getOpenOfficePreferences(JournalAbbreviationRepository journalAbbreviationRepository) { + return null; + } + + @Override + public PushToApplicationPreferences getPushToApplicationPreferences() { + return null; + } + + @Override + public GitPreferences getGitPreferences() { + return null; + } + } public static void main(String[] args) { initLogging(args); @@ -68,7 +306,7 @@ public static void main(String[] args) { BuildInfo buildInfo = new BuildInfo(); Injector.setModelOrService(BuildInfo.class, buildInfo); - BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(); + BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(bibEntryTypesManager, cliPreferences); Injector.setModelOrService(BibEntryTypesManager.class, entryTypesManager); ArgumentProcessor argumentProcessor = new ArgumentProcessor(preferences, entryTypesManager); diff --git a/jabkit/src/main/java/org/jabref/cli/CheckConsistency.java b/jabkit/src/main/java/org/jabref/cli/CheckConsistency.java index 59e369f1c5c..5133666a699 100644 --- a/jabkit/src/main/java/org/jabref/cli/CheckConsistency.java +++ b/jabkit/src/main/java/org/jabref/cli/CheckConsistency.java @@ -4,17 +4,54 @@ import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.file.Path; +import java.util.Map; import java.util.Optional; import java.util.concurrent.Callable; +import java.util.prefs.BackingStoreException; import org.jabref.cli.converter.CygWinPathConverter; +import org.jabref.logic.FilePreferences; +import org.jabref.logic.InternalPreferences; +import org.jabref.logic.JabRefException; +import org.jabref.logic.LibraryPreferences; +import org.jabref.logic.ai.AiPreferences; +import org.jabref.logic.bibtex.FieldPreferences; +import org.jabref.logic.citationkeypattern.CitationKeyPatternPreferences; +import org.jabref.logic.cleanup.CleanupPreferences; +import org.jabref.logic.exporter.ExportPreferences; +import org.jabref.logic.exporter.SelfContainedSaveConfiguration; +import org.jabref.logic.git.preferences.GitPreferences; +import org.jabref.logic.importer.ImportFormatPreferences; +import org.jabref.logic.importer.ImporterPreferences; import org.jabref.logic.importer.ParserResult; +import org.jabref.logic.importer.fetcher.MrDlibPreferences; +import org.jabref.logic.importer.util.GrobidPreferences; +import org.jabref.logic.journals.JournalAbbreviationPreferences; +import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.layout.LayoutFormatterPreferences; +import org.jabref.logic.layout.format.NameFormatterPreferences; +import org.jabref.logic.net.ProxyPreferences; +import org.jabref.logic.net.ssl.SSLPreferences; +import org.jabref.logic.openoffice.OpenOfficePreferences; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.preferences.DOIPreferences; +import org.jabref.logic.preferences.LastFilesOpenedPreferences; +import org.jabref.logic.preferences.OwnerPreferences; +import org.jabref.logic.preferences.TimestampPreferences; +import org.jabref.logic.protectedterms.ProtectedTermsPreferences; +import org.jabref.logic.push.PushToApplicationPreferences; import org.jabref.logic.quality.consistency.BibliographyConsistencyCheck; import org.jabref.logic.quality.consistency.BibliographyConsistencyCheckResultCsvWriter; import org.jabref.logic.quality.consistency.BibliographyConsistencyCheckResultTxtWriter; import org.jabref.logic.quality.consistency.BibliographyConsistencyCheckResultWriter; +import org.jabref.logic.remote.RemotePreferences; +import org.jabref.logic.search.SearchPreferences; +import org.jabref.logic.util.io.AutoLinkPreferences; +import org.jabref.logic.xmp.XmpPreferences; import org.jabref.model.database.BibDatabaseContext; +import org.jabref.model.entry.BibEntryPreferences; +import org.jabref.model.entry.BibEntryTypesManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,6 +63,213 @@ @Command(name = "check-consistency", description = "Check consistency of the library.") class CheckConsistency implements Callable { private static final Logger LOGGER = LoggerFactory.getLogger(CheckConsistency.class); + private static final BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); + private static final CliPreferences cliPreferences = new CliPreferences() { + @Override + public void clear() throws BackingStoreException { + + } + + @Override + public void deleteKey(String key) throws IllegalArgumentException { + + } + + @Override + public void flush() { + + } + + @Override + public void exportPreferences(Path file) throws JabRefException { + + } + + @Override + public void importPreferences(Path file) throws JabRefException { + + } + + @Override + public InternalPreferences getInternalPreferences() { + return null; + } + + @Override + public BibEntryPreferences getBibEntryPreferences() { + return null; + } + + @Override + public JournalAbbreviationPreferences getJournalAbbreviationPreferences() { + return null; + } + + @Override + public FilePreferences getFilePreferences() { + return null; + } + + @Override + public FieldPreferences getFieldPreferences() { + return null; + } + + @Override + public Map getPreferences() { + return Map.of(); + } + + @Override + public Map getDefaults() { + return Map.of(); + } + + @Override + public LayoutFormatterPreferences getLayoutFormatterPreferences() { + return null; + } + + @Override + public ImportFormatPreferences getImportFormatPreferences() { + return null; + } + + @Override + public SelfContainedSaveConfiguration getSelfContainedExportConfiguration() { + return null; + } + + @Override + public BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager) { + return bibEntryTypesManager; + } + + @Override + public void storeCustomEntryTypesRepository(BibEntryTypesManager entryTypesManager) { + + } + + @Override + public CleanupPreferences getCleanupPreferences() { + return null; + } + + @Override + public CleanupPreferences getDefaultCleanupPreset() { + return null; + } + + @Override + public LibraryPreferences getLibraryPreferences() { + return null; + } + + @Override + public DOIPreferences getDOIPreferences() { + return null; + } + + @Override + public OwnerPreferences getOwnerPreferences() { + return null; + } + + @Override + public TimestampPreferences getTimestampPreferences() { + return null; + } + + @Override + public RemotePreferences getRemotePreferences() { + return null; + } + + @Override + public ProxyPreferences getProxyPreferences() { + return null; + } + + @Override + public SSLPreferences getSSLPreferences() { + return null; + } + + @Override + public CitationKeyPatternPreferences getCitationKeyPatternPreferences() { + return null; + } + + @Override + public AutoLinkPreferences getAutoLinkPreferences() { + return null; + } + + @Override + public ExportPreferences getExportPreferences() { + return null; + } + + @Override + public ImporterPreferences getImporterPreferences() { + return null; + } + + @Override + public GrobidPreferences getGrobidPreferences() { + return null; + } + + @Override + public XmpPreferences getXmpPreferences() { + return null; + } + + @Override + public NameFormatterPreferences getNameFormatterPreferences() { + return null; + } + + @Override + public SearchPreferences getSearchPreferences() { + return null; + } + + @Override + public MrDlibPreferences getMrDlibPreferences() { + return null; + } + + @Override + public ProtectedTermsPreferences getProtectedTermsPreferences() { + return null; + } + + @Override + public AiPreferences getAiPreferences() { + return null; + } + + @Override + public LastFilesOpenedPreferences getLastFilesOpenedPreferences() { + return null; + } + + @Override + public OpenOfficePreferences getOpenOfficePreferences(JournalAbbreviationRepository journalAbbreviationRepository) { + return null; + } + + @Override + public PushToApplicationPreferences getPushToApplicationPreferences() { + return null; + } + + @Override + public GitPreferences getGitPreferences() { + return null; + } + }; @ParentCommand private ArgumentProcessor argumentProcessor; @@ -63,7 +307,7 @@ public Integer call() { BibDatabaseContext databaseContext = parserResult.get().getDatabaseContext(); - BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(); + BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(bibEntryTypesManager, CliPreferences); BibliographyConsistencyCheck.Result result = consistencyCheck.check(databaseContext, (count, total) -> { if (!sharedOptions.porcelain) { System.out.println(Localization.lang("Checking consistency for entry type %0 of %1", count + 1, total)); diff --git a/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java b/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java index 60d15ab1a5a..bb6ee23ea84 100644 --- a/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java +++ b/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java @@ -4,24 +4,56 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.List; +import java.util.Map; import java.util.Optional; +import java.util.prefs.BackingStoreException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; import org.jabref.logic.FilePreferences; +import org.jabref.logic.InternalPreferences; +import org.jabref.logic.JabRefException; +import org.jabref.logic.LibraryPreferences; +import org.jabref.logic.ai.AiPreferences; import org.jabref.logic.bibtex.FieldPreferences; +import org.jabref.logic.citationkeypattern.CitationKeyPatternPreferences; +import org.jabref.logic.cleanup.CleanupPreferences; import org.jabref.logic.exporter.EmbeddedBibFilePdfExporter; +import org.jabref.logic.exporter.ExportPreferences; import org.jabref.logic.exporter.SaveException; +import org.jabref.logic.exporter.SelfContainedSaveConfiguration; import org.jabref.logic.exporter.XmpPdfExporter; +import org.jabref.logic.git.preferences.GitPreferences; +import org.jabref.logic.importer.ImportFormatPreferences; +import org.jabref.logic.importer.ImporterPreferences; import org.jabref.logic.importer.ParserResult; +import org.jabref.logic.importer.fetcher.MrDlibPreferences; +import org.jabref.logic.importer.util.GrobidPreferences; +import org.jabref.logic.journals.JournalAbbreviationPreferences; import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.layout.LayoutFormatterPreferences; +import org.jabref.logic.layout.format.NameFormatterPreferences; +import org.jabref.logic.net.ProxyPreferences; +import org.jabref.logic.net.ssl.SSLPreferences; +import org.jabref.logic.openoffice.OpenOfficePreferences; +import org.jabref.logic.preferences.CliPreferences; +import org.jabref.logic.preferences.DOIPreferences; +import org.jabref.logic.preferences.LastFilesOpenedPreferences; +import org.jabref.logic.preferences.OwnerPreferences; +import org.jabref.logic.preferences.TimestampPreferences; +import org.jabref.logic.protectedterms.ProtectedTermsPreferences; +import org.jabref.logic.push.PushToApplicationPreferences; +import org.jabref.logic.remote.RemotePreferences; +import org.jabref.logic.search.SearchPreferences; +import org.jabref.logic.util.io.AutoLinkPreferences; import org.jabref.logic.util.io.FileUtil; import org.jabref.logic.xmp.XmpPreferences; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.BibDatabaseMode; import org.jabref.model.entry.BibEntry; +import org.jabref.model.entry.BibEntryPreferences; import org.jabref.model.entry.BibEntryTypesManager; import com.airhacks.afterburner.injection.Injector; @@ -36,6 +68,213 @@ @Command(name = "update", description = "Update linked PDFs with XMP and/or embedded BibTeX.") class PdfUpdate implements Runnable { private static final Logger LOGGER = LoggerFactory.getLogger(PdfUpdate.class); + private static final BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); + private static final CliPreferences cliPreferences = new CliPreferences() { + @Override + public void clear() throws BackingStoreException { + + } + + @Override + public void deleteKey(String key) throws IllegalArgumentException { + + } + + @Override + public void flush() { + + } + + @Override + public void exportPreferences(Path file) throws JabRefException { + + } + + @Override + public void importPreferences(Path file) throws JabRefException { + + } + + @Override + public InternalPreferences getInternalPreferences() { + return null; + } + + @Override + public BibEntryPreferences getBibEntryPreferences() { + return null; + } + + @Override + public JournalAbbreviationPreferences getJournalAbbreviationPreferences() { + return null; + } + + @Override + public FilePreferences getFilePreferences() { + return null; + } + + @Override + public FieldPreferences getFieldPreferences() { + return null; + } + + @Override + public Map getPreferences() { + return Map.of(); + } + + @Override + public Map getDefaults() { + return Map.of(); + } + + @Override + public LayoutFormatterPreferences getLayoutFormatterPreferences() { + return null; + } + + @Override + public ImportFormatPreferences getImportFormatPreferences() { + return null; + } + + @Override + public SelfContainedSaveConfiguration getSelfContainedExportConfiguration() { + return null; + } + + @Override + public BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager) { + return bibEntryTypesManager; + } + + @Override + public void storeCustomEntryTypesRepository(BibEntryTypesManager entryTypesManager) { + + } + + @Override + public CleanupPreferences getCleanupPreferences() { + return null; + } + + @Override + public CleanupPreferences getDefaultCleanupPreset() { + return null; + } + + @Override + public LibraryPreferences getLibraryPreferences() { + return null; + } + + @Override + public DOIPreferences getDOIPreferences() { + return null; + } + + @Override + public OwnerPreferences getOwnerPreferences() { + return null; + } + + @Override + public TimestampPreferences getTimestampPreferences() { + return null; + } + + @Override + public RemotePreferences getRemotePreferences() { + return null; + } + + @Override + public ProxyPreferences getProxyPreferences() { + return null; + } + + @Override + public SSLPreferences getSSLPreferences() { + return null; + } + + @Override + public CitationKeyPatternPreferences getCitationKeyPatternPreferences() { + return null; + } + + @Override + public AutoLinkPreferences getAutoLinkPreferences() { + return null; + } + + @Override + public ExportPreferences getExportPreferences() { + return null; + } + + @Override + public ImporterPreferences getImporterPreferences() { + return null; + } + + @Override + public GrobidPreferences getGrobidPreferences() { + return null; + } + + @Override + public XmpPreferences getXmpPreferences() { + return null; + } + + @Override + public NameFormatterPreferences getNameFormatterPreferences() { + return null; + } + + @Override + public SearchPreferences getSearchPreferences() { + return null; + } + + @Override + public MrDlibPreferences getMrDlibPreferences() { + return null; + } + + @Override + public ProtectedTermsPreferences getProtectedTermsPreferences() { + return null; + } + + @Override + public AiPreferences getAiPreferences() { + return null; + } + + @Override + public LastFilesOpenedPreferences getLastFilesOpenedPreferences() { + return null; + } + + @Override + public OpenOfficePreferences getOpenOfficePreferences(JournalAbbreviationRepository journalAbbreviationRepository) { + return null; + } + + @Override + public PushToApplicationPreferences getPushToApplicationPreferences() { + return null; + } + + @Override + public GitPreferences getGitPreferences() { + return null; + } + } @ParentCommand protected Pdf pdf; @@ -91,7 +330,7 @@ public void run() { pdf.argumentProcessor.cliPreferences.getXmpPreferences(), pdf.argumentProcessor.cliPreferences.getFilePreferences(), pdf.argumentProcessor.cliPreferences.getLibraryPreferences().getDefaultBibDatabaseMode(), - pdf.argumentProcessor.cliPreferences.getCustomEntryTypesRepository(), + pdf.argumentProcessor.cliPreferences.getCustomEntryTypesRepository(bibEntryTypesManager, cliPreferences), pdf.argumentProcessor.cliPreferences.getFieldPreferences(), Injector.instantiateModelOrService(JournalAbbreviationRepository.class), formats.contains("xmp"), From 66b2bbfc34f11db05dea6915b0135590f862b8cd Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Mon, 8 Sep 2025 14:09:26 +0200 Subject: [PATCH 12/34] fix: typo --- jabkit/src/main/java/org/jabref/JabKit.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jabkit/src/main/java/org/jabref/JabKit.java b/jabkit/src/main/java/org/jabref/JabKit.java index ef99238d7a7..222c1eb12c0 100644 --- a/jabkit/src/main/java/org/jabref/JabKit.java +++ b/jabkit/src/main/java/org/jabref/JabKit.java @@ -294,7 +294,7 @@ public PushToApplicationPreferences getPushToApplicationPreferences() { public GitPreferences getGitPreferences() { return null; } - } + }; public static void main(String[] args) { initLogging(args); From 2031f0ec1a5ef41fdedc75033269e7e39aae6b09 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Mon, 8 Sep 2025 14:11:57 +0200 Subject: [PATCH 13/34] fix: typo --- jabkit/src/main/java/org/jabref/cli/PdfUpdate.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java b/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java index bb6ee23ea84..2e7ba053e54 100644 --- a/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java +++ b/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java @@ -274,7 +274,7 @@ public PushToApplicationPreferences getPushToApplicationPreferences() { public GitPreferences getGitPreferences() { return null; } - } + }; @ParentCommand protected Pdf pdf; From ad131c6c4635f86c8ad6b13367972cd3b860f232 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Mon, 8 Sep 2025 14:15:59 +0200 Subject: [PATCH 14/34] fix: typo and parameter order --- jabkit/src/main/java/org/jabref/JabKit.java | 2 +- jabkit/src/main/java/org/jabref/cli/CheckConsistency.java | 2 +- jabkit/src/main/java/org/jabref/cli/PdfUpdate.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/jabkit/src/main/java/org/jabref/JabKit.java b/jabkit/src/main/java/org/jabref/JabKit.java index 222c1eb12c0..6bb2ff45acf 100644 --- a/jabkit/src/main/java/org/jabref/JabKit.java +++ b/jabkit/src/main/java/org/jabref/JabKit.java @@ -306,7 +306,7 @@ public static void main(String[] args) { BuildInfo buildInfo = new BuildInfo(); Injector.setModelOrService(BuildInfo.class, buildInfo); - BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(bibEntryTypesManager, cliPreferences); + BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(cliPreferences, bibEntryTypesManager); Injector.setModelOrService(BibEntryTypesManager.class, entryTypesManager); ArgumentProcessor argumentProcessor = new ArgumentProcessor(preferences, entryTypesManager); diff --git a/jabkit/src/main/java/org/jabref/cli/CheckConsistency.java b/jabkit/src/main/java/org/jabref/cli/CheckConsistency.java index 5133666a699..d488e09493e 100644 --- a/jabkit/src/main/java/org/jabref/cli/CheckConsistency.java +++ b/jabkit/src/main/java/org/jabref/cli/CheckConsistency.java @@ -307,7 +307,7 @@ public Integer call() { BibDatabaseContext databaseContext = parserResult.get().getDatabaseContext(); - BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(bibEntryTypesManager, CliPreferences); + BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager); BibliographyConsistencyCheck.Result result = consistencyCheck.check(databaseContext, (count, total) -> { if (!sharedOptions.porcelain) { System.out.println(Localization.lang("Checking consistency for entry type %0 of %1", count + 1, total)); diff --git a/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java b/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java index 2e7ba053e54..0f53b37fb4c 100644 --- a/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java +++ b/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java @@ -330,7 +330,7 @@ public void run() { pdf.argumentProcessor.cliPreferences.getXmpPreferences(), pdf.argumentProcessor.cliPreferences.getFilePreferences(), pdf.argumentProcessor.cliPreferences.getLibraryPreferences().getDefaultBibDatabaseMode(), - pdf.argumentProcessor.cliPreferences.getCustomEntryTypesRepository(bibEntryTypesManager, cliPreferences), + pdf.argumentProcessor.cliPreferences.getCustomEntryTypesRepository(cliPreferences, bibEntryTypesManager), pdf.argumentProcessor.cliPreferences.getFieldPreferences(), Injector.instantiateModelOrService(JournalAbbreviationRepository.class), formats.contains("xmp"), From 9c24a2f248d503ea4733e535382809ec64a803c9 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Mon, 8 Sep 2025 14:18:12 +0200 Subject: [PATCH 15/34] fix: removal unnecessary parameter --- jabkit/src/main/java/org/jabref/JabKit.java | 239 +------------------- 1 file changed, 1 insertion(+), 238 deletions(-) diff --git a/jabkit/src/main/java/org/jabref/JabKit.java b/jabkit/src/main/java/org/jabref/JabKit.java index 6bb2ff45acf..db7665ae971 100644 --- a/jabkit/src/main/java/org/jabref/JabKit.java +++ b/jabkit/src/main/java/org/jabref/JabKit.java @@ -9,58 +9,27 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.prefs.BackingStoreException; import java.util.stream.Collectors; import javafx.util.Pair; import org.jabref.cli.ArgumentProcessor; -import org.jabref.logic.FilePreferences; -import org.jabref.logic.InternalPreferences; -import org.jabref.logic.JabRefException; -import org.jabref.logic.LibraryPreferences; -import org.jabref.logic.ai.AiPreferences; -import org.jabref.logic.bibtex.FieldPreferences; -import org.jabref.logic.citationkeypattern.CitationKeyPatternPreferences; -import org.jabref.logic.cleanup.CleanupPreferences; -import org.jabref.logic.exporter.ExportPreferences; -import org.jabref.logic.exporter.SelfContainedSaveConfiguration; -import org.jabref.logic.git.preferences.GitPreferences; -import org.jabref.logic.importer.ImportFormatPreferences; -import org.jabref.logic.importer.ImporterPreferences; import org.jabref.logic.importer.SearchBasedFetcher; import org.jabref.logic.importer.WebFetcher; import org.jabref.logic.importer.WebFetchers; -import org.jabref.logic.importer.fetcher.MrDlibPreferences; -import org.jabref.logic.importer.util.GrobidPreferences; import org.jabref.logic.journals.JournalAbbreviationLoader; -import org.jabref.logic.journals.JournalAbbreviationPreferences; import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.logic.l10n.Localization; -import org.jabref.logic.layout.LayoutFormatterPreferences; -import org.jabref.logic.layout.format.NameFormatterPreferences; import org.jabref.logic.net.ProxyAuthenticator; import org.jabref.logic.net.ProxyPreferences; import org.jabref.logic.net.ProxyRegisterer; import org.jabref.logic.net.ssl.SSLPreferences; import org.jabref.logic.net.ssl.TrustStoreManager; -import org.jabref.logic.openoffice.OpenOfficePreferences; import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.preferences.DOIPreferences; import org.jabref.logic.preferences.JabRefCliPreferences; -import org.jabref.logic.preferences.LastFilesOpenedPreferences; -import org.jabref.logic.preferences.OwnerPreferences; -import org.jabref.logic.preferences.TimestampPreferences; import org.jabref.logic.protectedterms.ProtectedTermsLoader; -import org.jabref.logic.protectedterms.ProtectedTermsPreferences; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.remote.RemotePreferences; -import org.jabref.logic.search.SearchPreferences; import org.jabref.logic.util.BuildInfo; import org.jabref.logic.util.Directories; -import org.jabref.logic.util.io.AutoLinkPreferences; -import org.jabref.logic.xmp.XmpPreferences; -import org.jabref.model.entry.BibEntryPreferences; import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.model.strings.StringUtil; import org.jabref.model.util.DummyFileUpdateMonitor; @@ -89,212 +58,6 @@ public class JabKit { private static final String JABKIT_BRAND = "JabKit - command line toolkit for JabRef"; private static final BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); - private static final CliPreferences cliPreferences = new CliPreferences() { - @Override - public void clear() throws BackingStoreException { - - } - - @Override - public void deleteKey(String key) throws IllegalArgumentException { - - } - - @Override - public void flush() { - - } - - @Override - public void exportPreferences(Path file) throws JabRefException { - - } - - @Override - public void importPreferences(Path file) throws JabRefException { - - } - - @Override - public InternalPreferences getInternalPreferences() { - return null; - } - - @Override - public BibEntryPreferences getBibEntryPreferences() { - return null; - } - - @Override - public JournalAbbreviationPreferences getJournalAbbreviationPreferences() { - return null; - } - - @Override - public FilePreferences getFilePreferences() { - return null; - } - - @Override - public FieldPreferences getFieldPreferences() { - return null; - } - - @Override - public Map getPreferences() { - return Map.of(); - } - - @Override - public Map getDefaults() { - return Map.of(); - } - - @Override - public LayoutFormatterPreferences getLayoutFormatterPreferences() { - return null; - } - - @Override - public ImportFormatPreferences getImportFormatPreferences() { - return null; - } - - @Override - public SelfContainedSaveConfiguration getSelfContainedExportConfiguration() { - return null; - } - - @Override - public BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager) { - return bibEntryTypesManager; - } - - @Override - public void storeCustomEntryTypesRepository(BibEntryTypesManager entryTypesManager) { - - } - - @Override - public CleanupPreferences getCleanupPreferences() { - return null; - } - - @Override - public CleanupPreferences getDefaultCleanupPreset() { - return null; - } - - @Override - public LibraryPreferences getLibraryPreferences() { - return null; - } - - @Override - public DOIPreferences getDOIPreferences() { - return null; - } - - @Override - public OwnerPreferences getOwnerPreferences() { - return null; - } - - @Override - public TimestampPreferences getTimestampPreferences() { - return null; - } - - @Override - public RemotePreferences getRemotePreferences() { - return null; - } - - @Override - public ProxyPreferences getProxyPreferences() { - return null; - } - - @Override - public SSLPreferences getSSLPreferences() { - return null; - } - - @Override - public CitationKeyPatternPreferences getCitationKeyPatternPreferences() { - return null; - } - - @Override - public AutoLinkPreferences getAutoLinkPreferences() { - return null; - } - - @Override - public ExportPreferences getExportPreferences() { - return null; - } - - @Override - public ImporterPreferences getImporterPreferences() { - return null; - } - - @Override - public GrobidPreferences getGrobidPreferences() { - return null; - } - - @Override - public XmpPreferences getXmpPreferences() { - return null; - } - - @Override - public NameFormatterPreferences getNameFormatterPreferences() { - return null; - } - - @Override - public SearchPreferences getSearchPreferences() { - return null; - } - - @Override - public MrDlibPreferences getMrDlibPreferences() { - return null; - } - - @Override - public ProtectedTermsPreferences getProtectedTermsPreferences() { - return null; - } - - @Override - public AiPreferences getAiPreferences() { - return null; - } - - @Override - public LastFilesOpenedPreferences getLastFilesOpenedPreferences() { - return null; - } - - @Override - public OpenOfficePreferences getOpenOfficePreferences(JournalAbbreviationRepository journalAbbreviationRepository) { - return null; - } - - @Override - public PushToApplicationPreferences getPushToApplicationPreferences() { - return null; - } - - @Override - public GitPreferences getGitPreferences() { - return null; - } - }; public static void main(String[] args) { initLogging(args); @@ -306,7 +69,7 @@ public static void main(String[] args) { BuildInfo buildInfo = new BuildInfo(); Injector.setModelOrService(BuildInfo.class, buildInfo); - BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(cliPreferences, bibEntryTypesManager); + BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(bibEntryTypesManager); Injector.setModelOrService(BibEntryTypesManager.class, entryTypesManager); ArgumentProcessor argumentProcessor = new ArgumentProcessor(preferences, entryTypesManager); From ff9a529e4d6bdb9d3771a99c6a4f2dbfc76f9d5e Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Mon, 8 Sep 2025 14:20:51 +0200 Subject: [PATCH 16/34] fix: removal unnecessary parameter --- .../main/java/org/jabref/cli/PdfUpdate.java | 240 +----------------- 1 file changed, 1 insertion(+), 239 deletions(-) diff --git a/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java b/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java index 0f53b37fb4c..777c73d8f1a 100644 --- a/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java +++ b/jabkit/src/main/java/org/jabref/cli/PdfUpdate.java @@ -4,56 +4,24 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.List; -import java.util.Map; import java.util.Optional; -import java.util.prefs.BackingStoreException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; import org.jabref.logic.FilePreferences; -import org.jabref.logic.InternalPreferences; -import org.jabref.logic.JabRefException; -import org.jabref.logic.LibraryPreferences; -import org.jabref.logic.ai.AiPreferences; import org.jabref.logic.bibtex.FieldPreferences; -import org.jabref.logic.citationkeypattern.CitationKeyPatternPreferences; -import org.jabref.logic.cleanup.CleanupPreferences; import org.jabref.logic.exporter.EmbeddedBibFilePdfExporter; -import org.jabref.logic.exporter.ExportPreferences; import org.jabref.logic.exporter.SaveException; -import org.jabref.logic.exporter.SelfContainedSaveConfiguration; import org.jabref.logic.exporter.XmpPdfExporter; -import org.jabref.logic.git.preferences.GitPreferences; -import org.jabref.logic.importer.ImportFormatPreferences; -import org.jabref.logic.importer.ImporterPreferences; import org.jabref.logic.importer.ParserResult; -import org.jabref.logic.importer.fetcher.MrDlibPreferences; -import org.jabref.logic.importer.util.GrobidPreferences; -import org.jabref.logic.journals.JournalAbbreviationPreferences; import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.logic.l10n.Localization; -import org.jabref.logic.layout.LayoutFormatterPreferences; -import org.jabref.logic.layout.format.NameFormatterPreferences; -import org.jabref.logic.net.ProxyPreferences; -import org.jabref.logic.net.ssl.SSLPreferences; -import org.jabref.logic.openoffice.OpenOfficePreferences; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.preferences.DOIPreferences; -import org.jabref.logic.preferences.LastFilesOpenedPreferences; -import org.jabref.logic.preferences.OwnerPreferences; -import org.jabref.logic.preferences.TimestampPreferences; -import org.jabref.logic.protectedterms.ProtectedTermsPreferences; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.remote.RemotePreferences; -import org.jabref.logic.search.SearchPreferences; -import org.jabref.logic.util.io.AutoLinkPreferences; import org.jabref.logic.util.io.FileUtil; import org.jabref.logic.xmp.XmpPreferences; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.BibDatabaseMode; import org.jabref.model.entry.BibEntry; -import org.jabref.model.entry.BibEntryPreferences; import org.jabref.model.entry.BibEntryTypesManager; import com.airhacks.afterburner.injection.Injector; @@ -69,212 +37,6 @@ class PdfUpdate implements Runnable { private static final Logger LOGGER = LoggerFactory.getLogger(PdfUpdate.class); private static final BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); - private static final CliPreferences cliPreferences = new CliPreferences() { - @Override - public void clear() throws BackingStoreException { - - } - - @Override - public void deleteKey(String key) throws IllegalArgumentException { - - } - - @Override - public void flush() { - - } - - @Override - public void exportPreferences(Path file) throws JabRefException { - - } - - @Override - public void importPreferences(Path file) throws JabRefException { - - } - - @Override - public InternalPreferences getInternalPreferences() { - return null; - } - - @Override - public BibEntryPreferences getBibEntryPreferences() { - return null; - } - - @Override - public JournalAbbreviationPreferences getJournalAbbreviationPreferences() { - return null; - } - - @Override - public FilePreferences getFilePreferences() { - return null; - } - - @Override - public FieldPreferences getFieldPreferences() { - return null; - } - - @Override - public Map getPreferences() { - return Map.of(); - } - - @Override - public Map getDefaults() { - return Map.of(); - } - - @Override - public LayoutFormatterPreferences getLayoutFormatterPreferences() { - return null; - } - - @Override - public ImportFormatPreferences getImportFormatPreferences() { - return null; - } - - @Override - public SelfContainedSaveConfiguration getSelfContainedExportConfiguration() { - return null; - } - - @Override - public BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager) { - return bibEntryTypesManager; - } - - @Override - public void storeCustomEntryTypesRepository(BibEntryTypesManager entryTypesManager) { - - } - - @Override - public CleanupPreferences getCleanupPreferences() { - return null; - } - - @Override - public CleanupPreferences getDefaultCleanupPreset() { - return null; - } - - @Override - public LibraryPreferences getLibraryPreferences() { - return null; - } - - @Override - public DOIPreferences getDOIPreferences() { - return null; - } - - @Override - public OwnerPreferences getOwnerPreferences() { - return null; - } - - @Override - public TimestampPreferences getTimestampPreferences() { - return null; - } - - @Override - public RemotePreferences getRemotePreferences() { - return null; - } - - @Override - public ProxyPreferences getProxyPreferences() { - return null; - } - - @Override - public SSLPreferences getSSLPreferences() { - return null; - } - - @Override - public CitationKeyPatternPreferences getCitationKeyPatternPreferences() { - return null; - } - - @Override - public AutoLinkPreferences getAutoLinkPreferences() { - return null; - } - - @Override - public ExportPreferences getExportPreferences() { - return null; - } - - @Override - public ImporterPreferences getImporterPreferences() { - return null; - } - - @Override - public GrobidPreferences getGrobidPreferences() { - return null; - } - - @Override - public XmpPreferences getXmpPreferences() { - return null; - } - - @Override - public NameFormatterPreferences getNameFormatterPreferences() { - return null; - } - - @Override - public SearchPreferences getSearchPreferences() { - return null; - } - - @Override - public MrDlibPreferences getMrDlibPreferences() { - return null; - } - - @Override - public ProtectedTermsPreferences getProtectedTermsPreferences() { - return null; - } - - @Override - public AiPreferences getAiPreferences() { - return null; - } - - @Override - public LastFilesOpenedPreferences getLastFilesOpenedPreferences() { - return null; - } - - @Override - public OpenOfficePreferences getOpenOfficePreferences(JournalAbbreviationRepository journalAbbreviationRepository) { - return null; - } - - @Override - public PushToApplicationPreferences getPushToApplicationPreferences() { - return null; - } - - @Override - public GitPreferences getGitPreferences() { - return null; - } - }; @ParentCommand protected Pdf pdf; @@ -330,7 +92,7 @@ public void run() { pdf.argumentProcessor.cliPreferences.getXmpPreferences(), pdf.argumentProcessor.cliPreferences.getFilePreferences(), pdf.argumentProcessor.cliPreferences.getLibraryPreferences().getDefaultBibDatabaseMode(), - pdf.argumentProcessor.cliPreferences.getCustomEntryTypesRepository(cliPreferences, bibEntryTypesManager), + pdf.argumentProcessor.cliPreferences.getCustomEntryTypesRepository(bibEntryTypesManager), pdf.argumentProcessor.cliPreferences.getFieldPreferences(), Injector.instantiateModelOrService(JournalAbbreviationRepository.class), formats.contains("xmp"), From d6d827818b0be260bf4d54c401b6f0b82d0d2403 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Tue, 9 Sep 2025 14:34:33 +0200 Subject: [PATCH 17/34] fix: removing double import--using `argumentProcessor.cliPrefences` --- .../java/org/jabref/cli/CheckConsistency.java | 244 +----------------- 1 file changed, 1 insertion(+), 243 deletions(-) diff --git a/jabkit/src/main/java/org/jabref/cli/CheckConsistency.java b/jabkit/src/main/java/org/jabref/cli/CheckConsistency.java index d488e09493e..55ce69c554d 100644 --- a/jabkit/src/main/java/org/jabref/cli/CheckConsistency.java +++ b/jabkit/src/main/java/org/jabref/cli/CheckConsistency.java @@ -4,53 +4,17 @@ import java.io.OutputStreamWriter; import java.io.Writer; import java.nio.file.Path; -import java.util.Map; import java.util.Optional; import java.util.concurrent.Callable; -import java.util.prefs.BackingStoreException; import org.jabref.cli.converter.CygWinPathConverter; -import org.jabref.logic.FilePreferences; -import org.jabref.logic.InternalPreferences; -import org.jabref.logic.JabRefException; -import org.jabref.logic.LibraryPreferences; -import org.jabref.logic.ai.AiPreferences; -import org.jabref.logic.bibtex.FieldPreferences; -import org.jabref.logic.citationkeypattern.CitationKeyPatternPreferences; -import org.jabref.logic.cleanup.CleanupPreferences; -import org.jabref.logic.exporter.ExportPreferences; -import org.jabref.logic.exporter.SelfContainedSaveConfiguration; -import org.jabref.logic.git.preferences.GitPreferences; -import org.jabref.logic.importer.ImportFormatPreferences; -import org.jabref.logic.importer.ImporterPreferences; import org.jabref.logic.importer.ParserResult; -import org.jabref.logic.importer.fetcher.MrDlibPreferences; -import org.jabref.logic.importer.util.GrobidPreferences; -import org.jabref.logic.journals.JournalAbbreviationPreferences; -import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.logic.l10n.Localization; -import org.jabref.logic.layout.LayoutFormatterPreferences; -import org.jabref.logic.layout.format.NameFormatterPreferences; -import org.jabref.logic.net.ProxyPreferences; -import org.jabref.logic.net.ssl.SSLPreferences; -import org.jabref.logic.openoffice.OpenOfficePreferences; -import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.preferences.DOIPreferences; -import org.jabref.logic.preferences.LastFilesOpenedPreferences; -import org.jabref.logic.preferences.OwnerPreferences; -import org.jabref.logic.preferences.TimestampPreferences; -import org.jabref.logic.protectedterms.ProtectedTermsPreferences; -import org.jabref.logic.push.PushToApplicationPreferences; import org.jabref.logic.quality.consistency.BibliographyConsistencyCheck; import org.jabref.logic.quality.consistency.BibliographyConsistencyCheckResultCsvWriter; import org.jabref.logic.quality.consistency.BibliographyConsistencyCheckResultTxtWriter; import org.jabref.logic.quality.consistency.BibliographyConsistencyCheckResultWriter; -import org.jabref.logic.remote.RemotePreferences; -import org.jabref.logic.search.SearchPreferences; -import org.jabref.logic.util.io.AutoLinkPreferences; -import org.jabref.logic.xmp.XmpPreferences; import org.jabref.model.database.BibDatabaseContext; -import org.jabref.model.entry.BibEntryPreferences; import org.jabref.model.entry.BibEntryTypesManager; import org.slf4j.Logger; @@ -64,212 +28,6 @@ class CheckConsistency implements Callable { private static final Logger LOGGER = LoggerFactory.getLogger(CheckConsistency.class); private static final BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); - private static final CliPreferences cliPreferences = new CliPreferences() { - @Override - public void clear() throws BackingStoreException { - - } - - @Override - public void deleteKey(String key) throws IllegalArgumentException { - - } - - @Override - public void flush() { - - } - - @Override - public void exportPreferences(Path file) throws JabRefException { - - } - - @Override - public void importPreferences(Path file) throws JabRefException { - - } - - @Override - public InternalPreferences getInternalPreferences() { - return null; - } - - @Override - public BibEntryPreferences getBibEntryPreferences() { - return null; - } - - @Override - public JournalAbbreviationPreferences getJournalAbbreviationPreferences() { - return null; - } - - @Override - public FilePreferences getFilePreferences() { - return null; - } - - @Override - public FieldPreferences getFieldPreferences() { - return null; - } - - @Override - public Map getPreferences() { - return Map.of(); - } - - @Override - public Map getDefaults() { - return Map.of(); - } - - @Override - public LayoutFormatterPreferences getLayoutFormatterPreferences() { - return null; - } - - @Override - public ImportFormatPreferences getImportFormatPreferences() { - return null; - } - - @Override - public SelfContainedSaveConfiguration getSelfContainedExportConfiguration() { - return null; - } - - @Override - public BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager) { - return bibEntryTypesManager; - } - - @Override - public void storeCustomEntryTypesRepository(BibEntryTypesManager entryTypesManager) { - - } - - @Override - public CleanupPreferences getCleanupPreferences() { - return null; - } - - @Override - public CleanupPreferences getDefaultCleanupPreset() { - return null; - } - - @Override - public LibraryPreferences getLibraryPreferences() { - return null; - } - - @Override - public DOIPreferences getDOIPreferences() { - return null; - } - - @Override - public OwnerPreferences getOwnerPreferences() { - return null; - } - - @Override - public TimestampPreferences getTimestampPreferences() { - return null; - } - - @Override - public RemotePreferences getRemotePreferences() { - return null; - } - - @Override - public ProxyPreferences getProxyPreferences() { - return null; - } - - @Override - public SSLPreferences getSSLPreferences() { - return null; - } - - @Override - public CitationKeyPatternPreferences getCitationKeyPatternPreferences() { - return null; - } - - @Override - public AutoLinkPreferences getAutoLinkPreferences() { - return null; - } - - @Override - public ExportPreferences getExportPreferences() { - return null; - } - - @Override - public ImporterPreferences getImporterPreferences() { - return null; - } - - @Override - public GrobidPreferences getGrobidPreferences() { - return null; - } - - @Override - public XmpPreferences getXmpPreferences() { - return null; - } - - @Override - public NameFormatterPreferences getNameFormatterPreferences() { - return null; - } - - @Override - public SearchPreferences getSearchPreferences() { - return null; - } - - @Override - public MrDlibPreferences getMrDlibPreferences() { - return null; - } - - @Override - public ProtectedTermsPreferences getProtectedTermsPreferences() { - return null; - } - - @Override - public AiPreferences getAiPreferences() { - return null; - } - - @Override - public LastFilesOpenedPreferences getLastFilesOpenedPreferences() { - return null; - } - - @Override - public OpenOfficePreferences getOpenOfficePreferences(JournalAbbreviationRepository journalAbbreviationRepository) { - return null; - } - - @Override - public PushToApplicationPreferences getPushToApplicationPreferences() { - return null; - } - - @Override - public GitPreferences getGitPreferences() { - return null; - } - }; @ParentCommand private ArgumentProcessor argumentProcessor; @@ -307,7 +65,7 @@ public Integer call() { BibDatabaseContext databaseContext = parserResult.get().getDatabaseContext(); - BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(cliPreferences, bibEntryTypesManager); + BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(argumentProcessor.cliPreferences, bibEntryTypesManager); BibliographyConsistencyCheck.Result result = consistencyCheck.check(databaseContext, (count, total) -> { if (!sharedOptions.porcelain) { System.out.println(Localization.lang("Checking consistency for entry type %0 of %1", count + 1, total)); From 0d7e37d1c8fa1258efd58fe69a2337c4c27dc58b Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Tue, 9 Sep 2025 14:34:54 +0200 Subject: [PATCH 18/34] fix: using `mockito` for testing --- ...hyConsistencyCheckResultCsvWriterTest.java | 245 +---------------- ...hyConsistencyCheckResultTxtWriterTest.java | 247 +----------------- 2 files changed, 3 insertions(+), 489 deletions(-) diff --git a/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultCsvWriterTest.java b/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultCsvWriterTest.java index 5bec5c08c44..01b4caa6ab7 100644 --- a/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultCsvWriterTest.java +++ b/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultCsvWriterTest.java @@ -5,48 +5,14 @@ import java.io.Writer; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Map; -import java.util.prefs.BackingStoreException; -import org.jabref.logic.FilePreferences; -import org.jabref.logic.InternalPreferences; -import org.jabref.logic.JabRefException; -import org.jabref.logic.LibraryPreferences; -import org.jabref.logic.ai.AiPreferences; -import org.jabref.logic.bibtex.FieldPreferences; -import org.jabref.logic.citationkeypattern.CitationKeyPatternPreferences; -import org.jabref.logic.cleanup.CleanupPreferences; -import org.jabref.logic.exporter.ExportPreferences; -import org.jabref.logic.exporter.SelfContainedSaveConfiguration; -import org.jabref.logic.git.preferences.GitPreferences; import org.jabref.logic.importer.ImportFormatPreferences; -import org.jabref.logic.importer.ImporterPreferences; -import org.jabref.logic.importer.fetcher.MrDlibPreferences; import org.jabref.logic.importer.fileformat.BibtexImporter; -import org.jabref.logic.importer.util.GrobidPreferences; -import org.jabref.logic.journals.JournalAbbreviationPreferences; -import org.jabref.logic.journals.JournalAbbreviationRepository; -import org.jabref.logic.layout.LayoutFormatterPreferences; -import org.jabref.logic.layout.format.NameFormatterPreferences; -import org.jabref.logic.net.ProxyPreferences; -import org.jabref.logic.net.ssl.SSLPreferences; -import org.jabref.logic.openoffice.OpenOfficePreferences; import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.preferences.DOIPreferences; -import org.jabref.logic.preferences.LastFilesOpenedPreferences; -import org.jabref.logic.preferences.OwnerPreferences; -import org.jabref.logic.preferences.TimestampPreferences; -import org.jabref.logic.protectedterms.ProtectedTermsPreferences; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.remote.RemotePreferences; -import org.jabref.logic.search.SearchPreferences; -import org.jabref.logic.util.io.AutoLinkPreferences; -import org.jabref.logic.xmp.XmpPreferences; import org.jabref.model.database.BibDatabase; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.BibDatabaseMode; import org.jabref.model.entry.BibEntry; -import org.jabref.model.entry.BibEntryPreferences; import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.model.entry.field.StandardField; import org.jabref.model.entry.field.UnknownField; @@ -65,216 +31,7 @@ class BibliographyConsistencyCheckResultCsvWriterTest { private final BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); private final BibtexImporter importer = new BibtexImporter(mock(ImportFormatPreferences.class, Answers.RETURNS_DEEP_STUBS), new DummyFileUpdateMonitor()); - private final CliPreferences cliPreferences = new CliPreferences() { - @Override - public void clear() throws BackingStoreException { - - } - - @Override - public BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager) { - return bibEntryTypesManager; - } - - @Override - public void deleteKey(String key) throws IllegalArgumentException { - - } - - @Override - public void flush() { - - } - - @Override - public void exportPreferences(Path file) throws JabRefException { - - } - - @Override - public void importPreferences(Path file) throws JabRefException { - - } - - @Override - public InternalPreferences getInternalPreferences() { - return null; - } - - @Override - public BibEntryPreferences getBibEntryPreferences() { - return null; - } - - @Override - public JournalAbbreviationPreferences getJournalAbbreviationPreferences() { - return null; - } - - @Override - public FilePreferences getFilePreferences() { - return null; - } - - @Override - public FieldPreferences getFieldPreferences() { - return null; - } - - @Override - public Map getPreferences() { - return Map.of(); - } - - @Override - public Map getDefaults() { - return Map.of(); - } - - @Override - public LayoutFormatterPreferences getLayoutFormatterPreferences() { - return null; - } - - @Override - public ImportFormatPreferences getImportFormatPreferences() { - return null; - } - - @Override - public SelfContainedSaveConfiguration getSelfContainedExportConfiguration() { - return null; - } - - public BibEntryTypesManager getCustomEntryTypesRepository() { - return null; - } - - @Override - public void storeCustomEntryTypesRepository(BibEntryTypesManager entryTypesManager) { - - } - - @Override - public CleanupPreferences getCleanupPreferences() { - return null; - } - - @Override - public CleanupPreferences getDefaultCleanupPreset() { - return null; - } - - @Override - public LibraryPreferences getLibraryPreferences() { - return null; - } - - @Override - public DOIPreferences getDOIPreferences() { - return null; - } - - @Override - public OwnerPreferences getOwnerPreferences() { - return null; - } - - @Override - public TimestampPreferences getTimestampPreferences() { - return null; - } - - @Override - public RemotePreferences getRemotePreferences() { - return null; - } - - @Override - public ProxyPreferences getProxyPreferences() { - return null; - } - - @Override - public SSLPreferences getSSLPreferences() { - return null; - } - - @Override - public CitationKeyPatternPreferences getCitationKeyPatternPreferences() { - return null; - } - - @Override - public AutoLinkPreferences getAutoLinkPreferences() { - return null; - } - - @Override - public ExportPreferences getExportPreferences() { - return null; - } - - @Override - public ImporterPreferences getImporterPreferences() { - return null; - } - - @Override - public GrobidPreferences getGrobidPreferences() { - return null; - } - - @Override - public XmpPreferences getXmpPreferences() { - return null; - } - - @Override - public NameFormatterPreferences getNameFormatterPreferences() { - return null; - } - - @Override - public SearchPreferences getSearchPreferences() { - return null; - } - - @Override - public MrDlibPreferences getMrDlibPreferences() { - return null; - } - - @Override - public ProtectedTermsPreferences getProtectedTermsPreferences() { - return null; - } - - @Override - public AiPreferences getAiPreferences() { - return null; - } - - @Override - public LastFilesOpenedPreferences getLastFilesOpenedPreferences() { - return null; - } - - @Override - public OpenOfficePreferences getOpenOfficePreferences(JournalAbbreviationRepository journalAbbreviationRepository) { - return null; - } - - @Override - public PushToApplicationPreferences getPushToApplicationPreferences() { - return null; - } - - @Override - public GitPreferences getGitPreferences() { - return null; - } - }; + private final CliPreferences cliPreferences = mock(CliPreferences.class, Answers.RETURNS_DEEP_STUBS); @Test void checkSimpleLibrary(@TempDir Path tempDir) throws IOException { diff --git a/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultTxtWriterTest.java b/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultTxtWriterTest.java index c6a3ff888a5..ee8dd79f7b6 100644 --- a/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultTxtWriterTest.java +++ b/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckResultTxtWriterTest.java @@ -6,48 +6,14 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.List; -import java.util.Map; -import java.util.prefs.BackingStoreException; - -import org.jabref.logic.FilePreferences; -import org.jabref.logic.InternalPreferences; -import org.jabref.logic.JabRefException; -import org.jabref.logic.LibraryPreferences; -import org.jabref.logic.ai.AiPreferences; -import org.jabref.logic.bibtex.FieldPreferences; -import org.jabref.logic.citationkeypattern.CitationKeyPatternPreferences; -import org.jabref.logic.cleanup.CleanupPreferences; -import org.jabref.logic.exporter.ExportPreferences; -import org.jabref.logic.exporter.SelfContainedSaveConfiguration; -import org.jabref.logic.git.preferences.GitPreferences; + import org.jabref.logic.importer.ImportFormatPreferences; -import org.jabref.logic.importer.ImporterPreferences; -import org.jabref.logic.importer.fetcher.MrDlibPreferences; import org.jabref.logic.importer.fileformat.BibtexImporter; -import org.jabref.logic.importer.util.GrobidPreferences; -import org.jabref.logic.journals.JournalAbbreviationPreferences; -import org.jabref.logic.journals.JournalAbbreviationRepository; -import org.jabref.logic.layout.LayoutFormatterPreferences; -import org.jabref.logic.layout.format.NameFormatterPreferences; -import org.jabref.logic.net.ProxyPreferences; -import org.jabref.logic.net.ssl.SSLPreferences; -import org.jabref.logic.openoffice.OpenOfficePreferences; import org.jabref.logic.preferences.CliPreferences; -import org.jabref.logic.preferences.DOIPreferences; -import org.jabref.logic.preferences.LastFilesOpenedPreferences; -import org.jabref.logic.preferences.OwnerPreferences; -import org.jabref.logic.preferences.TimestampPreferences; -import org.jabref.logic.protectedterms.ProtectedTermsPreferences; -import org.jabref.logic.push.PushToApplicationPreferences; -import org.jabref.logic.remote.RemotePreferences; -import org.jabref.logic.search.SearchPreferences; -import org.jabref.logic.util.io.AutoLinkPreferences; -import org.jabref.logic.xmp.XmpPreferences; import org.jabref.model.database.BibDatabase; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.BibDatabaseMode; import org.jabref.model.entry.BibEntry; -import org.jabref.model.entry.BibEntryPreferences; import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.model.entry.field.StandardField; import org.jabref.model.entry.field.UnknownField; @@ -65,216 +31,7 @@ class BibliographyConsistencyCheckResultTxtWriterTest { private final BibtexImporter importer = new BibtexImporter(mock(ImportFormatPreferences.class, Answers.RETURNS_DEEP_STUBS), new DummyFileUpdateMonitor()); private final BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); - private final CliPreferences cliPreferences = new CliPreferences() { - @Override - public void clear() throws BackingStoreException { - - } - - @Override - public void deleteKey(String key) throws IllegalArgumentException { - - } - - @Override - public BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager) { - return bibEntryTypesManager; - } - - @Override - public void flush() { - - } - - @Override - public void exportPreferences(Path file) throws JabRefException { - - } - - @Override - public void importPreferences(Path file) throws JabRefException { - - } - - @Override - public InternalPreferences getInternalPreferences() { - return null; - } - - @Override - public BibEntryPreferences getBibEntryPreferences() { - return null; - } - - @Override - public JournalAbbreviationPreferences getJournalAbbreviationPreferences() { - return null; - } - - @Override - public FilePreferences getFilePreferences() { - return null; - } - - @Override - public FieldPreferences getFieldPreferences() { - return null; - } - - @Override - public Map getPreferences() { - return Map.of(); - } - - @Override - public Map getDefaults() { - return Map.of(); - } - - @Override - public LayoutFormatterPreferences getLayoutFormatterPreferences() { - return null; - } - - @Override - public ImportFormatPreferences getImportFormatPreferences() { - return null; - } - - @Override - public SelfContainedSaveConfiguration getSelfContainedExportConfiguration() { - return null; - } - - public BibEntryTypesManager getCustomEntryTypesRepository() { - return null; - } - - @Override - public void storeCustomEntryTypesRepository(BibEntryTypesManager entryTypesManager) { - - } - - @Override - public CleanupPreferences getCleanupPreferences() { - return null; - } - - @Override - public CleanupPreferences getDefaultCleanupPreset() { - return null; - } - - @Override - public LibraryPreferences getLibraryPreferences() { - return null; - } - - @Override - public DOIPreferences getDOIPreferences() { - return null; - } - - @Override - public OwnerPreferences getOwnerPreferences() { - return null; - } - - @Override - public TimestampPreferences getTimestampPreferences() { - return null; - } - - @Override - public RemotePreferences getRemotePreferences() { - return null; - } - - @Override - public ProxyPreferences getProxyPreferences() { - return null; - } - - @Override - public SSLPreferences getSSLPreferences() { - return null; - } - - @Override - public CitationKeyPatternPreferences getCitationKeyPatternPreferences() { - return null; - } - - @Override - public AutoLinkPreferences getAutoLinkPreferences() { - return null; - } - - @Override - public ExportPreferences getExportPreferences() { - return null; - } - - @Override - public ImporterPreferences getImporterPreferences() { - return null; - } - - @Override - public GrobidPreferences getGrobidPreferences() { - return null; - } - - @Override - public XmpPreferences getXmpPreferences() { - return null; - } - - @Override - public NameFormatterPreferences getNameFormatterPreferences() { - return null; - } - - @Override - public SearchPreferences getSearchPreferences() { - return null; - } - - @Override - public MrDlibPreferences getMrDlibPreferences() { - return null; - } - - @Override - public ProtectedTermsPreferences getProtectedTermsPreferences() { - return null; - } - - @Override - public AiPreferences getAiPreferences() { - return null; - } - - @Override - public LastFilesOpenedPreferences getLastFilesOpenedPreferences() { - return null; - } - - @Override - public OpenOfficePreferences getOpenOfficePreferences(JournalAbbreviationRepository journalAbbreviationRepository) { - return null; - } - - @Override - public PushToApplicationPreferences getPushToApplicationPreferences() { - return null; - } - - @Override - public GitPreferences getGitPreferences() { - return null; - } - }; + private final CliPreferences cliPreferences = mock(CliPreferences.class, Answers.RETURNS_DEEP_STUBS); @Test void checkSimpleLibrary(@TempDir Path tempDir) throws IOException { From 1fc38102b7d1cd6ba75af3e7e229fb5e8b8650f8 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Tue, 9 Sep 2025 14:47:54 +0200 Subject: [PATCH 19/34] fix: resolving conflicts --- jabgui/src/main/java/org/jabref/gui/JabRefGUI.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java index 562038abb5a..d842d4f3fde 100644 --- a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java +++ b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java @@ -37,6 +37,7 @@ import org.jabref.logic.UiCommand; import org.jabref.logic.ai.AiService; import org.jabref.logic.citation.SearchCitationsRelationsService; +import org.jabref.logic.git.util.GitHandlerRegistry; import org.jabref.logic.journals.JournalAbbreviationLoader; import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.logic.l10n.Localization; @@ -87,6 +88,7 @@ public class JabRefGUI extends Application { private static DialogService dialogService; private static JabRefFrame mainFrame; private static BibEntryTypesManager bibEntryTypesManager; + private static GitHandlerRegistry gitHandlerRegistry; private static RemoteListenerServerManager remoteListenerServerManager; private static HttpServerManager httpServerManager; @@ -162,6 +164,9 @@ public void initialize() { Injector.setModelOrService(DirectoryMonitor.class, directoryMonitor); BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(bibEntryTypesManager); + gitHandlerRegistry = new GitHandlerRegistry(); + Injector.setModelOrService(GitHandlerRegistry.class, gitHandlerRegistry); + JournalAbbreviationRepository journalAbbreviationRepository = JournalAbbreviationLoader.loadRepository(preferences.getJournalAbbreviationPreferences()); Injector.setModelOrService(BibEntryTypesManager.class, entryTypesManager); Injector.setModelOrService(JournalAbbreviationRepository.class, journalAbbreviationRepository); From d30b731ba98244f669219916d8600374dea6f030 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Tue, 9 Sep 2025 14:56:03 +0200 Subject: [PATCH 20/34] fix: resolving conflicts --- jabgui/src/main/java/org/jabref/gui/JabRefGUI.java | 1 + jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java index d842d4f3fde..0012007966c 100644 --- a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java +++ b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java @@ -120,6 +120,7 @@ public void start(Stage stage) { fileUpdateMonitor, preferences, cliPreferences, + gitHandlerRegistry, aiService, stateManager, countingUndoManager, diff --git a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java index 409ba81543b..44b2cbcdf2c 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java @@ -55,6 +55,7 @@ import org.jabref.gui.welcome.WelcomeTab; import org.jabref.logic.UiCommand; import org.jabref.logic.ai.AiService; +import org.jabref.logic.git.util.GitHandlerRegistry; import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.BuildInfo; @@ -100,6 +101,7 @@ private enum PanelMode { MAIN_TABLE, MAIN_TABLE_AND_ENTRY_EDITOR } private final StateManager stateManager; private final CountingUndoManager undoManager; private final DialogService dialogService; + private final GitHandlerRegistry gitHandlerRegistry; private final FileUpdateMonitor fileUpdateMonitor; private final BibEntryTypesManager entryTypesManager; private final ClipBoardManager clipBoardManager; @@ -123,6 +125,7 @@ public JabRefFrame(Stage mainStage, FileUpdateMonitor fileUpdateMonitor, GuiPreferences preferences, CliPreferences cliPreferences, + GitHandlerRegistry gitHandlerRegistry, AiService aiService, StateManager stateManager, CountingUndoManager undoManager, @@ -134,6 +137,7 @@ public JabRefFrame(Stage mainStage, this.fileUpdateMonitor = fileUpdateMonitor; this.preferences = preferences; this.cliPreferences = cliPreferences; + this.gitHandlerRegistry = gitHandlerRegistry; this.aiService = aiService; this.stateManager = stateManager; this.undoManager = undoManager; From 462657a05db2311b584cc103a6f6be87984bee84 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Tue, 9 Sep 2025 15:01:28 +0200 Subject: [PATCH 21/34] fix: resolving conflicts --- jabgui/src/main/java/org/jabref/gui/JabRefGUI.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java index 0012007966c..d8678fd1d74 100644 --- a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java +++ b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java @@ -88,6 +88,7 @@ public class JabRefGUI extends Application { private static DialogService dialogService; private static JabRefFrame mainFrame; private static BibEntryTypesManager bibEntryTypesManager; + private static GitHandlerRegistry gitHandlerRegistry; private static RemoteListenerServerManager remoteListenerServerManager; @@ -164,10 +165,10 @@ public void initialize() { DirectoryMonitor directoryMonitor = new DirectoryMonitor(); Injector.setModelOrService(DirectoryMonitor.class, directoryMonitor); - BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(bibEntryTypesManager); gitHandlerRegistry = new GitHandlerRegistry(); Injector.setModelOrService(GitHandlerRegistry.class, gitHandlerRegistry); + BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(bibEntryTypesManager); JournalAbbreviationRepository journalAbbreviationRepository = JournalAbbreviationLoader.loadRepository(preferences.getJournalAbbreviationPreferences()); Injector.setModelOrService(BibEntryTypesManager.class, entryTypesManager); Injector.setModelOrService(JournalAbbreviationRepository.class, journalAbbreviationRepository); From c321b78b54233146ce919cdfb241c7fcfa9d916c Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Tue, 9 Sep 2025 16:05:22 +0200 Subject: [PATCH 22/34] fix: removing double imports --- jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java index a7aec15bd48..41e57583688 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java @@ -132,8 +132,7 @@ public JabRefFrame(Stage mainStage, CountingUndoManager undoManager, BibEntryTypesManager entryTypesManager, ClipBoardManager clipBoardManager, - TaskExecutor taskExecutor, - GitHandlerRegistry gitHandlerRegistry) { + TaskExecutor taskExecutor) { this.mainStage = mainStage; this.dialogService = dialogService; this.fileUpdateMonitor = fileUpdateMonitor; @@ -146,7 +145,6 @@ public JabRefFrame(Stage mainStage, this.entryTypesManager = entryTypesManager; this.clipBoardManager = clipBoardManager; this.taskExecutor = taskExecutor; - this.gitHandlerRegistry = gitHandlerRegistry; setId("frame"); From 79af35ff39b16f5f699185f3d900b35db9b9fb3f Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Tue, 9 Sep 2025 16:09:29 +0200 Subject: [PATCH 23/34] fix: removing double imports --- jabgui/src/main/java/org/jabref/gui/JabRefGUI.java | 3 +-- jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java index 006136f150b..5d52a498d75 100644 --- a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java +++ b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java @@ -127,8 +127,7 @@ public void start(Stage stage) { countingUndoManager, Injector.instantiateModelOrService(BibEntryTypesManager.class), clipBoardManager, - taskExecutor, - gitHandlerRegistry); + taskExecutor); openWindow(); diff --git a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java index 41e57583688..164204bf5ea 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java @@ -106,7 +106,6 @@ private enum PanelMode { MAIN_TABLE, MAIN_TABLE_AND_ENTRY_EDITOR } private final BibEntryTypesManager entryTypesManager; private final ClipBoardManager clipBoardManager; private final TaskExecutor taskExecutor; - private final GitHandlerRegistry gitHandlerRegistry; private final JabRefFrameViewModel viewModel; private final GuiPushToApplicationCommand pushToApplicationCommand; From 3befca7f1843bc7d6d5d7bb16a067a6064f6d788 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Wed, 10 Sep 2025 09:22:35 +0200 Subject: [PATCH 24/34] =?UTF-8?q?fix:=20removing=20`CliPreferences`=20redu?= =?UTF-8?q?ndancy=E2=80=93=E2=80=93=20`GuiPreferences`=20already=20extends?= =?UTF-8?q?=20`CliPreferences`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jabgui/src/main/java/org/jabref/Launcher.java | 3 +-- jabgui/src/main/java/org/jabref/gui/JabRefGUI.java | 3 --- .../org/jabref/gui/consistency/ConsistencyCheckAction.java | 6 +----- jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java | 4 ---- jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java | 6 +----- .../org/jabref/logic/preferences/JabRefCliPreferences.java | 6 ++++++ 6 files changed, 9 insertions(+), 19 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/Launcher.java b/jabgui/src/main/java/org/jabref/Launcher.java index 44ecc895ff3..9d579122382 100644 --- a/jabgui/src/main/java/org/jabref/Launcher.java +++ b/jabgui/src/main/java/org/jabref/Launcher.java @@ -57,7 +57,6 @@ public static void main(String[] args) { Injector.setModelOrService(BuildInfo.class, new BuildInfo()); final JabRefGuiPreferences preferences = JabRefGuiPreferences.getInstance(); - final BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); ArgumentProcessor argumentProcessor = new ArgumentProcessor( args, @@ -89,7 +88,7 @@ public static void main(String[] args) { systemExit(); } - PreferencesMigrations.runMigrations(preferences, bibEntryTypesManager); + PreferencesMigrations.runMigrations(preferences, preferences.getCustomEntryTypesRepository()); PostgreServer postgreServer = new PostgreServer(); Injector.setModelOrService(PostgreServer.class, postgreServer); diff --git a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java index 5d52a498d75..5fcce7eeefe 100644 --- a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java +++ b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java @@ -43,7 +43,6 @@ import org.jabref.logic.l10n.Localization; import org.jabref.logic.net.ProxyRegisterer; import org.jabref.logic.os.OS; -import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.protectedterms.ProtectedTermsLoader; import org.jabref.logic.remote.RemotePreferences; import org.jabref.logic.remote.server.RemoteListenerServerManager; @@ -72,7 +71,6 @@ public class JabRefGUI extends Application { private static List uiCommands; private static GuiPreferences preferences; - private static CliPreferences cliPreferences; // AI Service handles chat messages etc. Therefore, it is tightly coupled to the GUI. private static AiService aiService; @@ -120,7 +118,6 @@ public void start(Stage stage) { dialogService, fileUpdateMonitor, preferences, - cliPreferences, gitHandlerRegistry, aiService, stateManager, diff --git a/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckAction.java b/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckAction.java index d676e4da0b4..d2899cbd778 100644 --- a/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckAction.java +++ b/jabgui/src/main/java/org/jabref/gui/consistency/ConsistencyCheckAction.java @@ -13,7 +13,6 @@ import org.jabref.gui.preferences.GuiPreferences; import org.jabref.gui.util.UiTaskExecutor; import org.jabref.logic.l10n.Localization; -import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.quality.consistency.BibliographyConsistencyCheck; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntryTypesManager; @@ -30,7 +29,6 @@ public class ConsistencyCheckAction extends SimpleCommand { private final DialogService dialogService; private final StateManager stateManager; private final GuiPreferences preferences; - private final CliPreferences cliPreferences; private final BibEntryTypesManager entryTypesManager; private final UiTaskExecutor taskExecutor; @@ -38,14 +36,12 @@ public ConsistencyCheckAction(Supplier tabSupplier, DialogService dialogService, StateManager stateManager, GuiPreferences preferences, - CliPreferences cliPreferences, BibEntryTypesManager entryTypesManager, UiTaskExecutor taskExecutor) { this.tabSupplier = tabSupplier; this.dialogService = dialogService; this.stateManager = stateManager; this.preferences = preferences; - this.cliPreferences = cliPreferences; this.entryTypesManager = entryTypesManager; this.taskExecutor = taskExecutor; @@ -66,7 +62,7 @@ public BibliographyConsistencyCheck.Result call() { BibDatabaseContext bibContext = databaseContext.get(); - BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(cliPreferences, entryTypesManager); + BibliographyConsistencyCheck consistencyCheck = new BibliographyConsistencyCheck(preferences, entryTypesManager); return consistencyCheck.check(bibContext, (count, total) -> UiTaskExecutor.runInJavaFXThread(() -> { updateProgress(count, total); diff --git a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java index 164204bf5ea..44f375e59c7 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/JabRefFrame.java @@ -89,7 +89,6 @@ private enum PanelMode { MAIN_TABLE, MAIN_TABLE_AND_ENTRY_EDITOR } private static final Logger LOGGER = LoggerFactory.getLogger(JabRefFrame.class); private final GuiPreferences preferences; - private final CliPreferences cliPreferences; private final AiService aiService; private final GlobalSearchBar globalSearchBar; @@ -124,7 +123,6 @@ public JabRefFrame(Stage mainStage, DialogService dialogService, FileUpdateMonitor fileUpdateMonitor, GuiPreferences preferences, - CliPreferences cliPreferences, GitHandlerRegistry gitHandlerRegistry, AiService aiService, StateManager stateManager, @@ -136,7 +134,6 @@ public JabRefFrame(Stage mainStage, this.dialogService = dialogService; this.fileUpdateMonitor = fileUpdateMonitor; this.preferences = preferences; - this.cliPreferences = cliPreferences; this.gitHandlerRegistry = gitHandlerRegistry; this.aiService = aiService; this.stateManager = stateManager; @@ -244,7 +241,6 @@ private void initLayout() { sidePane, pushToApplicationCommand, preferences, - cliPreferences, stateManager, fileUpdateMonitor, taskExecutor, diff --git a/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java b/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java index 5d3c1b780a1..74647301bc6 100644 --- a/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java +++ b/jabgui/src/main/java/org/jabref/gui/frame/MainMenu.java @@ -88,7 +88,6 @@ import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.logic.l10n.Localization; import org.jabref.logic.os.OS; -import org.jabref.logic.preferences.CliPreferences; import org.jabref.logic.util.TaskExecutor; import org.jabref.model.entry.BibEntryTypesManager; import org.jabref.model.entry.field.SpecialField; @@ -102,7 +101,6 @@ public class MainMenu extends MenuBar { private final SidePane sidePane; private final GuiPushToApplicationCommand pushToApplicationCommand; private final GuiPreferences preferences; - private final CliPreferences cliPreferences; private final StateManager stateManager; private final FileUpdateMonitor fileUpdateMonitor; private final TaskExecutor taskExecutor; @@ -121,7 +119,6 @@ public MainMenu(JabRefFrame frame, SidePane sidePane, GuiPushToApplicationCommand pushToApplicationCommand, GuiPreferences preferences, - CliPreferences cliPreferences, StateManager stateManager, FileUpdateMonitor fileUpdateMonitor, TaskExecutor taskExecutor, @@ -139,7 +136,6 @@ public MainMenu(JabRefFrame frame, this.sidePane = sidePane; this.pushToApplicationCommand = pushToApplicationCommand; this.preferences = preferences; - this.cliPreferences = cliPreferences; this.stateManager = stateManager; this.fileUpdateMonitor = fileUpdateMonitor; this.taskExecutor = taskExecutor; @@ -278,7 +274,7 @@ private void createMenu() { factory.createMenuItem(StandardActions.FIND_DUPLICATES, new DuplicateSearch(frame::getCurrentLibraryTab, dialogService, stateManager, preferences, entryTypesManager, taskExecutor)), factory.createMenuItem(StandardActions.MERGE_ENTRIES, new MergeEntriesAction(dialogService, stateManager, undoManager, preferences)), factory.createMenuItem(StandardActions.CHECK_INTEGRITY, new IntegrityCheckAction(frame::getCurrentLibraryTab, preferences, dialogService, stateManager, (UiTaskExecutor) taskExecutor, abbreviationRepository)), - factory.createMenuItem(StandardActions.CHECK_CONSISTENCY, new ConsistencyCheckAction(frame::getCurrentLibraryTab, dialogService, stateManager, preferences, cliPreferences, entryTypesManager, (UiTaskExecutor) taskExecutor)), + factory.createMenuItem(StandardActions.CHECK_CONSISTENCY, new ConsistencyCheckAction(frame::getCurrentLibraryTab, dialogService, stateManager, preferences, entryTypesManager, (UiTaskExecutor) taskExecutor)), factory.createMenuItem(StandardActions.CLEANUP_ENTRIES, new CleanupAction(frame::getCurrentLibraryTab, preferences, dialogService, stateManager, taskExecutor, undoManager)), new SeparatorMenuItem(), diff --git a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java index 1f942fa843a..afd2f68115a 100644 --- a/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java @@ -1220,6 +1220,12 @@ public JournalAbbreviationPreferences getJournalAbbreviationPreferences() { //************************************************************************************************************* // CustomEntryTypes //************************************************************************************************************* + public BibEntryTypesManager getCustomEntryTypesRepository() { + BibEntryTypesManager bibEntryTypesManager = new BibEntryTypesManager(); + EnumSet.allOf(BibDatabaseMode.class).forEach(mode -> + bibEntryTypesManager.addCustomOrModifiedTypes(getBibEntryTypes(mode), mode)); + return bibEntryTypesManager; + } @Override public BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager) { From 7125b76dea9deeaabed475c89e570366373461d0 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Wed, 10 Sep 2025 09:43:11 +0200 Subject: [PATCH 25/34] fix: `PreferencesMigrations.runMigrations(preferences);` now accepts one parameter, the `BibEntryTypesManager` is retrieved later --- jabgui/src/main/java/org/jabref/Launcher.java | 3 +-- jabgui/src/main/java/org/jabref/gui/JabRefGUI.java | 4 +--- .../java/org/jabref/migrations/PreferencesMigrations.java | 5 +++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/Launcher.java b/jabgui/src/main/java/org/jabref/Launcher.java index 9d579122382..2d8e9c2ba57 100644 --- a/jabgui/src/main/java/org/jabref/Launcher.java +++ b/jabgui/src/main/java/org/jabref/Launcher.java @@ -27,7 +27,6 @@ import org.jabref.logic.util.BuildInfo; import org.jabref.logic.util.Directories; import org.jabref.migrations.PreferencesMigrations; -import org.jabref.model.entry.BibEntryTypesManager; import com.airhacks.afterburner.injection.Injector; import org.slf4j.Logger; @@ -88,7 +87,7 @@ public static void main(String[] args) { systemExit(); } - PreferencesMigrations.runMigrations(preferences, preferences.getCustomEntryTypesRepository()); + PreferencesMigrations.runMigrations(preferences); PostgreServer postgreServer = new PostgreServer(); Injector.setModelOrService(PostgreServer.class, postgreServer); diff --git a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java index 5fcce7eeefe..b285940af72 100644 --- a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java +++ b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java @@ -85,8 +85,6 @@ public class JabRefGUI extends Application { private static ClipBoardManager clipBoardManager; private static DialogService dialogService; private static JabRefFrame mainFrame; - - private static BibEntryTypesManager bibEntryTypesManager; private static GitHandlerRegistry gitHandlerRegistry; private static RemoteListenerServerManager remoteListenerServerManager; @@ -165,7 +163,7 @@ public void initialize() { gitHandlerRegistry = new GitHandlerRegistry(); Injector.setModelOrService(GitHandlerRegistry.class, gitHandlerRegistry); - BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(bibEntryTypesManager); + BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(); JournalAbbreviationRepository journalAbbreviationRepository = JournalAbbreviationLoader.loadRepository(preferences.getJournalAbbreviationPreferences()); Injector.setModelOrService(BibEntryTypesManager.class, entryTypesManager); diff --git a/jabgui/src/main/java/org/jabref/migrations/PreferencesMigrations.java b/jabgui/src/main/java/org/jabref/migrations/PreferencesMigrations.java index 4fea7319d12..348a722fa0d 100644 --- a/jabgui/src/main/java/org/jabref/migrations/PreferencesMigrations.java +++ b/jabgui/src/main/java/org/jabref/migrations/PreferencesMigrations.java @@ -48,15 +48,16 @@ private PreferencesMigrations() { /** * Perform checks and changes for users with a preference set from an older JabRef version. */ - public static void runMigrations(JabRefGuiPreferences preferences, BibEntryTypesManager bibEntryTypesManager) { + public static void runMigrations(JabRefGuiPreferences preferences) { Preferences mainPrefsNode = Preferences.userRoot().node("/org/jabref"); + BibEntryTypesManager bibEntryTypesManager = preferences.getCustomEntryTypesRepository(); upgradePrefsToOrgJabRef(mainPrefsNode); upgradeSortOrder(preferences); upgradeFaultyEncodingStrings(preferences); upgradeLabelPatternToCitationKeyPattern(preferences, mainPrefsNode); upgradeImportFileAndDirePatterns(preferences, mainPrefsNode); - upgradeStoredBibEntryTypes(preferences, mainPrefsNode, preferences.getCustomEntryTypesRepository(bibEntryTypesManager)); + upgradeStoredBibEntryTypes(preferences, mainPrefsNode, bibEntryTypesManager); upgradeKeyBindingsToJavaFX(preferences); addCrossRefRelatedFieldsForAutoComplete(preferences); upgradePreviewStyle(preferences); From e580f9aa09985688635fed5f8c75bddf2472c730 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Wed, 10 Sep 2025 09:48:03 +0200 Subject: [PATCH 26/34] fix: passing null to `getCustomEntryTypesRepository` to get the first instance --- jabgui/src/main/java/org/jabref/gui/JabRefGUI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java index b285940af72..642260a1b10 100644 --- a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java +++ b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java @@ -163,7 +163,7 @@ public void initialize() { gitHandlerRegistry = new GitHandlerRegistry(); Injector.setModelOrService(GitHandlerRegistry.class, gitHandlerRegistry); - BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(); + BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(null); JournalAbbreviationRepository journalAbbreviationRepository = JournalAbbreviationLoader.loadRepository(preferences.getJournalAbbreviationPreferences()); Injector.setModelOrService(BibEntryTypesManager.class, entryTypesManager); From d3bfbd886563360af0bf1573f50bc6271cc7275c Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Wed, 10 Sep 2025 09:57:41 +0200 Subject: [PATCH 27/34] fix: adding no-parameter `getCustomEntryRepository` method to `CliPreferences` interface --- jabgui/src/main/java/org/jabref/gui/JabRefGUI.java | 2 +- .../main/java/org/jabref/logic/preferences/CliPreferences.java | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java index 642260a1b10..7cb34119d3a 100644 --- a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java +++ b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java @@ -163,7 +163,7 @@ public void initialize() { gitHandlerRegistry = new GitHandlerRegistry(); Injector.setModelOrService(GitHandlerRegistry.class, gitHandlerRegistry); - BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(null); + BibEntryTypesManager entryTypesManager = preferences.getCustomEntryRepository(); JournalAbbreviationRepository journalAbbreviationRepository = JournalAbbreviationLoader.loadRepository(preferences.getJournalAbbreviationPreferences()); Injector.setModelOrService(BibEntryTypesManager.class, entryTypesManager); diff --git a/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java b/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java index a56cc982988..44b455f0a02 100644 --- a/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java @@ -71,6 +71,8 @@ public interface CliPreferences { BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager); + BibEntryTypesManager getCustomEntryRepository(); + void storeCustomEntryTypesRepository(BibEntryTypesManager entryTypesManager); CleanupPreferences getCleanupPreferences(); From 6ed613af74db4a26dc6462bdac7c414c4b614e1c Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Wed, 10 Sep 2025 10:02:38 +0200 Subject: [PATCH 28/34] fix: typo --- jabgui/src/main/java/org/jabref/gui/JabRefGUI.java | 2 +- .../main/java/org/jabref/logic/preferences/CliPreferences.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java index 7cb34119d3a..b285940af72 100644 --- a/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java +++ b/jabgui/src/main/java/org/jabref/gui/JabRefGUI.java @@ -163,7 +163,7 @@ public void initialize() { gitHandlerRegistry = new GitHandlerRegistry(); Injector.setModelOrService(GitHandlerRegistry.class, gitHandlerRegistry); - BibEntryTypesManager entryTypesManager = preferences.getCustomEntryRepository(); + BibEntryTypesManager entryTypesManager = preferences.getCustomEntryTypesRepository(); JournalAbbreviationRepository journalAbbreviationRepository = JournalAbbreviationLoader.loadRepository(preferences.getJournalAbbreviationPreferences()); Injector.setModelOrService(BibEntryTypesManager.class, entryTypesManager); diff --git a/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java b/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java index 44b455f0a02..954bd0040bd 100644 --- a/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java +++ b/jablib/src/main/java/org/jabref/logic/preferences/CliPreferences.java @@ -71,7 +71,7 @@ public interface CliPreferences { BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager); - BibEntryTypesManager getCustomEntryRepository(); + BibEntryTypesManager getCustomEntryTypesRepository(); void storeCustomEntryTypesRepository(BibEntryTypesManager entryTypesManager); From 6cc90e2e2d7294a6d62a96954c6f2f4442dc4f6d Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Wed, 10 Sep 2025 10:08:39 +0200 Subject: [PATCH 29/34] fix: adding missing method to `BibliographyConsistencyCheckTest` --- .../consistency/BibliographyConsistencyCheckTest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckTest.java b/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckTest.java index ede660bdf33..ce497c4f477 100644 --- a/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckTest.java +++ b/jablib/src/test/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheckTest.java @@ -70,6 +70,11 @@ public void deleteKey(String key) throws IllegalArgumentException { } + @Override + public BibEntryTypesManager getCustomEntryTypesRepository() { + return bibEntryTypesManager; + } + @Override public BibEntryTypesManager getCustomEntryTypesRepository(BibEntryTypesManager bibEntryTypesManager) { return bibEntryTypesManager; From f1adef03822a39e36908612da2a47608bc1e9cd0 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Wed, 10 Sep 2025 15:41:36 +0200 Subject: [PATCH 30/34] fix: including previously excluded entries that have consistent (missing) fields (example "- - -"); --- .../BibliographyConsistencyCheck.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index 43adff52a94..80381ba5e83 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -1,7 +1,6 @@ package org.jabref.logic.quality.consistency; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -77,16 +76,11 @@ private static Set filterExcludedFields(Collection fields) { @VisibleForTesting List filterAndSortEntriesWithFieldDifferences(Set entries, Set differingFields, Set requiredFields) { return entries.stream() - .filter(entry -> - // This removes entries that have all differing fields set (could be confusing to the user) - !Collections.disjoint(entry.getFields(), differingFields) - // This ensures that all entries with missing required fields are included - || !entry.getFields().containsAll(requiredFields)) - .sorted(new FieldComparatorStack<>(List.of( - new BibEntryByCitationKeyComparator(), - new BibEntryByFieldsComparator() - ))) - .toList(); + .sorted(new FieldComparatorStack<>(List.of( + new BibEntryByCitationKeyComparator(), + new BibEntryByFieldsComparator() + ))) + .toList(); } public record Result(Map entryTypeToResultMap) { @@ -139,6 +133,7 @@ public Result check(BibDatabaseContext bibContext, BiConsumer Optional typeDefOpt = entryTypeDefinitions.stream() .filter(def -> def.getType().equals(entryType)) .findFirst(); + boolean isUnknownTypeInMode = typeDefOpt.isEmpty(); Set requiredFields = typeDefOpt.map(typeDef -> typeDef.getRequiredFields().stream() @@ -146,14 +141,19 @@ public Result check(BibDatabaseContext bibContext, BiConsumer .collect(Collectors.toSet()) ).orElse(Set.of()); - Set entries = entryTypeToEntriesMap.get(entryType); - assert entries != null; - assert entries.size() != 1; // Either there is no entry with different fields or more than one - if (entries == null || entries.size() <= 1 || differingFields.isEmpty()) { + Set entriesSet = entryTypeToEntriesMap.get(entryType); + assert entriesSet != null; + assert entriesSet.size() != 1; + if (entriesSet == null || entriesSet.size() <= 1 || differingFields.isEmpty()) { continue; } - List sortedEntries = filterAndSortEntriesWithFieldDifferences(entries, differingFields, requiredFields); + List sortedEntries = filterAndSortEntriesWithFieldDifferences(entriesSet, differingFields, requiredFields); + if (isUnknownTypeInMode) { + sortedEntries = sortedEntries.stream() + .filter(e -> e.getFields().stream().anyMatch(differingFields::contains)) + .toList(); + } if (!sortedEntries.isEmpty()) { resultMap.put(entryType, new EntryTypeResult(differingFields, sortedEntries)); } From 6cea8571240766583d50252aaffa25d9a2c9cf68 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Wed, 10 Sep 2025 15:57:43 +0200 Subject: [PATCH 31/34] fix: typo --- .../BibliographyConsistencyCheck.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index 80381ba5e83..43adff52a94 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -1,6 +1,7 @@ package org.jabref.logic.quality.consistency; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -76,11 +77,16 @@ private static Set filterExcludedFields(Collection fields) { @VisibleForTesting List filterAndSortEntriesWithFieldDifferences(Set entries, Set differingFields, Set requiredFields) { return entries.stream() - .sorted(new FieldComparatorStack<>(List.of( - new BibEntryByCitationKeyComparator(), - new BibEntryByFieldsComparator() - ))) - .toList(); + .filter(entry -> + // This removes entries that have all differing fields set (could be confusing to the user) + !Collections.disjoint(entry.getFields(), differingFields) + // This ensures that all entries with missing required fields are included + || !entry.getFields().containsAll(requiredFields)) + .sorted(new FieldComparatorStack<>(List.of( + new BibEntryByCitationKeyComparator(), + new BibEntryByFieldsComparator() + ))) + .toList(); } public record Result(Map entryTypeToResultMap) { @@ -133,7 +139,6 @@ public Result check(BibDatabaseContext bibContext, BiConsumer Optional typeDefOpt = entryTypeDefinitions.stream() .filter(def -> def.getType().equals(entryType)) .findFirst(); - boolean isUnknownTypeInMode = typeDefOpt.isEmpty(); Set requiredFields = typeDefOpt.map(typeDef -> typeDef.getRequiredFields().stream() @@ -141,19 +146,14 @@ public Result check(BibDatabaseContext bibContext, BiConsumer .collect(Collectors.toSet()) ).orElse(Set.of()); - Set entriesSet = entryTypeToEntriesMap.get(entryType); - assert entriesSet != null; - assert entriesSet.size() != 1; - if (entriesSet == null || entriesSet.size() <= 1 || differingFields.isEmpty()) { + Set entries = entryTypeToEntriesMap.get(entryType); + assert entries != null; + assert entries.size() != 1; // Either there is no entry with different fields or more than one + if (entries == null || entries.size() <= 1 || differingFields.isEmpty()) { continue; } - List sortedEntries = filterAndSortEntriesWithFieldDifferences(entriesSet, differingFields, requiredFields); - if (isUnknownTypeInMode) { - sortedEntries = sortedEntries.stream() - .filter(e -> e.getFields().stream().anyMatch(differingFields::contains)) - .toList(); - } + List sortedEntries = filterAndSortEntriesWithFieldDifferences(entries, differingFields, requiredFields); if (!sortedEntries.isEmpty()) { resultMap.put(entryType, new EntryTypeResult(differingFields, sortedEntries)); } From c899efa4b3ff306ce40db38ea090d48dc5d8bb1f Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Thu, 11 Sep 2025 09:12:25 +0200 Subject: [PATCH 32/34] feat: now accepting entries that present consistent (eg. all absent) fields. --- .../quality/consistency/BibliographyConsistencyCheck.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index 43adff52a94..a075b8539e3 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -1,7 +1,6 @@ package org.jabref.logic.quality.consistency; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -77,11 +76,6 @@ private static Set filterExcludedFields(Collection fields) { @VisibleForTesting List filterAndSortEntriesWithFieldDifferences(Set entries, Set differingFields, Set requiredFields) { return entries.stream() - .filter(entry -> - // This removes entries that have all differing fields set (could be confusing to the user) - !Collections.disjoint(entry.getFields(), differingFields) - // This ensures that all entries with missing required fields are included - || !entry.getFields().containsAll(requiredFields)) .sorted(new FieldComparatorStack<>(List.of( new BibEntryByCitationKeyComparator(), new BibEntryByFieldsComparator() From 3e6c4b1ebad378e723551240c567a6c58404ec68 Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Thu, 11 Sep 2025 10:45:50 +0200 Subject: [PATCH 33/34] fix: when filtering entries, checking if the entry has a differing field set or a missing field --- .../quality/consistency/BibliographyConsistencyCheck.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index a075b8539e3..c91afaac4d4 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -76,6 +76,11 @@ private static Set filterExcludedFields(Collection fields) { @VisibleForTesting List filterAndSortEntriesWithFieldDifferences(Set entries, Set differingFields, Set requiredFields) { return entries.stream() + .filter(entry -> { + boolean hasOneDifferingFieldSet = differingFields.stream().anyMatch(entry::hasField); + boolean hasOneMissingField = requiredFields.stream().anyMatch(field -> !entry.hasField(field)); + return (hasOneMissingField || hasOneDifferingFieldSet); + }) .sorted(new FieldComparatorStack<>(List.of( new BibEntryByCitationKeyComparator(), new BibEntryByFieldsComparator() From d681cd8162bb6217f17602eba636c1d91be6326e Mon Sep 17 00:00:00 2001 From: dcarpentiero Date: Thu, 11 Sep 2025 11:05:58 +0200 Subject: [PATCH 34/34] fix: when filtering entries, checking if the entry has a differing field set or a missing field --- .../consistency/BibliographyConsistencyCheck.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java index c91afaac4d4..cedc2977a6d 100644 --- a/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java +++ b/jablib/src/main/java/org/jabref/logic/quality/consistency/BibliographyConsistencyCheck.java @@ -77,9 +77,15 @@ private static Set filterExcludedFields(Collection fields) { List filterAndSortEntriesWithFieldDifferences(Set entries, Set differingFields, Set requiredFields) { return entries.stream() .filter(entry -> { - boolean hasOneDifferingFieldSet = differingFields.stream().anyMatch(entry::hasField); - boolean hasOneMissingField = requiredFields.stream().anyMatch(field -> !entry.hasField(field)); - return (hasOneMissingField || hasOneDifferingFieldSet); + // Include entries that are missing any required fields + boolean missingRequiredField = requiredFields.stream().anyMatch(field -> !entry.hasField(field)); + + // Include entries that have any of the differing fields + boolean hasDifferingField = differingFields.stream().anyMatch(entry::hasField); + + // Include all entries when there are differing fields (to show inconsistencies) + // OR when missing required fields + return !differingFields.isEmpty() || missingRequiredField; }) .sorted(new FieldComparatorStack<>(List.of( new BibEntryByCitationKeyComparator(),