package org.jabref.logic.integrity; import java.util.ArrayList; import java.util.List; import java.util.Objects; import org.jabref.logic.bibtexkeypattern.BibtexKeyPatternPreferences; import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.FieldName; import org.jabref.model.metadata.FileDirectoryPreferences; public class IntegrityCheck { private final BibDatabaseContext bibDatabaseContext; private final FileDirectoryPreferences fileDirectoryPreferences; private final BibtexKeyPatternPreferences bibtexKeyPatternPreferences; private final JournalAbbreviationRepository journalAbbreviationRepository; public IntegrityCheck(BibDatabaseContext bibDatabaseContext, FileDirectoryPreferences fileDirectoryPreferences, BibtexKeyPatternPreferences bibtexKeyPatternPreferences, JournalAbbreviationRepository journalAbbreviationRepository ) { this.bibDatabaseContext = Objects.requireNonNull(bibDatabaseContext); this.fileDirectoryPreferences = Objects.requireNonNull(fileDirectoryPreferences); this.bibtexKeyPatternPreferences = Objects.requireNonNull(bibtexKeyPatternPreferences); this.journalAbbreviationRepository = Objects.requireNonNull(journalAbbreviationRepository); } public List<IntegrityMessage> checkBibtexDatabase() { List<IntegrityMessage> result = new ArrayList<>(); for (BibEntry entry : bibDatabaseContext.getDatabase().getEntries()) { result.addAll(checkBibtexEntry(entry)); } return result; } private List<IntegrityMessage> checkBibtexEntry(BibEntry entry) { List<IntegrityMessage> result = new ArrayList<>(); if (entry == null) { return result; } for (FieldChecker checker : FieldCheckers.getAll(bibDatabaseContext, fileDirectoryPreferences)) { result.addAll(checker.check(entry)); } if (!bibDatabaseContext.isBiblatexMode()) { // BibTeX only checkers result.addAll(new ASCIICharacterChecker().check(entry)); result.addAll(new NoBibtexFieldChecker().check(entry)); result.addAll(new BibTeXEntryTypeChecker().check(entry)); result.addAll(new JournalInAbbreviationListChecker(FieldName.JOURNAL, journalAbbreviationRepository).check(entry)); } else { result.addAll(new JournalInAbbreviationListChecker(FieldName.JOURNALTITLE, journalAbbreviationRepository).check(entry)); } result.addAll(new BibtexKeyChecker().check(entry)); result.addAll(new TypeChecker().check(entry)); result.addAll(new BibStringChecker().check(entry)); result.addAll(new HTMLCharacterChecker().check(entry)); result.addAll(new EntryLinkChecker(bibDatabaseContext.getDatabase()).check(entry)); result.addAll(new BibtexkeyDeviationChecker(bibDatabaseContext, bibtexKeyPatternPreferences).check(entry)); return result; } @FunctionalInterface public interface Checker { List<IntegrityMessage> check(BibEntry entry); } }