package org.jabref.model.database;
import java.util.Locale;
import java.util.stream.Stream;
import org.jabref.model.EntryTypes;
import org.jabref.model.entry.BibEntry;
public class BibDatabaseModeDetection {
private BibDatabaseModeDetection() {
}
/**
* Tries to infer the database type by examining a BibDatabase database.
*
* All checks are based on the case-insensitive comparison of entry tag names.
* Only standard BibTex and Biblatex entry types are considered in the decision process.
*
* 1. Check if any of the entries is a type exclusive to Biblatex
* 2. Check if any exclusive Biblatex fields are present
* 3. Otherwise return BibTex
*
* @param database a BibDatabase database
* @return the inferred database type
*/
public static BibDatabaseMode inferMode(BibDatabase database) {
final Stream<String> entryTypes = database.getEntries().stream().map(BibEntry::getType);
// type-based check
if (entryTypes.anyMatch(type -> EntryTypes.isExclusiveBiblatex(type.toLowerCase(Locale.ENGLISH)))) {
return BibDatabaseMode.BIBLATEX;
} else {
// field-based check
return BibDatabaseMode.BIBTEX;
}
}
}