package org.jabref.logic.integrity; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Optional; import org.jabref.logic.bibtexkeypattern.BibtexKeyPatternPreferences; import org.jabref.logic.bibtexkeypattern.BibtexKeyPatternUtil; import org.jabref.logic.integrity.IntegrityCheck.Checker; import org.jabref.logic.l10n.Localization; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; public class BibtexkeyDeviationChecker implements Checker { private final BibDatabaseContext bibDatabaseContext; private final BibtexKeyPatternPreferences bibtexKeyPatternPreferences; public BibtexkeyDeviationChecker(BibDatabaseContext bibDatabaseContext, BibtexKeyPatternPreferences bibtexKeyPatternPreferences) { this.bibDatabaseContext = Objects.requireNonNull(bibDatabaseContext); this.bibtexKeyPatternPreferences = Objects.requireNonNull(bibtexKeyPatternPreferences); } @Override public List<IntegrityMessage> check(BibEntry entry) { Optional<String> valuekey = entry.getCiteKeyOptional(); if (!valuekey.isPresent()) { return Collections.emptyList(); } String key = valuekey.get(); // generate new key String generatedKey = BibtexKeyPatternUtil.makeLabel(bibDatabaseContext, entry, bibtexKeyPatternPreferences); if (!Objects.equals(key, generatedKey)) { return Collections.singletonList(new IntegrityMessage( Localization.lang("BibTeX key deviates from generated key"), entry, BibEntry.KEY_FIELD)); } return Collections.emptyList(); } }