MINIFI-68 Adding yaml-cpp source and updating LICENSE to reflect its inclusion.

Adding a Makefile for yaml-cpp and incorporating its library build as part of 
the overall process.

Providing parsing of config.yml to establish a processing graph as well as 
providing configuration for FlowController to handle XML and YAML.

Ignoring SIGPIPE signal.

Adjusting Makefile to correct assembly packages not being generated.

Providing includes for yaml-cpp build Makefile and having top level Makefile 
build libuuid regardless.

Removing generated tst_uuid binary from uuid thirdprty dependency.

Adding Google Test LICENSE information as it is bundled with yaml-cpp


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

Branch: refs/heads/master
Commit: 63d2358d3a37dcd44415ae764c028f72f64355e3
Parents: b3848a3
Author: Aldrin Piri <[email protected]>
Authored: Thu Jul 14 09:13:34 2016 -0700
Committer: Aldrin Piri <[email protected]>
Committed: Wed Aug 3 09:07:39 2016 -0400

----------------------------------------------------------------------
 .gitignore                                      |     2 +
 LICENSE                                         |    31 +
 Makefile                                        |    90 +-
 README.md                                       |     2 +-
 conf/flow.yml                                   |    55 +
 conf/flowGetFile.xml                            |     2 +-
 conf/flowTailFile.xml                           |     2 +-
 conf/flowTest.xml                               |   131 +-
 conf/minifi.properties                          |   191 +
 conf/nifi.properties                            |   191 -
 inc/FlowController.h                            |    40 +-
 inc/ProcessGroup.h                              |     2 +
 main/MiNiFiMain.cpp                             |    72 +-
 src/FlowController.cpp                          |   985 +-
 src/ProcessGroup.cpp                            |    23 +
 src/ProcessSession.cpp                          |     6 +-
 src/Processor.cpp                               |     4 +-
 thirdparty/uuid/libuuid.a                       |   Bin 1172996 -> 0 bytes
 thirdparty/uuid/tst_uuid                        |   Bin 29660 -> 0 bytes
 .../yaml-cpp-yaml-cpp-0.5.3/.clang-format       |    47 +
 thirdparty/yaml-cpp-yaml-cpp-0.5.3/.gitignore   |     1 +
 .../yaml-cpp-yaml-cpp-0.5.3/CMakeLists.txt      |   340 +
 .../yaml-cpp-yaml-cpp-0.5.3/CONTRIBUTING.md     |    17 +
 thirdparty/yaml-cpp-yaml-cpp-0.5.3/LICENSE      |    19 +
 thirdparty/yaml-cpp-yaml-cpp-0.5.3/Makefile     |    40 +
 thirdparty/yaml-cpp-yaml-cpp-0.5.3/README.md    |    52 +
 .../include/yaml-cpp/anchor.h                   |    17 +
 .../include/yaml-cpp/binary.h                   |    67 +
 .../include/yaml-cpp/contrib/anchordict.h       |    37 +
 .../include/yaml-cpp/contrib/graphbuilder.h     |   147 +
 .../include/yaml-cpp/dll.h                      |    37 +
 .../include/yaml-cpp/emitfromevents.h           |    57 +
 .../include/yaml-cpp/emitter.h                  |   254 +
 .../include/yaml-cpp/emitterdef.h               |    16 +
 .../include/yaml-cpp/emittermanip.h             |   137 +
 .../include/yaml-cpp/emitterstyle.h             |    16 +
 .../include/yaml-cpp/eventhandler.h             |    40 +
 .../include/yaml-cpp/exceptions.h               |   231 +
 .../include/yaml-cpp/mark.h                     |    29 +
 .../include/yaml-cpp/node/convert.h             |   297 +
 .../include/yaml-cpp/node/detail/bool_type.h    |    26 +
 .../include/yaml-cpp/node/detail/impl.h         |   177 +
 .../include/yaml-cpp/node/detail/iterator.h     |    65 +
 .../include/yaml-cpp/node/detail/iterator_fwd.h |    28 +
 .../include/yaml-cpp/node/detail/memory.h       |    46 +
 .../include/yaml-cpp/node/detail/node.h         |   170 +
 .../include/yaml-cpp/node/detail/node_data.h    |   127 +
 .../yaml-cpp/node/detail/node_iterator.h        |   159 +
 .../include/yaml-cpp/node/detail/node_ref.h     |    97 +
 .../include/yaml-cpp/node/emit.h                |    25 +
 .../include/yaml-cpp/node/impl.h                |   448 +
 .../include/yaml-cpp/node/iterator.h            |    31 +
 .../include/yaml-cpp/node/node.h                |   145 +
 .../include/yaml-cpp/node/parse.h               |    30 +
 .../include/yaml-cpp/node/ptr.h                 |    29 +
 .../include/yaml-cpp/node/type.h                |    16 +
 .../include/yaml-cpp/noncopyable.h              |    25 +
 .../include/yaml-cpp/null.h                     |    24 +
 .../include/yaml-cpp/ostream_wrapper.h          |    72 +
 .../include/yaml-cpp/parser.h                   |    48 +
 .../include/yaml-cpp/stlemitter.h               |    51 +
 .../include/yaml-cpp/traits.h                   |   103 +
 .../include/yaml-cpp/yaml.h                     |    24 +
 thirdparty/yaml-cpp-yaml-cpp-0.5.3/install.txt  |    24 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/binary.cpp      |    93 +
 .../src/collectionstack.h                       |    39 +
 .../src/contrib/graphbuilder.cpp                |    17 +
 .../src/contrib/graphbuilderadapter.cpp         |    94 +
 .../src/contrib/graphbuilderadapter.h           |    79 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/convert.cpp     |    75 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/directives.cpp  |    22 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/directives.h    |    29 +
 thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/emit.cpp |    25 +
 .../src/emitfromevents.cpp                      |   119 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/emitter.cpp     |   911 +
 .../src/emitterstate.cpp                        |   350 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/emitterstate.h  |   203 +
 .../src/emitterutils.cpp                        |   484 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/emitterutils.h  |    50 +
 thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/exp.cpp  |   136 +
 thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/exp.h    |   209 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/indentation.h   |    41 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/memory.cpp      |    26 +
 thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/node.cpp |    12 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/node_data.cpp   |   301 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/nodebuilder.cpp |   131 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/nodebuilder.h   |    70 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/nodeevents.cpp  |   101 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/nodeevents.h    |    64 +
 thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/null.cpp |     5 +
 .../src/ostream_wrapper.cpp                     |    57 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/parse.cpp       |    68 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/parser.cpp      |   128 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/ptr_stack.h     |    53 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/ptr_vector.h    |    49 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/regex_yaml.cpp  |    45 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/regex_yaml.h    |    85 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/regeximpl.h     |   186 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/scanner.cpp     |   386 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/scanner.h       |   135 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/scanscalar.cpp  |   221 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/scanscalar.h    |    61 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/scantag.cpp     |    81 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/scantag.h       |    19 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/scantoken.cpp   |   436 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/setting.h       |    99 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/simplekey.cpp   |   128 +
 .../src/singledocparser.cpp                     |   413 +
 .../src/singledocparser.h                       |    65 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/stream.cpp      |   448 +
 thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/stream.h |    76 +
 .../src/streamcharsource.h                      |    48 +
 .../yaml-cpp-yaml-cpp-0.5.3/src/stringsource.h  |    48 +
 thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/tag.cpp  |    49 +
 thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/tag.h    |    33 +
 thirdparty/yaml-cpp-yaml-cpp-0.5.3/src/token.h  |    69 +
 .../yaml-cpp-yaml-cpp-0.5.3/test/CMakeLists.txt |    34 +
 .../test/create-emitter-tests.py                |   211 +
 .../test/gmock-1.7.0/CHANGES                    |   126 +
 .../test/gmock-1.7.0/CMakeLists.txt             |   171 +
 .../test/gmock-1.7.0/CONTRIBUTORS               |    40 +
 .../test/gmock-1.7.0/LICENSE                    |    28 +
 .../test/gmock-1.7.0/Makefile.am                |   216 +
 .../test/gmock-1.7.0/Makefile.in                |  1357 ++
 .../test/gmock-1.7.0/README                     |   369 +
 .../test/gmock-1.7.0/aclocal.m4                 |  9799 ++++++++
 .../test/gmock-1.7.0/build-aux/config.guess     |  1530 ++
 .../test/gmock-1.7.0/build-aux/config.h.in      |    69 +
 .../test/gmock-1.7.0/build-aux/config.sub       |  1773 ++
 .../test/gmock-1.7.0/build-aux/depcomp          |   688 +
 .../test/gmock-1.7.0/build-aux/install-sh       |   527 +
 .../test/gmock-1.7.0/build-aux/ltmain.sh        |  9661 ++++++++
 .../test/gmock-1.7.0/build-aux/missing          |   331 +
 .../test/gmock-1.7.0/configure                  | 18535 +++++++++++++++
 .../test/gmock-1.7.0/configure.ac               |   146 +
 .../gmock-1.7.0/fused-src/gmock-gtest-all.cc    | 11443 ++++++++++
 .../test/gmock-1.7.0/fused-src/gmock/gmock.h    | 14198 ++++++++++++
 .../test/gmock-1.7.0/fused-src/gmock_main.cc    |    54 +
 .../test/gmock-1.7.0/fused-src/gtest/gtest.h    | 20061 +++++++++++++++++
 .../test/gmock-1.7.0/gtest/CHANGES              |   157 +
 .../test/gmock-1.7.0/gtest/CMakeLists.txt       |   252 +
 .../test/gmock-1.7.0/gtest/CONTRIBUTORS         |    37 +
 .../test/gmock-1.7.0/gtest/LICENSE              |    28 +
 .../test/gmock-1.7.0/gtest/Makefile.am          |   306 +
 .../test/gmock-1.7.0/gtest/Makefile.in          |  1360 ++
 .../test/gmock-1.7.0/gtest/README               |   435 +
 .../test/gmock-1.7.0/gtest/aclocal.m4           |  1198 +
 .../gmock-1.7.0/gtest/build-aux/config.guess    |  1530 ++
 .../gmock-1.7.0/gtest/build-aux/config.h.in     |    69 +
 .../test/gmock-1.7.0/gtest/build-aux/config.sub |  1773 ++
 .../test/gmock-1.7.0/gtest/build-aux/depcomp    |   688 +
 .../test/gmock-1.7.0/gtest/build-aux/install-sh |   527 +
 .../test/gmock-1.7.0/gtest/build-aux/ltmain.sh  |  9661 ++++++++
 .../test/gmock-1.7.0/gtest/build-aux/missing    |   331 +
 .../gtest/cmake/internal_utils.cmake            |   227 +
 .../gmock-1.7.0/gtest/codegear/gtest.cbproj     |   138 +
 .../gmock-1.7.0/gtest/codegear/gtest.groupproj  |    54 +
 .../gmock-1.7.0/gtest/codegear/gtest_all.cc     |    38 +
 .../gmock-1.7.0/gtest/codegear/gtest_link.cc    |    40 +
 .../gtest/codegear/gtest_main.cbproj            |    82 +
 .../gtest/codegear/gtest_unittest.cbproj        |    88 +
 .../test/gmock-1.7.0/gtest/configure            | 18222 +++++++++++++++
 .../test/gmock-1.7.0/gtest/configure.ac         |    68 +
 .../gtest/fused-src/gtest/gtest-all.cc          |  9592 ++++++++
 .../gmock-1.7.0/gtest/fused-src/gtest/gtest.h   | 20061 +++++++++++++++++
 .../gtest/fused-src/gtest/gtest_main.cc         |    38 +
 .../gtest/include/gtest/gtest-death-test.h      |   294 +
 .../gtest/include/gtest/gtest-message.h         |   250 +
 .../gtest/include/gtest/gtest-param-test.h      |  1421 ++
 .../gtest/include/gtest/gtest-param-test.h.pump |   487 +
 .../gtest/include/gtest/gtest-printers.h        |   855 +
 .../gmock-1.7.0/gtest/include/gtest/gtest-spi.h |   232 +
 .../gtest/include/gtest/gtest-test-part.h       |   179 +
 .../gtest/include/gtest/gtest-typed-test.h      |   259 +
 .../gmock-1.7.0/gtest/include/gtest/gtest.h     |  2291 ++
 .../gtest/include/gtest/gtest_pred_impl.h       |   358 +
 .../gtest/include/gtest/gtest_prod.h            |    58 +
 .../gtest/internal/gtest-death-test-internal.h  |   319 +
 .../include/gtest/internal/gtest-filepath.h     |   206 +
 .../include/gtest/internal/gtest-internal.h     |  1158 +
 .../include/gtest/internal/gtest-linked_ptr.h   |   233 +
 .../gtest/internal/gtest-param-util-generated.h |  5143 +++++
 .../internal/gtest-param-util-generated.h.pump  |   301 +
 .../include/gtest/internal/gtest-param-util.h   |   619 +
 .../gtest/include/gtest/internal/gtest-port.h   |  1947 ++
 .../gtest/include/gtest/internal/gtest-string.h |   167 +
 .../gtest/include/gtest/internal/gtest-tuple.h  |  1012 +
 .../include/gtest/internal/gtest-tuple.h.pump   |   339 +
 .../include/gtest/internal/gtest-type-util.h    |  3331 +++
 .../gtest/internal/gtest-type-util.h.pump       |   297 +
 .../test/gmock-1.7.0/gtest/m4/acx_pthread.m4    |   363 +
 .../test/gmock-1.7.0/gtest/m4/gtest.m4          |    74 +
 .../test/gmock-1.7.0/gtest/m4/libtool.m4        |  8001 +++++++
 .../test/gmock-1.7.0/gtest/m4/ltoptions.m4      |   384 +
 .../test/gmock-1.7.0/gtest/m4/ltsugar.m4        |   123 +
 .../test/gmock-1.7.0/gtest/m4/ltversion.m4      |    23 +
 .../test/gmock-1.7.0/gtest/m4/lt~obsolete.m4    |    98 +
 .../test/gmock-1.7.0/gtest/make/Makefile        |    82 +
 .../test/gmock-1.7.0/gtest/msvc/gtest-md.sln    |    45 +
 .../test/gmock-1.7.0/gtest/msvc/gtest-md.vcproj |   126 +
 .../test/gmock-1.7.0/gtest/msvc/gtest.sln       |    45 +
 .../test/gmock-1.7.0/gtest/msvc/gtest.vcproj    |   126 +
 .../gmock-1.7.0/gtest/msvc/gtest_main-md.vcproj |   129 +
 .../gmock-1.7.0/gtest/msvc/gtest_main.vcproj    |   129 +
 .../gtest/msvc/gtest_prod_test-md.vcproj        |   164 +
 .../gtest/msvc/gtest_prod_test.vcproj           |   164 +
 .../gtest/msvc/gtest_unittest-md.vcproj         |   147 +
 .../gtest/msvc/gtest_unittest.vcproj            |   147 +
 .../gmock-1.7.0/gtest/samples/prime_tables.h    |   123 +
 .../test/gmock-1.7.0/gtest/samples/sample1.cc   |    68 +
 .../test/gmock-1.7.0/gtest/samples/sample1.h    |    43 +
 .../gtest/samples/sample10_unittest.cc          |   144 +
 .../gtest/samples/sample1_unittest.cc           |   153 +
 .../test/gmock-1.7.0/gtest/samples/sample2.cc   |    56 +
 .../test/gmock-1.7.0/gtest/samples/sample2.h    |    85 +
 .../gtest/samples/sample2_unittest.cc           |   109 +
 .../gmock-1.7.0/gtest/samples/sample3-inl.h     |   172 +
 .../gtest/samples/sample3_unittest.cc           |   151 +
 .../test/gmock-1.7.0/gtest/samples/sample4.cc   |    46 +
 .../test/gmock-1.7.0/gtest/samples/sample4.h    |    53 +
 .../gtest/samples/sample4_unittest.cc           |    45 +
 .../gtest/samples/sample5_unittest.cc           |   199 +
 .../gtest/samples/sample6_unittest.cc           |   224 +
 .../gtest/samples/sample7_unittest.cc           |   130 +
 .../gtest/samples/sample8_unittest.cc           |   173 +
 .../gtest/samples/sample9_unittest.cc           |   160 +
 .../gtest/scripts/fuse_gtest_files.py           |   250 +
 .../gtest/scripts/gen_gtest_pred_impl.py        |   730 +
 .../gmock-1.7.0/gtest/scripts/gtest-config.in   |   274 +
 .../test/gmock-1.7.0/gtest/scripts/pump.py      |   855 +
 .../gmock-1.7.0/gtest/scripts/test/Makefile     |    59 +
 .../test/gmock-1.7.0/gtest/src/gtest-all.cc     |    48 +
 .../gmock-1.7.0/gtest/src/gtest-death-test.cc   |  1344 ++
 .../gmock-1.7.0/gtest/src/gtest-filepath.cc     |   382 +
 .../gmock-1.7.0/gtest/src/gtest-internal-inl.h  |  1218 +
 .../test/gmock-1.7.0/gtest/src/gtest-port.cc    |   805 +
 .../gmock-1.7.0/gtest/src/gtest-printers.cc     |   363 +
 .../gmock-1.7.0/gtest/src/gtest-test-part.cc    |   110 +
 .../gmock-1.7.0/gtest/src/gtest-typed-test.cc   |   110 +
 .../test/gmock-1.7.0/gtest/src/gtest.cc         |  5015 ++++
 .../test/gmock-1.7.0/gtest/src/gtest_main.cc    |    38 +
 .../gtest/test/gtest-death-test_ex_test.cc      |    93 +
 .../gtest/test/gtest-death-test_test.cc         |  1367 ++
 .../gtest/test/gtest-filepath_test.cc           |   680 +
 .../gtest/test/gtest-linked_ptr_test.cc         |   154 +
 .../gtest/test/gtest-listener_test.cc           |   310 +
 .../gtest/test/gtest-message_test.cc            |   159 +
 .../gtest/test/gtest-options_test.cc            |   215 +
 .../gtest/test/gtest-param-test2_test.cc        |    65 +
 .../gtest/test/gtest-param-test_test.cc         |   904 +
 .../gtest/test/gtest-param-test_test.h          |    57 +
 .../gmock-1.7.0/gtest/test/gtest-port_test.cc   |  1253 +
 .../gtest/test/gtest-printers_test.cc           |  1566 ++
 .../gtest/test/gtest-test-part_test.cc          |   208 +
 .../gmock-1.7.0/gtest/test/gtest-tuple_test.cc  |   320 +
 .../gtest/test/gtest-typed-test2_test.cc        |    45 +
 .../gtest/test/gtest-typed-test_test.cc         |   360 +
 .../gtest/test/gtest-typed-test_test.h          |    66 +
 .../gtest/test/gtest-unittest-api_test.cc       |   341 +
 .../gmock-1.7.0/gtest/test/gtest_all_test.cc    |    47 +
 .../test/gtest_break_on_failure_unittest.py     |   212 +
 .../test/gtest_break_on_failure_unittest_.cc    |    88 +
 .../gtest/test/gtest_catch_exceptions_test.py   |   237 +
 .../gtest/test/gtest_catch_exceptions_test_.cc  |   311 +
 .../gmock-1.7.0/gtest/test/gtest_color_test.py  |   130 +
 .../gmock-1.7.0/gtest/test/gtest_color_test_.cc |    71 +
 .../gtest/test/gtest_env_var_test.py            |   103 +
 .../gtest/test/gtest_env_var_test_.cc           |   126 +
 .../gtest/test/gtest_environment_test.cc        |   192 +
 .../gtest/test/gtest_filter_unittest.py         |   633 +
 .../gtest/test/gtest_filter_unittest_.cc        |   140 +
 .../gmock-1.7.0/gtest/test/gtest_help_test.py   |   172 +
 .../gmock-1.7.0/gtest/test/gtest_help_test_.cc  |    46 +
 .../gtest/test/gtest_list_tests_unittest.py     |   207 +
 .../gtest/test/gtest_list_tests_unittest_.cc    |   157 +
 .../gtest/test/gtest_main_unittest.cc           |    45 +
 .../gtest/test/gtest_no_test_unittest.cc        |    56 +
 .../gmock-1.7.0/gtest/test/gtest_output_test.py |   335 +
 .../gtest/test/gtest_output_test_.cc            |  1034 +
 .../gtest/test/gtest_output_test_golden_lin.txt |   720 +
 .../gtest/test/gtest_pred_impl_unittest.cc      |  2427 ++
 .../gtest/test/gtest_premature_exit_test.cc     |   141 +
 .../gmock-1.7.0/gtest/test/gtest_prod_test.cc   |    57 +
 .../gmock-1.7.0/gtest/test/gtest_repeat_test.cc |   253 +
 .../gtest/test/gtest_shuffle_test.py            |   325 +
 .../gtest/test/gtest_shuffle_test_.cc           |   103 +
 .../gtest/test/gtest_sole_header_test.cc        |    57 +
 .../gmock-1.7.0/gtest/test/gtest_stress_test.cc |   256 +
 .../gmock-1.7.0/gtest/test/gtest_test_utils.py  |   320 +
 .../test/gtest_throw_on_failure_ex_test.cc      |    92 +
 .../gtest/test/gtest_throw_on_failure_test.py   |   171 +
 .../gtest/test/gtest_throw_on_failure_test_.cc  |    72 +
 .../gtest/test/gtest_uninitialized_test.py      |    70 +
 .../gtest/test/gtest_uninitialized_test_.cc     |    43 +
 .../gmock-1.7.0/gtest/test/gtest_unittest.cc    |  7415 ++++++
 .../gtest/test/gtest_xml_outfile1_test_.cc      |    49 +
 .../gtest/test/gtest_xml_outfile2_test_.cc      |    49 +
 .../gtest/test/gtest_xml_outfiles_test.py       |   132 +
 .../gtest/test/gtest_xml_output_unittest.py     |   307 +
 .../gtest/test/gtest_xml_output_unittest_.cc    |   181 +
 .../gtest/test/gtest_xml_test_utils.py          |   194 +
 .../test/gmock-1.7.0/gtest/test/production.cc   |    36 +
 .../test/gmock-1.7.0/gtest/test/production.h    |    55 +
 .../gtest/xcode/Config/DebugProject.xcconfig    |    30 +
 .../gtest/xcode/Config/FrameworkTarget.xcconfig |    17 +
 .../gtest/xcode/Config/General.xcconfig         |    41 +
 .../gtest/xcode/Config/ReleaseProject.xcconfig  |    32 +
 .../xcode/Config/StaticLibraryTarget.xcconfig   |    18 +
 .../gtest/xcode/Config/TestTarget.xcconfig      |     8 +
 .../gtest/xcode/Resources/Info.plist            |    30 +
 .../xcode/Samples/FrameworkSample/Info.plist    |    28 +
 .../WidgetFramework.xcodeproj/project.pbxproj   |   457 +
 .../xcode/Samples/FrameworkSample/runtests.sh   |    62 +
 .../xcode/Samples/FrameworkSample/widget.cc     |    63 +
 .../xcode/Samples/FrameworkSample/widget.h      |    59 +
 .../Samples/FrameworkSample/widget_test.cc      |    68 +
 .../gmock-1.7.0/gtest/xcode/Scripts/runtests.sh |    65 +
 .../gtest/xcode/Scripts/versiongenerate.py      |   100 +
 .../gtest/xcode/gtest.xcodeproj/project.pbxproj |  1135 +
 .../gmock-1.7.0/include/gmock/gmock-actions.h   |  1078 +
 .../include/gmock/gmock-cardinalities.h         |   147 +
 .../include/gmock/gmock-generated-actions.h     |  2415 ++
 .../gmock/gmock-generated-actions.h.pump        |   821 +
 .../gmock/gmock-generated-function-mockers.h    |   991 +
 .../gmock-generated-function-mockers.h.pump     |   265 +
 .../include/gmock/gmock-generated-matchers.h    |  2190 ++
 .../gmock/gmock-generated-matchers.h.pump       |   674 +
 .../include/gmock/gmock-generated-nice-strict.h |   397 +
 .../gmock/gmock-generated-nice-strict.h.pump    |   161 +
 .../gmock-1.7.0/include/gmock/gmock-matchers.h  |  3986 ++++
 .../include/gmock/gmock-more-actions.h          |   233 +
 .../include/gmock/gmock-more-matchers.h         |    58 +
 .../include/gmock/gmock-spec-builders.h         |  1791 ++
 .../test/gmock-1.7.0/include/gmock/gmock.h      |    94 +
 .../internal/gmock-generated-internal-utils.h   |   279 +
 .../gmock-generated-internal-utils.h.pump       |   136 +
 .../gmock/internal/gmock-internal-utils.h       |   498 +
 .../include/gmock/internal/gmock-port.h         |    78 +
 .../test/gmock-1.7.0/make/Makefile              |   101 +
 .../test/gmock-1.7.0/msvc/2005/gmock.sln        |    32 +
 .../test/gmock-1.7.0/msvc/2005/gmock.vcproj     |   191 +
 .../gmock-1.7.0/msvc/2005/gmock_config.vsprops  |    15 +
 .../gmock-1.7.0/msvc/2005/gmock_main.vcproj     |   187 +
 .../gmock-1.7.0/msvc/2005/gmock_test.vcproj     |   201 +
 .../test/gmock-1.7.0/msvc/2010/gmock.sln        |    32 +
 .../test/gmock-1.7.0/msvc/2010/gmock.vcxproj    |    82 +
 .../gmock-1.7.0/msvc/2010/gmock_config.props    |    19 +
 .../gmock-1.7.0/msvc/2010/gmock_main.vcxproj    |    88 +
 .../gmock-1.7.0/msvc/2010/gmock_test.vcxproj    |   101 +
 .../gmock-1.7.0/scripts/fuse_gmock_files.py     |   240 +
 .../test/gmock-1.7.0/scripts/generator/LICENSE  |   203 +
 .../test/gmock-1.7.0/scripts/generator/README   |    35 +
 .../scripts/generator/README.cppclean           |   115 +
 .../scripts/generator/cpp/__init__.py           |     0
 .../gmock-1.7.0/scripts/generator/cpp/ast.py    |  1723 ++
 .../scripts/generator/cpp/gmock_class.py        |   226 +
 .../scripts/generator/cpp/keywords.py           |    59 +
 .../scripts/generator/cpp/tokenize.py           |   287 +
 .../gmock-1.7.0/scripts/generator/cpp/utils.py  |    41 +
 .../gmock-1.7.0/scripts/generator/gmock_gen.py  |    31 +
 .../test/gmock-1.7.0/scripts/gmock-config.in    |   303 +
 .../test/gmock-1.7.0/src/gmock-all.cc           |    47 +
 .../test/gmock-1.7.0/src/gmock-cardinalities.cc |   156 +
 .../gmock-1.7.0/src/gmock-internal-utils.cc     |   174 +
 .../test/gmock-1.7.0/src/gmock-matchers.cc      |   498 +
 .../test/gmock-1.7.0/src/gmock-spec-builders.cc |   813 +
 .../test/gmock-1.7.0/src/gmock.cc               |   182 +
 .../test/gmock-1.7.0/src/gmock_main.cc          |    54 +
 .../test/gmock-1.7.0/test/gmock-actions_test.cc |  1256 ++
 .../test/gmock-cardinalities_test.cc            |   428 +
 .../test/gmock-generated-actions_test.cc        |  1225 +
 .../gmock-generated-function-mockers_test.cc    |   588 +
 .../test/gmock-generated-internal-utils_test.cc |   127 +
 .../test/gmock-generated-matchers_test.cc       |  1289 ++
 .../test/gmock-internal-utils_test.cc           |   649 +
 .../gmock-1.7.0/test/gmock-matchers_test.cc     |  5247 +++++
 .../gmock-1.7.0/test/gmock-more-actions_test.cc |   705 +
 .../gmock-1.7.0/test/gmock-nice-strict_test.cc  |   424 +
 .../test/gmock-1.7.0/test/gmock-port_test.cc    |    43 +
 .../test/gmock-spec-builders_test.cc            |  2613 +++
 .../test/gmock-1.7.0/test/gmock_all_test.cc     |    48 +
 .../test/gmock-1.7.0/test/gmock_ex_test.cc      |    78 +
 .../test/gmock-1.7.0/test/gmock_leak_test.py    |   108 +
 .../test/gmock-1.7.0/test/gmock_leak_test_.cc   |   100 +
 .../test/gmock-1.7.0/test/gmock_link2_test.cc   |    40 +
 .../test/gmock-1.7.0/test/gmock_link_test.cc    |    40 +
 .../test/gmock-1.7.0/test/gmock_link_test.h     |   669 +
 .../test/gmock-1.7.0/test/gmock_output_test.py  |   180 +
 .../test/gmock-1.7.0/test/gmock_output_test_.cc |   291 +
 .../test/gmock_output_test_golden.txt           |   310 +
 .../test/gmock-1.7.0/test/gmock_stress_test.cc  |   322 +
 .../test/gmock-1.7.0/test/gmock_test.cc         |   255 +
 .../test/gmock-1.7.0/test/gmock_test_utils.py   |   112 +
 .../yaml-cpp-yaml-cpp-0.5.3/test/handler_test.h |    32 +
 .../test/integration/emitter_test.cpp           |  1024 +
 .../test/integration/encoding_test.cpp          |   182 +
 .../test/integration/gen_emitter_test.cpp       |  9759 ++++++++
 .../test/integration/handler_spec_test.cpp      |  1611 ++
 .../test/integration/handler_test.cpp           |    46 +
 .../test/integration/load_node_test.cpp         |   202 +
 .../test/integration/node_spec_test.cpp         |  1131 +
 .../yaml-cpp-yaml-cpp-0.5.3/test/main.cpp       |     6 +
 .../test/mock_event_handler.h                   |    26 +
 .../test/node/node_test.cpp                     |   474 +
 .../test/ostream_wrapper_test.cpp               |    66 +
 .../yaml-cpp-yaml-cpp-0.5.3/test/specexamples.h |   846 +
 .../yaml-cpp-yaml-cpp-0.5.3/util/CMakeLists.txt |    11 +
 thirdparty/yaml-cpp-yaml-cpp-0.5.3/util/api.cpp |   137 +
 .../yaml-cpp-yaml-cpp-0.5.3/util/parse.cpp      |    61 +
 .../yaml-cpp-yaml-cpp-0.5.3/util/read.cpp       |    33 +
 .../yaml-cpp-yaml-cpp-0.5.3/util/sandbox.cpp    |    36 +
 .../yaml-cpp-config-version.cmake.in            |    11 +
 .../yaml-cpp-config.cmake.in                    |    14 +
 .../yaml-cpp-yaml-cpp-0.5.3/yaml-cpp.pc.cmake   |    11 +
 414 files changed, 300136 insertions(+), 618 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c7dcff2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+# Filter out generated files from the included libuuid
