Chapter 7. Data Model

7.1. Overview

IT Mill Toolkit Data Model is one of the core concepts of the library. Let us revisit the model-view-controller design pattern. The model consists of application data and business logic, which acts on the data. The user interface generates events, which are processed by the controller, which controls the user interface and the data. To allow the view (user interface components) to access the application data directly, without need to annoy the controller with every mundane change, we need a standard data interface. Application data needs a common interface so that the data can be accessed by the view and the controller alike. In the Toolkit, we have solved this with the Data Model.

Figure 7.1. IT Mill Toolkit Data Model

IT Mill Toolkit Data Model

At the heart of Data Model is the property that consists of a value and its data type. A property is always typed and the type can be any object type in Java. Properties are in themselves unnamed objects. Properties are collected in an item, which associates the properties with names, the Property Identifiers or PIDs. Items can be contained in containers and are identified with Item Identifiers or IIDs.

The Data Model is realized as a set of interface classes in the fittingly named package com.itmill.toolkit.data. The package contains interfaces Property, Item, and Container, along with a number of more specialized interfaces and classes.

Notice that the Data Model does not define data representation, but only interfaces. This leaves the representation fully to the implementation of the containers. The representation can be almost anything, such as a Java object structure, a filesystem, or a database query.

The Data Model is used heavily in UI components of the Toolkit. A key feature of all UI components is that they can either maintain their data by themselves or be bound to an external data source. For example, many UI components, such as Button, Label, or TextField have a single property which they control. You can access this property through the Property interface inherited by the components. By default, the property is contained within the component, but you can bind the the components to external data sources with the setPropertyDataSource() method of the com.itmill.toolkit.ui.AbstractField class inherited by such components.

Many UI components are actually both containers and properties. This is especially true for selectable components (that implement Select), because they are containers that contain selectable items. Their property is the currently selected item. For more details on components, see Chapter 4, User Interface Components.

By implementing a container interface, you can bind UI components directly to data. As containers can be unordered, ordered, indexed, or hierarchical, they can interface practically any kind of data representation. The Toolkit includes data connectors for some common data sources, such as the filesystem.

The Data Model has several important features, such as support for change notification, transactions, validation, and lazy loading. These features are discussed in detail below.