There are several general types of Bricks. Implementation may differ, but the functionalities are comparable on a general level. To define general Brick types helps to better understand Flows once the details are hidden inside the Brick's implementation. An example for a general Brick type is a filter. A filter will always be a filter even if different filters work on different data and lead to different results.
A General Brick does contain an implementation that can not be classified into any of the more specialised cases listed below. Having a General Brick at hand raises the question if the contained implementation could be decomposed into several other Bricks with a simpler implementation. The decomposed Bricks will later be linked to a flow with the same result a before, but leading to a clearer representation of the processing taking place. Also does the decomposition create simpler Bricks that are valuable building blocks in other flows besides the one the developer is currently having in mind.
A filter Brick will process the incoming Flow Items based on a filter condition. Filtering will reduce the the number of incoming Flow Items and only emit an outgoing Flow Item depending on the condition in the Brick's implementation.
The converter Brick is used to convert a Flow Items content. The simplest possible conversion is changing the unit of an incoming data field and output as a different field. More complex conversion will convert between different data models encapsulated in the internal Flow Items.
Inlet / Outlet
Inlets and Outlets are to be found at the edges of Flows and constitute the start and ending points of data flows. An Inlet is a producer Brick to a data flow. It is polling or receiving data from sources like sensory equipment, file system folders. Inlets can also be starting points of flows by exposing interfaces like REST or other listening sockets. An Outlet consumer Brick will end a data flow by writing information from the Flow Items to a final location like a database, files, optical signalling equipment.
Timers do stimulate a flow network as a producer Brick issuing a Flow Item at a timed interval.
Signals do constitute a special type of Flow edge. A Signal Receiver is a producer starting a flow by receiving a trigger possibly including a complex data set delivered via the signal. The consumer will end the current Flow as a Signal Sender, sending out asynchronous messages to other Flows. Signals work using a publish subscribe mechanism enabling several Signal Receivers to listen to the same Signal Sender. Using a signal a Flow can be coupled to one or more other Flows.
Selector Bricks forwards incoming Flow Items to one of the out ports of the Brick depending on the conditions set in the implementation. A data set traveling along a Flow enters just one of the strains of a complex network leading up to one of the possible consuming Flow Outlets or Signals.
Deriving aggregated values or complex datasets on incoming Flow Items is accomplished by using aggregator Bricks. Different from the other types of bricks aggregator are no longer stateless. They will make use of storing the incoming Flow Items to perform the aggregation implemented in the Brick. Storage is provided via an API available to the Brick's implementation Examples of aggregation are the calculation of mean or median values, counting occurrences of data in the incoming Flow Items.