private MongoCollection enforceWriteConcern(final MongoCollection collection, final Class klass, final WriteConcern proposed) { WriteConcern applied = proposed != null ? proposed : getWriteConcern(klass); return applied != null ? collection.withWriteConcern(applied) : collection; }
@Override public <T> Iterable<Key<T>> save(final Iterable<T> entities) { Iterator<T> iterator = entities.iterator(); return !iterator.hasNext() ? Collections.<Key<T>>emptyList() : save(entities, getWriteConcern(iterator.next())); }
@Override public <T> WriteResult delete(final T entity) { return delete(entity, getWriteConcern(entity)); }
@Override public <T> Key<T> merge(final T entity) { return merge(entity, getWriteConcern(entity)); }
@Override public <T> Key<T> insert(final T entity) { return insert(entity, getWriteConcern(entity)); }
@Override public <T> Key<T> save(final String collection, final T entity) { final T unwrapped = ProxyHelper.unwrap(entity); return save(collection, entity, getWriteConcern(unwrapped)); }
<T> InsertOptions enforceWriteConcern(final InsertOptions options, final Class<T> klass) { if (options.getWriteConcern() == null) { return options .copy() .writeConcern(getWriteConcern(klass)); } return options; }
<T> UpdateOptions enforceWriteConcern(final UpdateOptions options, final Class<T> klass) { if (options.getWriteConcern() == null) { return options .copy() .writeConcern(getWriteConcern(klass)); } return options; }
<T> DeleteOptions enforceWriteConcern(final DeleteOptions options, final Class<T> klass) { if (options.getWriteConcern() == null) { return options .copy() .writeConcern(getWriteConcern(klass)); } return options; }
@Override public <T, V> WriteResult delete(final Class<T> clazz, final V id) { return delete(clazz, id, new DeleteOptions().writeConcern(getWriteConcern(clazz))); }
<T> FindAndModifyOptions enforceWriteConcern(final FindAndModifyOptions options, final Class<T> klass) { if (options.getWriteConcern() == null) { return options .copy() .writeConcern(getWriteConcern(klass)); } return options; }
@Override @Deprecated public <T> UpdateResults update(final Query<T> query, final UpdateOperations<T> operations, final boolean createIfMissing) { return update(query, operations, new UpdateOptions() .upsert(createIfMissing) .writeConcern(getWriteConcern(query.getEntityClass()))); }
@Override public <T> WriteResult delete(final Query<T> query) { return delete(query, new DeleteOptions().writeConcern(getWriteConcern(query.getEntityClass()))); }
@Override public <T> Key<T> insert(final String collection, final T entity) { final T unwrapped = ProxyHelper.unwrap(entity); return insert(getCollection(collection), unwrapped, new InsertOptions() .writeConcern(getWriteConcern(unwrapped))); }
@Override public <T> UpdateResults update(final Query<T> query, final UpdateOperations<T> operations) { return update(query, operations, new UpdateOptions() .upsert(false) .multi(true) .writeConcern(getWriteConcern(query.getEntityClass()))); }
@Override @Deprecated public <T> UpdateResults updateFirst(final Query<T> query, final T entity, final boolean createIfMissing) { if (getMapper().getMappedClass(entity).getMappedVersionField() != null) { throw new UnsupportedOperationException("updateFirst() is not supported with versioned entities"); } final LinkedHashMap<Object, DBObject> involvedObjects = new LinkedHashMap<Object, DBObject>(); final DBObject dbObj = mapper.toDBObject(entity, involvedObjects); final UpdateResults res = update(query, dbObj, new UpdateOptions() .upsert(createIfMissing) .writeConcern(getWriteConcern(entity))); // update _id field if (res.getInsertedCount() > 0) { dbObj.put("_id", res.getNewId()); } postSaveOperations(singletonList(entity), involvedObjects, false, getCollection(entity).getName()); return res; }