Filter Tree Infrastructure


This package provides management and execution of trees of filters, which take some generalized input data and produce output data that can be used by downstream filters in the tree.

The base class for a filter. Filters take one or more inputs (each in a specified data format) and produce outputs (again, in specified data formats). Filters draw their input data from a Pipe, and may add their output data back to that Pipe for downstream filters to draw from.
A item that can flow into and out of a pipe.
A class that displays a file chooser dialog in the AWT event thread.
An exception thrown by filters if they cannot complete.
A specification for an input required by a filter.
A specification for an output generated by a filter.
A renderer that draws a graphical representation of a filter.
A list of possible filter states.
A filter tree, consisting of an ordered list of filters, each of which has its actual input and output tags set, as well as any parameter values.
A subclass of SwingWorker that executes the filters in a filter tree and allows filters to interact with a GUI as they proceed.
A listener for objects that want to be notified of the progress of a filter tree's execution.
A class that can generate a serialized representation of a tree of filters (XML) and can reconstruct the filter tree from a list of filters and a serialized representation.
A panel on which a user can drag around filters so they connect into a graph.
A file filter to restrict access to ".ftree" files.
A pipe from which filters can draw input data and to which they can add output data. Pipes manage the storage of their items to a filesystem and reloading them when the pipe is created to allow filters to avoid regenerating existing data.
Information on a file used to persist part of a pipe item.

As the author of the source code available by following the links above, I hereby place this source code in the public domain. You can use, modify, and distribute the source code and executable programs based on the source code. However, note the following:
This source code is provided "as is" and without any express or implied warranties whatsoever. The user must assume the entire risk of using the source code.