+thirdparty/uuid/tst_uuid*

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/LICENSE
----------------------------------------------------------------------
diff --git a/LICENSE b/LICENSE
index f1b29f3..4b01250 100644
--- a/LICENSE
+++ b/LICENSE
@@ -304,3 +304,34 @@ This product bundles 'yaml-cpp' which is available under 
an MIT license.
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 
IN
        THE SOFTWARE.
+
+This product bundles 'Google Test' which is available under a 3-Clause BSD 
License.
+
+  Copyright 2008, Google Inc.
+  All rights reserved.
+
+  Redistribution and use in source and binary forms, with or without
+  modification, are permitted provided that the following conditions are
+  met:
+
+      * Redistributions of source code must retain the above copyright
+  notice, this list of conditions and the following disclaimer.
+      * Redistributions in binary form must reproduce the above
+  copyright notice, this list of conditions and the following disclaimer
+  in the documentation and/or other materials provided with the
+  distribution.
+      * Neither the name of Google Inc. nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/Makefile
----------------------------------------------------------------------
diff --git a/Makefile b/Makefile
index 0bcfc35..40b11ff 100644
--- a/Makefile
+++ b/Makefile
@@ -26,28 +26,26 @@ TARGET_LIB=libminifi.a
 PROJECT=minifi
 TARGET_EXE=$(PROJECT)
 ifeq ($(ARCH), arm)
