You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hop.apache.org by gi...@apache.org on 2021/02/03 11:58:34 UTC

[incubator-hop-docs] branch asf-site updated: Documentation updated to 884a20a

This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-hop-docs.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 8b9d58f  Documentation updated to 884a20a
8b9d58f is described below

commit 8b9d58fec93e4c8debf88e331c679dfeecced381
Author: jenkins <bu...@apache.org>
AuthorDate: Wed Feb 3 11:58:29 2021 +0000

    Documentation updated to 884a20a
---
 .../modules/.asciidoctor/pages/index.adoc          |  73 ++---
 hop-user-manual/modules/ROOT/nav.adoc              |  73 ++---
 .../plugins/actions/deleteresultfilenames.adoc     |   8 +-
 .../ROOT/pages/plugins/projects/projects.adoc      | 326 +++++++++++++++++++++
 4 files changed, 404 insertions(+), 76 deletions(-)

diff --git a/hop-user-manual/modules/.asciidoctor/pages/index.adoc b/hop-user-manual/modules/.asciidoctor/pages/index.adoc
index 6b49891..ae6c186 100644
--- a/hop-user-manual/modules/.asciidoctor/pages/index.adoc
+++ b/hop-user-manual/modules/.asciidoctor/pages/index.adoc
@@ -46,11 +46,11 @@ include::{sourcepath}/hop-server/index.adoc[leveloffset=+0]
 include::{sourcepath}/plugins/plugins.adoc[leveloffset=+0]
 include::{sourcepath}/plugins/transforms.adoc[leveloffset=+1]
 include::{sourcepath}/plugins/transforms/abort.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/checksum.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/constant.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/addsequence.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/fieldschangesequence.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/addxml.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/checksum.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/fieldschangesequence.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/analyticquery.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/append.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/beambigqueryinput.adoc[leveloffset=+2]
@@ -65,6 +65,7 @@ include::{sourcepath}/plugins/transforms/beamtimestamp.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/beamwindow.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/blockingtransform.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/blockuntiltransformsfinish.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/csvinput.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/calculator.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/dbproc.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/changefileencoding.adoc[leveloffset=+2]
@@ -77,13 +78,12 @@ include::{sourcepath}/plugins/transforms/combinationlookup.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/concatfields.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/rowstoresult.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/creditcardvalidator.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/csvinput.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/cubeinput.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/cubeoutput.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/databasejoin.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/databaselookup.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/datagrid.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/validator.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/databasejoin.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/databaselookup.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/delay.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/delete.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/detectemptystream.adoc[leveloffset=+2]
@@ -94,9 +94,9 @@ include::{sourcepath}/plugins/transforms/edi2xml.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/mailinput.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/enhancedjsonoutput.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/excelwriter.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/sql.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/execprocess.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/execsqlrow.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/sql.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/fake.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/fileexists.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/filesfromresult.adoc[leveloffset=+2]
@@ -105,27 +105,27 @@ include::{sourcepath}/plugins/transforms/filterrows.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/fuzzymatch.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/randomvalue.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/getxmldata.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/getfilenames.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/getfilesrowcount.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/getslavesequence.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/recordsfromstream.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/rowsfromresult.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/getsubfolders.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/systemdata.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/getfilenames.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/getfilesrowcount.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/recordsfromstream.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/gettablenames.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/getvariable.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/groupby.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/http.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/httppost.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/http.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/detectlastrow.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/ifnull.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/injector.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/insertupdate.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/jsoninput.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/jsonoutput.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/javafilter.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/javascript.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/joinrows.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/jsoninput.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/jsonoutput.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/ldapinput.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/ldapoutput.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/ldifinput.adoc[leveloffset=+2]
@@ -149,26 +149,26 @@ include::{sourcepath}/plugins/transforms/pgpencryptstream.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/pipelineexcecutor.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/pgbulkloader.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/processfiles.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/rest.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/propertyinput.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/regexeval.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/replacestring.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/reservoirsampling.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/rest.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/denormaliser.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/flattener.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/rowgenerator.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/normaliser.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/ssh.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/sqlfileoutput.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/selectvalues.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/syslog.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/setvariable.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/setvaluefield.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/setvalueconstant.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/setvariable.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/sortedmerge.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/sort.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/splitfieldtorows.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/sortedmerge.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/fieldsplitter.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/transforms/sqlfileoutput.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/transforms/splitfieldtorows.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/streamlookup.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/streamschemamerge.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/stringoperations.adoc[leveloffset=+2]
@@ -200,15 +200,15 @@ include::{sourcepath}/plugins/transforms/xsdvalidator.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/xslt.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/yamlinput.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/transforms/zipfile.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/projects/projects.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/passwords.adoc[leveloffset=+1]
 include::{sourcepath}/plugins/passwords/aespasswords.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases.adoc[leveloffset=+1]
