Repository: nifi-minifi-cpp
Updated Branches:
  refs/heads/master 4c2eef3c6 -> 44d0bcffd


MINIFICPP-508 Added EL support to Template property of ApplyTemplate

This closes #338.

Closes #306.

Signed-off-by: Aldrin Piri <ald...@apache.org>


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/44d0bcff
Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/44d0bcff
Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/44d0bcff

Branch: refs/heads/master
Commit: 44d0bcffd63d18a59a4e84dabb6ed9f0975046fe
Parents: 4c2eef3
Author: Andrew I. Christianson <a...@andyic.org>
Authored: Wed May 23 11:37:22 2018 -0400
Committer: Aldrin Piri <ald...@apache.org>
Committed: Wed May 30 10:53:20 2018 -0400

----------------------------------------------------------------------
 PROCESSORS.md                         |  2 +-
 extensions/bustache/ApplyTemplate.cpp | 75 ++++++++++++++----------------
 extensions/bustache/ApplyTemplate.h   | 66 ++++++++++++--------------
 3 files changed, 67 insertions(+), 76 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/44d0bcff/PROCESSORS.md
----------------------------------------------------------------------
diff --git a/PROCESSORS.md b/PROCESSORS.md
index 4588236..36c5cec 100644
--- a/PROCESSORS.md
+++ b/PROCESSORS.md
@@ -91,7 +91,7 @@ default values, and whether a property supports the NiFi 
Expression Language.
 
 | Name | Default Value | Allowable Values | Description |
 | - | - | - | - |
-| **Template** | | | Path to the input mustache template file |
+| **Template** | | | Path to the input mustache template file<br>**Supports 
Expression Language: true** |
 
 ### Relationships
 

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/44d0bcff/extensions/bustache/ApplyTemplate.cpp
----------------------------------------------------------------------
diff --git a/extensions/bustache/ApplyTemplate.cpp 
b/extensions/bustache/ApplyTemplate.cpp
index 69461fe..a9ca4d0 100644
--- a/extensions/bustache/ApplyTemplate.cpp
+++ b/extensions/bustache/ApplyTemplate.cpp
@@ -17,22 +17,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include <string.h>
 #include <iostream>
 #include <fstream>
 #include <memory>
-#include <string>
 #include <set>
 
 #include <boost/iostreams/device/mapped_file.hpp>
 
 #include <bustache/model.hpp>
-#include <bustache/format.hpp>
 
 #include "ApplyTemplate.h"
