package org.jabref.logic.auxparser;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.jabref.logic.l10n.Localization;
import org.jabref.model.database.BibDatabase;
import org.jabref.model.entry.BibtexString;
public class AuxParserResult {
private final BibDatabase masterDatabase;
private final Set<String> uniqueKeys = new HashSet<>();
private final List<String> unresolvedKeys = new ArrayList<>();
private final BibDatabase auxDatabase = new BibDatabase();
private int nestedAuxCount;
private int crossRefEntriesCount;
private int insertedStrings;
public AuxParserResult(BibDatabase masterDatabase) {
this.masterDatabase = masterDatabase;
}
public BibDatabase getGeneratedBibDatabase() {
return auxDatabase;
}
public List<String> getUnresolvedKeys() {
return unresolvedKeys;
}
public int getFoundKeysInAux() {
return uniqueKeys.size();
}
public int getResolvedKeysCount() {
return auxDatabase.getEntryCount() - crossRefEntriesCount;
}
public int getUnresolvedKeysCount() {
return unresolvedKeys.size();
}
/**
* Query the number of extra entries pulled in due to crossrefs from other entries.
*
* @return The number of additional entries pulled in due to crossref
*/
public int getCrossRefEntriesCount() {
return crossRefEntriesCount;
}
public void increaseCrossRefEntriesCounter() {
crossRefEntriesCount++;
}
public void increaseNestedAuxFilesCounter() {
nestedAuxCount++;
}
public void insertStrings(Collection<BibtexString> usedStrings) {
for (BibtexString string : usedStrings) {
auxDatabase.addString(string);
insertedStrings++;
}
}
/**
* Prints parsing statistics
*
* @param includeMissingEntries
* @return
*/
public String getInformation(boolean includeMissingEntries) {
StringBuilder result = new StringBuilder();
result.append(Localization.lang("keys in library")).append(' ').append(masterDatabase.getEntryCount()).append('\n')
.append(Localization.lang("found in AUX file")).append(' ').append(getFoundKeysInAux()).append('\n')
.append(Localization.lang("resolved")).append(' ').append(getResolvedKeysCount()).append('\n')
.append(Localization.lang("not found")).append(' ').append(getUnresolvedKeysCount()).append('\n')
.append(Localization.lang("crossreferenced entries included")).append(' ')
.append(crossRefEntriesCount).append(Localization.lang("strings included")).append(' ')
.append(insertedStrings).append('\n');
if (includeMissingEntries && (getUnresolvedKeysCount() > 0)) {
for (String entry : unresolvedKeys) {
result.append(entry).append('\n');
}
}
if (nestedAuxCount > 0) {
result.append(Localization.lang("nested_AUX_files")).append(' ').append(nestedAuxCount);
}
return result.toString();
}
public Set<String> getUniqueKeys() {
return uniqueKeys;
}
}