-include::{sourcepath}/plugins/databases/derby.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/as400.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/databases/derby.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/cache.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/db2.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/exasol.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/databases/firebird.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/googlebigquery.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/greenplum.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/sqlbase.adoc[leveloffset=+2]
@@ -217,15 +217,10 @@ include::{sourcepath}/plugins/databases/hypersonic.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/universe.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/infinidb.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/infobright.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/databases/informix.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/databases/ingres.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/databases/interbase.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/databases/kingbasees.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/databases/mariadb.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/databases/sapdb.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/databases/monetdb.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/mssql.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/mssqlnative.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/databases/mariadb.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/databases/sapdb.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/mysql.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/netezza.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/oracle.adoc[leveloffset=+2]
@@ -239,10 +234,16 @@ include::{sourcepath}/plugins/databases/sybaseiq.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/teradata.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/vectorwise.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/databases/vertica.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/databases/firebird.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/databases/informix.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/databases/ingres.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/databases/interbase.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/databases/kingbasees.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/databases/monetdb.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions.adoc[leveloffset=+1]
+include::{sourcepath}/plugins/actions/as400command.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/abort.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/addresultfilenames.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/actions/as400command.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/checkdbconnection.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/checkfilelocked.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/webserviceavailable.adoc[leveloffset=+2]
@@ -253,35 +254,35 @@ include::{sourcepath}/plugins/actions/copyfiles.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/copymoveresultfilenames.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/createfile.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/createfolder.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/actions/dtdvalidator.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/pgpdecryptfiles.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/delay.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/deletefile.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/actions/deleteresultfilenames.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/deletefiles.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/deletefolders.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/actions/deleteresultfilenames.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/msgboxinfo.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/dostounix.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/actions/dtdvalidator.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/dummy.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/pgpencryptfiles.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/repeat-end.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/evalfilesmetrics.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/evaluatetablecontent.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/actions/filecompare.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/actions/ftpdelete.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/fileexists.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/actions/filecompare.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/folderisempty.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/folderscompare.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/actions/ftpdelete.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/actions/getpop.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/ftp.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/ftpsget.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/sftp.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/actions/getpop.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/http.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/eval.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/actions/mssqlbulkload.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/mail.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/mailvalidator.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/movefiles.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/actions/mssqlbulkload.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/mysqlbulkfile.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/mysqlbulkload.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/pgpfiles.adoc[leveloffset=+2]
@@ -291,13 +292,13 @@ include::{sourcepath}/plugins/actions/ftpput.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/sftpput.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/repeat.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/runpipelinetests.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/actions/syslog.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/actions/sql.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/sendnagiospassivecheck.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/actions/syslog.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/setvariables.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/shell.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/simpleeval.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/snmptrap.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/actions/sql.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/start.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/success.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/tableexists.adoc[leveloffset=+2]
@@ -306,8 +307,8 @@ include::{sourcepath}/plugins/actions/truncatetables.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/unzip.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/ftpsput.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/pgpverify.adoc[leveloffset=+2]
-include::{sourcepath}/plugins/actions/waitforfile.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/waitforsql.adoc[leveloffset=+2]
+include::{sourcepath}/plugins/actions/waitforfile.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/workflow.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/writetofile.adoc[leveloffset=+2]
 include::{sourcepath}/plugins/actions/writetolog.adoc[leveloffset=+2]
diff --git a/hop-user-manual/modules/ROOT/nav.adoc b/hop-user-manual/modules/ROOT/nav.adoc
index 5dd0505..3311bc4 100644
--- a/hop-user-manual/modules/ROOT/nav.adoc
+++ b/hop-user-manual/modules/ROOT/nav.adoc
@@ -29,11 +29,11 @@
 //::=START AUTO GENERATED LINKS
 ** xref:plugins/transforms.adoc[Transform Plugins]
 *** xref:plugins/transforms/abort.adoc[Abort]
-*** xref:plugins/transforms/checksum.adoc[Add a checksum]
 *** xref:plugins/transforms/constant.adoc[Add Constants]
 *** xref:plugins/transforms/addsequence.adoc[Add Sequence]
-*** xref:plugins/transforms/fieldschangesequence.adoc[Add value fields changing sequence]
 *** xref:plugins/transforms/addxml.adoc[Add XML]
+*** xref:plugins/transforms/checksum.adoc[Add a checksum]
+*** xref:plugins/transforms/fieldschangesequence.adoc[Add value fields changing sequence]
 *** xref:plugins/transforms/analyticquery.adoc[Analytic Query]
 *** xref:plugins/transforms/append.adoc[Append Streams]
 *** xref:plugins/transforms/beambigqueryinput.adoc[Beam BigQuery Input]
@@ -48,6 +48,7 @@
 *** xref:plugins/transforms/beamwindow.adoc[Beam Window]
 *** xref:plugins/transforms/blockingtransform.adoc[Blocking transform]
 *** xref:plugins/transforms/blockuntiltransformsfinish.adoc[Blocking until transforms finish]
+*** xref:plugins/transforms/csvinput.adoc[CSV File Input]
 *** xref:plugins/transforms/calculator.adoc[Calculator]
 *** xref:plugins/transforms/dbproc.adoc[Call DB procedure]
 *** xref:plugins/transforms/changefileencoding.adoc[Change file encoding]
@@ -60,13 +61,12 @@
 *** xref:plugins/transforms/concatfields.adoc[Concat Fields]
 *** xref:plugins/transforms/rowstoresult.adoc[Copy rows to result]
 *** xref:plugins/transforms/creditcardvalidator.adoc[Credit card validator]