-#include "core/ProcessContext.h"
-#include "core/ProcessSession.h"
-
 
 namespace org {
 namespace apache {
@@ -44,53 +38,54 @@ core::Property ApplyTemplate::Template("Template", "Path to 
the input mustache t
 core::Relationship ApplyTemplate::Success("success", "success operational on 
the flow record");
 
 void ApplyTemplate::initialize() {
-    //! Set the supported properties
-    std::set<core::Property> properties;
-    properties.insert(Template);
-    setSupportedProperties(properties);
-    //! Set the supported relationships
-    std::set<core::Relationship> relationships;
-    relationships.insert(Success);
-    setSupportedRelationships(relationships);
+  //! Set the supported properties
+  std::set<core::Property> properties;
+  properties.insert(Template);
+  setSupportedProperties(properties);
+  //! Set the supported relationships
+  std::set<core::Relationship> relationships;
+  relationships.insert(Success);
+  setSupportedRelationships(relationships);
 }
 
-void ApplyTemplate::onTrigger(const std::shared_ptr<core::ProcessContext>& 
context, const std::shared_ptr<core::ProcessSession>& session) {
-    auto flowFile = session->get();
+void ApplyTemplate::onTrigger(const std::shared_ptr<core::ProcessContext> 
&context,
+                              const std::shared_ptr<core::ProcessSession> 
&session) {
+  auto flow_file = session->get();
 
-    if (!flowFile) {
-        return;
-    }
+  if (!flow_file) {
+    return;
+  }
 
-    std::string templateFile;
-    context->getProperty(Template.getName(), templateFile);
-    WriteCallback cb(templateFile, flowFile);
-    session->write(flowFile, &cb);
-    session->transfer(flowFile, Success);
+  std::string template_file;
+  context->getProperty(Template.getName(), template_file, flow_file);
+  WriteCallback cb(template_file, flow_file);
+  session->write(flow_file, &cb);
+  session->transfer(flow_file, Success);
 }
 
-ApplyTemplate::WriteCallback::WriteCallback(const std::string& path, const 
std::shared_ptr<core::FlowFile>& flowFile) {
-    logger_ = 
logging::LoggerFactory<ApplyTemplate::WriteCallback>::getLogger();
-    templateFile_ = path;
-    flowFile_ = flowFile;
+ApplyTemplate::WriteCallback::WriteCallback(const std::string &path, const 
std::shared_ptr<core::FlowFile> &flow_file) {
+  logger_ = logging::LoggerFactory<ApplyTemplate::WriteCallback>::getLogger();
+  template_file_ = path;
+  flow_file_ = flow_file;
 }
 
 int64_t ApplyTemplate::WriteCallback::process(const 
std::shared_ptr<io::BaseStream> stream) {
-    logger_->log_info("ApplyTemplate reading template file from %s", 
templateFile_);
-    boost::iostreams::mapped_file_source file(templateFile_);
+  logger_->log_info("ApplyTemplate reading template file from %s", 
template_file_);
+  boost::iostreams::mapped_file_source file(template_file_);
 
-    bustache::format format(file);
-    bustache::object data;
+  bustache::format format(file);
+  bustache::object data;
 
-    for (const auto &attr : flowFile_->getAttributes()) {
-        data[attr.first] = attr.second;
-    }
+  for (const auto &attr : flow_file_->getAttributes()) {
+    data[attr.first] = attr.second;
+  }
 
-    // TODO(calebj) write ostream reciever for format() to prevent excessive 
copying
-    std::string ostring = to_string(format(data));
-    
stream->writeData(reinterpret_cast<uint8_t*>(const_cast<char*>(ostring.c_str())),
-                      ostring.length());
+  // TODO(calebj) write ostream reciever for format() to prevent excessive 
copying
+  std::string ostring = to_string(format(data));
+  stream->writeData(reinterpret_cast<uint8_t *>(const_cast<char 
*>(ostring.c_str())),
+                    ostring.length());
 
-    return ostring.length();
+  return ostring.length();
 }
 
 } /* namespace processors */

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/44d0bcff/extensions/bustache/ApplyTemplate.h
----------------------------------------------------------------------
diff --git a/extensions/bustache/ApplyTemplate.h 
b/extensions/bustache/ApplyTemplate.h
index ad76feb..1e890ff 100644
--- a/extensions/bustache/ApplyTemplate.h
+++ b/extensions/bustache/ApplyTemplate.h
@@ -33,48 +33,44 @@ namespace nifi {
 namespace minifi {
 namespace processors {
 
-//! ApplyTemplate Class
+/**
+ * Applies a mustache template using incoming attributes as template 
parameters.
+ */
 class ApplyTemplate : public core::Processor {
-public:
-    //! Constructor
-    /*!
-     * Create a new processor
-     */
-    ApplyTemplate(std::string name, uuid_t uuid = NULL)
-    : Processor(name, uuid),
-      logger_(logging::LoggerFactory<ApplyTemplate>::getLogger()) {}
-    //! Destructor
-    ~ApplyTemplate() {}
-    //! Processor Name
-    static constexpr char const* ProcessorName = "ApplyTemplate";
-    //! Supported Properties
-    static core::Property Template;
-    //! Supported Relationships
-    static core::Relationship Success;
+ public:
+  /*!
+   * Create a new processor
+   */
+  ApplyTemplate(std::string name, uuid_t uuid = NULL)
+      : Processor(name, uuid),
+        logger_(logging::LoggerFactory<ApplyTemplate>::getLogger()) {}
+  ~ApplyTemplate() {}
+  static constexpr char const *ProcessorName = "ApplyTemplate";
 
-    //! OnTrigger method, implemented by NiFi ApplyTemplate
-    void onTrigger(const std::shared_ptr<core::ProcessContext>& context, const 
std::shared_ptr<core::ProcessSession>& session);
-    //! Initialize, over write by NiFi ApplyTemplate
-    void initialize(void);
+  //! Supported Properties
+  static core::Property Template;
 
-    //! Write callback for outputting files generated by applying template to 
input
-    class WriteCallback : public OutputStreamCallback {
-    public:
-        WriteCallback(const std::string& templateFile, const 
std::shared_ptr<core::FlowFile>& flowFile);
-        int64_t process(std::shared_ptr<io::BaseStream> stream);
+  //! Supported Relationships
+  static core::Relationship Success;
 
-    private:
-        //! Logger
-        std::shared_ptr<logging::Logger> logger_;
-        std::string templateFile_;
-        std::shared_ptr<core::FlowFile> flowFile_;
-    };
+  void onTrigger(const std::shared_ptr<core::ProcessContext> &context,
+                 const std::shared_ptr<core::ProcessSession> &session);
+  void initialize(void);
 
-protected:
+  //! Write callback for outputting files generated by applying template to 
input
+  class WriteCallback : public OutputStreamCallback {
+   public:
+    WriteCallback(const std::string &templateFile, const 
std::shared_ptr<core::FlowFile> &flow_file);
+    int64_t process(std::shared_ptr<io::BaseStream> stream);
 
-private:
-    //! Logger
+   private:
     std::shared_ptr<logging::Logger> logger_;
+    std::string template_file_;
+    std::shared_ptr<core::FlowFile> flow_file_;
+  };
+
+ private:
+  std::shared_ptr<logging::Logger> logger_;
 };
 
 REGISTER_RESOURCE(ApplyTemplate);

Reply via email to