This paper presents an XML/TclTk implementation of a universal,
user-configurable client that (1) reads user-programmed
interconnections of distributed component programs as task instances, (2)
dynamically renders an {interactive GUI of all interconnected components
as a hierarchical taskflow, and (3) dynamically creates a schedule to execute
component programs concurrently, serially, or not at all, depending on the
user-defined runtime configuration of the taskflow topology. The client
creates a taskflow-oriented programming environment, conceptually introduced
in the companion paper and demonstrated in this paper.
The recursive schema of component instances is conveniently captured as an
extension of XML in a {c}ollaborative {d}istributed
{t}askflow {m}ark-up {l}anguage (cdtML) and
consists of mainly two layers: (1) an encapsulated blackbox (single-task) or
a whitebox (multi-task) layer, and (2) a task instance layer. The
encapsulated task layer contains two parts: a definition layer and a body
layer, with the definition layer serving as a readily accessible API for the
task. A generic Tcl-XML parser reads both the cdtML schema and the
user-created cdtML taskflow description and outputs a taskflow description in
TclTk. This in turn generates the interactive GUI as the hierarchical
taskflow, waiting for user inputs. User may choose to interact in any of the
following ways: reconfigure the taskflow interconnections, view or edit data,
descend/ascend the taskflow hierarchy, select the mode of execution, invoke
the taskflow, abort the taskflow (if already executing), reset the state of
the taskflow, etc.