-*** xref:plugins/transforms/csvinput.adoc[CSV File Input]
 *** xref:plugins/transforms/cubeinput.adoc[Cube input]
 *** xref:plugins/transforms/cubeoutput.adoc[Cube output]
-*** xref:plugins/transforms/databasejoin.adoc[Database Join]
-*** xref:plugins/transforms/databaselookup.adoc[Database Lookup]
 *** xref:plugins/transforms/datagrid.adoc[Data Grid]
 *** xref:plugins/transforms/validator.adoc[Data Validator]
+*** xref:plugins/transforms/databasejoin.adoc[Database Join]
+*** xref:plugins/transforms/databaselookup.adoc[Database Lookup]
 *** xref:plugins/transforms/delay.adoc[Delay row]
 *** xref:plugins/transforms/delete.adoc[Delete]
 *** xref:plugins/transforms/detectemptystream.adoc[Detect Empty Stream]
@@ -77,9 +77,9 @@
 *** xref:plugins/transforms/mailinput.adoc[Email Messages Input]
 *** xref:plugins/transforms/enhancedjsonoutput.adoc[Enhanced JSON Output]
 *** xref:plugins/transforms/excelwriter.adoc[Excel writer]
+*** xref:plugins/transforms/sql.adoc[Execute SQL script]
 *** xref:plugins/transforms/execprocess.adoc[Execute a process]
 *** xref:plugins/transforms/execsqlrow.adoc[Execute row SQL script]
-*** xref:plugins/transforms/sql.adoc[Execute SQL script]
 *** xref:plugins/transforms/fake.adoc[Fake data]
 *** xref:plugins/transforms/fileexists.adoc[File exists]
 *** xref:plugins/transforms/filesfromresult.adoc[Files from result]
@@ -88,27 +88,27 @@
 *** xref:plugins/transforms/fuzzymatch.adoc[Fuzzy match]
 *** xref:plugins/transforms/randomvalue.adoc[Generate Random Value]
 *** xref:plugins/transforms/getxmldata.adoc[Get Data From XML]
-*** xref:plugins/transforms/getfilenames.adoc[Get filenames]
-*** xref:plugins/transforms/getfilesrowcount.adoc[Get files rowcount]
 *** xref:plugins/transforms/getslavesequence.adoc[Get ID from slave server]
-*** xref:plugins/transforms/recordsfromstream.adoc[Get records from stream ]
 *** xref:plugins/transforms/rowsfromresult.adoc[Get Rows from Result]
 *** xref:plugins/transforms/getsubfolders.adoc[Get SubFolder names]
 *** xref:plugins/transforms/systemdata.adoc[Get System Info]
+*** xref:plugins/transforms/getfilenames.adoc[Get filenames]
+*** xref:plugins/transforms/getfilesrowcount.adoc[Get files rowcount]
+*** xref:plugins/transforms/recordsfromstream.adoc[Get records from stream ]
 *** xref:plugins/transforms/gettablenames.adoc[Get table names]
 *** xref:plugins/transforms/getvariable.adoc[Get variables]
 *** xref:plugins/transforms/groupby.adoc[Group By]
-*** xref:plugins/transforms/http.adoc[HTTP client]
 *** xref:plugins/transforms/httppost.adoc[HTTP Post]
+*** xref:plugins/transforms/http.adoc[HTTP client]
 *** xref:plugins/transforms/detectlastrow.adoc[Identify last row in a stream]
 *** xref:plugins/transforms/ifnull.adoc[If Null]
 *** xref:plugins/transforms/injector.adoc[Injector]
 *** xref:plugins/transforms/insertupdate.adoc[Insert / Update]
+*** xref:plugins/transforms/jsoninput.adoc[JSON Input]
+*** xref:plugins/transforms/jsonoutput.adoc[JSON Output]
 *** xref:plugins/transforms/javafilter.adoc[Java Filter]
 *** xref:plugins/transforms/javascript.adoc[JavaScript]
 *** xref:plugins/transforms/joinrows.adoc[Join Rows]
-*** xref:plugins/transforms/jsoninput.adoc[JSON Input]
-*** xref:plugins/transforms/jsonoutput.adoc[JSON Output]
 *** xref:plugins/transforms/ldapinput.adoc[LDAP Input]
 *** xref:plugins/transforms/ldapoutput.adoc[LDAP Output]
 *** xref:plugins/transforms/ldifinput.adoc[LDIF Input]
@@ -132,26 +132,26 @@
 *** xref:plugins/transforms/pipelineexcecutor.adoc[Pipeline Executor]
 *** xref:plugins/transforms/pgbulkloader.adoc[PostgreSQL Bulk Loader]
 *** xref:plugins/transforms/processfiles.adoc[Process files]
+*** xref:plugins/transforms/rest.adoc[REST Client]
 *** xref:plugins/transforms/propertyinput.adoc[Read data (key, value) from properties files.]
 *** xref:plugins/transforms/regexeval.adoc[Regex Evaluation]
 *** xref:plugins/transforms/replacestring.adoc[Replace in String]
 *** xref:plugins/transforms/reservoirsampling.adoc[Reservoir Sampling]
