Perforce JViews TGO Sample: Table Component - Data Source API
Description
This sample shows how to use the Perforce JViews TGO data source API to create business objects.
How to Use the Sample
- To select a row, click anywhere inside one of its cells. Use the
Shift
key to select several adjacent rows orCtrl
to select several non-adjacent rows. - To move a column, click its header and drag it to a new location. To resize it, click the separator between two columns in the header and drag it left or right.
- The table also allows you to sort the rows based on the contents of one or more columns. To do so, click a column header; a sort order indicator will appear. Clicking again inverts the sort order; clicking a third time removes the indicator.
-
The data can also be sorted based on more than one column. To add a column to refine the sorting, use the
Shift
key and click the second column header. Note that an indicator of the priority appears in the column header, and that the first column selected has the highest priority. You can sort on as many columns as you want. If multiple columns are sorted, you should shift-click the header of a column to change its sort order. - To replace the current sort order with a new one, click any column header.
How to Run the Sample as an Application
This sample can
be run as an application.
The installation directory contains
an executable JAR file,
table-datasourceAPI.jar
,
that allows you to execute the sample with a double click from a
file browser. Note that if you are using Internet Explorer, you can
open the installation directory
and execute the JAR file from the browser. This
technique may not work in other Web browsers.
Alternatively, you
can run the sample application from the command line.
First check that the Ant utility is properly configured. If not, see the
instructions on how to configure Ant for Perforce JViews.
Then, go to the installation directory
of the sample and type:
ant run
Topics Covered
- Initializing a JTGO application
- Creating a table component
- Setting the business class accepted by the component
- Using the data source API to define business object relationships
- Using the data source API to add business objects
- Adding the table to your Swing application
Detailed Description
This sample shows how to specify and populate the business model using only the API. It is nearly identical to sample basic.Main, but here the data source API is used instead of an XML file.
The business model is controlled by the mutable data source interface (ilog.cpl.datasource.IlpMutableDataSource), which allows the creation of parent-child and link-extremity relationships. This API is internally used by the default data source implementation (ilog.tgo.datasource.IltDefaultDataSource) when processing business data through XML. It can also be invoked by applications that directly manipulate business data.
The available methods to define business data relationships are:
- ilog.cpl.datasource.IlpMutableDataSource.setChildren: Declares an object as having children.
- ilog.cpl.datasource.IlpMutableDataSource.setParent: Declares an object as being the parent of another object.
- ilog.cpl.datasource.IlpMutableDataSource.setLink: Declares an object as being a link with given endpoints.
The data source is attached to the table component through an adapter (ilog.cpl.table.IlpTableListAdapter) which converts business objects into representation objects that are stored in the table component model (ilog.cpl.table.IlpTableModel). The business model is mapped to the table model, preserving the objects relationships.
The best way to create the relationships and business objects will vary from one application to another. In this sample, the business objects are known in advance and not intended to change. They are created by static methods of class datasourceAPI.ObjectCreationSupport while their relationships are managed by method createBusinessData() (in class datasourceAPI.Main). This helps illustrate that the business objects and their relationships do not necessarily have to be created at the same time.
When reloading the business objects (method reloadBusinessObjects() in class datasourceAPI.Main), the data source is first cleared, then followed by a call to method createBusinessData() (in class datasourceAPI.Main) so that the business objects and relationships are re-created accordingly.
Considerations: The order in which the business objects and their relationships are defined in the data sources is very important. It is recommended to create the relationships before adding the business objects so that the adapter does not have to recreate the representation objects due to changes in the business object relationships notified by the data source. The following rules should be taken into account:
1. Create relationships first It is recommended to create the business objects relationships before adding the objects into the data source.
2. Add children before their parent Although this is not mandatory for the table component, it is also recommended to add the child objects before the parent objects into the data source.
3. Add endpoints before their links Similarly, it is better to add the two endpoints of a link before adding the link itself.
The example below illustrates the three rules above:
datasource.setParent(parent, child); datasource.setLink(link, endPointA, endPointB); datasource.addObject(endPointA); datasource.addObject(endPointB); datasource.addObject(link); datasource.addObject(child); datasource.addObject(parent);
Installation Directory
The Table Component - Data Source API sample is installed here.
Classes Involved
-
ilog.tgo.IltSystem
The class that initializes a JViews TGO application.
-
ilog.tgo.datasource.IltDefaultDataSource
The default data source implementation. It provides an API to specify the business model and add business data.
-
ilog.cpl.IlpTable
The table component.
-
ilog.cpl.model.IlpAttribute
The business attribute definition.
-
ilog.cpl.table.selection.IlpTableSelectionMode
The selection mode definition of the table component.
-
ilog.cpl.table.IlpTableResizeMode
The resize mode definition of the table component.
Source Files
-
datasourceAPI.Main
The entry point of the sample.
-
datasourceAPI.ObjectCreationSupport
The utility class that provides static methods to create the business objects used in the sample.
-
datasourceAPI.AlarmPopupMenuFactory
The factory that creates pop-up menus for the objects.
-
datasourceAPI.ShowDetailsAction
The action that displays object details upon a double-click.