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.


---

Reply via email to