-*** xref:plugins/transforms/rest.adoc[REST Client]
 *** xref:plugins/transforms/denormaliser.adoc[Row Denormaliser]
 *** xref:plugins/transforms/flattener.adoc[Row Flattener]
 *** xref:plugins/transforms/rowgenerator.adoc[Row Generator]
 *** xref:plugins/transforms/normaliser.adoc[Row Normaliser]
 *** xref:plugins/transforms/ssh.adoc[Run SSH commands]
+*** xref:plugins/transforms/sqlfileoutput.adoc[SQL File Output]
 *** xref:plugins/transforms/selectvalues.adoc[Select Values]
 *** xref:plugins/transforms/syslog.adoc[Send Message to Syslog]
+*** xref:plugins/transforms/setvariable.adoc[Set Variables]
 *** xref:plugins/transforms/setvaluefield.adoc[Set field Value]
 *** xref:plugins/transforms/setvalueconstant.adoc[Set field value to a constant]
-*** xref:plugins/transforms/setvariable.adoc[Set Variables]
-*** xref:plugins/transforms/sortedmerge.adoc[Sorted Merge]
 *** xref:plugins/transforms/sort.adoc[Sort Rows]
-*** xref:plugins/transforms/splitfieldtorows.adoc[Split fields]
+*** xref:plugins/transforms/sortedmerge.adoc[Sorted Merge]
 *** xref:plugins/transforms/fieldsplitter.adoc[Split Fields]
-*** xref:plugins/transforms/sqlfileoutput.adoc[SQL File Output]
+*** xref:plugins/transforms/splitfieldtorows.adoc[Split fields]
 *** xref:plugins/transforms/streamlookup.adoc[Stream Lookup]
 *** xref:plugins/transforms/streamschemamerge.adoc[Stream Schema Merge]
 *** xref:plugins/transforms/stringoperations.adoc[String operations]
@@ -183,15 +183,15 @@
 *** xref:plugins/transforms/xslt.adoc[XSL Transformation]
 *** xref:plugins/transforms/yamlinput.adoc[Yaml Input]
 *** xref:plugins/transforms/zipfile.adoc[Zip file]
+*** xref:plugins/projects/projects.adoc[Projects & Environments]
 ** xref:plugins/passwords.adoc[Password Plugins]
 *** xref:plugins/passwords/aespasswords.adoc[AES Two way password encoder]
 ** xref:plugins/databases.adoc[Database Plugins]
-*** xref:plugins/databases/derby.adoc[Apache Derby]
 *** xref:plugins/databases/as400.adoc[AS400]
+*** xref:plugins/databases/derby.adoc[Apache Derby]
 *** xref:plugins/databases/cache.adoc[Cache]
 *** xref:plugins/databases/db2.adoc[DB2]
 *** xref:plugins/databases/exasol.adoc[Exasol]
-*** xref:plugins/databases/firebird.adoc[firebird]
 *** xref:plugins/databases/googlebigquery.adoc[Google BigQuery]
 *** xref:plugins/databases/greenplum.adoc[Greenplum]
 *** xref:plugins/databases/sqlbase.adoc[Gupta SQLBase]
@@ -200,15 +200,10 @@
 *** xref:plugins/databases/universe.adoc[IBM Universe]
 *** xref:plugins/databases/infinidb.adoc[InfiniDB]
 *** xref:plugins/databases/infobright.adoc[Infobright DB]
-*** xref:plugins/databases/informix.adoc[informix]
-*** xref:plugins/databases/ingres.adoc[ingres]
-*** xref:plugins/databases/interbase.adoc[interbase]
-*** xref:plugins/databases/kingbasees.adoc[kingbase es]
-*** xref:plugins/databases/mariadb.adoc[Mariadb]
-*** xref:plugins/databases/sapdb.adoc[MaxDB (SAP DB)]
-*** xref:plugins/databases/monetdb.adoc[monetdb]
 *** xref:plugins/databases/mssql.adoc[MS SqlServer]
 *** xref:plugins/databases/mssqlnative.adoc[MS SqlServer (Native)]
+*** xref:plugins/databases/mariadb.adoc[Mariadb]
+*** xref:plugins/databases/sapdb.adoc[MaxDB (SAP DB)]
 *** xref:plugins/databases/mysql.adoc[MySql]
 *** xref:plugins/databases/netezza.adoc[Netezza]
 *** xref:plugins/databases/oracle.adoc[Oracle]
@@ -222,10 +217,16 @@
 *** xref:plugins/databases/teradata.adoc[Teradata]
 *** xref:plugins/databases/vectorwise.adoc[Vectorwise]
 *** xref:plugins/databases/vertica.adoc[Vertica]
+*** xref:plugins/databases/firebird.adoc[firebird]
+*** xref:plugins/databases/informix.adoc[informix]
+*** xref:plugins/databases/ingres.adoc[ingres]
+*** xref:plugins/databases/interbase.adoc[interbase]
+*** xref:plugins/databases/kingbasees.adoc[kingbase es]
+*** xref:plugins/databases/monetdb.adoc[monetdb]
 ** xref:plugins/actions.adoc[Action Plugins]
+*** xref:plugins/actions/as400command.adoc[AS/400 Command]
 *** xref:plugins/actions/abort.adoc[Abort]
 *** xref:plugins/actions/addresultfilenames.adoc[Add filenames to result]
