Repository: nifi-minifi-cpp
Updated Branches:
  refs/heads/master cadd945d9 -> eb1f268fb


MINIFI-103 added File Filter Property to GetFile processor

This closes #11.

Signed-off-by: Aldrin Piri <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/commit/eb1f268f
Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/eb1f268f
Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/eb1f268f

Branch: refs/heads/master
Commit: eb1f268fb05556a8467a97b4f54fe2f9c1e09b45
Parents: cadd945
Author: Jeremy Dyer <[email protected]>
Authored: Fri Sep 9 09:19:38 2016 -0400
Committer: Aldrin Piri <[email protected]>
Committed: Thu Sep 15 14:02:57 2016 -0400

----------------------------------------------------------------------
 inc/GetFile.h   |  3 +++
 src/GetFile.cpp | 18 ++++++++++++++++++
 2 files changed, 21 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/eb1f268f/inc/GetFile.h
----------------------------------------------------------------------
diff --git a/inc/GetFile.h b/inc/GetFile.h
index 7ba6af4..eb975fd 100644
--- a/inc/GetFile.h
+++ b/inc/GetFile.h
@@ -47,6 +47,7 @@ public:
                _pollInterval = 0;
                _batchSize = 10;
                _lastDirectoryListingTime = getTimeMillis();
+               _fileFilter = "[^\\.].*";
        }
        //! Destructor
        virtual ~GetFile()
@@ -65,6 +66,7 @@ public:
        static Property IgnoreHiddenFile;
        static Property PollInterval;
        static Property BatchSize;
+       static Property FileFilter;
        //! Supported Relationships
        static Relationship Success;
 
@@ -109,6 +111,7 @@ private:
        int64_t _pollInterval;
        int64_t _batchSize;
        uint64_t _lastDirectoryListingTime;
+       std::string _fileFilter;
 };
 
 #endif

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/eb1f268f/src/GetFile.cpp
----------------------------------------------------------------------
diff --git a/src/GetFile.cpp b/src/GetFile.cpp
index 32503f5..02e196a 100644
--- a/src/GetFile.cpp
+++ b/src/GetFile.cpp
@@ -32,6 +32,7 @@
 #include <dirent.h>
 #include <limits.h>
 #include <unistd.h>
+#include <regex>
 
 #include "TimeUtil.h"
 #include "GetFile.h"
@@ -52,6 +53,7 @@ Property GetFile::MaxSize("Maximum File Size", "The maximum 
size that a file can
 Property GetFile::MinSize("Minimum File Size", "The minimum size that a file 
must be in order to be pulled", "0 B");
 Property GetFile::PollInterval("Polling Interval", "Indicates how long to wait 
before performing a directory listing", "0 sec");
 Property GetFile::Recurse("Recurse Subdirectories", "Indicates whether or not 
to pull files from subdirectories", "true");
+Property GetFile::FileFilter("File Filter", "Only files whose names match the 
given regular expression will be picked up", "[^\\.].*");
 Relationship GetFile::Success("success", "All files are routed to success");
 
 void GetFile::initialize()
@@ -68,6 +70,7 @@ void GetFile::initialize()
        properties.insert(MinSize);
        properties.insert(PollInterval);
        properties.insert(Recurse);
+       properties.insert(FileFilter);
        setSupportedProperties(properties);
        //! Set the supported relationships
        std::set<Relationship> relationships;
@@ -134,6 +137,11 @@ void GetFile::onTrigger(ProcessContext *context, 
ProcessSession *session)
                Property::StringToBool(value, _recursive);
        }
 
+       if (context->getProperty(FileFilter.getName(), value))
+       {
+               _fileFilter = value;
+       }
+
        // Perform directory list
        if (isListingEmpty())
        {
@@ -235,6 +243,16 @@ bool GetFile::acceptFile(std::string fileName)
                if (_keepSourceFile == false && access(fileName.c_str(), W_OK) 
!= 0)
                        return false;
 
+               try {
+                       std::regex re(_fileFilter);
+                       if (!std::regex_match(fileName, re)) {
+                               return false;
+                       }
+               } catch (std::regex_error e) {
+                       _logger->log_error("Invalid File Filter regex: %s.", 
e.what());
+                       return false;
+               }
+
                return true;
        }
 

Reply via email to