Github user MikeThomsen commented on a diff in the pull request: https://github.com/apache/nifi/pull/2896#discussion_r218058211 --- Diff: nifi-nar-bundles/nifi-mongodb-bundle/nifi-mongodb-services/src/main/java/org/apache/nifi/mongodb/MongoDBControllerService.java --- @@ -17,156 +17,162 @@ package org.apache.nifi.mongodb; -import com.mongodb.client.FindIterable; +import com.mongodb.MongoClient; +import com.mongodb.MongoClientOptions; +import com.mongodb.MongoClientURI; +import com.mongodb.WriteConcern; import com.mongodb.client.MongoCollection; -import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; -import com.mongodb.client.model.UpdateOptions; - +import org.apache.commons.lang3.StringUtils; import org.apache.nifi.annotation.documentation.CapabilityDescription; import org.apache.nifi.annotation.documentation.Tags; import org.apache.nifi.annotation.lifecycle.OnDisabled; import org.apache.nifi.annotation.lifecycle.OnEnabled; +import org.apache.nifi.annotation.lifecycle.OnStopped; +import org.apache.nifi.authentication.exception.ProviderCreationException; +import org.apache.nifi.components.PropertyDescriptor; +import org.apache.nifi.controller.AbstractControllerService; import org.apache.nifi.controller.ConfigurationContext; -import org.apache.nifi.reporting.InitializationException; +import org.apache.nifi.security.util.SslContextFactory; +import org.apache.nifi.ssl.SSLContextService; import org.bson.Document; -import java.io.IOException; +import javax.net.ssl.SSLContext; import java.util.ArrayList; import java.util.List; @Tags({"mongo", "mongodb", "service"}) @CapabilityDescription( "Provides a controller service that wraps most of the functionality of the MongoDB driver." ) -public class MongoDBControllerService extends AbstractMongoDBControllerService implements MongoDBClientService { +public class MongoDBControllerService extends AbstractControllerService implements MongoDBClientService { private MongoDatabase db; private MongoCollection<Document> col; + private String uri; @OnEnabled - public void onEnabled(final ConfigurationContext context) throws InitializationException, IOException, InterruptedException { + public void onEnabled(final ConfigurationContext context) { + this.uri = context.getProperty(URI).evaluateAttributeExpressions().getValue(); this.createClient(context); - this.db = this.mongoClient.getDatabase(context.getProperty(MongoDBControllerService.DATABASE_NAME).getValue()); - this.col = this.db.getCollection(context.getProperty(MongoDBControllerService.COLLECTION_NAME).getValue()); - } - - @OnDisabled - public void onDisable() { - this.mongoClient.close(); - } - - @Override - public long count(Document query) { - return this.col.count(query); - } - - @Override - public void delete(Document query) { - this.col.deleteMany(query); } - @Override - public boolean exists(Document query) { - return this.col.count(query) > 0; - } - - @Override - public Document findOne(Document query) { - MongoCursor<Document> cursor = this.col.find(query).limit(1).iterator(); - Document retVal = cursor.tryNext(); - cursor.close(); - - return retVal; - } + static List<PropertyDescriptor> descriptors = new ArrayList<>(); - @Override - public Document findOne(Document query, Document projection) { - MongoCursor<Document> cursor = projection != null - ? this.col.find(query).projection(projection).limit(1).iterator() - : this.col.find(query).limit(1).iterator(); - Document retVal = cursor.tryNext(); - cursor.close(); - - return retVal; - } - - @Override - public List<Document> findMany(Document query) { - return findMany(query, null, -1); + static { + descriptors.add(URI); + descriptors.add(SSL_CONTEXT_SERVICE); --- End diff -- We need to be able to provide flowfile attribute-configured EL support for `Database Name` and `Collection Name`. So what this PR does is it defers that specific configuration to the processors (and lookup service) so that they can be more flexibly configured.
---