-CFLAGS=-O0 -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall 
-g -Wno-unused-private-field -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 
-Wl,--whole-archive -lpthread -Wl,--no-whole-archive -lc
-INCLUDES=-I./inc -I./src -I./thirdparty -I./test 
-I./thirdparty/libxml2/include #-I/usr/local/opt/leveldb/include/
-LDDIRECTORY=-L./build -L./thirdparty/uuid -L./thirdparty/libxml2/.libs/ 
#-L/usr/local/opt/leveldb/lib
-#LDFLAGS=-lminifi -lxml2 -lleveldb -pthread -luuid
+CFLAGS=-Os -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall 
-g -Wno-unused-private-field -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 
-Wl,--whole-archive -lpthread -Wl,--no-whole-archive -lc
+INCLUDES=-I./inc -I./src -I./thirdparty -I./test 
-I./thirdparty/libxml2/include -I./thirdparty/yaml-cpp-yaml-cpp-0.5.3/include
+LDDIRECTORY=-L./build -L./thirdparty -L./thirdparty/libxml2/.libs/
 LDFLAGS=-static -lminifi -lxml2 -pthread -luuid
 else ifeq ($(ARCH), linux)
-CFLAGS=-O0 -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall 
-g
-INCLUDES=-I./inc -I./src -I./thirdparty -I./test 
-I./thirdparty/libxml2/include #-I/usr/local/opt/leveldb/include/
-LDDIRECTORY=-L./build -L./thirdparty/uuid -L./thirdparty/libxml2/.libs/ 
#-L/usr/local/opt/leveldb/lib
-#LDFLAGS=-lminifi -lxml2 -lleveldb -pthread -luuid
+CFLAGS=-Os -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall 
-g
+INCLUDES=-I./inc -I./src -I./thirdparty -I./test 
-I./thirdparty/libxml2/include -I./thirdparty/yaml-cpp-yaml-cpp-0.5.3/include
+LDDIRECTORY=-L./build -L./thirdparty/uuid -L./thirdparty/libxml2/.libs/
 LDFLAGS=-lminifi -lxml2 -pthread -luuid
 else