-*** xref:plugins/actions/as400command.adoc[AS/400 Command]
 *** xref:plugins/actions/checkdbconnection.adoc[Check Db connections]
 *** xref:plugins/actions/checkfilelocked.adoc[Check Files Locked]
 *** xref:plugins/actions/webserviceavailable.adoc[Check if Webservice is available]
@@ -236,35 +237,35 @@
 *** xref:plugins/actions/copymoveresultfilenames.adoc[Copy Or Move Files from result]
 *** xref:plugins/actions/createfile.adoc[Create File]
 *** xref:plugins/actions/createfolder.adoc[Create Folder]
+*** xref:plugins/actions/dtdvalidator.adoc[DTD Validator]
 *** xref:plugins/actions/pgpdecryptfiles.adoc[Decrypt files with PGP]
 *** xref:plugins/actions/delay.adoc[Delay]
 *** xref:plugins/actions/deletefile.adoc[Delete File]
-*** xref:plugins/actions/deleteresultfilenames.adoc[Delete filenames from result]
 *** xref:plugins/actions/deletefiles.adoc[Delete Files]
 *** xref:plugins/actions/deletefolders.adoc[Delete Folders]
+*** xref:plugins/actions/deleteresultfilenames.adoc[Delete filenames from result]
 *** xref:plugins/actions/msgboxinfo.adoc[Display Msgbox info]
 *** xref:plugins/actions/dostounix.adoc[Dos To Unix]
-*** xref:plugins/actions/dtdvalidator.adoc[DTD Validator]
 *** xref:plugins/actions/dummy.adoc[Dummy]
 *** xref:plugins/actions/pgpencryptfiles.adoc[Encrypt files with PGP]
 *** xref:plugins/actions/repeat-end.adoc[End Repeat]
 *** xref:plugins/actions/evalfilesmetrics.adoc[Evaluate File Metrics]
 *** xref:plugins/actions/evaluatetablecontent.adoc[Evaluate rows number in a table]
-*** xref:plugins/actions/filecompare.adoc[File compare]
+*** xref:plugins/actions/ftpdelete.adoc[FTP delete]
 *** xref:plugins/actions/fileexists.adoc[File Exists]
+*** xref:plugins/actions/filecompare.adoc[File compare]
 *** xref:plugins/actions/folderisempty.adoc[Folder is Empty]
 *** xref:plugins/actions/folderscompare.adoc[Folders Compare]
-*** xref:plugins/actions/ftpdelete.adoc[FTP delete]
+*** xref:plugins/actions/getpop.adoc[Get Mail from POP]
 *** xref:plugins/actions/ftp.adoc[Get a file with FTP]
 *** xref:plugins/actions/ftpsget.adoc[Get a file with FTPS]
 *** xref:plugins/actions/sftp.adoc[Get a file with SFTP]
-*** xref:plugins/actions/getpop.adoc[Get Mail from POP]
 *** xref:plugins/actions/http.adoc[Http Get]
 *** xref:plugins/actions/eval.adoc[JavaScript]
+*** xref:plugins/actions/mssqlbulkload.adoc[MS SQL Server Bulk Loader]
 *** xref:plugins/actions/mail.adoc[Mail]
 *** xref:plugins/actions/mailvalidator.adoc[Mail Validator]
 *** xref:plugins/actions/movefiles.adoc[Move Files]
-*** xref:plugins/actions/mssqlbulkload.adoc[MS SQL Server Bulk Loader]
 *** xref:plugins/actions/mysqlbulkfile.adoc[MySQL Bulk File]
 *** xref:plugins/actions/mysqlbulkload.adoc[MySQL Bulk Loader]
 *** xref:plugins/actions/pgpfiles.adoc[PGP Files]
@@ -274,13 +275,13 @@
 *** xref:plugins/actions/sftpput.adoc[Put a file with SFTP]
 *** xref:plugins/actions/repeat.adoc[Repeat]
 *** xref:plugins/actions/runpipelinetests.adoc[Run Pipeline Tests]
-*** xref:plugins/actions/syslog.adoc[Send information using Syslog]
+*** xref:plugins/actions/sql.adoc[SQL Script Executor]
 *** xref:plugins/actions/sendnagiospassivecheck.adoc[Send Nagios check]
+*** xref:plugins/actions/syslog.adoc[Send information using Syslog]
 *** xref:plugins/actions/setvariables.adoc[Set Variables]
 *** xref:plugins/actions/shell.adoc[Shell Action]
 *** xref:plugins/actions/simpleeval.adoc[Simple Evaluation]
 *** xref:plugins/actions/snmptrap.adoc[Snmp Trap]
-*** xref:plugins/actions/sql.adoc[SQL Script Executor]
 *** xref:plugins/actions/start.adoc[Start]
 *** xref:plugins/actions/success.adoc[Success Action]
 *** xref:plugins/actions/tableexists.adoc[Table Exists]
@@ -289,8 +290,8 @@
 *** xref:plugins/actions/unzip.adoc[Unzip]
 *** xref:plugins/actions/ftpsput.adoc[Upload files to FTPS]
 *** xref:plugins/actions/pgpverify.adoc[Verify file signature with PGP]
