From f16809a36392799baa04ea14fd27bfcd192a6e4f Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 24 Jul 2017 10:06:36 +0200 Subject: [PATCH] =?UTF-8?q?DATAMONGO-1519=20-=20Method=20signature=20chang?= =?UTF-8?q?e=20for=20MongoTemplate.insertDocumentList(=E2=80=A6).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implemented return type change for protected method insertDocumentList(String, List). Related ticket: DATAMONGO-1513. --- .../data/mongodb/core/MongoTemplate.java | 66 +++++-------------- 1 file changed, 17 insertions(+), 49 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java index 4fc8341ed..c1a0c7ebe 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java @@ -30,7 +30,6 @@ import java.util.concurrent.TimeUnit; import org.bson.Document; import org.bson.conversions.Bson; -import org.bson.types.ObjectId; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; @@ -107,6 +106,7 @@ import org.springframework.data.projection.SpelAwareProxyProjectionFactory; import org.springframework.data.util.CloseableIterator; import org.springframework.data.util.Optionals; import org.springframework.data.util.Pair; +import org.springframework.data.util.StreamUtils; import org.springframework.jca.cci.core.ConnectionCallback; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; @@ -971,7 +971,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, documentList.add(document); } - List ids = consolidateIdentifiers(insertDocumentList(collectionName, documentList), documentList); + List ids = insertDocumentList(collectionName, documentList); int i = 0; for (T obj : batchToSave) { @@ -1086,9 +1086,8 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, }); } - // TODO: 2.0 - Change method signature to return List and return all identifiers (DATAMONGO-1513, - // DATAMONGO-1519) - protected List insertDocumentList(final String collectionName, final List documents) { + protected List insertDocumentList(final String collectionName, final List documents) { + if (documents.isEmpty()) { return Collections.emptyList(); } @@ -1097,33 +1096,24 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, LOGGER.debug("Inserting list of Documents containing {} items", documents.size()); } - execute(collectionName, new CollectionCallback() { - public Void doInCollection(MongoCollection collection) throws MongoException, DataAccessException { - MongoAction mongoAction = new MongoAction(writeConcern, MongoActionOperation.INSERT_LIST, collectionName, null, - null, null); - WriteConcern writeConcernToUse = prepareWriteConcern(mongoAction); + execute(collectionName, collection -> { - if (writeConcernToUse == null) { - collection.insertMany(documents); - } else { - collection.withWriteConcern(writeConcernToUse).insertMany(documents); - } + MongoAction mongoAction = new MongoAction(writeConcern, MongoActionOperation.INSERT_LIST, collectionName, null, + null, null); + WriteConcern writeConcernToUse = prepareWriteConcern(mongoAction); - return null; + if (writeConcernToUse == null) { + collection.insertMany(documents); + } else { + collection.withWriteConcern(writeConcernToUse).insertMany(documents); } + + return null; }); - List ids = new ArrayList(); - for (Document dbo : documents) { - Object id = dbo.get(ID_FIELD); - if (id instanceof ObjectId) { - ids.add((ObjectId) id); - } else { - // no id was generated - ids.add(null); - } - } - return ids; + return documents.stream()// + .map(it -> it.get(ID_FIELD))// + .collect(StreamUtils.toUnmodifiableList()); } protected Object saveDocument(final String collectionName, final Document dbDoc, final Class entityClass) { @@ -2374,28 +2364,6 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, return resolved == null ? ex : resolved; } - /** - * Returns all identifiers for the given documents. Will augment the given identifiers and fill in only the ones that - * are {@literal null} currently. This would've been better solved in {@link #insertDBObjectList(String, List)} - * directly but would require a signature change of that method. - * - * @param ids - * @param documents - * @return TODO: Remove for 2.0 and change method signature of {@link #insertDBObjectList(String, List)}. - */ - private static List consolidateIdentifiers(List ids, List documents) { - - List result = new ArrayList(ids.size()); - - for (int i = 0; i < ids.size(); i++) { - - ObjectId objectId = ids.get(i); - result.add(objectId == null ? documents.get(i).get(ID_FIELD) : objectId); - } - - return result; - } - // Callback implementations /**