-CFLAGS=-O0 -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall 
-g -Wno-unused-private-field
-INCLUDES=-I./inc -I./src -I./test -I/usr/include/libxml2 
#-I/usr/local/opt/leveldb/include/
-LDDIRECTORY=-L./build #-L/usr/local/opt/leveldb/out-static/
-LDFLAGS=-lminifi -lxml2 -pthread -luuid #--llevedb
+CFLAGS=-Os -fexceptions -fpermissive -Wno-write-strings -std=c++11 -fPIC -Wall 
-g -Wno-unused-private-field
+INCLUDES=-I./inc -I./src -I./test -I./thirdparty -I/usr/include/libxml2 
-I./thirdparty/yaml-cpp-yaml-cpp-0.5.3/include
+LDDIRECTORY=-L./build -L./thirdparty/uuid 
-L./thirdparty/yaml-cpp-yaml-cpp-0.5.3/lib/
+LDFLAGS=-lminifi -lxml2 -pthread -luuid -lyaml-cpp
 endif
 
 
 UNAME_S := $(shell uname -s)
 ifeq ($(UNAME_S),Linux)
-       LDFLAGS += -lrt
+  LDFLAGS += -lrt
 endif
 ifeq ($(UNAME_S),Darwin)
 endif
@@ -55,18 +53,22 @@ endif
 OBJS:=$(shell /bin/ls src/*.cpp | xargs -n1 basename 2>/dev/null |  awk 
'/\.cpp$$/{a=$$0; gsub("\\.cpp$$",".o", a); print "$(BUILD_DIR)/" a}')
 TESTS:=Server
 
-all: directory $(BUILD_DIR)/$(TARGET_LIB) minifi tests assemblies
+all: thirdparty/yaml-cpp-yaml-cpp-0.5.3/lib/libyaml-cpp.a directory 
$(BUILD_DIR)/$(TARGET_LIB) minifi tests assembly-pkgs
+
+thirdparty/yaml-cpp-yaml-cpp-0.5.3/lib/libyaml-cpp.a:
+       make -C thirdparty/yaml-cpp-yaml-cpp-0.5.3
+
 
 .PHONY: directory
 directory:
        mkdir -p $(BUILD_DIR)
        mkdir -p $(TARGET_DIR)
+       make -C thirdparty/uuid
 ifeq ($(ARCH), arm)
-       make -C thirdparty/uuid CROSS_COMPILE=$(CROSS_COMPILE)
-       cd thirdparty/libxml2; ./configure --host=${CROSS_COMPILE} 
--target==${CROSSS_COMPILE} --without-python --without-zlib --enable-static 
--disable-shared; make; cd ../../
+  make -C thirdparty/uuid CROSS_COMPILE=$(CROSS_COMPILE)
+  cd thirdparty/libxml2; ./configure --host=${CROSS_COMPILE} 
--target==${CROSSS_COMPILE} --without-python --without-zlib --enable-static 
--disable-shared; make; cd ../../
 else ifeq ($(ARCH), linux)
-       make -C thirdparty/uuid
-       cd thirdparty/libxml2; ./configure --without-python --without-zlib 
--enable-static --disable-shared; make; cd ../../
+  cd thirdparty/libxml2; ./configure --without-python --without-zlib 
--enable-static --disable-shared; make; cd ../../
 endif
 
 $(BUILD_DIR)/%.o: src/%.cpp
@@ -75,48 +77,54 @@ $(BUILD_DIR)/%.o: src/%.cpp
 $(BUILD_DIR)/$(TARGET_LIB): $(OBJS)
        $(AR) crs $@ $(OBJS)
 
-minifi: $(BUILD_DIR)/$(TARGET_LIB)
+minifi: $(BUILD_DIR)/$(TARGET_LIB) 
thirdparty/yaml-cpp-yaml-cpp-0.5.3/lib/libyaml-cpp.a
        $(CC) $(CFLAGS) $(INCLUDES) -o $(BUILD_DIR)/$(TARGET_EXE) 
main/MiNiFiMain.cpp $(LDDIRECTORY) $(LDFLAGS)
        cp $(BUILD_DIR)/$(TARGET_EXE) $(TARGET_DIR)/$(TARGET_EXE)
 
 .PHONY: tests
-tests: $(BUILD_DIR)/$(TARGET_LIB)
+tests: $(BUILD_DIR)/$(TARGET_LIB) 
thirdparty/yaml-cpp-yaml-cpp-0.5.3/lib/libyaml-cpp.a
        $(foreach TEST_NAME, $(TESTS),\
        $(CC) $(CFLAGS) $(INCLUDES) -o $(BUILD_DIR)/$(TEST_NAME) 
test/$(TEST_NAME).cpp $(LDDIRECTORY) $(LDFLAGS))
 
 $(ASSEMBLIES_DIR) :
        mkdir -p $(ASSEMBLIES_DIR)
 
+.PHONY: assembly-pkgs
+assembly-pkgs: $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-bin.tar.gz  
$(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source.tar.gz
+
 $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source.tar.gz : $(ASSEMBLIES_DIR)
-       tar -czf $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source.tar.gz \
-               LICENSE \
-               NOTICE \
-               README.md \
-               inc \
-               src \
-               main \
-               conf \
-               thirdparty \
-               Makefile
-       
+       mkdir -p $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source
+       cp -r LICENSE \
+    NOTICE \
+    README.md \
+    inc \
+    src \
+    main \
+    conf \
+    thirdparty \
+    Makefile \
+    $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source
+       tar -czf $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source.tar.gz  -C 
$(ASSEMBLIES_DIR) $(PROJECT)-$(VERSION)-source
+
 $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-bin.tar.gz : $(ASSEMBLIES_DIR) 
$(TARGET_EXE)
        tar -czf $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-bin.tar.gz \
-               LICENSE \
-               NOTICE \
-               README.md \
-               conf \
-               -C target minifi
+    LICENSE \
+    NOTICE \
+    README.md \
+    conf \
+    -C target minifi
 
 .PHONY: clean
 clean:
        rm -rf $(BUILD_DIR)
        rm -rf $(TARGET_DIR)
        rm -rf $(ASSEMBLIES_DIR)
-ifeq ($(ARCH), arm)
+       make -C thirdparty/yaml-cpp-yaml-cpp-0.5.3 clean
        make -C thirdparty/uuid clean
-       make -C thirdparty/libxml2 distclean
+ifeq ($(ARCH), arm)
+  make -C thirdparty/uuid clean
+  make -C thirdparty/libxml2 distclean
 else ifeq ($(ARCH), linux)
-       make -C thirdparty/uuid clean
-       make -C thirdparty/libxml2 distclean
+  make -C thirdparty/uuid clean
+  make -C thirdparty/libxml2 distclean
 endif
-

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index 6c4137e..233caf4 100644
--- a/README.md
+++ b/README.md
@@ -96,7 +96,7 @@ Add new propery HostName and Port into RemoteProcessGroup 
InputOutput port for r
         </property>
       </inputPort>
 2)
-Add new proerties into nifi.properties for command control 
+Add new proerties into minifi.properties for command control 
 # MiNiFi Server for Command Control
 nifi.server.name=localhost
 nifi.server.port=9000

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/conf/flow.yml
----------------------------------------------------------------------
diff --git a/conf/flow.yml b/conf/flow.yml
new file mode 100644
index 0000000..6ebfa70
--- /dev/null
+++ b/conf/flow.yml
@@ -0,0 +1,55 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the \"License\"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an \"AS IS\" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+Flow Controller:
+    name: MiNiFi Flow
+
+Processors:
+    - name: GetFile
+      class: org.apache.nifi.processors.standard.GetFile
+      max concurrent tasks: 1
+      scheduling strategy: TIMER_DRIVEN
+      scheduling period: 1 sec
+      penalization period: 30 sec
+      yield period: 1 sec
+      run duration nanos: 0
+      auto-terminated relationships list:
+      Properties:
+          Input Directory: /tmp/getfile
+          Keep Source File: true
+
+Connections:
+    - name: GenerateFlowFileS2S
+      source name: GetFile
+      source relationship name: success
+      destination name: 471deef6-2a6e-4a7d-912a-81cc17e3a204
+      max work queue size: 0
+      max work queue data size: 1 MB
+      flowfile expiration: 60 sec
+      queue prioritizer class: 
org.apache.nifi.prioritizer.NewestFlowFileFirstPrioritizer
+
+Remote Processing Groups:
+    - name: NiFi Flow
+      url: https://localhost:8081/nifi
+      timeout: 30 secs
+      yield period: 10 sec
+      Input Ports:
+          - id: 471deef6-2a6e-4a7d-912a-81cc17e3a204
+            name: From Node A
+            max concurrent tasks: 1
+            use compression: false
+            Properties: # Deviates from spec and will later be removed when 
this is autonegotiated
+                Port: 10001
+                Host Name: localhost

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/conf/flowGetFile.xml
----------------------------------------------------------------------
diff --git a/conf/flowGetFile.xml b/conf/flowGetFile.xml
index 25369fb..bc29c30 100644
--- a/conf/flowGetFile.xml
+++ b/conf/flowGetFile.xml
@@ -25,7 +25,7 @@
       <runDurationNanos>0</runDurationNanos>
       <property>
         <name>Input Directory</name>
-        <value>/Users/binqiu/GetFile</value>
+        <value>/Users/user/GetFile</value>
       </property>
       <property>
         <name>File Filter</name>

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/conf/flowTailFile.xml
----------------------------------------------------------------------
diff --git a/conf/flowTailFile.xml b/conf/flowTailFile.xml
index 022bc4e..04c7d9b 100644
--- a/conf/flowTailFile.xml
+++ b/conf/flowTailFile.xml
@@ -60,7 +60,7 @@
       <runDurationNanos>0</runDurationNanos>
       <property>
         <name>File to Tail</name>
-        <value>/Users/binqiu/getFile/log.txt</value>
+        <value>/Users/user/getFile/log.txt</value>
       </property>
       <property>
         <name>Rolling Filename Pattern</name>

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/conf/flowTest.xml
----------------------------------------------------------------------
diff --git a/conf/flowTest.xml b/conf/flowTest.xml
index 56125f8..51b74e8 100644
--- a/conf/flowTest.xml
+++ b/conf/flowTest.xml
@@ -8,6 +8,41 @@
     <position x="0.0" y="0.0"/>
     <comment/>
     <processor>
+      <id>e01275ae-ac38-48f9-ac53-1a44df1be88e</id>
+      <name>LogAttribute</name>
+      <position x="3950.0958625440016" y="1355.8949219185629"/>
+      <styles/>
+      <comment/>
+      <class>org.apache.nifi.processors.standard.LogAttribute</class>
+      <maxConcurrentTasks>1</maxConcurrentTasks>
+      <schedulingPeriod>0 sec</schedulingPeriod>
+      <penalizationPeriod>30 sec</penalizationPeriod>
+      <yieldPeriod>1 sec</yieldPeriod>
+      <bulletinLevel>WARN</bulletinLevel>
+      <lossTolerant>false</lossTolerant>
+      <scheduledState>RUNNING</scheduledState>
+      <schedulingStrategy>TIMER_DRIVEN</schedulingStrategy>
+      <runDurationNanos>0</runDurationNanos>
+      <property>
+        <name>Log Level</name>
+        <value>info</value>
+      </property>
+      <property>
+        <name>Log Payload</name>
+        <value>false</value>
+      </property>
+      <property>
+        <name>Attributes to Log</name>
+      </property>
+      <property>
+        <name>Attributes to Ignore</name>
+      </property>
+      <property>
+        <name>Log prefix</name>
+      </property>
+      <autoTerminatedRelationship>success</autoTerminatedRelationship>
+    </processor>
+    <processor>
       <id>572aa3f3-6288-4ca1-ae43-5e492cb0ea23</id>
       <name>LogAttribute</name>
       <position x="3259.732177734375" y="1739.991943359375"/>
@@ -60,7 +95,7 @@
       <runDurationNanos>0</runDurationNanos>
       <property>
         <name>File Size</name>
-        <value>1 kB</value>
+        <value>1024 kB</value>
       </property>
       <property>
         <name>Batch Size</name>
@@ -75,6 +110,69 @@
         <value>false</value>
       </property>
     </processor>
+    <label>
+      <id>809d63d9-6feb-496a-9dc3-d23c217e52fd</id>
+      <position x="3635.581271381991" y="1309.9918825902428"/>
+      <size height="193.5023651123047" width="641.0671997070312"/>
+      <styles>
+        <style name="background-color">#9a91ff</style>
+        <style name="font-size">16px</style>
+      </styles>
+      <value>Pull From Node B</value>
+    </label>
+    <label>
+      <id>d95ce8d3-c005-4d0b-8fcc-b2f6fae7172f</id>
+      <position x="2601.7320892530847" y="1413.1875613011803"/>
+      <size height="193.5023651123047" width="641.0671997070312"/>
+      <styles>
+        <style name="font-size">16px</style>
+      </styles>
+      <value>Push to Node B</value>
+    </label>
+    <remoteProcessGroup>
+      <id>8f3b248f-d493-4269-b317-36f85719f480</id>
+      <name>NiFi Flow</name>
+      <position x="3254.3356850982673" y="1432.3274284388426"/>
+      <comment/>
+      <url>http://localhost:8081/nifi</url>
+      <timeout>30 sec</timeout>
+      <yieldPeriod>1 sec</yieldPeriod>
+      <transmitting>true</transmitting>
+      <inputPort>
+        <id>471deef6-2a6e-4a7d-912a-81cc17e3a204</id>
+        <name> From Node A</name>
+        <position x="0.0" y="0.0"/>
+        <comments/>
+        <scheduledState>RUNNING</scheduledState>
+        <maxConcurrentTasks>1</maxConcurrentTasks>
+        <useCompression>false</useCompression>
+        <property>
+            <name>Host Name</name>
+               <value>localhost</value>
+        </property>
+        <property>
+            <name>Port</name>
+            <value>10001</value>
+        </property>
+      </inputPort>
+      <outputPort>
+        <id>75f88005-0a87-4fef-8320-6219cdbcf18b</id>
+        <name>To A</name>
+        <position x="0.0" y="0.0"/>
+        <comments/>
+        <scheduledState>RUNNING</scheduledState>
+        <maxConcurrentTasks>1</maxConcurrentTasks>
+        <useCompression>false</useCompression>
+        <property>
+            <name>Host Name</name>
+            <value>localhost</value>
+        </property>
+        <property>
+            <name>Port</name>
+            <value>10001</value>
+        </property>
+      </outputPort>
+    </remoteProcessGroup>
     <connection>
       <id>c4cf70d8-be05-4c3d-b926-465f330d6503</id>
       <name/>
@@ -93,20 +191,35 @@
       <flowFileExpiration>0 sec</flowFileExpiration>
     </connection>
     <connection>
-      <id>673cf83c-d261-4b6b-8e5a-19052fe40025</id>
-      <name/>
-      <bendPoints>
-        <bendPoint x="3106.4228882570283" y="1573.7169700192542"/>
-      </bendPoints>
+      <id>c9573abe-937c-464b-b18d-48b29c42dce2</id>
+      <name>site2siteSEND</name>
+      <bendPoints/>
       <labelIndex>1</labelIndex>
       <zIndex>0</zIndex>
       <sourceId>a0e57bb2-5b89-438e-8869-0326bbdbbe43</sourceId>
       <sourceGroupId>fe4a3a42-53b6-4af1-a80d-6fdfe60de97f</sourceGroupId>
       <sourceType>PROCESSOR</sourceType>
-      <destinationId>572aa3f3-6288-4ca1-ae43-5e492cb0ea23</destinationId>
+      <destinationId>471deef6-2a6e-4a7d-912a-81cc17e3a204</destinationId>
+      
<destinationGroupId>8f3b248f-d493-4269-b317-36f85719f480</destinationGroupId>
+      <destinationType>REMOTE_INPUT_PORT</destinationType>
+      <relationship>success</relationship>
+      <maxWorkQueueSize>0</maxWorkQueueSize>
+      <maxWorkQueueDataSize>0 MB</maxWorkQueueDataSize>
+      <flowFileExpiration>0 sec</flowFileExpiration>
+    </connection>
+    <connection>
+      <id>2cb90b4c-d6cb-4fef-8f0f-b16459561af5</id>
+      <name>site2siteReceive</name>
+      <bendPoints/>
+      <labelIndex>1</labelIndex>
+      <zIndex>0</zIndex>
+      <sourceId>75f88005-0a87-4fef-8320-6219cdbcf18b</sourceId>
+      <sourceGroupId>8f3b248f-d493-4269-b317-36f85719f480</sourceGroupId>
+      <sourceType>REMOTE_OUTPUT_PORT</sourceType>
+      <destinationId>e01275ae-ac38-48f9-ac53-1a44df1be88e</destinationId>
       
<destinationGroupId>fe4a3a42-53b6-4af1-a80d-6fdfe60de97f</destinationGroupId>
       <destinationType>PROCESSOR</destinationType>
-      <relationship>success</relationship>
+      <relationship/>
       <maxWorkQueueSize>0</maxWorkQueueSize>
       <maxWorkQueueDataSize>0 MB</maxWorkQueueDataSize>
       <flowFileExpiration>0 sec</flowFileExpiration>
@@ -156,7 +269,7 @@
       </property>
       <property>
         <name>Truststore Password</name>
-        
<value>enc{9E2EE146023A0F31914706460EB177B357796CF0C768DECE09D10C4B40F344C8}</value>
+        
<value>enc{3A31531B76B6395A72FB8BEB4C93E2040877D07C04FDAB5A84499B918BECEB77}</value>
       </property>
       <property>
         <name>Truststore Type</name>

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/conf/minifi.properties
----------------------------------------------------------------------
diff --git a/conf/minifi.properties b/conf/minifi.properties
new file mode 100644
index 0000000..854b84a
--- /dev/null
+++ b/conf/minifi.properties
@@ -0,0 +1,191 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Core Properties #
+nifi.version=0.6.0-SNAPSHOT
+nifi.flow.configuration.file=./conf/flow.yml
+nifi.flow.configuration.archive.dir=./conf/archive/
+nifi.flowcontroller.autoResumeState=true
+nifi.flowcontroller.graceful.shutdown.period=10 sec
+nifi.flowservice.writedelay.interval=500 ms
+nifi.administrative.yield.duration=30 sec
+# If a component has no work to do (is "bored"), how long should we wait 
before checking again for work?
+nifi.bored.yield.duration=10 millis
+
+nifi.authority.provider.configuration.file=./conf/authority-providers.xml
+nifi.login.identity.provider.configuration.file=./conf/login-identity-providers.xml
+nifi.templates.directory=./conf/templates
+nifi.ui.banner.text=
+nifi.ui.autorefresh.interval=30 sec
+nifi.nar.library.directory=./lib
+nifi.nar.working.directory=./work/nar/
+nifi.documentation.working.directory=./work/docs/components
+
+####################
+# State Management #
+####################
+nifi.state.management.configuration.file=./conf/state-management.xml
+# The ID of the local state provider
+nifi.state.management.provider.local=local-provider
+# The ID of the cluster-wide state provider. This will be ignored if NiFi is 
not clustered but must be populated if running in a cluster.
+nifi.state.management.provider.cluster=zk-provider
+# Specifies whether or not this instance of NiFi should run an embedded 
ZooKeeper server
+nifi.state.management.embedded.zookeeper.start=false
+# Properties file that provides the ZooKeeper properties to use if 
<nifi.state.management.embedded.zookeeper.start> is set to true
+nifi.state.management.embedded.zookeeper.properties=./conf/zookeeper.properties
+
+
+# H2 Settings
+nifi.database.directory=./database_repository
+nifi.h2.url.append=;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE
+
+# FlowFile Repository
+nifi.flowfile.repository.implementation=org.apache.nifi.controller.repository.WriteAheadFlowFileRepository
+nifi.flowfile.repository.directory=./flowfile_repository
+nifi.flowfile.repository.partitions=256
+nifi.flowfile.repository.checkpoint.interval=2 mins
+nifi.flowfile.repository.always.sync=false
+
+nifi.swap.manager.implementation=org.apache.nifi.controller.FileSystemSwapManager
+nifi.queue.swap.threshold=20000
+nifi.swap.in.period=5 sec
+nifi.swap.in.threads=1
+nifi.swap.out.period=5 sec
+nifi.swap.out.threads=4
+
+# Content Repository
+nifi.content.repository.implementation=org.apache.nifi.controller.repository.FileSystemRepository
+nifi.content.claim.max.appendable.size=10 MB
+nifi.content.claim.max.flow.files=100
+nifi.content.repository.directory.default=./content_repository
+nifi.content.repository.archive.max.retention.period=12 hours
+nifi.content.repository.archive.max.usage.percentage=50%
+nifi.content.repository.archive.enabled=true
+nifi.content.repository.always.sync=false
+nifi.content.viewer.url=/nifi-content-viewer/
+
+# Provenance Repository Properties
+nifi.provenance.repository.implementation=org.apache.nifi.provenance.PersistentProvenanceRepository
+
+# Persistent Provenance Repository Properties
+nifi.provenance.repository.directory.default=./provenance_repository
+nifi.provenance.repository.max.storage.time=24 hours
+nifi.provenance.repository.max.storage.size=1 GB
+nifi.provenance.repository.rollover.time=30 secs
+nifi.provenance.repository.rollover.size=100 MB
+nifi.provenance.repository.query.threads=2
+nifi.provenance.repository.index.threads=1
+nifi.provenance.repository.compress.on.rollover=true
+nifi.provenance.repository.always.sync=false
+nifi.provenance.repository.journal.count=16
+# Comma-separated list of fields. Fields that are not indexed will not be 
searchable. Valid fields are: 
+# EventType, FlowFileUUID, Filename, TransitURI, ProcessorID, 
AlternateIdentifierURI, Relationship, Details
+nifi.provenance.repository.indexed.fields=EventType, FlowFileUUID, Filename, 
ProcessorID, Relationship
+# FlowFile Attributes that should be indexed and made searchable.  Some 
examples to consider are filename, uuid, mime.type
+nifi.provenance.repository.indexed.attributes=
+# Large values for the shard size will result in more Java heap usage when 
searching the Provenance Repository
+# but should provide better performance
+nifi.provenance.repository.index.shard.size=500 MB
+# Indicates the maximum length that a FlowFile attribute can be when 
retrieving a Provenance Event from
+# the repository. If the length of any attribute exceeds this value, it will 
be truncated when the event is retrieved.
+nifi.provenance.repository.max.attribute.length=65536
+
+# Volatile Provenance Respository Properties
+nifi.provenance.repository.buffer.size=100000
+
+# Component Status Repository
+nifi.components.status.repository.implementation=org.apache.nifi.controller.status.history.VolatileComponentStatusRepository
+nifi.components.status.repository.buffer.size=1440
+nifi.components.status.snapshot.frequency=1 min
+
+# Site to Site properties
+nifi.remote.input.socket.host=localhost
+nifi.remote.input.socket.port=10000
+nifi.remote.input.secure=false
+
+# web properties #
+nifi.web.war.directory=./lib
+nifi.web.http.host=
+nifi.web.http.port=8080
+nifi.web.https.host=
+nifi.web.https.port=
+nifi.web.jetty.working.directory=./work/jetty
+nifi.web.jetty.threads=200
+
+# security properties #
+nifi.sensitive.props.key=
+nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
+nifi.sensitive.props.provider=BC
+
+nifi.security.keystore=
+nifi.security.keystoreType=
+nifi.security.keystorePasswd=
+nifi.security.keyPasswd=
+nifi.security.truststore=
+nifi.security.truststoreType=
+nifi.security.truststorePasswd=
+nifi.security.needClientAuth=
+nifi.security.user.credential.cache.duration=24 hours
+nifi.security.user.authority.provider=file-provider
+nifi.security.user.login.identity.provider=
+nifi.security.support.new.account.requests=
+# Valid Authorities include: 
ROLE_MONITOR,ROLE_DFM,ROLE_ADMIN,ROLE_PROVENANCE,ROLE_NIFI
+nifi.security.anonymous.authorities=
+nifi.security.ocsp.responder.url=
+nifi.security.ocsp.responder.certificate=
+
+# cluster common properties (cluster manager and nodes must have same values) #
+nifi.cluster.protocol.heartbeat.interval=5 sec
+nifi.cluster.protocol.is.secure=false
+nifi.cluster.protocol.socket.timeout=30 sec
+nifi.cluster.protocol.connection.handshake.timeout=45 sec
+# if multicast is used, then nifi.cluster.protocol.multicast.xxx properties 
must be configured #
+nifi.cluster.protocol.use.multicast=false
+nifi.cluster.protocol.multicast.address=
+nifi.cluster.protocol.multicast.port=
+nifi.cluster.protocol.multicast.service.broadcast.delay=500 ms
+nifi.cluster.protocol.multicast.service.locator.attempts=3
+nifi.cluster.protocol.multicast.service.locator.attempts.delay=1 sec
+
+# cluster node properties (only configure for cluster nodes) #
+nifi.cluster.is.node=false
+nifi.cluster.node.address=
+nifi.cluster.node.protocol.port=
+nifi.cluster.node.protocol.threads=2
+# if multicast is not used, nifi.cluster.node.unicast.xxx must have same 
values as nifi.cluster.manager.xxx #
+nifi.cluster.node.unicast.manager.address=
+nifi.cluster.node.unicast.manager.protocol.port=
+
+# cluster manager properties (only configure for cluster manager) #
+nifi.cluster.is.manager=false
+nifi.cluster.manager.address=
+nifi.cluster.manager.protocol.port=
+nifi.cluster.manager.node.firewall.file=
+nifi.cluster.manager.node.event.history.size=10
+nifi.cluster.manager.node.api.connection.timeout=30 sec
+nifi.cluster.manager.node.api.read.timeout=30 sec
+nifi.cluster.manager.node.api.request.threads=10
+nifi.cluster.manager.flow.retrieval.delay=5 sec
+nifi.cluster.manager.protocol.threads=10
+nifi.cluster.manager.safemode.duration=0 sec
+
+# kerberos #
+nifi.kerberos.krb5.file=
+
+# MiNiFi Server for Command Control
+nifi.server.name=localhost
+nifi.server.port=9000
+nifi.server.report.interval=1000 ms
+

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/conf/nifi.properties
----------------------------------------------------------------------
diff --git a/conf/nifi.properties b/conf/nifi.properties
deleted file mode 100644
index 627876f..0000000
--- a/conf/nifi.properties
+++ /dev/null
@@ -1,191 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Core Properties #
-nifi.version=0.6.0-SNAPSHOT
-nifi.flow.configuration.file=./conf/flow.xml
-nifi.flow.configuration.archive.dir=./conf/archive/
-nifi.flowcontroller.autoResumeState=true
-nifi.flowcontroller.graceful.shutdown.period=10 sec
-nifi.flowservice.writedelay.interval=500 ms
-nifi.administrative.yield.duration=30 sec
-# If a component has no work to do (is "bored"), how long should we wait 
before checking again for work?
-nifi.bored.yield.duration=10 millis
-
-nifi.authority.provider.configuration.file=./conf/authority-providers.xml
-nifi.login.identity.provider.configuration.file=./conf/login-identity-providers.xml
-nifi.templates.directory=./conf/templates
-nifi.ui.banner.text=
-nifi.ui.autorefresh.interval=30 sec
-nifi.nar.library.directory=./lib
-nifi.nar.working.directory=./work/nar/
-nifi.documentation.working.directory=./work/docs/components
-
-####################
-# State Management #
-####################
-nifi.state.management.configuration.file=./conf/state-management.xml
-# The ID of the local state provider
-nifi.state.management.provider.local=local-provider
-# The ID of the cluster-wide state provider. This will be ignored if NiFi is 
not clustered but must be populated if running in a cluster.
-nifi.state.management.provider.cluster=zk-provider
-# Specifies whether or not this instance of NiFi should run an embedded 
ZooKeeper server
-nifi.state.management.embedded.zookeeper.start=false
-# Properties file that provides the ZooKeeper properties to use if 
<nifi.state.management.embedded.zookeeper.start> is set to true
-nifi.state.management.embedded.zookeeper.properties=./conf/zookeeper.properties
-
-
-# H2 Settings
-nifi.database.directory=./database_repository
-nifi.h2.url.append=;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE
-
-# FlowFile Repository
-nifi.flowfile.repository.implementation=org.apache.nifi.controller.repository.WriteAheadFlowFileRepository
-nifi.flowfile.repository.directory=./flowfile_repository
-nifi.flowfile.repository.partitions=256
-nifi.flowfile.repository.checkpoint.interval=2 mins
-nifi.flowfile.repository.always.sync=false
-
-nifi.swap.manager.implementation=org.apache.nifi.controller.FileSystemSwapManager
-nifi.queue.swap.threshold=20000
-nifi.swap.in.period=5 sec
-nifi.swap.in.threads=1
-nifi.swap.out.period=5 sec
-nifi.swap.out.threads=4
-
-# Content Repository
-nifi.content.repository.implementation=org.apache.nifi.controller.repository.FileSystemRepository
-nifi.content.claim.max.appendable.size=10 MB
-nifi.content.claim.max.flow.files=100
-nifi.content.repository.directory.default=./content_repository
-nifi.content.repository.archive.max.retention.period=12 hours
-nifi.content.repository.archive.max.usage.percentage=50%
-nifi.content.repository.archive.enabled=true
-nifi.content.repository.always.sync=false
-nifi.content.viewer.url=/nifi-content-viewer/
-
-# Provenance Repository Properties
-nifi.provenance.repository.implementation=org.apache.nifi.provenance.PersistentProvenanceRepository
-
-# Persistent Provenance Repository Properties
-nifi.provenance.repository.directory.default=./provenance_repository
-nifi.provenance.repository.max.storage.time=24 hours
-nifi.provenance.repository.max.storage.size=1 GB
-nifi.provenance.repository.rollover.time=30 secs
-nifi.provenance.repository.rollover.size=100 MB
-nifi.provenance.repository.query.threads=2
-nifi.provenance.repository.index.threads=1
-nifi.provenance.repository.compress.on.rollover=true
-nifi.provenance.repository.always.sync=false
-nifi.provenance.repository.journal.count=16
-# Comma-separated list of fields. Fields that are not indexed will not be 
searchable. Valid fields are: 
-# EventType, FlowFileUUID, Filename, TransitURI, ProcessorID, 
AlternateIdentifierURI, Relationship, Details
-nifi.provenance.repository.indexed.fields=EventType, FlowFileUUID, Filename, 
ProcessorID, Relationship
-# FlowFile Attributes that should be indexed and made searchable.  Some 
examples to consider are filename, uuid, mime.type
-nifi.provenance.repository.indexed.attributes=
-# Large values for the shard size will result in more Java heap usage when 
searching the Provenance Repository
-# but should provide better performance
-nifi.provenance.repository.index.shard.size=500 MB
-# Indicates the maximum length that a FlowFile attribute can be when 
retrieving a Provenance Event from
-# the repository. If the length of any attribute exceeds this value, it will 
be truncated when the event is retrieved.
-nifi.provenance.repository.max.attribute.length=65536
-
-# Volatile Provenance Respository Properties
-nifi.provenance.repository.buffer.size=100000
-
-# Component Status Repository
-nifi.components.status.repository.implementation=org.apache.nifi.controller.status.history.VolatileComponentStatusRepository
-nifi.components.status.repository.buffer.size=1440
-nifi.components.status.snapshot.frequency=1 min
-
-# Site to Site properties
-nifi.remote.input.socket.host=localhost
-nifi.remote.input.socket.port=10000
-nifi.remote.input.secure=false
-
-# web properties #
-nifi.web.war.directory=./lib
-nifi.web.http.host=
-nifi.web.http.port=8080
-nifi.web.https.host=
-nifi.web.https.port=
-nifi.web.jetty.working.directory=./work/jetty
-nifi.web.jetty.threads=200
-
-# security properties #
-nifi.sensitive.props.key=
-nifi.sensitive.props.algorithm=PBEWITHMD5AND256BITAES-CBC-OPENSSL
-nifi.sensitive.props.provider=BC
-
-nifi.security.keystore=
-nifi.security.keystoreType=
-nifi.security.keystorePasswd=
-nifi.security.keyPasswd=
-nifi.security.truststore=
-nifi.security.truststoreType=
-nifi.security.truststorePasswd=
-nifi.security.needClientAuth=
-nifi.security.user.credential.cache.duration=24 hours
-nifi.security.user.authority.provider=file-provider
-nifi.security.user.login.identity.provider=
-nifi.security.support.new.account.requests=
-# Valid Authorities include: 
ROLE_MONITOR,ROLE_DFM,ROLE_ADMIN,ROLE_PROVENANCE,ROLE_NIFI
-nifi.security.anonymous.authorities=
-nifi.security.ocsp.responder.url=
-nifi.security.ocsp.responder.certificate=
-
-# cluster common properties (cluster manager and nodes must have same values) #
-nifi.cluster.protocol.heartbeat.interval=5 sec
-nifi.cluster.protocol.is.secure=false
-nifi.cluster.protocol.socket.timeout=30 sec
-nifi.cluster.protocol.connection.handshake.timeout=45 sec
-# if multicast is used, then nifi.cluster.protocol.multicast.xxx properties 
must be configured #
-nifi.cluster.protocol.use.multicast=false
-nifi.cluster.protocol.multicast.address=
-nifi.cluster.protocol.multicast.port=
-nifi.cluster.protocol.multicast.service.broadcast.delay=500 ms
-nifi.cluster.protocol.multicast.service.locator.attempts=3
-nifi.cluster.protocol.multicast.service.locator.attempts.delay=1 sec
-
-# cluster node properties (only configure for cluster nodes) #
-nifi.cluster.is.node=false
-nifi.cluster.node.address=
-nifi.cluster.node.protocol.port=
-nifi.cluster.node.protocol.threads=2
-# if multicast is not used, nifi.cluster.node.unicast.xxx must have same 
values as nifi.cluster.manager.xxx #
-nifi.cluster.node.unicast.manager.address=
-nifi.cluster.node.unicast.manager.protocol.port=
-
-# cluster manager properties (only configure for cluster manager) #
-nifi.cluster.is.manager=false
-nifi.cluster.manager.address=
-nifi.cluster.manager.protocol.port=
-nifi.cluster.manager.node.firewall.file=
-nifi.cluster.manager.node.event.history.size=10
-nifi.cluster.manager.node.api.connection.timeout=30 sec
-nifi.cluster.manager.node.api.read.timeout=30 sec
-nifi.cluster.manager.node.api.request.threads=10
-nifi.cluster.manager.flow.retrieval.delay=5 sec
-nifi.cluster.manager.protocol.threads=10
-nifi.cluster.manager.safemode.duration=0 sec
-
-# kerberos #
-nifi.kerberos.krb5.file=
-
-# MiNiFi Server for Command Control
-nifi.server.name=localhost
-nifi.server.port=9000
-nifi.server.report.interval=1000 ms
-

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/inc/FlowController.h
----------------------------------------------------------------------
diff --git a/inc/FlowController.h b/inc/FlowController.h
index 3dd0952..1d3b2f8 100644
--- a/inc/FlowController.h
+++ b/inc/FlowController.h
@@ -30,6 +30,7 @@
 #include <set>
 #include <libxml/parser.h>
 #include <libxml/tree.h>
+#include <yaml-cpp/yaml.h>
 
 #include "Configure.h"
 #include "Property.h"
@@ -52,6 +53,23 @@
 //! Default NiFi Root Group Name
 #define DEFAULT_ROOT_GROUP_NAME ""
 #define DEFAULT_FLOW_XML_FILE_NAME "conf/flow.xml"
+#define DEFAULT_FLOW_YAML_FILE_NAME "conf/flow.yml"
+#define CONFIG_YAML_PROCESSORS_KEY "Processors"
+
+enum class ConfigFormat { XML, YAML };
+
+struct ProcessorConfig {
+       std::string name;
+       std::string javaClass;
+       std::string maxConcurrentTasks;
+       std::string schedulingStrategy;
+       std::string schedulingPeriod;
+       std::string penalizationPeriod;
+       std::string yieldPeriod;
+       std::string runDurationNanos;
+       std::vector<std::string> autoTerminatedRelationships;
+       std::vector<Property> properties;
+};
 
 //! FlowController Class
 class FlowController
@@ -115,7 +133,7 @@ public:
 
        //! Life Cycle related function
        //! Load flow xml from disk, after that, create the root process group 
and its children, initialize the flows
-       void load();
+       void load(ConfigFormat format);
        //! Whether the Flow Controller is start running
        bool isRunning();
        //! Whether the Flow Controller has already been initialized (loaded 
flow XML)
@@ -155,10 +173,10 @@ protected:
        uuid_t _uuid;
        //! FlowController Name
        std::string _name;
-       //! XML File Name
-       std::string _xmlFileName;
+       //! Configuration File Name
+       std::string _configurationFileName;
        //! NiFi property File Name
-       std::string _configFileName;
+       std::string _propertiesFileName;
        //! Root Process Group
        ProcessGroup *_root;
        //! MAX Timer Driven Threads
@@ -202,6 +220,20 @@ private:
        void parseConnection(xmlDoc *doc, xmlNode *node, ProcessGroup *parent);
        //! Process Remote Process Group
        void parseRemoteProcessGroup(xmlDoc *doc, xmlNode *node, ProcessGroup 
*parent);
+
+       //! Process Processor Node YAML
+       void parseProcessorNodeYaml(YAML::Node processorNode, ProcessGroup 
*parent);
+       //! Process Port YAML
+       void parsePortYaml(YAML::Node *portNode, ProcessGroup *parent, 
TransferDirection direction);
+       //! Process Root Processor Group YAML
+       void parseRootProcessGroupYaml(YAML::Node rootNode);
+       //! Process Property YAML
+       void parseProcessorPropertyYaml(YAML::Node *doc, YAML::Node *node, 
Processor *processor);
+       //! Process connection YAML
+       void parseConnectionYaml(YAML::Node *node, ProcessGroup *parent);
+       //! Process Remote Process Group YAML
+       void parseRemoteProcessGroupYaml(YAML::Node *node, ProcessGroup 
*parent);
+
        // Prevent default copy constructor and assignment operation
        // Only support pass by reference or pointer
        FlowController(const FlowController &parent);

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/inc/ProcessGroup.h
----------------------------------------------------------------------
diff --git a/inc/ProcessGroup.h b/inc/ProcessGroup.h
index be69f2d..4dd26f8 100644
--- a/inc/ProcessGroup.h
+++ b/inc/ProcessGroup.h
@@ -138,6 +138,8 @@ public:
        void addConnection(Connection *connection);
        //! findProcessor based on UUID
        Processor *findProcessor(uuid_t uuid);
+       //! findProcessor based on name
+       Processor *findProcessor(std::string processorName);
        //! removeConnection
        void removeConnection(Connection *connection);
        //! update property value

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/63d2358d/main/MiNiFiMain.cpp
----------------------------------------------------------------------
diff --git a/main/MiNiFiMain.cpp b/main/MiNiFiMain.cpp
index 1ceaba5..4506af1 100644
--- a/main/MiNiFiMain.cpp
+++ b/main/MiNiFiMain.cpp
@@ -23,6 +23,7 @@
 #include <queue>
 #include <map>
 #include <unistd.h>
+#include <yaml-cpp/yaml.h>
 
 #include "Logger.h"
 #include "Configure.h"
@@ -32,8 +33,17 @@
 #define SLEEP_INTERVAL 1
 //! Main thread stop wait time
 #define STOP_WAIT_TIME 2
+//! Default YAML location
+#define DEFAULT_NIFI_CONFIG_YML "./conf/config.yml"
 //! Default nifi properties file path
-#define DEFAULT_NIFI_PROPERTIES_FILE "./conf/nifi.properties"
+#define DEFAULT_NIFI_PROPERTIES_FILE "./conf/minifi.properties"
+
+/* Define Parser Values for Configuration YAML sections */
+#define CONFIG_YAML_FLOW_CONTROLLER_KEY "Flow Controller"
+#define CONFIG_YAML_PROCESSORS_KEY "Processors"
+#define CONFIG_YAML_CONNECTIONS_KEY "Connections"
+#define CONFIG_YAML_REMOTE_PROCESSING_GROUPS_KEY "Remote Processing Groups"
+
 //! Whether it is running
 static bool running = false;
 //! Flow Controller
@@ -49,14 +59,58 @@ void sigHandler(int signal)
        }
 }
 
