package org.jabref.logic.integrity;
import java.util.List;
import java.util.stream.Collectors;
import org.jabref.model.database.BibDatabaseContext;
import org.jabref.model.entry.FieldName;
import org.jabref.model.entry.InternalBibtexFields;
import org.jabref.model.metadata.FileDirectoryPreferences;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
public class FieldCheckers {
private FieldCheckers() {
}
static List<FieldChecker> getAll(BibDatabaseContext databaseContext, FileDirectoryPreferences fileDirectoryPreferences) {
return getAllMap(databaseContext, fileDirectoryPreferences)
.entries().stream()
.map(pair -> new FieldChecker(pair.getKey(), pair.getValue()))
.collect(Collectors.toList());
}
private static Multimap<String, ValueChecker> getAllMap(BibDatabaseContext databaseContext, FileDirectoryPreferences fileDirectoryPreferences) {
ArrayListMultimap<String, ValueChecker> fieldCheckers = ArrayListMultimap.create(50, 10);
for (String field : InternalBibtexFields.getJournalNameFields()) {
fieldCheckers.put(field, new AbbreviationChecker());
}
for (String field : InternalBibtexFields.getBookNameFields()) {
fieldCheckers.put(field, new AbbreviationChecker());
}
for (String field : InternalBibtexFields.getPersonNameFields()) {
fieldCheckers.put(field, new PersonNamesChecker());
}
fieldCheckers.put(FieldName.BOOKTITLE, new BooktitleChecker());
fieldCheckers.put(FieldName.TITLE, new BracketChecker());
fieldCheckers.put(FieldName.TITLE, new TitleChecker(databaseContext));
fieldCheckers.put(FieldName.DOI, new DOIValidityChecker());
fieldCheckers.put(FieldName.EDITION, new EditionChecker(databaseContext));
fieldCheckers.put(FieldName.FILE, new FileChecker(databaseContext, fileDirectoryPreferences));
fieldCheckers.put(FieldName.HOWPUBLISHED, new HowPublishedChecker(databaseContext));
fieldCheckers.put(FieldName.ISBN, new ISBNChecker());
fieldCheckers.put(FieldName.ISSN, new ISSNChecker());
fieldCheckers.put(FieldName.MONTH, new MonthChecker(databaseContext));
fieldCheckers.put(FieldName.NOTE, new NoteChecker(databaseContext));
fieldCheckers.put(FieldName.PAGES, new PagesChecker(databaseContext));
fieldCheckers.put(FieldName.URL, new UrlChecker());
fieldCheckers.put(FieldName.YEAR, new YearChecker());
return fieldCheckers;
}
}