-*** xref:plugins/actions/waitforfile.adoc[Wait for file]
 *** xref:plugins/actions/waitforsql.adoc[Wait for SQL]
+*** xref:plugins/actions/waitforfile.adoc[Wait for file]
 *** xref:plugins/actions/workflow.adoc[Workflow]
 *** xref:plugins/actions/writetofile.adoc[Write to File]
 *** xref:plugins/actions/writetolog.adoc[Write to Log]
diff --git a/hop-user-manual/modules/ROOT/pages/plugins/actions/deleteresultfilenames.adoc b/hop-user-manual/modules/ROOT/pages/plugins/actions/deleteresultfilenames.adoc
index fe7b30f..20c1b74 100644
--- a/hop-user-manual/modules/ROOT/pages/plugins/actions/deleteresultfilenames.adoc
+++ b/hop-user-manual/modules/ROOT/pages/plugins/actions/deleteresultfilenames.adoc
@@ -21,15 +21,15 @@ under the License.
 
 == Description
 
-Use this action to delete all the filenames that are in the result files list of the last workflow action.
+Use this action to delete all the filenames that are in the result files list of the last workflow entry.
 
 == Options
 
 [width="90%", options="header"]
 |===
 |Option|Description
-|Workflow action name|The name of the workflow action.
-|Limit action to|Enable this feature if you want to limit the deletion to certain filenames in the result file list.
+|Workflow action name|The name of the workflow action. *Note*: This name has to be unique in a single workflow. A workflow action can be placed several times on the canvas, however it will be the same workflow action.
+|Limit action to| Enable this feature if you want to limit the deletion to certain filenames in the result file list.
 |Wildcard|The regular expression to limit the files to delete
-|Exclude wildcard|The regular expression to exclude certain files from being deleted. 
+|Exclude wildcar|The regular expression to exclude certain files from being deleted.
 |===
