Skip to content

Commit

Permalink
First draft
Browse files Browse the repository at this point in the history
  • Loading branch information
stefan-kolb committed Dec 10, 2015
1 parent be986eb commit 92ebf7e
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
import net.sf.jabref.model.entry.BibtexEntryTypes;
import net.sf.jabref.model.entry.EntryType;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Collectors;

Expand All @@ -33,20 +35,37 @@ public static BibDatabaseType inferType(Collection<BibEntry> entries) {
final List<EntryType> entryTypes = getEntryTypes(entries);

// type-based check
if(entryTypes.stream().anyMatch(isIncludedIn(exclusiveBiblatex))) {
if (entryTypes.stream().anyMatch(isIncludedIn(exclusiveBiblatex))) {
return BibDatabaseType.BIBLATEX;
} else if(entryTypes.stream().allMatch(isIncludedIn(bibtex))) {
} else if (entryTypes.stream().allMatch(isIncludedIn(bibtex))) {
// field-based check
if(entries.stream().anyMatch(hasBiblatexFields())) {
return BibDatabaseType.BIBLATEX;
}
}
return BibDatabaseType.BIBTEX;
}

private static List<String> exclusiveBiblatexFields(EntryType type) {
final Optional<EntryType> biblatexType = BibLatexEntryTypes.getType(type.getName());
final Optional<EntryType> bibtexType = BibtexEntryTypes.getType(type.getName());

if (!biblatexType.isPresent() || !bibtexType.isPresent()) {
return new ArrayList<>(0);
}

final List<String> bibtexFields = bibtexType.get().getAllFields();
final List<String> biblatexFields = biblatexType.get().getAllFields();

return biblatexFields.stream().filter(f -> !bibtexFields.contains(f)).collect(Collectors.toList());
}

private static List<EntryType> getEntryTypes(Collection<BibEntry> collection) {
return collection.stream().map(BibEntry::getType).collect(Collectors.toList());
}

private static List<EntryType> filterEntryTypes(List<EntryType> types, Predicate<EntryType> predicate) {
return types.stream().filter(predicate).collect(Collectors.<EntryType>toList());
return types.stream().filter(predicate).collect(Collectors.toList());
}

private static Predicate<EntryType> isNotIncludedIn(List<EntryType> collection) {
Expand All @@ -56,4 +75,9 @@ private static Predicate<EntryType> isNotIncludedIn(List<EntryType> collection)
private static Predicate<EntryType> isIncludedIn(List<EntryType> collection) {
return entry -> collection.stream().anyMatch(c -> c.getName().equalsIgnoreCase(entry.getName()));
}

private static Predicate<BibEntry> hasBiblatexFields() {
return e -> e.getFieldNames().stream()
.anyMatch(name -> exclusiveBiblatexFields(e.getType()).stream().anyMatch(c -> c.equalsIgnoreCase(name)));
}
}
1 change: 0 additions & 1 deletion src/main/java/net/sf/jabref/model/entry/BibEntry.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@
import net.sf.jabref.model.database.BibDatabase;

public class BibEntry {

private static final Log LOGGER = LogFactory.getLog(BibEntry.class);

public static final String TYPE_HEADER = "entrytype";
Expand Down

0 comments on commit 92ebf7e

Please sign in to comment.