private <T> Iterable<Key<T>> insert(final DBCollection dbColl, final Iterable<T> entities, final InsertOptions options) { if (!entities.iterator().hasNext()) { return emptyList(); } final Map<Object, DBObject> involvedObjects = new LinkedHashMap<Object, DBObject>(); final List<DBObject> list = new ArrayList<DBObject>(); com.mongodb.InsertOptions insertOptions = options.getOptions(); for (final T entity : entities) { if (options.getWriteConcern() == null) { insertOptions = enforceWriteConcern(options, entity.getClass()).getOptions(); } list.add(toDbObject(entity, involvedObjects)); } dbColl.insert(list, insertOptions); return postSaveOperations(entities, involvedObjects, dbColl.getName()); } /*
<T> InsertOptions enforceWriteConcern(final InsertOptions options, final Class<T> klass) { if (options.getWriteConcern() == null) { return options .copy() .writeConcern(getWriteConcern(klass)); } return options; }
private WriteResult saveDocument(final DBCollection dbColl, final DBObject document, final InsertOptions options) { if (document.get(ID_FIELD_NAME) == null) { return dbColl.insert(singletonList(document), options.getOptions()); } else { return dbColl.update(new BasicDBObject(ID_FIELD_NAME, document.get(ID_FIELD_NAME)), document, new DBCollectionUpdateOptions() .bypassDocumentValidation(options.getBypassDocumentValidation()) .writeConcern(options.getWriteConcern()) .upsert(true)); } }
/** * Create a copy of the options instance. * * @return the copy */ public InsertOptions copy() { return new InsertOptions() .bypassDocumentValidation(getBypassDocumentValidation()) .continueOnError(isContinueOnError()) .writeConcern(getWriteConcern()); }
final UpdateResults res = update(query, dbObj, new UpdateOptions() .bypassDocumentValidation(options.getBypassDocumentValidation()) .writeConcern(options.getWriteConcern()));
@SuppressWarnings("deprecation") private void ensureEntityWriteConcern() { DatastoreImpl datastore = (DatastoreImpl) getAds(); assertEquals(ACKNOWLEDGED, datastore.enforceWriteConcern(new InsertOptions(), Simple.class) .getWriteConcern()); assertEquals(ACKNOWLEDGED, datastore.enforceWriteConcern(new UpdateOptions(), Simple.class) .getWriteConcern()); assertEquals(ACKNOWLEDGED, datastore.enforceWriteConcern(new FindAndModifyOptions(), Simple.class) .getWriteConcern()); }
@Test @SuppressWarnings("deprecation") public void testEnforceWriteConcern() { DatastoreImpl ds = (DatastoreImpl) getDs(); FindAndModifyOptions findAndModifyOptions = new FindAndModifyOptions(); assertNull(findAndModifyOptions.getWriteConcern()); assertEquals(ACKNOWLEDGED, ds.enforceWriteConcern(findAndModifyOptions, FacebookUser.class) .getWriteConcern()); assertEquals(MAJORITY, ds.enforceWriteConcern(findAndModifyOptions.writeConcern(MAJORITY), FacebookUser.class) .getWriteConcern()); InsertOptions insertOptions = new InsertOptions(); assertNull(insertOptions.getWriteConcern()); assertEquals(ACKNOWLEDGED, ds.enforceWriteConcern(insertOptions, FacebookUser.class) .getWriteConcern()); assertEquals(MAJORITY, ds.enforceWriteConcern(insertOptions.writeConcern(MAJORITY), FacebookUser.class) .getWriteConcern()); UpdateOptions updateOptions = new UpdateOptions(); assertNull(updateOptions.getWriteConcern()); assertEquals(ACKNOWLEDGED, ds.enforceWriteConcern(updateOptions, FacebookUser.class) .getWriteConcern()); assertEquals(MAJORITY, ds.enforceWriteConcern(updateOptions.writeConcern(MAJORITY), FacebookUser.class) .getWriteConcern()); DeleteOptions deleteOptions = new DeleteOptions(); assertNull(deleteOptions.getWriteConcern()); assertEquals(ACKNOWLEDGED, ds.enforceWriteConcern(deleteOptions, FacebookUser.class) .getWriteConcern()); assertEquals(MAJORITY, ds.enforceWriteConcern(deleteOptions.writeConcern(MAJORITY), FacebookUser.class) .getWriteConcern()); }