-int main(int argc, char **argv)
-{
+int loadYaml() {
+       YAML::Node flow = YAML::LoadFile("./conf/flow.yml");
+
+       YAML::Node flowControllerNode = flow[CONFIG_YAML_FLOW_CONTROLLER_KEY];
+       YAML::Node processorsNode = flow[CONFIG_YAML_PROCESSORS_KEY];
+       YAML::Node connectionsNode = flow[CONFIG_YAML_CONNECTIONS_KEY];
+       YAML::Node remoteProcessingGroupNode = 
flow[CONFIG_YAML_REMOTE_PROCESSING_GROUPS_KEY];
+
+       if (processorsNode) {
+               int numProcessors = processorsNode.size();
+               if (numProcessors < 1) {
+                       throw new std::invalid_argument("There must be at least 
one processor configured.");
+               }
+
+               std::vector<ProcessorConfig> processorConfigs;
+
+               if (processorsNode.IsSequence()) {
+                       for (YAML::const_iterator iter = 
processorsNode.begin(); iter != processorsNode.end(); ++iter) {
+                               ProcessorConfig procCfg;
+                               YAML::Node procNode = iter->as<YAML::Node>();
+
+                               procCfg.name = 
procNode["name"].as<std::string>();
+                               procCfg.javaClass = 
procNode["class"].as<std::string>();
+
+                               processorConfigs.push_back(procCfg);
+                       }
+               }
+
+               Logger::getLogger()->log_info("Added %d processor configs.", 
processorConfigs.size());
+       } else {
+               throw new std::invalid_argument(
+                               "Cannot instantiate a MiNiFi instance without a 
defined Processors configuration node.");
+       }
+
+       return 0;
+}
+
+int main(int argc, char **argv) {
+
        Logger *logger = Logger::getLogger();
-       logger->setLogLevel(trace);
+       logger->setLogLevel(info);
        logger->log_info("MiNiFi started");
 
-       if (signal(SIGINT, sigHandler) == SIG_ERR || signal(SIGTERM, 
sigHandler) == SIG_ERR)
-       {
+       try {
+               logger->log_info("Performing parsing of specified config.yml");
+               loadYaml();
+       } catch (...) {
+               std::cout << "Could not load YAML due to improper 
configuration.";
+               return 1;
+       }
+
+       if (signal(SIGINT, sigHandler) == SIG_ERR || signal(SIGTERM, 
sigHandler) == SIG_ERR || signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
                logger->log_error("Can not install signal handler");
                return -1;
        }
@@ -64,10 +118,10 @@ int main(int argc, char **argv)
        Configure *configure = Configure::getConfigure();
        configure->loadConfigureFile(DEFAULT_NIFI_PROPERTIES_FILE);
 
-       controller = new FlowController();;
+       controller = new FlowController();
 
-       // Load flow XML
-       controller->load();
+       // Load flow from specified configuration file
+       controller->load(ConfigFormat::YAML);
        // Start Processing the flow
        controller->start();
        running = true;

Reply via email to