http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/expression-language-guide.adoc
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/expression-language-guide.adoc 
b/nifi-docs/src/main/asciidoc/expression-language-guide.adoc
new file mode 100644
index 0000000..af0ee02
--- /dev/null
+++ b/nifi-docs/src/main/asciidoc/expression-language-guide.adoc
@@ -0,0 +1,1745 @@
+//
+// 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.
+//
+Apache NiFi Expression Language Guide
+=====================================
+Apache NiFi Team <d...@nifi.apache.org>
+:homepage: http://nifi.apache.org
+
+[[overview]]
+Overview
+--------
+All data in Apache NiFi is represented by an abstraction called a FlowFile.
+A FlowFile is comprised of two major pieces: content and attributes.
+The content portion of the FlowFile represents the data on which to operate.
+For instance, if a file is picked up from a local file system using the
+GetFile Processor, the contents of the file will become the contents of the 
+FlowFile.
+
+The attributes portion of the FlowFile represents information about the data
+itself, or metadata. Attributes are key-value pairs that represent what is
+known about the data as well as information that is useful for routing and
+processing the data appropriately.
+Keeping with the example of a file that is picked up from
+a local file system, the FlowFile would have an attribute called `filename` 
that
+reflected the name of the file on the file system. Additionally, the FlowFile 
will
+have a `path` attribute that reflects the directory on the file system that 
this
+file lived in. The FlowFile will also have an attribute named `uuid`, which is 
a
+unique identifier for this FlowFile.
+
+However, placing these attributes on a FlowFile do not provide much benefit
+if the user is unable to make use of them. The NiFi Expression Language 
provides
+the ability to reference these attributes, compare them to other values,
+and manipulate their values.
+
+
+[[structure]]
+Structure of a NiFi Expression
+------------------------------
+
+The NiFi Expression Language always begins with the start delimiter `${` and 
ends
+with the end delimiter `}`. Between the start and end delimiters is the text 
of the
+Expression itself. In its most basic form, the Expression can consist of just 
an
+attribute name. For example, `${filename}` will return the value of the 
``filename''
+attribute.
+
+In a slightly more complex example, we can instead return a manipulation of 
this value.
+We can, for example, return an all upper-case version of the filename by 
calling the
+`toUpper` function: `${filename:toUpper()}`. In this case, we reference the 
``filename''
+attribute and then manipulate this value by using the `toUpper` function. A 
function call
+consists of 5 elements. First, there is a function call delimiter `:`. Second 
is the name
+of the function - in this case, ``toUpper''. Next is an open parenthesis 
(`(`), followed
+by the function arguments. The arguments necessary are dependent upon which 
function
+is being called. In this example, we are using the `toUpper` function, which 
does not
+have any arguments, so this element is omitted. Finally, the closing 
parenthesis (`)`)
+indicates the end of the function call. There are many different functions 
that are supported
+by the Expression Language to achieve many different goals. Some functions 
provide String (text)
+manipulation, such as the `toUpper` function. Others, such as the `equals` and 
`matches` functions,
+provide comparison functionality. Functions also exist for manipulating dates 
and times and
+for performing mathematical operations. Each of these functions is described 
below, in the
+<<functions> section, with an explanation of what the function does, the 
arguments that it 
+requires, and the type of information that it returns.
+
+When we perform a function call on an attribute, as above, we refer to the 
attribute as the
+_subject_ of the function, as the attribute is the entity on which the 
function is operating.
+We can then chain together multiple function calls, where the return value of 
the first function
+becomes the subject of the second function and its return value becomes the 
subject of the third
+function and so on. Continuing with our example, we can chain together 
multiple functions by using
+the expression `${filename:toUpper():equals('HELLO.TXT')}`. There is no limit 
to the number of
+functions that can be chained together.
+
+Any FlowFile attribute can be referenced using the Expression Language. 
However, if the attribute
+name contains a ``special character,'' the attribute name must be escaped by 
quoting it. The following
+characters are each considered ``special characters'':
+
+- $ (dollar sign)
+- | (pipe)
+- { (open brace)
+- } (close brace)
+- ( (open parenthesis)
+- ) (close parenthesis)
+- [ (open bracket)
+- ] (close bracket)
+- , (comma)
+- : (colon)
+- ; (semicolon)
+- / (forward slash)
+- * (asterisk)
+- ' (single quote)
+-  (space)
+- \t (tab)
+- \r (carriage return)
+- \n (new-line)
+
+Additionally, a number is considered a ``special character'' if it is the 
first character of the attribute name.
+If any of these special characters is present in an attribute is quoted by 
using either single or double quotes.
+The Expression Language allows single quotes and double quotes to be used 
interchangeably. For example, the following
+can be used to escape an attribute named ``my attribute'': `${"my attribute"}` 
or `${'my attribute'}`.
+
+In this example, the value to be returned is the value of the "my attribute" 
value, if it exists. If that attribute
+does not exist, the Expression Language will then look for a System 
Environment Variable named "my attribute." If
+unable to find this, it will look for a JVM System Property named "my 
attribute." Finally, if none of these exists,
+the Expression Language will return a `null` value.
+
+There also exist some functions that expect to have no subject. These 
functions are invoked simply
+by calling the function at the beginning of the Expression, such as 
`${hostname()}`. These functions
+can then be changed together, as well. For example, `${hostname():toUpper()}`. 
Attempting to 
+evaluate the function with subject will result in an error. In the 
<<functions>>
+section below, these functions will clearly indicate in their descriptions 
that they do not
+require a subject.
+
+Often times, we will need to compare the values of two different attributes to 
each other. 
+We are able to accomplish this by using embedded Expressions. We can, for 
example, check if
+the ``filename'' attribute is the same as the ``uuid'' attribute: 
`${filename:equals( ${uuid} )}`.
+Notice here, also, that we have a space between the opening parenthesis for 
the `equals` method and
+the embedded Expression. This is not necessary and does not affect how the 
Expression is evaluated
+in any way. Rather, it is intended to make the Expression easier to read. 
White space is ignored by
+the Expression Language between delimiters. Therefore, we can use the 
Expression
+`${     filename   : equals(${    uuid})  }` or `${filename:equals(${uuid})}` 
and both Expressions
+mean the same thing. We cannot, however, use `${file name:equals(${uuid})}`, 
because this results
+in `file` and `name` being interpreted as different tokens, rather than a 
single token, `filename`.
+
+
+
+[[usage]]
+== Expression Language in the Application
+
+The Expression Language is used heavily throughout the NiFi application for 
configuring Processor
+properties. Not all Processor properties support the Expression Language, 
however. Whether or not
+a Property supports the Expression Language is determined by the developer of 
the Processor when
+the Processor is written. However, the application strives to clearly 
illustrate for each Property
+whether or not the Expression Language is supported.
+
+In the application, when configuring a Processor property, the User Interface 
provides an Information
+icon (
+image:iconInfo.png["Info"]
+) next to the name of the Property. Hovering over this icon with the mouse 
will provide a tooltip that
+provides helpful information about the Property. This information includes a 
description of the Property,
+the default value (if any), historically configured values (if any), and 
whether or not this Property
+supports the expression language.
+
+
+[[editor]]
+=== Expression Language Editor
+
+When configuring the value of a Processor property, the NiFi User Interface 
provides help with the
+Expression Language using the Expression Language editor. Once an Expression 
is begin by typing `${`,
+the editor begins to highlight parentheses and braces so that the user is 
easily able to tell which
+opening parenthesis or brace matches which closing parenthesis or brace.
+
+The editor also supplies context-sensitive help by providing a list of all 
functions that can be used
+at the current cursor position. To activate this feature, press Ctrl+Space on 
the keyboard. The user
+is also able to type part of a function name and then press Ctrl+Space to see 
all functions that can
+be used that start with the same prefix. For example, if we type into the 
editor `${filename:to`
+and then press Ctrl+Space, we are provided a pop-up that lists six different 
functions: `toDate`,
+`toLower`, `toNumber`, `toRadix`, `toString`, and `toUpper`. We can then 
continue typing to narrow
+which functions are shown, or we can select one of the functions from the list 
by double-clicking
+it with the mouse or using the arrow keys to highlight the desired function 
and pressing Enter.
+
+
+
+[[functions]]
+== Functions
+
+Functions provide a convenient way to manipulate and compare values of 
attributes. The Expression Language
+provides many different functions to meet the needs of a automated dataflow. 
Each function takes 
+zero or more arguments and returns a single value. These functions can then be 
chained together to create
+powerful Expressions to evaluate conditions and manipulate values. See 
<<structure>> for more information 
+on how to call and chain functions together.
+
+[[types]]
+=== Data Types
+
+Each argument to a function and each value returned from a function has a 
specific data type. The Expression
+Language supports four different data types:
+
+- *String*: A String is a sequence of characters that can consist of numbers, 
letters, white space, and
+       special characters.
+- *Number*: A Number is an integer comprised of one or more digits (`0` 
through `9`). The Expression Language 
+       does not provide support for fractional numbers. Dates and times are 
represented in the
+       Expression Language as Numbers, representing the number of milliseconds 
since midnight GMT on January 1, 1970.
+- *Boolean*: A Boolean is one of either `true` or `false`.
+
+All attributes are considered to be of type String.
+
+The Expression Language is generally able to automatically coerce a value of 
one data type to the appropriate
+data type for a function. However, functions do exist to manually coerce a 
value into a specific data type. 
+See the <<type_cast>> section for more information. 
+
+
+
+
+
+
+[[boolean]]
+== Boolean Logic
+
+One of the most powerful features of the Expression Language is the ability to 
compare an attribute value against
+some other value. This is used often, for example, to configure how a 
Processor should route data. The following
+functions are used for performing boolean logic, such as comparing two values. 
+Each of these functions returns a value of type Boolean.
+
+
+[.function]
+=== isNull
+*Description*: [.description]#The `isNull` function returns `true` if the 
subject is null, `false` otherwise. This is typically used to determine
+if an attribute exists.#
+
+*Subject Type*: [.subject]#Any#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*:    `${filename:isNull()}` returns `true` if the "filename" 
attribute does not exist. 
+       It returns `true` if the attribute exists.
+
+
+
+[.function]
+=== notNull
+*Description*: [.description]#The `notNull` function returns the opposite 
value of the `isNull` function. That is, it will return `true` if the
+subject exists and `false` otherwise.#
+       
+*Subject Type*: [.subject]#Any#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: `${filename:notNull()}` returns `true` if the "filename" attribute 
exists. It returns "false" if the attribute
+       does not exist.
+
+
+
+[.function]
+=== isEmpty
+*Description*: [.description]#The `isEmpty` function returns `true` if the 
Subject is null or contains only white-space
+       (new line, carriage return, space, tab), `false` otherwise.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: `${filename:isEmpty()}` returns `true` if the "filename" attribute 
does not exist or contains only
+       white space.
+       
+       
+
+
+[.function]
+=== equals
+
+[.description]
+*Description*: [.description]#The `equals` function is very widely used and 
determines if its subject is equal to another String value.
+       Note that the `equals` function performs a direct comparison of two 
String values. Take care not to confuse this
+       function with the <<matches>> function, which evaluates its subject 
against a Regular Expression.#
+
+[.subject]     
+*Subject Type*: [.subject]#Any#
+
+[.arguments]
+*Arguments*:
+       
+       - [.argName]#_value_# : [.argDesc]#The value to compare the Subject to. 
Must be same type as the Subject.#
+
+[.returnType]
+*Return Type*: [.returnType]#Boolean#
+
+[.examples]
+*Examples*:
+We can check if the filename of a FlowFile is "hello.txt" by using the 
expression `${filename:equals('hello.txt')}`,
+or we could check if the value of the attribute `hello` is equal to the value 
of the `filename` attribute:
+`${hello:equals( ${filename} )}`.
+
+
+
+[.function]
+=== equalsIgnoreCase
+*Description*: [.description]#Similar to the `equals` function, the 
`equalsIgnoreCase` function compares its subject against a String value but 
returns
+`true` if the two values differ only by case (upper case vs. lower case).#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The value to compare the Subject to.#
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: `${filename:equalsIgnoreCase('hello.txt')}` will evaluate to 
`true` if filename is equal to "hello.txt" 
+       or "HELLO.TXT" or "HeLLo.TxT".
+
+
+
+
+[.function]
+=== gt
+*Description*: [.description]#The `gt` function is used for numeric comparison 
and returns `true` if the subject is Greater Than 
+       its argument. If either the subject or the argument cannot be coerced 
into a Number, 
+       this function returns `false`.#
+
+*Subject Type*: [.subject]#Number#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The number to compare the Subject 
to.#
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: `${fileSize:gt( 1024 )}` will return `true` if the size of the 
FlowFile's content is more than 1 kilobyte
+       (1024 bytes). Otherwise, it will return `false`.
+
+
+
+
+[.function]
+=== ge
+*Description*: [.description]#The `ge` function is used for numeric comparison 
and returns `true` if the subject is Greater Than 
+       Or Equal To its argument. If either the subject or the argument cannot 
be coerced into a Number, 
+       this function returns `false`.#
+
+*Subject Type*: [.subject]#Number#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The number to compare the Subject 
to.#
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: `${fileSize:ge( 1024 )}` will return `true` if the size of the 
FlowFile's content is at least (
+       is greater than or equal to) 1 kilobyte (1024 bytes). Otherwise, it 
will return `false`.
+
+
+
+[.function]
+=== lt
+*Description*: [.description]#The `lt` function is used for numeric comparison 
and returns `true` if the subject is Less Than 
+       its argument. If either the subject or the argument cannot be coerced 
into a Number, 
+       this function returns `false`.#
+
+*Subject Type*: [.subject]#Number#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The number to compare the Subject 
to.#
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: `${fileSize:lt( 1048576 )}` will return `true` if the size of the 
FlowFile's content is less than
+       1 megabyte (1048576 bytes). Otherwise, it will return `false`.
+
+
+
+
+[.function]
+=== le
+*Description*: [.description]#The `le` function is used for numeric comparison 
and returns `true` if the subject is Less Than 
+       Or Equal To its argument. If either the subject or the argument cannot 
be coerced into a Number, 
+       this function returns `false`.#
+
+*Subject Type*: [.subject]#Number#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The number to compare the Subject 
to.#
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: `${fileSize:le( 1048576 )}` will return `true` if the size of the 
FlowFile's content is at most
+       (less than or equal to) 1 megabyte (1048576 bytes). Otherwise, it will 
return `false`.
+
+
+
+
+
+
+[.function]
+=== and
+*Description*: [.description]#The `and` function takes as a single argument a 
Boolean value and returns `true` if both the Subject
+       and the argument are `true`. If either the subject or the argument is 
`false` or cannot be coerced into a Boolean,
+       the function returns `false`. Typically, this is used with an embedded 
Expression as the argument.#
+
+*Subject Type*: [.subject]#Boolean#
+
+*Arguments*:
+
+       - [.argName]#_condition_# : [.argDesc]#The right-hand-side of the 'and' 
Expression#
+
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: We can check if the filename is both all lower-case and has at 
least 5 characters by using the Expression
+-----------------------------------------------
+${filename:toLower():equals( ${filename} ):and(
+       ${filename:length():ge(5)}
+)}
+-----------------------------------------------
+
+
+
+
+
+[.function]
+=== or
+
+*Description*: [.description]#The `or` function takes as a single argument a 
Boolean value and returns `true` if either the Subject
+       or the argument is `true`. If both the subject and the argument are 
`false`, the function returns `false`. If
+       either the Subject or the argument cannot be coerced into a Boolean 
value, this function will return `false`.#
+
+*Subject Type*: [.subject]#Boolean#
+
+*Arguments*:
+
+       - [.argName]#_condition_# : [.argDesc]#The right-hand-side of the 'and' 
Expression#
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: The following example will return `true` if either the filename 
has exactly 5 characters or if
+       the filename is all lower-case.
+----------------------------------------------
+${filename:toLower():equals( ${filename} ):or(
+       ${filename:length():equals(5)}
+)}
+----------------------------------------------
+
+
+
+[.function]
+=== not
+
+[.description]
+*Description*: [.description]#The `not` function returns the negation of the 
Boolean value of the subject.#
+
+[.subject]
+*Subject Type*: [.subject]#Boolean#
+
+[.arguments]
+*Arguments*: No arguments
+
+[.returnType]
+*Return Type*: [.returnType]#Boolean#
+
+[.examples]
+*Examples*: We can invert the value of another function by using the `not` 
function, as 
+       `${filename:equals('hello.txt'):not()}`. This will return `true` if the 
filename is NOT equal to
+       "hello.txt" and will return `false` if the filename is "hello.txt."
+
+
+
+
+
+
+
+[[strings]]
+== String Manipulation
+
+Each of the following functions manipulates a String in some way.
+
+
+
+
+[.function]
+=== toUpper
+
+*Description*: [.description]#This function converts the Subject into an all 
upper-case String. Said another way, it
+       replaces any lowercase letter with the uppercase equivalent.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: If the "filename" attribute is "abc123.txt", then the Expression 
`${filename:toUpper()}` 
+       will return "ABC123.TXT"
+
+
+
+
+
+[.function]
+=== toLower
+
+*Description*: [.description]#This function converts the Subject into an all 
lower-case String. Said another way,
+       it replaces any uppercase letter with the lowercase equivalent.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: If the "filename" attribute is "ABC123.TXT", then the Expression 
`${filename:toLower()}`
+       will return "abc123.txt"
+
+
+
+
+
+[.function]
+=== trim
+
+*Description*: [.description]#The `trim` function will remove any leading or 
trailing white space from its subject.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: If the attribute `attr` has the value "     1 2 3     ", then the 
Expression `${attr:trim()}` will
+       return the value "1 2 3".
+
+
+
+
+
+[.function]
+=== urlEncode
+
+*Description*: [.description]#Returns a URL-friendly version of the Subject. 
This is useful, for instance, when using an
+       attribute value to indicate the URL of a website.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: We can URL-Encode an attribute named "url" by using the Expression 
`${url:urlEncode()}`. If
+       the value of the "url" attribute is "https://nifi.apache.org/some value 
with spaces", this
+       Expression will then return 
"https://nifi.apache.org/some%20value%20with%20spaces";.
+
+
+
+
+[.function]
+=== urlDecode
+
+*Description*: [.description]#Converts a URL-friendly version of the Subject 
into a human-readable form.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: If we have a URL-Encoded attribute named "url" with the value 
+       "https://nifi.apache.org/some%20value%20with%20spaces";, then the 
Expression
+       `${url:urlDecode()}` will return "https://nifi.apache.org/some value 
with spaces".
+
+
+
+
+
+[.function]
+=== substring
+
+*Description*: 
+[.description]#Returns a portion of the Subject, given a _starting index_ and 
an optional _ending index_.
+       If the _ending index_ is not supplied, it will return the portion of 
the Subject starting at the given
+       'start index' and ending at the end of the Subject value.#
+
+[.description]#The _starting index_ and _ending index_ are zero-based. That 
is, the first character is referenced by using
+       the value `0`, not `1`.#
+
+[.description]#If either the _starting index_ is or the _ending index_ is not 
a number, this function call will result
+       in an error.#
+
+[.description]#If the _starting index_ is larger than the _ending index_, this 
function call will result in an error.#
+
+[.description]#If the _starting index_ or the _ending index_ is greater than 
the length of the Subject or has a value
+       less than 0, this function call will result in an error.#
+
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*: 
+
+       - [.argName]#_starting index_# : [.argDesc]#The 0-based index of the 
first character to capture (inclusive)#
+       - [.argName]#_ending index_# : [.argDesc]#The 0-based index of the last 
character to capture (exclusive)#
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: 
+
+If we have an attribute named "filename" with the value "a brand new 
filename.txt",
+then the following Expressions will result in the following values:
+
+.Substring Examples
+|================================================================
+| Expression | Value
+| `${filename:substring(0,1)}` | `a`
+| `${filename:substring(2)}` | `brand new filename.txt`
+| `${filename:substring(12)}` | `filename.txt`
+| `${filename:substring( ${filename:length():minus(2)} )}` | `xt`
+|================================================================
+
+
+
+
+[.function]
+=== substringBefore
+
+*Description*: [.description]#Returns a portion of the Subject, starting with 
the first character of the Subject
+       and ending with the character immediately before the first occurrence 
of the argument. If
+       the argument is not present in the Subject, the entire Subject will be 
returned.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The String to search for in the 
Subject#
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: If the "filename" attribute has the value "a brand new 
filename.txt",
+       then the following Expressions will result in the following values:
+       
+.SubstringBefore Examples
+|======================================================================
+| Expression | Value
+| `${filename:substringBefore('.')}` | `a brand new filename`
+| `${filename:substringBefore(' ')}` | `a`
+| `${filename:substringBefore(' n')}` | `a brand`
+| `${filename:sbustringBefore('missing')}` | `a brand new filename.txt`
+|======================================================================
+
+
+
+
+
+[.function]
+=== substringBeforeLast
+
+*Description*: [.description]#Returns a portion of the Subject, starting with 
the first character of the Subject
+       and ending with the character immediately before the last occurrence of 
the argument. If
+       the argument is not present in the Subject, the entire Subject will be 
returned.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The String to search for in the 
Subject#
+
+*Return Type*: [.returnType]#String3
+
+*Examples*: If the "filename" attribute has the value "a brand new 
filename.txt",
+       then the following Expressions will result in the following values:
+       
+.SubstringBeforeLast Examples
+|==========================================================================
+| Expression | Value
+| `${filename:substringBeforeLast('.')}` | `a brand new filename`
+| `${filename:substringBeforeLast(' ')}` | `a brand new`
+| `${filename:substringBeforeLast(' n')}` | `a brand`
+| `${filename:substringBeforeLast('missing')}` | `a brand new filename.txt`
+|==========================================================================
+
+
+
+
+
+
+[.function]
+=== substringAfter
+
+*Description*: [.description]#Returns a portion of the Subject, starting with 
the character immediately after
+       the first occurrence of the argument and extending to the end of the 
Subject. If
+       the argument is not present in the Subject, the entire Subject will be 
returned.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The String to search for in the 
Subject#
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: If the "filename" attribute has the value "a brand new 
filename.txt",
+       then the following Expressions will result in the following values:
+       
+.SubstringAfter Examples
+|======================================================================
+| Expression | Value
+| `${filename:substringAfter('.')}` | `txt`
+| `${filename:substringAfter(' ')}` | `brand new filename.txt`
+| `${filename:substringAfter(' n')}` | `ew filename.txt`
+| `${filename:substringAfter('missing')}` | `a brand new filename.txt`
+|======================================================================
+
+
+
+
+
+[.function]
+=== substringAfterLast
+
+*Description*: [.description]#Returns a portion of the Subject, starting with 
the character immediately after
+       the last occurrence of the argument and extending to the end of the 
Subject. If
+       the argument is not present in the Subject, the entire Subject will be 
returned.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The String to search for in the 
Subject#
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: If the "filename" attribute has the value "a brand new 
filename.txt",
+       then the following Expressions will result in the following values:
+       
+.SubstringAfterLast Examples
+|=========================================================================
+| Expression | Value
+| `${filename:substringAfterLast('.')}` | `txt`
+| `${filename:substringAfterLast(' ')}` | `filename.txt`
+| `${filename:substringAfterLast(' n')}` | `ew filename.txt`
+| `${filename:substringAfterLast('missing')}` | `a brand new filename.txt`
+|=========================================================================
+
+
+
+
+
+
+
+[.function]
+=== append
+
+*Description*: [.description]#The `append` function returns the result of 
appending the argument to the value of
+       the Subject. If the Subject is null, returns the argument itself.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The String to append to the end of 
the Subject#
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: If the "filename" attribute has the value "a brand new 
filename.txt", then the Expression
+       `${filename:append('.gz')}` will return "a brand new filename.txt.gz".
+
+
+
+
+
+[.function]
+=== prepend
+
+*Description*: [.description]#The `prepend` function returns the result of 
prepending the argument to the value of
+       the Subject. If the subject is null, returns the argument itself.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The String to prepend to the 
beginning of the Subject#
+
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: If the "filename" attribute has the value "filename.txt", then the 
Expression
+       `${filename:prepend('a brand new ')}` will return "a brand new 
filename.txt".
+
+
+
+
+
+[.function]
+=== replace
+
+*Description*: [.description]#Replaces occurrences of one String within the 
Subject with another String.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_Search String_# : [.argDesc]#The String to find within 
the Subject#
+       - [.argName]#_Replacement_# : [.argDesc]#The value to replace _Search 
String_ with#
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: If the "filename" attribute has the value "a brand new 
filename.txt", then the following
+Expressions will provide the following results:
+
+
+
+.Replace Examples
+|===================================================================
+| Expression | Value
+| `${filename:replace('.', '_')}` | `a brand new filename_txt`
+| `${filename:replace(' ', '.')}` | `a.brand.new.filename.txt`
+| `${filename:replace('XYZ', 'ZZZ')}` | `a brand new filename.txt`
+| `${filename:replace('filename', 'book')}` | `a brand new book.txt`
+|===================================================================
+
+
+
+
+
+[.function]
+=== replaceAll
+
+*Description*: [.description]#The `replaceAll` function takes two String 
arguments: a Regular Expression (NiFi uses the Java Pattern
+       syntax), and a replacement string. The return value is the result of 
substituting the replacement string for
+       all patterns within the Subject that match the Regular Expression.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+*Arguments*:
+
+       - [.argName]#_Regex_# : [.argDesc]#he Regular Expression (in Java 
syntax) to match in the Subject#
+       - [.argName]#_Replacement_# : [.argDesc]#The value to use for replacing 
matches in the Subject. If the _regular expression_
+               argument uses Capturing Groups, back references are allowed in 
the _replacement_.#
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: If the "filename" attribute has the value "a brand new 
filename.txt", then the following
+Expressions will provide the following results:
+
+
+
+.replaceAll Examples
+|=======================================================================================
+| Expression | Value
+| `${filename:replaceAll('\..*', '')}` | `a brand new filename`
+| `${filename:replaceAll('a brand (new)', '$1')}` | `new filename.txt`
+| `${filename:replaceAll('XYZ', 'ZZZ')}` | `a brand new filename.txt`
+| `${filename:replaceAll('brand (new)', 'somewhat $1')}` | `a somewhat new 
filename.txt`
+|=======================================================================================
+
+
+
+
+
+
+[.function]
+=== replaceNull
+
+*Description*: [.description]#The `replaceNull` function returns the argument 
if the Subject is null. Otherwise,
+       returns the Subject.#
+
+*Subject Type*: [.subject]#Any#
+
+*Arguments*:
+
+       - [.argName]#_Replacement_# : [.argDesc]#The value to return if the 
Subject is null.#
+
+*Return Type*: [.returnType]#Type of Subject if Subject is not null; else, 
type of Argument#
+
+*Examples*: If the attribute "filename" has the value "a brand new 
filename.txt" and the attribute
+       "hello" does not exist, then the Expression 
`${filename:replaceNull('abc')}` will return 
+       "a brand new filename.txt", while `${hello:replaceNull('abc')}` will 
return "abc".
+
+
+
+
+[.function]
+=== replaceEmpty
+
+*Description*: [.description]#The `replaceEmpty` function returns the argument 
if the Subject is null or
+       if the Subject consists only of white space (new line, carriage return, 
tab, space). Otherwise,
+       returns the Subject.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_Replacement_# : [.argDesc]#The value to return if the 
Subject is null or empty.#
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: If the attribute "filename" has the value "a brand new 
filename.txt" and the attribute
+       "hello" has the value "  ", then the Expression 
`${filename:replaceEmpty('abc')}` will return 
+       "a brand new filename.txt", while `${hello:replaceEmpty('abc')}` will 
return "abc".
+
+
+
+
+[.function]
+=== length
+
+*Description*: [.description]#Returns the length of the Subject#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#Number#
+
+*Examples*: If the attribute "filename" has a value of "a brand new 
filename.txt" and the attribute
+       "hello" does not exist, then the Expression `${filename:length()}` will 
return 24. `${hello:length()}`
+       will return 0.
+
+
+
+
+
+
+
+
+[[searching]]
+== Searching
+
+Each of the following functions is used to search its subject for some value.
+
+
+[.function]
+=== startsWith
+
+*Description*: [.description]#Returns `true` if the Subject starts with the 
String provided as the argument,
+       `false` otherwise.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The value to search for#
+
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: If the "filename" attribute has the value "a brand new 
filename.txt", then the Expression
+       `${filename:startsWith('a brand')}` will return `true`. 
`${filename:startsWith('A BRAND')}` will
+       return `false`. `${filename:toUpper():startsWith('A BRAND')}` returns 
`true`.
+
+
+
+
+
+[.function]
+=== endsWith
+
+*Description*: [.description]#Returns `true` if the Subject ends with the 
String provided as the argument,
+       `false` otherwise.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The value to search for#
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: If the "filename" attribute has the value "a brand new 
filename.txt", then the Expression
+       `${filename:endsWith('txt')}` will return `true`. 
`${filename:endsWith('TXT')}` will
+       return `false`. `${filename:toUpper():endsWith('TXT')}` returns `true`.
+
+
+
+
+
+[.function]
+=== contains
+
+*Description*: [.description]#Returns `true` if the Subject contains the value 
of the argument anywhere in the value.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The value to search for#
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: If the "filename" attribute has the value "a brand new 
filename.txt", then the Expression
+       `${filename:contains('new')}` will return `true`. 
`${filename:contains('NEW')}` will
+       return `false`. `${filename:toUpper():contains('NEW')}` returns `true`.
+
+
+
+
+
+[.function]
+=== find
+
+*Description*: [.description]#Returns `true` if the Subject contains any 
sequence of characters that matches the
+       Regular Expression provided by the argument.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_Regex_# : [.argDesc]#The Regular Expression (in the Java 
Pattern syntax) to match against the Subject#
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: 
+
+If the "filename" attribute has the value "a brand new filename.txt", then the 
following
+Expressions will provide the following results:
+
+
+.find Examples
+|=======================================================================================
+| Expression | Value
+| `${filename:find('a [Bb]rand [Nn]ew')}` | `true`
+| `${filename:find('Brand.*')}` | `false`
+| `${filename:find('brand')}` | `true`
+|=======================================================================================
+
+
+
+
+
+[.function]
+=== matches
+
+*Description*: [.description]#Returns `true` if the Subject exactly matches 
the Regular Expression provided by the argument.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*: 
+
+       - [.argName]#_Regex_# : [.argDesc]#The Regular Expression (in the Java 
Pattern syntax) to match against the Subject#
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: 
+
+If the "filename" attribute has the value "a brand new filename.txt", then the 
following
+Expressions will provide the following results:
+
+
+.matches Examples
+|=======================================================================================
+| Expression | Value
+| `${filename:matches('a.*txt')}` | `true`
+| `${filename:matches('brand')}` | `false`
+| `${filename:matches('.+brand.+')}` | `true`
+|=======================================================================================
+
+
+
+
+[.function]
+=== indexOf
+
+*Description*: [.description]#Returns the index of the first character in the 
Subject that matches the String value provided
+       as an argument. If the argument is found multiple times within the 
Subject, the value returned is the
+       starting index of the *first* occurrence.
+       If the argument cannot be found in the Subject, returns `-1`. The index 
is zero-based. This means that if
+       the search string is found at the beginning of the Subject, the value 
returned will be `0`, not `1`.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The value to search for in the 
Subject#
+
+*Return Type*: [.returnType]#Number#
+
+*Examples*: If the "filename" attribute has the value "a brand new 
filename.txt", then the following
+Expressions will provide the following results:
+
+
+
+.indexOf Examples
+|===============================================
+| Expression | Value
+| `${filename:indexOf('a.*txt')}` | `-1`
+| `${filename:indexOf('.')}` | `20`
+| `${filename:indexOf('a')}` | `0`
+| `${filename:indexOf(' ')}` | `1`
+|===============================================
+
+
+
+
+[.function]
+=== lastIndexOf
+
+*Description*: [.description]#Returns the index of the first character in the 
Subject that matches the String value provided
+       as an argument. If the argument is found multiple times within the 
Subject, the value returned is the
+       starting index of the *last* occurrence.
+       If the argument cannot be found in the Subject, returns `-1`. The index 
is zero-based. This means that if
+       the search string is found at the beginning of the Subject, the value 
returned will be `0`, not `1`.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_value_# : [.argDesc]#The value to search for in the 
Subject#
+
+*Return Type*: [.returnType]#Number#
+
+*Examples*: If the "filename" attribute has the value "a brand new 
filename.txt", then the following
+Expressions will provide the following results:
+
+.lastIndexOf Examples
+|=======================================================================================
+| Expression | Value
+| `${filename:lastIndexOf('a.*txt')}` | `-1`
+| `${filename:lastIndexOf('.')}` | `20`
+| `${filename:lastIndexOf('a')}` | `17`
+| `${filename:lastIndexOf(' ')}` | `11`
+|=======================================================================================
+
+
+
+
+[[numbers]]
+== Mathematical Operations and Numeric Manipulation
+
+
+[.function]
+=== plus
+
+*Description*: [.description]#Adds a numeric value to the Subject. If either 
the argument or the Subject cannot be
+       coerced into a Number, returns `null`.#
+
+*Subject Type*: [.subject]#Number#
+
+*Arguments*:
+
+       - [.argName]#_Operand_# : [.argDesc]#The value to add to the Subject#
+
+*Return Type*: [.returnType]#Number#
+
+*Examples*: If the "fileSize" attribute has a value of 100, then the 
Expression `${fileSize:plus(1000)}`
+       will return the value `1100`.
+
+
+
+
+
+[.function]
+=== minus
+
+*Description*: [.description]#Subtracts a numeric value from the Subject.#
+
+*Subject Type*: [.subject]#Number#
+
+*Arguments*:
+
+       - [.argName]#_Operand_# : [.argDesc]#The value to subtract from the 
Subject#
+
+*Return Type*: [.returnType]#Number#
+
+*Examples*: If the "fileSize" attribute has a value of 100, then the 
Expression `${fileSize:minus(100)}`
+       will return the value `0`.
+
+
+
+
+
+[.function]
+=== multiply
+
+*Description*: [.description]#Multiplies a numeric value by the Subject and 
returns the product.#
+
+*Subject Type*: [.subject]#Number#
+
+*Arguments*:
+
+       - [.argName]#_Operand_# : [.argDesc]#The value to multiple the Subject 
by#
+
+*Return Type*: [.returnType]#Number#
+
+*Examples*: If the "fileSize" attribute has a value of 100, then the 
Expression `${fileSize:multiply(1024)}`
+       will return the value `102400`.
+
+
+
+
+[.function]
+=== divide
+
+*Description*: [.description]#Divides a numeric value by the Subject and 
returns the result, rounded down to the nearest integer.#
+
+*Subject Type*: [.subject]#Number#
+
+*Arguments*:
+
+       - [.argName]#_Operand_# : [.argDesc]#The value to add divide the 
Subject by#
+
+*Return Type*: [.returnType]#Number#
+
+*Examples*: If the "fileSize" attribute has a value of 100, then the 
Expression `${fileSize:divide(12)}`
+       will return the value `8`.
+
+
+
+
+[.function]
+=== mod
+
+*Description*: [.description]#Performs a modular division of the Subject by 
the argument. That is, this function will divide
+       the Subject by the value of the argument and return not the quotient 
but rather the remainder.#
+
+*Subject Type*: [.subject]#Number#
+
+*Arguments*:
+
+       - [.argName]#_Operand_# : [.argDesc]#The value to divide the Subject by#
+
+*Return Type*: [.returnType]#Number#
+
+*Examples*: If the "fileSize" attribute has a value of 100, then the 
Expression `${fileSize:mod(12)}`
+       will return the value `4`.
+
+
+
+
+
+[.function]
+=== toRadix
+
+*Description*: [.description]#Converts the Subject from a Base 10 number to a 
different Radix (or number base). An optional
+       second argument can be used to indicate the minimum number of 
characters to be used. If the converted value
+       has fewer than this number of characters, the number will be padded 
with leading zeroes.#
+
+*Subject Type*: [.subject]#Number#
+
+*Arguments*:
+
+       - [.argName]#_Desired Base_# : [.argDesc]#A Number between 2 and 36 
(inclusive)#
+       - [.argName]#_Padding_# : [.argDesc]#Optional argument that specifies 
the minimum number of characters in the converted output#
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: If the "fileSize" attributes has a value of 1024, then the 
following Expressions will yield
+       the following results:
+       
+
+.toRadix Examples
+|=======================================================================================
+| Expression | Value
+| `${fileSize:toRadix(10)}` | `1024`
+| `${fileSize:toRadix(10, 1)}` | `1024`
+| `${fileSize:toRadix(10, 8)}` | `00001024`
+| `${fileSize:toRadix(16)}` | `400`
+| `${fileSize:toRadix(16, 8)}` | `00000400`
+| `${fileSize:toRadix(2)}` | `10000000000`
+| `${fileSize:toRadix(2, 16)}` | `0000010000000000`
+|=======================================================================================
+
+
+
+
+[[dates]]
+== Date Manipulation
+
+
+
+[[format]]
+[.function]
+=== format
+
+*Description*: [.description]#Formats a number as a date/time according to the 
format specified by the argument. The argument
+       must be a String that is a valid Java SimpleDateFormat format. The 
Subject is expected to be a Number that
+       represents the number of milliseconds since Midnight GMT January 1, 
1970.#
+
+*Subject Type*: [.subject]#Number#
+
+*Arguments*:
+
+       - [.argName]#_format_# : [.argDesc]#The format to use in the Java 
SimpleDateFormat syntax#
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: If the attribute "time" has the value "1420058163264", then the 
following Expressions will yield
+       the following results:
+       
+.format Examples
+|============================================================================
+| Expression | Value
+| `${time:format("yyyy/MM/dd HH:mm:ss.SSS'Z'")}` | `2014/12/31 15:36:03.264Z`
+| `${time:format("yyyy/MM/dd")}` | `2014/12/31`
+| `${time:format("HH:mm:ss.SSS'Z'")}` | `15:36:03.264Z`
+| `${time:format("2014")}` | `2014`
+|============================================================================
+
+
+
+
+
+[.function]
+=== toDate
+
+*Description*: [.description]#Converts a String into a Number, based on the 
format specified by the argument. The argument
+       must be a String that is a valid Java SimpleDateFormat syntax. The 
Subject is expected to be a String
+       that is formatted according the argument. The return value is the numbr 
of milliseconds since 
+       Midnight GMT January 1, 1979.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+       
+               - [.argName]#_format_# : [.argDesc]#The current format to use 
when parsing the Subject, in the Java SimpleDateFormat syntax.#
+
+
+*Return Type*: [.returnType]#Number#
+
+*Examples*: If the attribute "year" has the value "2014" and the attribute 
"time" has the value "2014/12/31 15:36:03.264Z",
+       then the Expression `${year:toDate('yyyy')}` will return the number of 
milliseconds between Midnight GMT on January 1, 1970
+       and Midnight GMT on January 1, 2014. The Expression 
`${time:toDate("yyyy/MM/dd HH:mm:ss.SSS'Z'")}` will result in the
+       number of milliseconds between Midnight GMT on January 1, 1970 and 
15:36:03.264 GMT on December 31, 2014.
+       
+Often, this function is used in conjunction with the <<format>> function to 
change the format of a date/time. For example,
+if the attribute "date" has the value "12-24-2014" and we want to change the 
format to "2014/12/24", we can do so by
+chaining together the two functions: 
`${date:toDate('MM-dd-yyyy'):format('yyyy/MM/dd')}`.
+
+
+
+
+[.function]
+=== now
+
+*Description*: [.description]#The `now` function returns the current date and 
time as the number of milliseconds since Midnight GMT on
+       January 1, 1970.#
+
+*Subject Type*: [.subject]#No Subject#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#Number#
+
+*Examples*: We can format the current date and time by using the `now` 
function in conjunction with the <<format>> function:
+       `${now():format('yyyy/MM/dd HH:mm:ss')}`.
+
+
+
+
+
+[[type_cast]]
+== Type Coercion
+
+[.function]
+=== toString
+
+*Description*: [.description]#Coerces the Subject into a String#
+
+*Subject Type*: [.subject]#Any type#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: The Expression `${fileSize:toNumber():toString()}` converts the 
value of "fileSize" attribute to a number and
+       back to a String.
+
+
+
+
+
+[.function]
+=== toNumber
+
+*Description*: [.description]#Coerces the Subject into a Number#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#Number#
+
+*Examples*: The Expression `${fileSize:toNumber()}` converts the String 
attribute value of "fileSize" to a number.
+
+
+
+
+
+
+[[subjectless]]
+== Subjectless Functions
+
+While the majority of functions in the Expression Language are called by using 
the syntax
+`${attributeName:function()}`, there exist a few functions that are not 
expected to have subjects.
+In this case, the attribute name is not present. For example, the IP address 
of the machine can
+be obtained by using the Expression `${ip()}`. All of the functions in this 
section are to be called
+without a subject. Attempting to call a subjectless function and provide it a 
subject will result in
+an error when validating the function.
+
+
+[.function]
+=== ip
+
+*Description*: [.description]#Returns the IP address of the machine.#
+
+*Subject Type*: [.subjectless]#No subject#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: The IP address of the machine can be obtained by using the 
Expression `${ip()}`.
+
+
+
+
+
+[.function]
+=== hostname
+
+*Description*: [.description]#Returns the Hostname of the machine. An optional 
argument of type Boolean can be provided
+       to specify whether or not the Fully Qualified Domain Name should be 
used. If `false`, or not specified,
+       the hostname will not be fully qualified. If the argument is `true` but 
the fully qualified hostname
+       cannot be resolved, the simple hostname will be returned.#
+
+*Subject Type*: [.subjectless]#No subject#
+
+*Arguments*:
+
+       - [.argName]#_Fully Qualified_# : [.argDesc]#Optional parameter that 
specifies whether or not the hostname should be
+               fully qualified. If not specified, defaults to false.#
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: The fully qualified hostname of the machine can be obtained by 
using the Expression `${hostname(true)}`,
+       while the simple hostname can be obtained by using either 
`${hostname(false)}` or simply `${hostname()}`.
+
+
+
+
+
+[.function]
+=== UUID
+
+*Description*: [.description]#Returns a randomly generated UUID.#
+
+*Subject Type*: [.subjectless]#No Subject#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: ${UUID()} returns a value similar to 
de305d54-75b4-431b-adb2-eb6b9e546013
+
+
+
+
+
+[.function]
+=== nextInt
+
+*Description*: [.description]#Returns a one-up value (starting at 0) and 
increasing over the lifetime of the running instance of NiFi. 
+       This value is not persisted across restarts and is not guaranteed to be 
unique across a cluster. 
+       This value is considered "one-up" in that if called multiple times 
across the NiFi instance, the values will be sequential. 
+       However, this counter is shared across all NiFi components, so calling 
this function multiple times from one Processor will 
+       not guarantee sequential values within the context of a particular 
Processor.#
+
+*Subject Type*: [.subjectless]#No Subject#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#Number#
+
+*Examples*: If the previous value returned by `nextInt` was `5`, the 
Expression `${nextInt():divide(2)}` obtains the next available 
+       integer (6) and divides the result by 2, returning a value of `3`.
+
+
+
+[.function]
+=== literal
+
+*Description*: [.description]#Returns its argument as a literal String value. 
This is useful in order to treat a string or a number
+       at the beginning of an Expression as an actual value, rather than 
treating it as an attribute name. Additionally, it
+       can be used when the argument is an embedded Expression that we would 
then like to evaluate additional functions against.#
+       
+*Subject Type*: [.subjectless]#No Subject#
+
+*Arguments*: 
+
+       - [.argName]#_value_# : [.argDesc]#The value to be treated as a literal 
string, number, or boolean value.#
+       
+*Return Type*: [.returnType]#String#
+
+*Examples*: `${literal(2):gt(1)}` returns `true`
+
+`${literal( ${allMatchingAttributes('a.*'):count()} ):gt(3)}` returns true if 
there are more than 3 attributes whose
+names begin with the letter `a`.
+                       
+
+[[multi]]
+== Evaluating Multiple Attributes
+
+When it becomes necessary to evaluate the same conditions against multiple 
attributes, this can be accomplished by means of the 
+`and` and `or` functions. However, this quickly becomes tedious, error-prone, 
and difficult to maintain. For this reason, NiFi
+provides several functions for evaluating the same conditions against groups 
of attributes at the same time.
+
+
+
+
+[.function]
+=== anyAttribute
+  
+*Description*: [.description]#Checks to see if any of the given attributes, 
match the given condition. This function has no subject and takes one or more
+       arguments that are the names of attributes to which the remainder of 
the Expression is to be applied. If any of the attributes specified,
+       when evaluated against the rest of the Expression, returns a value of 
`true`, then this function will return `true`. Otherwise, this function
+       will return `false`.#
+
+*Subject Type*: [.subjectless]#No Subject#
+
+*Arguments*:
+
+       - [.argName]#_Attribute Names_# : [.argDesc]#One or more attribute 
names to evaluate#
+
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: Given that the "abc" attribute contains the value "hello world", 
"xyz" contains "good bye world", 
+       and "filename" contains "file.txt" consider the following examples:
+
+.anyAttribute Examples
+|=======================================================================
+| Expression | Value
+| `${anyAttribute("abc", "xyz"):contains("bye")}` | `true`
+| `${anyAttribute("filename","xyz"):toUpper():contains("e")}` | `false`
+|=======================================================================
+
+
+
+
+[.function]
+=== allAttributes
+
+*Description*: [.description]#Checks to see if any of the given attributes, 
match the given condition. This function has no subject and takes one or more
+       arguments that are the names of attributes to which the remainder of 
the Expression is to be applied. If all of the attributes specified,
+       when evaluated against the rest of the Expression, returns a value of 
`true`, then this function will return `true`. Otherwise, this function
+       will return `false`.#
+
+*Subject Type*: [.subjectless]#No Subject#
+
+*Arguments*: 
+
+       - [.argName]#_Attribute Names_# : [.argDesc]#One or more attribute 
names to evaluate#
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: Given that the "abc" attribute contains the value "hello world", 
"xyz" contains "good bye world", 
+       and "filename" contains "file.txt" consider the following examples:
+
+.allAttributes Example
+|=============================================================================
+| Expression | Value
+| `${allAttributes("abc", "xyz"):contains("world")}` | `true`
+| `${allAttributes("abc", "filename","xyz"):toUpper():contains("e")}` | `false`
+|=============================================================================
+
+
+
+
+
+[.function]
+=== anyMatchingAttribute
+
+*Description*: [.description]#Checks to see if any of the given attributes, 
match the given condition. This function has no subject and takes one or more
+       arguments that are Regular Expressions to match against attribute 
names. Any attribute whose name matches one of the supplied
+       Regular Expressions will be evaluated against the rest of the 
Expression. If any of the attributes specified,
+       when evaluated against the rest of the Expression, returns a value of 
`true`, then this function will return `true`. Otherwise, this function
+       will return `false`.#
+
+*Subject Type*: [.subjectless]#No Subject#
+
+*Arguments*:
+
+       - [.argName]#_Regex_# : [.argDesc]#One or more Regular Expressions (in 
the Java Pattern syntax) to evaluate against attribute names#
+
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: Given that the "abc" attribute contains the value "hello world", 
"xyz" contains "good bye world", 
+       and "filename" contains "file.txt" consider the following examples:
+
+.anyMatchingAttribute Example
+|==============================================================
+| Expression | Value
+| `${anyMatchingAttribute("[ax].*"):contains('bye')}` | `true`
+| `${anyMatchingAttribute(".*"):isNull()}` | `false`
+|==============================================================
+
+
+
+
+
+[.function]
+=== allMatchingAttributes
+
+*Description*: [.description]#Checks to see if any of the given attributes, 
match the given condition. This function has no subject and takes one or more
+       arguments that are Regular Expressions to match against attribute 
names. Any attribute whose name matches one of the supplied
+       Regular Expressions will be evaluated against the rest of the 
Expression. If all of the attributes specified,
+       when evaluated against the rest of the Expression, return a value of 
`true`, then this function will return `true`. Otherwise, this function
+       will return `false`.#
+
+*Subject Type*: [.subjectless]#No Subject#
+
+       - [.argName]#_Regex_# : [.argDesc]#One or more Regular Expressions (in 
the Java Pattern syntax) to evaluate against attribute names#
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: Given that the "abc" attribute contains the value "hello world", 
"xyz" contains "good bye world", 
+       and "filename" contains "file.txt" consider the following examples:
+
+.anyMatchingAttributes Examples
+|==============================================================
+| Expression | Value
+| `${allMatchingAttributes("[ax].*"):contains("world")}` | `true`
+| `${allMatchingAttributes(".*"):isNull()}` | `false`
+| `${allMatchingAttributes("f.*"):count()}` | `1`
+|==============================================================
+
+
+
+
+
+[.function]
+=== anyDelineatedValue
+
+*Description*: [.description]#Splits a String apart according to a delimiter 
that is provided, and then evaluates each of the values against
+       the rest of the Expression. If the Expression, when evaluated against 
any of the individual values, returns `true`, this
+       function returns `true`. Otherwise, the function returns `false`.#
+
+*Subject Type*: [.subjectless]#No Subject#
+
+*Arguments*:
+
+       - [.argName]#_Delineated Value_# : [.argDesc]#The value that is 
delineated. This is generally an embedded Expression, 
+               though it does not have to be.#
+       - [.argName]#_Delimiter_# : [.argDesc]#The value to use to split apart 
the _delineatedValue_ argument.#
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: Given that the "number_list" attribute contains the value 
"1,2,3,4,5", and the "word_list" attribute contains the value "the,and,or,not", 
+       consider the following examples:
+
+.anyDelineatedValue Examples
+|===============================================================================
+| Expression | Value
+| `${anyDelineatedValue("${number_list}", ","):contains("5")}` | `true`
+| `${anyDelineatedValue("this that and", ","):equals("${word_list}")}` | 
`false`
+|===============================================================================
+
+
+
+[.function]
+=== allDelineatedValues
+
+*Description*: [.description]#Splits a String apart according to a delimiter 
that is provided, and then evaluates each of the values against
+       the rest of the Expression. If the Expression, when evaluated against 
all of the individual values, returns `true` in each
+       case, then this function returns `true`. Otherwise, the function 
returns `false`.#
+
+*Subject Type*: [.subjectless]#No Subject#
+
+*Arguments*:
+
+       - [.argName]#_Delineated Value_# : [.argDesc]#The value that is 
delineated. This is generally 
+               an embedded Expression, though it does not have to be.#
+
+       - [.argName]#_Delimiter_# : [.argDesc]#The value to use to split apart 
the _delineatedValue_ argument.#
+
+*Return Type*: [.returnType]#Boolean#
+
+*Examples*: Given that the "number_list" attribute contains the value 
"1,2,3,4,5", and the "word_list" attribute contains the value 
"those,known,or,not", 
+       consider the following examples:
+
+.allDelineatedValues Examples
+|===============================================================================
+| Expression | Value
+| `${allDelineatedValues("${word_list}", ","):contains("o")}` | `true`
+| `${allDelineatedValues("${number_list}", ","):count()}` | `4`
+| `${allDelineatedValues("${number_list}", ","):matches("[0-9]+")}` | `true`
+| `${allDelineatedValues("${word_list}", ","):matches('e')}` | `false`
+|===============================================================================
+
+
+
+
+[.function]
+=== join
+
+*Description*: [.description]#Aggregate function that concatenates multiple 
values with the specified delimiter. This function 
+       may be used only in conjunction with the `allAttributes`, 
`allMatchingAttributes`, and `allDelineatedValues`
+       functions.#
+
+*Subject Type*: [.subject]#String#
+
+*Arguments*:
+
+       - [.argName]#_Delimiter_# : [.argDesc]#The String delimiter to use when 
joining values#
+
+*Return Type*: [.returnType]#String#
+
+*Examples*: Given that the "abc" attribute contains the value "hello world", 
"xyz" contains "good bye world", 
+       and "filename" contains "file.txt" consider the following examples:
+
+.join Examples
+|=======================================================================================
+| Expression | Value
+| `${allMatchingAttributes("[ax].*"):substringBefore(" "):join("-")}` | 
`hello-good`
+| `${allAttributes("abc", "xyz"):join(" now")}` | `hello world nowgood bye 
world now`
+|=======================================================================================
+
+
+
+
+
+
+[.function]
+=== count
+
+*Description*: [.description]#Aggregate function that counts the number of 
non-null, non-false values returned by the 
+       `allAttributes`, `allMatchingAttributes`, and `allDelineatedValues`. 
This function 
+       may be used only in conjunction with the `allAttributes`, 
`allMatchingAttributes`, and `allDelineatedValues`
+       functions.#
+
+*Subject Type*: [.subject]#Any#
+
+*Arguments*: No arguments
+
+*Return Type*: [.returnType]#Number#
+
+*Examples*: Given that the "abc" attribute contains the value "hello world", 
"xyz" contains "good bye world", 
+       and "number_list" contains "1,2,3,4,5" consider the following examples:
+
+.count Examples
+|===========================================================================
+| Expression | Value
+| `${allMatchingAttributes("[ax].*"):substringBefore(" "):count()}` | `2`
+| `${allAttributes("abc", "xyz"):contains("world"):count()}` | `1`
+| `${allDelineatedValues(${number_list}, ","):count()}` | `5`
+| `${allAttributes("abc", "non-existent-attr", "xyz"):count()}` | `2`
+| `${allMatchingAttributes(".*"):length():gt(10):count()}` | `2`
+|===========================================================================
+

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/add-controller-service-window.png
----------------------------------------------------------------------
diff --git 
a/nifi-docs/src/main/asciidoc/images/add-controller-service-window.png 
b/nifi-docs/src/main/asciidoc/images/add-controller-service-window.png
new file mode 100644
index 0000000..b727a9e
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/add-controller-service-window.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/add-processor-with-tag-cloud.png
----------------------------------------------------------------------
diff --git 
a/nifi-docs/src/main/asciidoc/images/add-processor-with-tag-cloud.png 
b/nifi-docs/src/main/asciidoc/images/add-processor-with-tag-cloud.png
new file mode 100644
index 0000000..a0bbadb
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/add-processor-with-tag-cloud.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/add-processor.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/add-processor.png 
b/nifi-docs/src/main/asciidoc/images/add-processor.png
new file mode 100644
index 0000000..a043f38
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/add-processor.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/addConnect.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/addConnect.png 
b/nifi-docs/src/main/asciidoc/images/addConnect.png
new file mode 100644
index 0000000..b33a305
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/addConnect.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/comments-tab.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/comments-tab.png 
b/nifi-docs/src/main/asciidoc/images/comments-tab.png
new file mode 100644
index 0000000..b6ed34b
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/comments-tab.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/components.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/components.png 
b/nifi-docs/src/main/asciidoc/images/components.png
new file mode 100644
index 0000000..b3a9769
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/components.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/configure-controller-service-properties.png
----------------------------------------------------------------------
diff --git 
a/nifi-docs/src/main/asciidoc/images/configure-controller-service-properties.png
 
