4343import org .jabref .gui .util .NoSelectionModel ;
4444import org .jabref .gui .util .TaskExecutor ;
4545import org .jabref .gui .util .ViewModelListCellFactory ;
46+ import org .jabref .logic .database .DuplicateCheck ;
4647import org .jabref .logic .l10n .Localization ;
4748import org .jabref .model .database .BibDatabaseContext ;
49+ import org .jabref .model .database .BibDatabaseModeDetection ;
4850import org .jabref .model .entry .BibEntry ;
51+ import org .jabref .model .entry .BibEntryTypesManager ;
4952import org .jabref .model .entry .field .StandardField ;
5053import org .jabref .model .entry .identifier .DOI ;
5154import org .jabref .model .strings .StringUtil ;
@@ -78,6 +81,7 @@ public class CitationRelationsTab extends EntryEditorTab {
7881 private final TaskExecutor taskExecutor ;
7982 private final BibEntryRelationsRepository bibEntryRelationsRepository ;
8083 private final CitationsRelationsTabViewModel citationsRelationsTabViewModel ;
84+ private final DuplicateCheck duplicateCheck ;
8185
8286 public CitationRelationsTab (EntryEditorPreferences preferences , DialogService dialogService ,
8387 BibDatabaseContext databaseContext , UndoManager undoManager ,
@@ -95,6 +99,7 @@ public CitationRelationsTab(EntryEditorPreferences preferences, DialogService di
9599 setText (Localization .lang ("Citation relations" ));
96100 setTooltip (new Tooltip (Localization .lang ("Show articles related by citation" )));
97101
102+ this .duplicateCheck = new DuplicateCheck (new BibEntryTypesManager ());
98103 this .bibEntryRelationsRepository = new BibEntryRelationsRepository (new SemanticScholarFetcher (preferencesService .getImporterPreferences ()),
99104 new BibEntryRelationsCache ());
100105 citationsRelationsTabViewModel = new CitationsRelationsTabViewModel (databaseContext , preferencesService , undoManager , stateManager , dialogService , fileUpdateMonitor , Globals .TASK_EXECUTOR );
@@ -389,17 +394,13 @@ private void onSearchForRelationsSucceed(BibEntry entry, CheckListView<CitationR
389394 hideNodes (abortButton , progress );
390395
391396 observableList .setAll (fetchedList .stream ().map (entr -> {
392- for (BibEntry databaseEntry : databaseContext .getDatabase ().getEntries ()) {
393- Optional <String > title1Optional = databaseEntry .getTitle ();
394- Optional <String > title2Optional = entr .getTitle ();
395- if (title1Optional .isPresent () && title2Optional .isPresent ()) {
396- String title1 = title1Optional .get ().replaceAll ("[{}]" , "" ).toLowerCase ();
397- String title2 = title2Optional .get ().replaceAll ("[{}]" , "" ).toLowerCase ();
398-
399- if (title1 .equals (title2 )) {
400- return new CitationRelationItem (entr , databaseEntry , true );
401- }
402- }
397+ Optional <BibEntry > duplicate = duplicateCheck .containsDuplicate (
398+ databaseContext .getDatabase (),
399+ entr ,
400+ BibDatabaseModeDetection .inferMode (databaseContext .getDatabase ()));
401+
402+ if (duplicate .isPresent ()) {
403+ return new CitationRelationItem (entr , duplicate .get (), true );
403404 }
404405 return new CitationRelationItem (entr , null , false );
405406 }).collect (Collectors .toList ()));
0 commit comments