A Processor that routes data based on its content will take one of two forms: Route an
incoming FlowFile to exactly one destination, or route incoming data to 0 or more
destinations. Here, we will discuss the first case.

This Processor has two relationships: matched and
unmatched. If a particular data format is expected, the Processor will
also have a failure relationship that is used when the input is not of
the expected format. The Processor exposes a Property that indicates the routing
criteria.

If the Property that specifies routing criteria requires processing, such as compiling a
Regular Expression, this processing is done in a method annotated with
@OnScheduled, if possible. The result is then stored in a member
variable that is marked as volatile.

The onTrigger method obtains a single FlowFile. The method reads the
contents of the FlowFile via the ProcessSession's read method,
evaluating the Match Criteria as the data is streamed. The Processor then determines whether
the FlowFile should be routed to matched or unmatched
based on whether or not the criteria matched, and routes the FlowFile to the appropriate
relationship.

The Processor then emits a Provenance ROUTE event indicating which Relationship to which
the Processor routed the FlowFile.

This Processor is annotated with the @SideEffectFree and
@SupportsBatching annotations from the
org.apache.nifi.annotations.behavior package.