diff --git a/src/main/java/org/jabref/logic/shared/DBMSProcessor.java b/src/main/java/org/jabref/logic/shared/DBMSProcessor.java index ec364110a91..ecba6c154e1 100644 --- a/src/main/java/org/jabref/logic/shared/DBMSProcessor.java +++ b/src/main/java/org/jabref/logic/shared/DBMSProcessor.java @@ -5,17 +5,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; import org.jabref.logic.shared.exception.OfflineLockException; @@ -26,6 +16,7 @@ import org.jabref.model.entry.field.FieldFactory; import org.jabref.model.entry.types.EntryTypeFactory; +import org.jbibtex.BibTeXDatabase; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -479,6 +470,25 @@ public Optional getSharedEntry(int sharedID) { } } + /** + * + * @param sharedIDs + * @return + */ + public List partitionAndGetSharedEntries(List sharedIDs) { + List result = new ArrayList<>(); + for (int i = 0; i <= sharedIDs.size(); i+=500) { + List partitionedSharedIDs; + if (i + 500 > sharedIDs.size()) { + partitionedSharedIDs = sharedIDs.subList(i, sharedIDs.size()); + } else { + partitionedSharedIDs = sharedIDs.subList(i, i+500); + } + result.addAll(getSharedEntries(partitionedSharedIDs)); + } + return result; + } + /** * Queries the database for shared entries. Optionally, they are filtered by the given list of sharedIds * diff --git a/src/main/java/org/jabref/logic/shared/DBMSSynchronizer.java b/src/main/java/org/jabref/logic/shared/DBMSSynchronizer.java index e4b7e0294c3..1aa8b438d18 100644 --- a/src/main/java/org/jabref/logic/shared/DBMSSynchronizer.java +++ b/src/main/java/org/jabref/logic/shared/DBMSSynchronizer.java @@ -221,7 +221,7 @@ public void synchronizeLocalDatabase() { if (!entriesToInsertIntoLocalDatabase.isEmpty()) { // in case entries should be added into the local database, insert them - bibDatabase.insertEntries(dbmsProcessor.getSharedEntries(entriesToInsertIntoLocalDatabase), EntriesEventSource.SHARED); + bibDatabase.insertEntries(dbmsProcessor.partitionAndGetSharedEntries(entriesToInsertIntoLocalDatabase), EntriesEventSource.SHARED); } }