b/nifi-docs/src/main/asciidoc/images/configure-controller-service-properties.png
new file mode 100644
index 0000000..c0b4d83
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/configure-controller-service-properties.png
 differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/configure-controller-service-settings.png
----------------------------------------------------------------------
diff --git 
a/nifi-docs/src/main/asciidoc/images/configure-controller-service-settings.png 
b/nifi-docs/src/main/asciidoc/images/configure-controller-service-settings.png
new file mode 100644
index 0000000..d97d5a1
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/configure-controller-service-settings.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/configure-reporting-task-properties.png
----------------------------------------------------------------------
diff --git 
a/nifi-docs/src/main/asciidoc/images/configure-reporting-task-properties.png 
b/nifi-docs/src/main/asciidoc/images/configure-reporting-task-properties.png
new file mode 100644
index 0000000..cb303a1
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/configure-reporting-task-properties.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/configure-reporting-task-settings.png
----------------------------------------------------------------------
diff --git 
a/nifi-docs/src/main/asciidoc/images/configure-reporting-task-settings.png 
b/nifi-docs/src/main/asciidoc/images/configure-reporting-task-settings.png
new file mode 100644
index 0000000..0f9474d
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/configure-reporting-task-settings.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/connection-settings.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/connection-settings.png 
b/nifi-docs/src/main/asciidoc/images/connection-settings.png
new file mode 100644
index 0000000..9aae93a
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/connection-settings.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/controller-services-edit-buttons.png
----------------------------------------------------------------------
diff --git 
a/nifi-docs/src/main/asciidoc/images/controller-services-edit-buttons.png 
b/nifi-docs/src/main/asciidoc/images/controller-services-edit-buttons.png
new file mode 100644
index 0000000..5ca61d9
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/controller-services-edit-buttons.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/controller-services-edit-buttons2.png
----------------------------------------------------------------------
diff --git 
a/nifi-docs/src/main/asciidoc/images/controller-services-edit-buttons2.png 
b/nifi-docs/src/main/asciidoc/images/controller-services-edit-buttons2.png
new file mode 100644
index 0000000..ee3a5f7
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/controller-services-edit-buttons2.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/controller-services-tab.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/controller-services-tab.png 
b/nifi-docs/src/main/asciidoc/images/controller-services-tab.png
new file mode 100644
index 0000000..f6d76b8
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/controller-services-tab.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/controller-settings-button.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/controller-settings-button.png 
b/nifi-docs/src/main/asciidoc/images/controller-settings-button.png
new file mode 100644
index 0000000..a4f7e92
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/controller-settings-button.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/create-connection.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/create-connection.png 
b/nifi-docs/src/main/asciidoc/images/create-connection.png
new file mode 100644
index 0000000..7ca40ae
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/create-connection.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/create-service-ssl-context.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/create-service-ssl-context.png 
b/nifi-docs/src/main/asciidoc/images/create-service-ssl-context.png
new file mode 100644
index 0000000..8db2ea6
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/create-service-ssl-context.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/edit-property-dropdown.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/edit-property-dropdown.png 
b/nifi-docs/src/main/asciidoc/images/edit-property-dropdown.png
new file mode 100644
index 0000000..017805b
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/edit-property-dropdown.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/edit-property-textarea.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/edit-property-textarea.png 
b/nifi-docs/src/main/asciidoc/images/edit-property-textarea.png
new file mode 100644
index 0000000..cc8668a
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/edit-property-textarea.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/event-attributes.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/event-attributes.png 
b/nifi-docs/src/main/asciidoc/images/event-attributes.png
new file mode 100644
index 0000000..2ac4f43
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/event-attributes.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/event-content.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/event-content.png 
b/nifi-docs/src/main/asciidoc/images/event-content.png
new file mode 100644
index 0000000..f7b32a5
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/event-content.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/event-details.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/event-details.png 
b/nifi-docs/src/main/asciidoc/images/event-details.png
new file mode 100644
index 0000000..066aa99
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/event-details.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/expand-event.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/expand-event.png 
b/nifi-docs/src/main/asciidoc/images/expand-event.png
new file mode 100644
index 0000000..95eb8ab
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/expand-event.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/expanded-events.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/expanded-events.png 
b/nifi-docs/src/main/asciidoc/images/expanded-events.png
new file mode 100644
index 0000000..18bec5d
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/expanded-events.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/find-parents.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/find-parents.png 
b/nifi-docs/src/main/asciidoc/images/find-parents.png
new file mode 100644
index 0000000..57fe72e
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/find-parents.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconAlert.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconAlert.png 
b/nifi-docs/src/main/asciidoc/images/iconAlert.png
new file mode 100644
index 0000000..5020c31
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconAlert.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconConnection.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconConnection.png 
b/nifi-docs/src/main/asciidoc/images/iconConnection.png
new file mode 100644
index 0000000..4b6180b
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconConnection.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconDelete.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconDelete.png 
b/nifi-docs/src/main/asciidoc/images/iconDelete.png
new file mode 100644
index 0000000..dc13227
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconDelete.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconDisable.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconDisable.png 
b/nifi-docs/src/main/asciidoc/images/iconDisable.png
new file mode 100644
index 0000000..17a4ee4
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconDisable.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconEdit.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconEdit.png 
b/nifi-docs/src/main/asciidoc/images/iconEdit.png
new file mode 100644
index 0000000..e191e72
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconEdit.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconEnable.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconEnable.png 
b/nifi-docs/src/main/asciidoc/images/iconEnable.png
new file mode 100644
index 0000000..58e3436
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconEnable.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconExport.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconExport.png 
b/nifi-docs/src/main/asciidoc/images/iconExport.png
new file mode 100644
index 0000000..4a03bec
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconExport.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconFlowHistory.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconFlowHistory.png 
b/nifi-docs/src/main/asciidoc/images/iconFlowHistory.png
new file mode 100644
index 0000000..4ac29c0
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconFlowHistory.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconFunnel.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconFunnel.png 
b/nifi-docs/src/main/asciidoc/images/iconFunnel.png
new file mode 100644
index 0000000..98f9b9d
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconFunnel.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconInfo.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconInfo.png 
b/nifi-docs/src/main/asciidoc/images/iconInfo.png
new file mode 100644
index 0000000..f192ff5
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconInfo.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconInputPort.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconInputPort.png 
b/nifi-docs/src/main/asciidoc/images/iconInputPort.png
new file mode 100644
index 0000000..d4efd97
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconInputPort.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconInputPortSmall.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconInputPortSmall.png 
b/nifi-docs/src/main/asciidoc/images/iconInputPortSmall.png
new file mode 100644
index 0000000..1bbc079
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconInputPortSmall.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconLabel.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconLabel.png 
b/nifi-docs/src/main/asciidoc/images/iconLabel.png
new file mode 100644
index 0000000..6ba3c13
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconLabel.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconLineage.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconLineage.png 
b/nifi-docs/src/main/asciidoc/images/iconLineage.png
new file mode 100644
index 0000000..cfbc75b
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconLineage.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconNewTemplate.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconNewTemplate.png 
b/nifi-docs/src/main/asciidoc/images/iconNewTemplate.png
new file mode 100644
index 0000000..0e6b74c
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconNewTemplate.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconNotSecure.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconNotSecure.png 
b/nifi-docs/src/main/asciidoc/images/iconNotSecure.png
new file mode 100644
index 0000000..77ae0a2
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconNotSecure.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconOutputPort.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconOutputPort.png 
b/nifi-docs/src/main/asciidoc/images/iconOutputPort.png
new file mode 100644
index 0000000..f3d8a66
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconOutputPort.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconOutputPortSmall.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconOutputPortSmall.png 
b/nifi-docs/src/main/asciidoc/images/iconOutputPortSmall.png
new file mode 100644
index 0000000..d9338b3
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconOutputPortSmall.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconProcessGroup.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconProcessGroup.png 
b/nifi-docs/src/main/asciidoc/images/iconProcessGroup.png
new file mode 100644
index 0000000..c587341
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconProcessGroup.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconProcessor.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconProcessor.png 
b/nifi-docs/src/main/asciidoc/images/iconProcessor.png
new file mode 100644
index 0000000..2ca062c
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconProcessor.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconProvenance.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconProvenance.png 
b/nifi-docs/src/main/asciidoc/images/iconProvenance.png
new file mode 100644
index 0000000..32052e9
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconProvenance.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconRemoteProcessGroup.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconRemoteProcessGroup.png 
b/nifi-docs/src/main/asciidoc/images/iconRemoteProcessGroup.png
new file mode 100644
index 0000000..5205470
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconRemoteProcessGroup.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconResize.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconResize.png 
b/nifi-docs/src/main/asciidoc/images/iconResize.png
new file mode 100644
index 0000000..d6fd0a3
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconResize.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconRun.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconRun.png 
b/nifi-docs/src/main/asciidoc/images/iconRun.png
new file mode 100644
index 0000000..02715e0
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconRun.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconSecure.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconSecure.png 
b/nifi-docs/src/main/asciidoc/images/iconSecure.png
new file mode 100644
index 0000000..3f165a8
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconSecure.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconSettings.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconSettings.png 
b/nifi-docs/src/main/asciidoc/images/iconSettings.png
new file mode 100644
index 0000000..8fdaffc
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconSettings.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconStop.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconStop.png 
b/nifi-docs/src/main/asciidoc/images/iconStop.png
new file mode 100644
index 0000000..4f8f9c7
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconStop.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconSummary.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconSummary.png 
b/nifi-docs/src/main/asciidoc/images/iconSummary.png
new file mode 100644
index 0000000..973933c
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconSummary.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconTemplate.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconTemplate.png 
b/nifi-docs/src/main/asciidoc/images/iconTemplate.png
new file mode 100644
index 0000000..66d2caa
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconTemplate.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconTransmissionActive.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconTransmissionActive.png 
b/nifi-docs/src/main/asciidoc/images/iconTransmissionActive.png
new file mode 100644
index 0000000..269cff8
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconTransmissionActive.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconTransmissionInactive.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconTransmissionInactive.png 
b/nifi-docs/src/main/asciidoc/images/iconTransmissionInactive.png
new file mode 100644
index 0000000..0e1fd7b
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconTransmissionInactive.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconUsers.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconUsers.png 
b/nifi-docs/src/main/asciidoc/images/iconUsers.png
new file mode 100644
index 0000000..fc99a12
Binary files /dev/null and b/nifi-docs/src/main/asciidoc/images/iconUsers.png 
differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/iconViewDetails.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/iconViewDetails.png 
b/nifi-docs/src/main/asciidoc/images/iconViewDetails.png
new file mode 100644
index 0000000..5231e73
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/iconViewDetails.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/instantiate-template-description.png
----------------------------------------------------------------------
diff --git 
a/nifi-docs/src/main/asciidoc/images/instantiate-template-description.png 
b/nifi-docs/src/main/asciidoc/images/instantiate-template-description.png
new file mode 100644
index 0000000..a238148
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/instantiate-template-description.png differ

http://git-wip-us.apache.org/repos/asf/nifi/blob/aa998847/nifi-docs/src/main/asciidoc/images/instantiate-template.png
----------------------------------------------------------------------
diff --git a/nifi-docs/src/main/asciidoc/images/instantiate-template.png 
b/nifi-docs/src/main/asciidoc/images/instantiate-template.png
new file mode 100644
index 0000000..435d562
Binary files /dev/null and 
b/nifi-docs/src/main/asciidoc/images/instantiate-template.png differ

Reply via email to