/extensions/mongodb-client/runtime/src/main/java/io/quarkus/mongodb/impl/ReactiveMongoDatabaseImpl.java

https://github.com/quarkusio/quarkus · Java · 341 lines · 276 code · 65 blank · 0 comment · 5 complexity · b41a9cce7f979c46d4f303b8f3b1e70f MD5 · raw file

  1. package io.quarkus.mongodb.impl;
  2. import java.util.List;
  3. import org.bson.Document;
  4. import org.bson.conversions.Bson;
  5. import com.mongodb.ReadPreference;
  6. import com.mongodb.client.model.CreateCollectionOptions;
  7. import com.mongodb.client.model.CreateViewOptions;
  8. import com.mongodb.client.model.changestream.ChangeStreamDocument;
  9. import com.mongodb.reactivestreams.client.AggregatePublisher;
  10. import com.mongodb.reactivestreams.client.ClientSession;
  11. import com.mongodb.reactivestreams.client.ListCollectionsPublisher;
  12. import com.mongodb.reactivestreams.client.MongoDatabase;
  13. import io.quarkus.mongodb.AggregateOptions;
  14. import io.quarkus.mongodb.ChangeStreamOptions;
  15. import io.quarkus.mongodb.CollectionListOptions;
  16. import io.quarkus.mongodb.reactive.ReactiveMongoCollection;
  17. import io.quarkus.mongodb.reactive.ReactiveMongoDatabase;
  18. import io.smallrye.mutiny.Multi;
  19. import io.smallrye.mutiny.Uni;
  20. public class ReactiveMongoDatabaseImpl implements ReactiveMongoDatabase {
  21. private final MongoDatabase database;
  22. ReactiveMongoDatabaseImpl(MongoDatabase database) {
  23. this.database = database;
  24. }
  25. @Override
  26. public String getName() {
  27. return database.getName();
  28. }
  29. @Override
  30. public ReactiveMongoCollection<Document> getCollection(String collectionName) {
  31. return new ReactiveMongoCollectionImpl<>(database.getCollection(collectionName));
  32. }
  33. @Override
  34. public <T> ReactiveMongoCollection<T> getCollection(String collectionName, Class<T> clazz) {
  35. return new ReactiveMongoCollectionImpl<>(database.getCollection(collectionName, clazz));
  36. }
  37. @Override
  38. public Uni<Document> runCommand(Bson command) {
  39. return Wrappers.toUni(database.runCommand(command));
  40. }
  41. @Override
  42. public Uni<Document> runCommand(Bson command, ReadPreference readPreference) {
  43. return Wrappers.toUni(database.runCommand(command, readPreference));
  44. }
  45. @Override
  46. public <T> Uni<T> runCommand(Bson command, Class<T> clazz) {
  47. return Wrappers.toUni(database.runCommand(command, clazz));
  48. }
  49. @Override
  50. public <T> Uni<T> runCommand(Bson command, ReadPreference readPreference, Class<T> clazz) {
  51. return Wrappers.toUni(database.runCommand(command, readPreference, clazz));
  52. }
  53. @Override
  54. public Uni<Document> runCommand(ClientSession clientSession, Bson command) {
  55. return Wrappers.toUni(database.runCommand(clientSession, command));
  56. }
  57. @Override
  58. public Uni<Document> runCommand(ClientSession clientSession, Bson command, ReadPreference readPreference) {
  59. return Wrappers.toUni(database.runCommand(clientSession, command, readPreference));
  60. }
  61. @Override
  62. public <T> Uni<T> runCommand(ClientSession clientSession, Bson command, Class<T> clazz) {
  63. return Wrappers.toUni(database.runCommand(clientSession, command, clazz));
  64. }
  65. @Override
  66. public <T> Uni<T> runCommand(ClientSession clientSession, Bson command, ReadPreference readPreference,
  67. Class<T> clazz) {
  68. return Wrappers.toUni(database.runCommand(clientSession, command, readPreference, clazz));
  69. }
  70. @Override
  71. public Uni<Void> drop() {
  72. return Wrappers.toUni(database.drop());
  73. }
  74. @Override
  75. public Uni<Void> drop(ClientSession clientSession) {
  76. return Wrappers.toUni(database.drop(clientSession));
  77. }
  78. @Override
  79. public Multi<String> listCollectionNames() {
  80. return Wrappers.toMulti(database.listCollectionNames());
  81. }
  82. @Override
  83. public Multi<String> listCollectionNames(ClientSession clientSession) {
  84. return Wrappers.toMulti(database.listCollectionNames(clientSession));
  85. }
  86. @Override
  87. public Multi<Document> listCollections() {
  88. return Wrappers.toMulti(database.listCollections());
  89. }
  90. @Override
  91. public Multi<Document> listCollections(CollectionListOptions options) {
  92. return Multi.createFrom().publisher(apply(options, database.listCollections()));
  93. }
  94. @Override
  95. public <T> Multi<T> listCollections(Class<T> clazz) {
  96. return Wrappers.toMulti(database.listCollections(clazz));
  97. }
  98. @Override
  99. public <T> Multi<T> listCollections(Class<T> clazz, CollectionListOptions options) {
  100. return Multi.createFrom().publisher(apply(options, database.listCollections(clazz)));
  101. }
  102. private <T> ListCollectionsPublisher<T> apply(CollectionListOptions options,
  103. ListCollectionsPublisher<T> collections) {
  104. if (options == null) {
  105. return collections;
  106. } else {
  107. return options.apply(collections);
  108. }
  109. }
  110. @Override
  111. public Multi<Document> listCollections(ClientSession clientSession) {
  112. return Wrappers.toMulti(database.listCollections(clientSession));
  113. }
  114. @Override
  115. public Multi<Document> listCollections(ClientSession clientSession, CollectionListOptions options) {
  116. return Multi.createFrom().publisher(apply(options, database.listCollections(clientSession)));
  117. }
  118. @Override
  119. public <T> Multi<T> listCollections(ClientSession clientSession, Class<T> clazz) {
  120. return Wrappers.toMulti(database.listCollections(clientSession, clazz));
  121. }
  122. @Override
  123. public <T> Multi<T> listCollections(ClientSession clientSession, Class<T> clazz, CollectionListOptions options) {
  124. return Multi.createFrom().publisher(apply(options, database.listCollections(clientSession, clazz)));
  125. }
  126. @Override
  127. public Uni<Void> createCollection(String collectionName) {
  128. return Wrappers.toUni(database.createCollection(collectionName));
  129. }
  130. @Override
  131. public Uni<Void> createCollection(String collectionName, CreateCollectionOptions options) {
  132. return Wrappers.toUni(database.createCollection(collectionName, options));
  133. }
  134. @Override
  135. public Uni<Void> createCollection(ClientSession clientSession, String collectionName) {
  136. return Wrappers.toUni(database.createCollection(clientSession, collectionName));
  137. }
  138. @Override
  139. public Uni<Void> createCollection(ClientSession clientSession, String collectionName,
  140. CreateCollectionOptions options) {
  141. return Wrappers.toUni(database.createCollection(clientSession, collectionName, options));
  142. }
  143. @Override
  144. public Uni<Void> createView(String viewName, String viewOn, List<? extends Bson> pipeline) {
  145. return Wrappers.toUni(database.createView(viewName, viewOn, pipeline));
  146. }
  147. @Override
  148. public Uni<Void> createView(String viewName, String viewOn, List<? extends Bson> pipeline,
  149. CreateViewOptions createViewOptions) {
  150. return Wrappers.toUni(database.createView(viewName, viewOn, pipeline, createViewOptions));
  151. }
  152. @Override
  153. public Uni<Void> createView(ClientSession clientSession, String viewName, String viewOn,
  154. List<? extends Bson> pipeline) {
  155. return Wrappers.toUni(database.createView(clientSession, viewName, viewOn, pipeline));
  156. }
  157. @Override
  158. public Uni<Void> createView(ClientSession clientSession, String viewName, String viewOn,
  159. List<? extends Bson> pipeline, CreateViewOptions createViewOptions) {
  160. return Wrappers
  161. .toUni(database.createView(clientSession, viewName, viewOn, pipeline, createViewOptions));
  162. }
  163. @Override
  164. public Multi<ChangeStreamDocument<Document>> watch() {
  165. return Wrappers.toMulti(database.watch());
  166. }
  167. @Override
  168. public Multi<ChangeStreamDocument<Document>> watch(ChangeStreamOptions options) {
  169. return null;
  170. }
  171. @Override
  172. public <T> Multi<ChangeStreamDocument<T>> watch(Class<T> clazz) {
  173. return Wrappers.toMulti(database.watch(clazz));
  174. }
  175. @Override
  176. public <T> Multi<ChangeStreamDocument<T>> watch(Class<T> clazz, ChangeStreamOptions options) {
  177. return null;
  178. }
  179. @Override
  180. public Multi<ChangeStreamDocument<Document>> watch(List<? extends Bson> pipeline) {
  181. return Wrappers.toMulti(database.watch(pipeline));
  182. }
  183. @Override
  184. public Multi<ChangeStreamDocument<Document>> watch(List<? extends Bson> pipeline, ChangeStreamOptions options) {
  185. return null;
  186. }
  187. @Override
  188. public <T> Multi<ChangeStreamDocument<T>> watch(List<? extends Bson> pipeline, Class<T> clazz) {
  189. return Wrappers.toMulti(database.watch(pipeline, clazz));
  190. }
  191. @Override
  192. public <T> Multi<ChangeStreamDocument<T>> watch(List<? extends Bson> pipeline, Class<T> clazz,
  193. ChangeStreamOptions options) {
  194. return null;
  195. }
  196. @Override
  197. public Multi<ChangeStreamDocument<Document>> watch(ClientSession clientSession) {
  198. return Wrappers.toMulti(database.watch(clientSession));
  199. }
  200. @Override
  201. public Multi<ChangeStreamDocument<Document>> watch(ClientSession clientSession, ChangeStreamOptions options) {
  202. return null;
  203. }
  204. @Override
  205. public <T> Multi<ChangeStreamDocument<T>> watch(ClientSession clientSession, Class<T> clazz) {
  206. return Wrappers.toMulti(database.watch(clientSession, clazz));
  207. }
  208. @Override
  209. public <T> Multi<ChangeStreamDocument<T>> watch(ClientSession clientSession, Class<T> clazz,
  210. ChangeStreamOptions options) {
  211. return null;
  212. }
  213. @Override
  214. public Multi<ChangeStreamDocument<Document>> watch(ClientSession clientSession, List<? extends Bson> pipeline) {
  215. return Wrappers.toMulti(database.watch(clientSession, pipeline));
  216. }
  217. @Override
  218. public Multi<ChangeStreamDocument<Document>> watch(ClientSession clientSession, List<? extends Bson> pipeline,
  219. ChangeStreamOptions options) {
  220. return null;
  221. }
  222. @Override
  223. public <T> Multi<ChangeStreamDocument<T>> watch(ClientSession clientSession, List<? extends Bson> pipeline,
  224. Class<T> clazz) {
  225. return Wrappers.toMulti(database.watch(clientSession, pipeline, clazz));
  226. }
  227. @Override
  228. public <T> Multi<ChangeStreamDocument<T>> watch(ClientSession clientSession, List<? extends Bson> pipeline,
  229. Class<T> clazz, ChangeStreamOptions options) {
  230. return null;
  231. }
  232. @Override
  233. public Multi<Document> aggregate(List<? extends Bson> pipeline) {
  234. return Wrappers.toMulti(database.aggregate(pipeline));
  235. }
  236. @Override
  237. public Multi<Document> aggregate(List<? extends Bson> pipeline, AggregateOptions options) {
  238. return Wrappers.toMulti(apply(options, database.aggregate(pipeline)));
  239. }
  240. private <T> AggregatePublisher<T> apply(AggregateOptions options, AggregatePublisher<T> aggregate) {
  241. if (options == null) {
  242. return aggregate;
  243. }
  244. return options.apply(aggregate);
  245. }
  246. @Override
  247. public <T> Multi<T> aggregate(List<? extends Bson> pipeline, Class<T> clazz) {
  248. return Wrappers.toMulti(database.aggregate(pipeline, clazz));
  249. }
  250. @Override
  251. public <T> Multi<T> aggregate(List<? extends Bson> pipeline, Class<T> clazz, AggregateOptions options) {
  252. return Wrappers.toMulti(apply(options, database.aggregate(pipeline, clazz)));
  253. }
  254. @Override
  255. public Multi<Document> aggregate(ClientSession clientSession, List<? extends Bson> pipeline) {
  256. return Wrappers.toMulti(database.aggregate(clientSession, pipeline));
  257. }
  258. @Override
  259. public Multi<Document> aggregate(ClientSession clientSession, List<? extends Bson> pipeline,
  260. AggregateOptions options) {
  261. return Wrappers.toMulti(apply(options, database.aggregate(clientSession, pipeline)));
  262. }
  263. @Override
  264. public <T> Multi<T> aggregate(ClientSession clientSession, List<? extends Bson> pipeline, Class<T> clazz) {
  265. return Wrappers.toMulti(database.aggregate(clientSession, pipeline, clazz));
  266. }
  267. @Override
  268. public <T> Multi<T> aggregate(ClientSession clientSession, List<? extends Bson> pipeline, Class<T> clazz,
  269. AggregateOptions options) {
  270. return Wrappers.toMulti(apply(options, database.aggregate(clientSession, pipeline, clazz)));
  271. }
  272. @Override
  273. public MongoDatabase unwrap() {
  274. return database;
  275. }
  276. }