1818
1919import com .mongodb .ConnectionString ;
2020import com .mongodb .MongoClientSettings ;
21+ import com .mongodb .MongoNamespace ;
2122import com .mongodb .client .MongoClient ;
2223import com .mongodb .client .MongoClients ;
2324import com .mongodb .client .MongoDatabase ;
@@ -54,9 +55,45 @@ public static class Builder<B extends Builder<B>> extends AbstractFilterable.Bui
5455 @ PluginAttribute ("capped" )
5556 private boolean capped = false ;
5657
58+ @ PluginAttribute ("collectionName" )
59+ private String collectionName ;
60+
61+ @ PluginAttribute ("databaseName" )
62+ private String databaseName ;
63+
5764 @ Override
5865 public MongoDbProvider build () {
59- return new MongoDbProvider (connectionStringSource , capped , collectionSize );
66+
67+ LOGGER .debug ("Creating ConnectionString {}..." , connectionStringSource );
68+ final ConnectionString connectionString ;
69+ try {
70+ connectionString = new ConnectionString (connectionStringSource );
71+ } catch (final IllegalArgumentException exception ) {
72+ final String message = String .format ("Invalid MongoDB connection string `%s`." , connectionStringSource );
73+ throw new IllegalArgumentException (message , exception );
74+ }
75+
76+ // Validate the provided databaseName property
77+ final String effectiveDatabaseName = databaseName != null ? databaseName : connectionString .getDatabase ();
78+ try {
79+ MongoNamespace .checkDatabaseNameValidity (effectiveDatabaseName );
80+ } catch (final IllegalArgumentException exception ) {
81+ final String message = String .format ("Invalid MongoDB database name `%s`." , effectiveDatabaseName );
82+ throw new IllegalArgumentException (message , exception );
83+ }
84+
85+ // Validate the provided collectionName property
86+ final String effectiveCollectionName =
87+ collectionName != null ? collectionName : connectionString .getCollection ();
88+ try {
89+ MongoNamespace .checkCollectionNameValidity (effectiveCollectionName );
90+ } catch (final IllegalArgumentException exception ) {
91+ final String message = String .format ("Invalid MongoDB collection name `%s`." , effectiveCollectionName );
92+ throw new IllegalArgumentException (message , exception );
93+ }
94+
95+ return new MongoDbProvider (
96+ connectionString , capped , collectionSize , effectiveDatabaseName , effectiveCollectionName );
6097 }
6198
6299 public B setConnectionStringSource (final String connectionStringSource ) {
@@ -73,6 +110,16 @@ public B setCollectionSize(final long collectionSize) {
73110 this .collectionSize = collectionSize ;
74111 return asBuilder ();
75112 }
113+
114+ public B setCollectionName (final String collectionName ) {
115+ this .collectionName = collectionName ;
116+ return asBuilder ();
117+ }
118+
119+ public B setDatabaseName (final String databaseName ) {
120+ this .databaseName = databaseName ;
121+ return asBuilder ();
122+ }
76123 }
77124
78125 private static final Logger LOGGER = StatusLogger .getLogger ();
@@ -94,47 +141,54 @@ public static <B extends Builder<B>> B newBuilder() {
94141
95142 private final Long collectionSize ;
96143 private final boolean isCapped ;
144+ private final String collectionName ;
97145 private final MongoClient mongoClient ;
98146 private final MongoDatabase mongoDatabase ;
99147 private final ConnectionString connectionString ;
100148
101- private MongoDbProvider (final String connectionStringSource , final boolean isCapped , final Long collectionSize ) {
102- LOGGER .debug ("Creating ConnectionString {}..." , connectionStringSource );
103- this .connectionString = new ConnectionString (connectionStringSource );
149+ private MongoDbProvider (
150+ final ConnectionString connectionString ,
151+ final boolean isCapped ,
152+ final Long collectionSize ,
153+ final String databaseName ,
154+ final String collectionName ) {
155+
104156 LOGGER .debug ("Created ConnectionString {}" , connectionString );
157+ this .connectionString = connectionString ;
105158 LOGGER .debug ("Creating MongoClientSettings..." );
106159 // @formatter:off
107160 final MongoClientSettings settings = MongoClientSettings .builder ()
108- .applyConnectionString (this . connectionString )
161+ .applyConnectionString (connectionString )
109162 .codecRegistry (CODEC_REGISTRIES )
110163 .build ();
111164 // @formatter:on
112165 LOGGER .debug ("Created MongoClientSettings {}" , settings );
113166 LOGGER .debug ("Creating MongoClient {}..." , settings );
114167 this .mongoClient = MongoClients .create (settings );
115168 LOGGER .debug ("Created MongoClient {}" , mongoClient );
116- final String databaseName = this .connectionString .getDatabase ();
117169 LOGGER .debug ("Getting MongoDatabase {}..." , databaseName );
118170 this .mongoDatabase = this .mongoClient .getDatabase (databaseName );
119171 LOGGER .debug ("Got MongoDatabase {}" , mongoDatabase );
172+ this .collectionName = collectionName ;
120173 this .isCapped = isCapped ;
121174 this .collectionSize = collectionSize ;
122175 }
123176
124177 @ Override
125178 public MongoDbConnection getConnection () {
126- return new MongoDbConnection (connectionString , mongoClient , mongoDatabase , isCapped , collectionSize );
179+ return new MongoDbConnection (mongoClient , mongoDatabase , collectionName , isCapped , collectionSize );
127180 }
128181
129182 @ Override
130183 public String toString () {
131184 return String .format (
132- "%s [connectionString=%s, collectionSize=%s, isCapped=%s, mongoClient=%s, mongoDatabase=%s]" ,
185+ "%s [connectionString=%s, collectionSize=%s, isCapped=%s, mongoClient=%s, mongoDatabase=%s, collectionName=%s ]" ,
133186 MongoDbProvider .class .getSimpleName (),
134187 connectionString ,
135188 collectionSize ,
136189 isCapped ,
137190 mongoClient ,
138- mongoDatabase );
191+ mongoDatabase ,
192+ collectionName );
139193 }
140194}
0 commit comments