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.


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

Branch: refs/heads/MINIFI-68
Commit: cf813d4dc775b655ff418b1a67d9ec67c838f7f1
Parents: ddedb4e
Author: Aldrin Piri <[email protected]>
Authored: Fri Jul 22 13:23:54 2016 -0400
Committer: Aldrin Piri <[email protected]>
Committed: Tue Aug 2 11:49:37 2016 -0400

----------------------------------------------------------------------
 Makefile                                        |    46 +-
 README.md                                       |     2 +-
 conf/flow.yml                                   |    55 +
 conf/minifi.properties                          |   191 +
 conf/nifi.properties                            |   191 -
 inc/FlowController.h                            |    40 +-
 inc/ProcessGroup.h                              |     2 +
 main/MiNiFiMain.cpp                             |    72 +-
 src/FlowController.cpp                          |  1068 +-
 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 -> 29892 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 +
 409 files changed, 299986 insertions(+), 639 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/cf813d4d/Makefile
----------------------------------------------------------------------
diff --git a/Makefile b/Makefile
index 0bcfc35..97b4151 100644
--- a/Makefile
+++ b/Makefile
@@ -26,22 +26,20 @@ 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
 
 
@@ -55,17 +53,21 @@ 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 ../../
 else ifeq ($(ARCH), linux)
-       make -C thirdparty/uuid
        cd thirdparty/libxml2; ./configure --without-python --without-zlib 
--enable-static --disable-shared; make; cd ../../
 endif
 
@@ -75,21 +77,24 @@ $(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 \
+       mkdir -p $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source
+       cp -r LICENSE \
                NOTICE \
                README.md \
                inc \
@@ -97,7 +102,9 @@ $(ASSEMBLIES_DIR)/$(PROJECT)-$(VERSION)-source.tar.gz : 
$(ASSEMBLIES_DIR)
                main \
                conf \
                thirdparty \
-               Makefile
+               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 \
@@ -112,6 +119,7 @@ clean:
        rm -rf $(BUILD_DIR)
        rm -rf $(TARGET_DIR)
        rm -rf $(ASSEMBLIES_DIR)
+       make -C thirdparty/yaml-cpp-yaml-cpp-0.5.3 clean
 ifeq ($(ARCH), arm)
        make -C thirdparty/uuid clean
        make -C thirdparty/libxml2 distclean

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/cf813d4d/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/cf813d4d/conf/flow.yml
----------------------------------------------------------------------
diff --git a/conf/flow.yml b/conf/flow.yml
new file mode 100644
index 0000000..63b0244
--- /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: GenerateFlowFile 1
+      class: org.apache.nifi.processors.standard.GenerateFlowFile
+      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:
+          File Size: 1 kB
+          Batch Size: 1
+
+Connections:
+    - name: GenerateFlowFileS2S
+      source name: GenerateFlowFile 1
+      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/cf813d4d/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/cf813d4d/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/cf813d4d/inc/FlowController.h
----------------------------------------------------------------------
diff --git a/inc/FlowController.h b/inc/FlowController.h
index 3895096..4d85014 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"
@@ -50,6 +51,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
@@ -113,7 +131,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)
@@ -153,10 +171,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
@@ -200,6 +218,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/cf813d4d/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/cf813d4d/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