Skip to content

Commit

Permalink
Rename CrossingKeys to TexBibEntriesResolver and fix minor issues
Browse files Browse the repository at this point in the history
  • Loading branch information
davidemdot committed Jun 18, 2019
1 parent b46aeb4 commit 2037295
Show file tree
Hide file tree
Showing 7 changed files with 208 additions and 238 deletions.
Expand Up @@ -6,34 +6,32 @@
import org.jabref.model.database.BibDatabase;
import org.jabref.model.entry.BibEntry;
import org.jabref.model.entry.FieldName;
import org.jabref.model.texparser.CrossingKeysResult;
import org.jabref.model.texparser.TexBibEntriesResolverResult;
import org.jabref.model.texparser.TexParserResult;

public class CrossingKeys {
public class TexBibEntriesResolver {

private final CrossingKeysResult result;
private final BibDatabase masterDatabase;

public CrossingKeys(TexParserResult texParserResult, BibDatabase masterDatabase) {
this.result = new CrossingKeysResult(texParserResult, masterDatabase);
}

public CrossingKeysResult getResult() {
return result;
public TexBibEntriesResolver(BibDatabase masterDatabase) {
this.masterDatabase = masterDatabase;
}

/**
* Look for an equivalent BibTeX entry within the reference database for all keys inside of the TEX files.
* Look for BibTeX entries within the reference database for all keys inside of the TEX files.
* Insert these data in the list of new entries.
*/
public CrossingKeysResult resolveKeys() {
public TexBibEntriesResolverResult resolveKeys(TexParserResult texParserResult) {
TexBibEntriesResolverResult result = new TexBibEntriesResolverResult(texParserResult);
Set<String> keySet = result.getCitationsKeySet();

for (String key : keySet) {
if (!result.checkEntryNewDatabase(key)) {
Optional<BibEntry> entry = result.getEntryMasterDatabase(key);
Optional<BibEntry> entry = masterDatabase.getEntryByKey(key);

if (entry.isPresent()) {
result.insertEntry(entry.get());
resolveCrossReferences(entry.get());
resolveCrossReferences(result, entry.get());
} else {
result.addUnresolvedKey(key);
}
Expand All @@ -44,12 +42,12 @@ public CrossingKeysResult resolveKeys() {
}

/**
* Find cross references for inserting into the new database.
* Find cross references for inserting into the list of new entries.
*/
private void resolveCrossReferences(BibEntry entry) {
private void resolveCrossReferences(TexBibEntriesResolverResult result, BibEntry entry) {
entry.getField(FieldName.CROSSREF).ifPresent(crossRef -> {
if (!result.checkEntryNewDatabase(crossRef)) {
Optional<BibEntry> refEntry = result.getEntryMasterDatabase(crossRef);
Optional<BibEntry> refEntry = masterDatabase.getEntryByKey(crossRef);

if (refEntry.isPresent()) {
result.insertEntry(refEntry.get());
Expand Down
157 changes: 0 additions & 157 deletions src/main/java/org/jabref/model/texparser/CrossingKeysResult.java

This file was deleted.

@@ -0,0 +1,125 @@
package org.jabref.model.texparser;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.StringJoiner;

import org.jabref.model.database.BibDatabase;
import org.jabref.model.entry.BibEntry;

import com.google.common.collect.Multimap;

public class TexBibEntriesResolverResult {

private final TexParserResult texParserResult;
private final List<String> unresolvedKeys;
private final List<BibEntry> newEntries;
private int crossRefsCount;

public TexBibEntriesResolverResult(TexParserResult texParserResult) {
this.texParserResult = texParserResult;
this.unresolvedKeys = new ArrayList<>();
this.newEntries = new ArrayList<>();
this.crossRefsCount = 0;
}

public TexParserResult getTexParserResult() {
return texParserResult;
}

public List<String> getUnresolvedKeys() {
return unresolvedKeys;
}

public List<BibEntry> getNewEntries() {
return newEntries;
}

public int getCrossRefsCount() {
return crossRefsCount;
}

/**
* Return the citations multimap from the TexParserResult object.
*/
public Multimap<String, Citation> getCitations() {
return texParserResult.getCitations();
}

/**
* Return a set of strings with the keys of the citations multimap from the TexParserResult object.
*/
public Set<String> getCitationsKeySet() {
return texParserResult.getCitationsKeySet();
}

/**
* Add an unresolved key to the list.
*/
public void addUnresolvedKey(String key) {
unresolvedKeys.add(key);
}

/**
* Check if an entry with the given key is present in the list of new entries.
*/
public boolean checkEntryNewDatabase(String key) {
return newEntries.stream().anyMatch(e -> e.getCiteKeyOptional().get().equals(key));
}

/**
* Add 1 to the cross references counter.
*/
public void increaseCrossRefsCount() {
crossRefsCount++;
}

/**
* Insert into the list of new entries an entry with the given key.
*/
public void insertEntry(BibDatabase masterDatabase, String key) {
insertEntry(masterDatabase.getEntryByKey(key).get());
}

/**
* Insert into the list of new entries the given entry.
*/
public void insertEntry(BibEntry entry) {
newEntries.add(entry);
}

@Override
public String toString() {
return new StringJoiner(", ", this.getClass().getSimpleName() + "[", "]")
.add("texParserResult = " + texParserResult)
.add("unresolvedKeys = " + unresolvedKeys)
.add("newEntries = " + newEntries)
.add("crossRefsCount = " + crossRefsCount)
.toString();
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}

if (o == null || getClass() != o.getClass()) {
return false;
}

TexBibEntriesResolverResult that = (TexBibEntriesResolverResult) o;

return Objects.equals(texParserResult, that.texParserResult)
&& Objects.equals(unresolvedKeys, that.unresolvedKeys)
&& Objects.equals(newEntries, that.newEntries)
&& Objects.equals(crossRefsCount, that.crossRefsCount);
}

@Override
public int hashCode() {
return Objects.hash(texParserResult, unresolvedKeys, newEntries, crossRefsCount);
}
}
6 changes: 2 additions & 4 deletions src/main/java/org/jabref/model/texparser/TexParser.java
Expand Up @@ -17,17 +17,15 @@ public interface TexParser {
* Parse a single TEX file.
*
* @param texFile Path to a TEX file
* @return a TexParserResult, which contains the generated BibDatabase and all data related to the bibliographic
* entries
* @return a TexParserResult, which contains all data related to the bibliographic entries
*/
TexParserResult parse(Path texFile);

/**
* Parse a list of TEX files.
*
* @param texFiles List of Path objects linked to a TEX file
* @return a TexParserResult, which contains the generated BibDatabase and all data related to the bibliographic
* entries
* @return a TexParserResult, which contains all data related to the bibliographic entries
*/
TexParserResult parse(List<Path> texFiles);
}

0 comments on commit 2037295

Please sign in to comment.