@Override public CodecRegistry getCodecRegistry() { return wrapped.getCodecRegistry(); }
@Override public String getName() { return wrapped.getName(); }
@Override public ReadConcern getReadConcern() { return wrapped.getReadConcern(); }
@Override public <TDocument> MongoCollection<TDocument> getCollection(final String collectionName, final Class<TDocument> clazz) { return new MongoCollectionImpl<TDocument>(wrapped.getCollection(collectionName, clazz)); }
@Override public <TResult> AggregatePublisher<TResult> aggregate(final List<? extends Bson> pipeline, final Class<TResult> resultClass) { return new AggregatePublisherImpl<TResult>(wrapped.aggregate(pipeline, resultClass)); }
@Override public Publisher<String> listCollectionNames() { return new ObservableToPublisher<String>(com.mongodb.async.client.Observables.observe(wrapped.listCollectionNames())); }
@Override public <TResult> ChangeStreamPublisher<TResult> watch(final List<? extends Bson> pipeline, final Class<TResult> resultClass) { return new ChangeStreamPublisherImpl<TResult>(wrapped.watch(pipeline, resultClass)); }
@Override public <C> ListCollectionsPublisher<C> listCollections(final Class<C> clazz) { return new ListCollectionsPublisherImpl<C>(wrapped.listCollections(clazz)); }
@Override public ReadPreference getReadPreference() { return wrapped.getReadPreference(); }
@Override public WriteConcern getWriteConcern() { return wrapped.getWriteConcern(); }
@Override public Future<EventBatch> loadEventsForAggregateIdAsync(final String aggregateType, final String aggregateId, final String fromJournalId) { final Document query = new Document("rid", aggregateId); if (fromJournalId != null) query.append("jid", new Document("$gt", Long.parseLong(fromJournalId))); final ArrayList<Event> events = new ArrayList<>(); com.mongodb.async.client.FindIterable<Document> dbObjects = MongoDbOperations.doDbOperation(() -> dbasync.getCollection(aggregateType).find(query).sort(new Document("jid", 1)).limit(eventReadLimit)); final Promise<EventBatch> promise = Futures.promise(); final Future<EventBatch> theFuture = promise.future(); dbObjects.forEach(document -> events.add(deSerialize(((Binary) document.get("d")).getData())), (result, t) -> promise.success(new EventBatch(aggregateType, aggregateId, events, events.size() != eventReadLimit))); return theFuture; }
@Override public <TResult> AggregatePublisher<TResult> aggregate(final ClientSession clientSession, final List<? extends Bson> pipeline, final Class<TResult> resultClass) { notNull("clientSession", clientSession); return new AggregatePublisherImpl<TResult>(wrapped.aggregate(clientSession.getWrapped(), pipeline, resultClass)); }
@Override public Publisher<String> listCollectionNames(final ClientSession clientSession) { return new ObservableToPublisher<String>(com.mongodb.async.client.Observables.observe( wrapped.listCollectionNames(clientSession.getWrapped())) ); }
@Override public <TResult> ChangeStreamPublisher<TResult> watch(final ClientSession clientSession, final List<? extends Bson> pipeline, final Class<TResult> resultClass) { notNull("clientSession", clientSession); return new ChangeStreamPublisherImpl<TResult>(wrapped.watch(clientSession.getWrapped(), pipeline, resultClass)); }
@Override public <C> ListCollectionsPublisher<C> listCollections(final ClientSession clientSession, final Class<C> clazz) { return new ListCollectionsPublisherImpl<C>(wrapped.listCollections(clientSession.getWrapped(), clazz)); }
@Override public Future<Messages.EventWrapperBatch> loadEventWrappersForCorrelationIdAsync(final String aggregateType, final String correlationId, final long fromJournalId) { final Document query = new Document("correlationid", correlationId); query.append("jid", new Document("$gt", fromJournalId)); final com.mongodb.async.client.FindIterable<Document> dbObjects = MongoDbOperations.doDbOperation(() -> dbasync.getCollection(aggregateType).find(query).sort(new Document("jid", 1)).limit(eventReadLimit)); final Promise<Messages.EventWrapperBatch> promise = Futures.promise(); dbObjects.map(document -> deSerialize(document,aggregateType)) .into(new ArrayList<>(), (SingleResultCallback<ArrayList>) (list, throwable) -> promise.success(Messages.EventWrapperBatch.newBuilder() .addAllEvents(list) .setAggregateType(aggregateType) .setReadAllEvents(list.size() != eventReadLimit) .build())); return promise.future(); }
@Override public Future<Messages.EventWrapperBatch> loadEventWrappersForAggregateIdAsync(final String aggregateType, final String aggregateRootId, final long fromJournalId) { final Document query = new Document("rid", aggregateRootId); query.append("jid", new Document("$gt", fromJournalId)); final com.mongodb.async.client.FindIterable<Document> dbObjects = MongoDbOperations.doDbOperation(() -> dbasync.getCollection(aggregateType).find(query).sort(new Document("jid", 1)).limit(eventReadLimit)); final Promise<Messages.EventWrapperBatch> promise = Futures.promise(); dbObjects.map(document -> deSerialize(document,aggregateType)) .into(new ArrayList<>(), (SingleResultCallback<ArrayList>) (list, throwable) -> promise.success(Messages.EventWrapperBatch.newBuilder() .addAllEvents(list) .setAggregateType(aggregateType) .setReadAllEvents(list.size() != eventReadLimit) .setAggregateRootId(aggregateRootId) .build())); return promise.future(); }