\ No newline at end of file
diff --git a/hop-user-manual/modules/ROOT/pages/plugins/projects/projects.adoc b/hop-user-manual/modules/ROOT/pages/plugins/projects/projects.adoc
new file mode 100644
index 0000000..062d8da
--- /dev/null
+++ b/hop-user-manual/modules/ROOT/pages/plugins/projects/projects.adoc
@@ -0,0 +1,326 @@
+////
+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.
+////
+:documentationPath: /plugins/projects/
+:language: en_US
+:page-alternativeEditUrl: https://github.com/apache/incubator-hop/edit/master/plugins/misc/projects/src/main/doc/projects.adoc
+= Projects & Environments
+
+This document explains the basic structure and working of the 'projects' plugin
+
+== Architecture
+
+We want to make it easy for a developer to use one or more projects alongside each other.
+A project is the collection of all the files you need in your data orchestration solution. This typically includes metadata, pipelines, workflows, reference files, documentation and so on.  To match standard development best practices you would check all these files into a version control system like git.
+
+What are typically not included in this set of files are the variable values that you want to make the project run correctly in a certain environment.  For example on a development laptop you might want to set a variable DB_HOSTNAME to localhost and on a production server this value might point to the production database server.
+Because of this you can define (Project Lifecycle) Environments in Hop which wrap around a project by name and include one or more configuration files.  You want these configuration files to be stored outside of the project folder and perhaps into a separate version control repository.
+
+== Projects
+
+The 2 main things that define a project are its name and its home folder.
+Projects and environments as such are defined in the central Hop configuration file hop-config.json.
+By default this file lives in the config/ folder of your Hop client distribution.  You can change that folder by setting the HOP_CONFIG_FOLDER environment variable on your system.
+
+In ```hop-config.json``` you'll find a ```"projectsConfig"``` section. By default it contains the following:
+
+[source,json]
+----
+{
+  "projectsConfig" : {
+    "enabled" : true,
+    "projectMandatory" : true,
+    "environmentMandatory" : false,
+    "defaultProject" : "default",
+    "defaultEnvironment" : null,
+    "standardParentProject" : "default",
+    "standardProjectsFolder" : null,
+    "projectConfigurations" : [ {
+      "projectName" : "default",
+      "projectHome" : "config/projects/default",
+      "configFilename" : "project-config.json"
+    }, {
+      "projectName" : "samples",
+      "projectHome" : "config/projects/samples",
+      "configFilename" : "project-config.json"
+    } ],
+    "lifecycleEnvironments" : [ ],
+    "projectLifecycles" : [ ]
+  }
+}
+----
+
+As you can see the standard Hop client distribution defines 2 projects: default and samples.
+
+Every project has extra metadata and settings stored in a project configuration file called ```project-config.json```.  For the samples project this would be ```config/projects/samples/project-config.json```.
+Let's take a look at it:
+
+[source,json]
+----
+{
+  "metadataBaseFolder" : "${PROJECT_HOME}/metadata",
+  "unitTestsBasePath" : "${PROJECT_HOME}",
+  "dataSetsCsvFolder" : "${PROJECT_HOME}/datasets",
+  "enforcingExecutionInHome" : true,
+  "parentProjectName" : "default",
+  "config" : {
+    "variables" : [ ]
+  }
+}
+----
+
+=== Variables
+
+You can define variables on a project level as well.  This makes it handy to reference things like input and output folders which are not sensitive to being checked into version control.
+
+=== Parent projects
+
+As you can see from the project configuration file, a project can have a parent from which it will inherit all the metadata objects as well as all the variables that are defined in it.
+
+=== Configuration using Hop GUI
+
+The main toolbar in the Hop GUI offers buttons to add, edit and delete a project.
+
+=== Configuration on the command line
+
+The ```hop-conf``` script offers many options to edit everything projects related.
+Please note that these commands never change the content of a project itself.  They only change the way it is configured on your system.
+
+==== Creating a project
+
+[source,bash]
+----
+$ sh hop-conf.sh --project-create --project hop2 --project-home /home/user/projects/hop2 --project-parent default
+Creating project 'hop2'
+Project 'hop2' was created for home folder : /home/user/projects/hop2
+Configuration file for project 'hop2' was saved to : /home/user/projects/hop2/project-config.json
+----
+
+==== Modifying a project
+
+This command adds a variable to the project configuration:
+
+[source,bash]
+----
+$ sh hop-conf.sh --project-modify --project hop2 --project-variables INPUT_FOLDER=input/
+Project configuration for 'hop2' was modified in <path-to-hop>/config/hop-config.json
+Project settings for 'hop2' were modified in file /home/user/projects/hop2/project-config.json
+----
+
+If we look at the project-config.json file we'll see that the variable/value pair was added:
+[source,json]
+----
+{
+  "config" : {
+    "variables" : [ {
+      "name" : "INPUT_FOLDER",
+      "value" : "input/"
+    } ]
+  }
+}
+----
+
+===== Deleting a project
+
+The following deletes a project from the Hop configuration file:
+
+[source,bash]
+----
+$ sh hop-conf.sh -pd -p hop2
+Project 'hop2 was removed from the configuration
+----
+
+== Environments
+
+Environment is short for Project Lifecycle Environment.  It describes the phase of a project in its lifecycle moving from Development to Test to Acceptance to Production.  It can also describe a project in a continuous integration environment and so on.  As such the following attributes define an environment:
+
+* Its name
+* The name of the project
+* The phase
+* The configuration files you want to use to define the environment specific variables
+
+=== Configuration using Hop GUI
+
+The main toolbar in the Hop GUI offers buttons to add, edit and delete an environment.
+Please note that you can add non-existing configuration files in the environment dialog.  When editing the Hop GUI will ask you if you want to create the file.
+
+=== Configuration on the command line
+
+The ```hop-conf``` script offers many options to edit environment definitions.
+
+
+==== Creating an environment
+
+[source,bash]
+----
+$ sh hop-conf.sh \
+     --environment-create \
+     --environment hop2 \
+     --environment-project hop2 \
+     --environment-purpose=Development \
+     --environment-config-files=/home/user/projects/hop2-conf.json
+Creating environment 'hop2'
+Environment 'hop2' was created in Hop configuration file <path-to-hop>/config/hop-config.json
+2021/02/01 16:37:02 - General - ERROR: Configuration file '/home/user/projects/hop2-conf.json' does not exist to read variables from.
+Created empty environment configuration file : /home/user/projects/hop2-conf.json
+  hop2
+    Purpose: Development
+    Configuration files:
+    Project name: hop2
+      Config file: /home/user/projects/hop2-conf.json
+
+----
+
+As you can see from the log, an empty file was created to set variables in:
+
+[source,json]
+----
+{ }
+----
+
+==== Setting variables in an environment
+
+This command adds a variable to the environment configuration file:
+
+[source,bash]
+----
+$ h hop-conf.sh --config-file /home/user/projects/hop2-conf.json --config-file-set-variables DB_HOSTNAME=localhost,DB_PASSWORD=abcd
+Configuration file '/home/user/projects/hop2-conf.json' was modified.
+----
+
+If we look at the file ```hop2-conf.json``` we'll see that the variables were added:
+[source,json]
+----
+{
+  "variables" : [ {
+    "name" : "DB_HOSTNAME",
+    "value" : "localhost",
+    "description" : ""
+  }, {
+    "name" : "DB_PASSWORD",
+    "value" : "abcd",
+    "description" : ""
+  } ]
+}
+----
+
+Please note that you can add descriptions for the variables as well with the ```--describe-variable``` option.  Please run hop-conf without options to see all the possibilities.
+
+===== Deleting an environment
+
+The following deletes an environment from the Hop configuration file:
+
+[source,bash]
+----
+$ $ sh hop-conf.sh --environment-delete --environment hop2
+Lifecycle environment 'hop2' was deleted from Hop configuration file <path-to-hop>/config/hop-config.json
+----
+
+== Running pipelines and workflows
+
+You can specify an environment or a project when executing a pipeline or a workflow.
+By doing so you are automatically configuring metadata, variables without too much fuss.
+
+The easiest example is shown by executing the "complex" pipeline from the Apache Beam examples:
+
+[source,bash]
+----
+$ sh hop-run.sh --project samples --file 'beam/pipelines/complex.hpl' --runconfig Direct
+2021/02/01 16:52:15 - HopRun - Enabling project 'samples'
+2021/02/01 16:52:25 - HopRun - Relative path filename specified: config/projects/samples/beam/pipelines/complex.hpl
+2021/02/01 16:52:26 - General - Created Apache Beam pipeline with name 'complex'
+2021/02/01 16:52:27 - General - Handled transform (INPUT) : Customer data
+2021/02/01 16:52:27 - General - Handled transform (INPUT) : State data
+2021/02/01 16:52:27 - General - Handled Group By (STEP) : countPerState, gets data from 1 previous transform(s)
+2021/02/01 16:52:27 - General - Handled transform (STEP) : uppercase state, gets data from 1 previous transform(s), targets=0, infos=0
+2021/02/01 16:52:27 - General - Handled Merge Join (STEP) : Merge join
+2021/02/01 16:52:27 - General - Handled transform (STEP) : Lookup count per state, gets data from 1 previous transform(s), targets=0, infos=1
+2021/02/01 16:52:27 - General - Handled transform (STEP) : name<n, gets data from 1 previous transform(s), targets=2, infos=0
+2021/02/01 16:52:27 - General - Transform Label: N-Z reading from previous transform targeting this one using : name<n - TARGET - Label: N-Z
+2021/02/01 16:52:27 - General - Handled transform (STEP) : Label: N-Z, gets data from 1 previous transform(s), targets=0, infos=0
+2021/02/01 16:52:27 - General - Transform Label: A-M reading from previous transform targeting this one using : name<n - TARGET - Label: A-M
+2021/02/01 16:52:27 - General - Handled transform (STEP) : Label: A-M, gets data from 1 previous transform(s), targets=0, infos=0
+2021/02/01 16:52:27 - General - Handled transform (STEP) : Switch / case, gets data from 2 previous transform(s), targets=4, infos=0
+2021/02/01 16:52:27 - General - Transform CA reading from previous transform targeting this one using : Switch / case - TARGET - CA
+2021/02/01 16:52:27 - General - Handled transform (STEP) : CA, gets data from 1 previous transform(s), targets=0, infos=0
+2021/02/01 16:52:27 - General - Transform NY reading from previous transform targeting this one using : Switch / case - TARGET - NY
+2021/02/01 16:52:27 - General - Handled transform (STEP) : NY, gets data from 1 previous transform(s), targets=0, infos=0
+2021/02/01 16:52:27 - General - Transform FL reading from previous transform targeting this one using : Switch / case - TARGET - FL
+2021/02/01 16:52:27 - General - Handled transform (STEP) : FL, gets data from 1 previous transform(s), targets=0, infos=0
+2021/02/01 16:52:27 - General - Transform Default reading from previous transform targeting this one using : Switch / case - TARGET - Default
+2021/02/01 16:52:27 - General - Handled transform (STEP) : Default, gets data from 1 previous transform(s), targets=0, infos=0
+2021/02/01 16:52:27 - General - Handled transform (STEP) : Collect, gets data from 4 previous transform(s), targets=0, infos=0
+2021/02/01 16:52:27 - General - Handled transform (OUTPUT) : complex, gets data from Collect
+2021/02/01 16:52:27 - General - Executing this pipeline using the Beam Pipeline Engine with run configuration 'Direct'
+2021/02/01 16:52:34 - General - Beam pipeline execution has finished.
+----
+
+To execute an Apache Beam pipeline a lot of information and metadata is needed.  Let's dive into a few fun information tidbits:
+
+* By referencing the ```samples``` project Hop knows where the project is located (```config/projects/samples```)
+* Since we know the location of the project, we can specify pipelines and workflows with a relative path
+* The project knows where its metadata is stored (```config/projects/samples/metadata```) so it knows where to find the ```Direct``` pipeline run configuration (```config/projects/samples/metadata/pipeline-run-configuration/Direct.json```)
+* This run configuration defines its own pipeline engine specific variables, in this case the output folder : ```DATA_OUTPUT=${PROJECT_HOME}/beam/output/```
+* The output of the samples is as such written to ```config/projects/samples/beam/output```
+
+To reference an environment you can execute using ```-e``` or ```--environment```.  The only difference is that you'll have a number of extra environment variables set while executing.
+
+== Plugin configuration
+
+There are various options to configure the behavior of the ```Projects``` plugin itself. In Hop configuration file ```hop-config.json``` we can find the following options:
+
+[source,json]
+----
+{
+    "projectMandatory" : true,
+    "environmentMandatory" : false,
+    "defaultProject" : "default",
+    "defaultEnvironment" : null,
+    "standardParentProject" : "default",
+    "standardProjectsFolder" : "/home/matt/test-stuff/"
+}
+----
+
+
+|===
+|Option |Description |hop-conf option
+
+|projectMandatory
+|This will prevent anyone from using hop-run without specifying a project
+|```--project-mandatory```
+
+|environmentMandatory
+|This will prevent anyone from using hop-run without specifying an environment
+|```--environment-mandatory```
+
+|defaultProject
+|The default project to use when none is specified
+|```--default-project```
+
+|defaultEnvironment
+|The default environment to use when none is specified
+|```--default-environment```
+
+|standardParentProject
+|The standard parent project to propose when creating new project
+|```--standard-parent-project```
+
+|standardProjectsFolder
+|The folder to which you'll browse by default in the GUI when creating new projects
+|```--standard-projects-folder```
+
+|===
+