Implementation: iGesture Workbench

The iGesture Workbench is a Java Swing application and basically consists of three parts to define gestures, test them manually and a tool to create test sets. The application is implemented using the MVC pattern and is extendable for additional functionality.

The backbone is the model class GestureMainModel . It provides access to data objects and uses the StorageManager to make them persistence. Beside that, the main model provides a set of listeners where views can register to be informed about changed data. Also other component models are based on the main model and so it is the only instance holding data and all alterations are propagated to it. Furthermore, the main model provides access to registered input devices.

The main model is initialised with a StorageEngine and a list of input devices. The fact that input devices are passed to the constructor allows the use of different input devices.

The most recent note that has been captured by the input device is stored in the main model and a listener informs registered views when it is altered. To prevent the destruction of the note by any views, the getter method always returns a clone of the original note. To pass the original reference would lead to non deterministic behaviour because some operations on the note change the note itself.

The management tool is structured into different tabs. Each tab contains functionality for a specific task and different tabs do not have any dependencies. This design decision has the advantage that new tabs can be added in a simple manner. The tabs are not hard coded in the main view and have to implement the TabbedView interface. . The list of tabs is passed to the constructor of the main view and it creates the instances of the tabs using dynamic class loading and shows them in the order given by the list. This allows adding new tabs without a recompilation of the main view. The list of tabs is stored in a global property file.

A tab has a JPanel as basis and all other components are attached to it. The GuiFactory furthermore provides static methods to simplify the creation and reuse of components.