Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

Architecture Overview

LAB Project Overview

Architecture Overview
quickview.png
The schema gives a simple view of the 4 main "universes" included in LAB Project.

As the schema shows, QlabLibrary is the master block of the system while the labmodule represents only the glue to get the whole thing together.

Note:
Even if the graphic does not imply it, the main() function can be as short as less than 10 lines, including the standard declarations and includes. If you use the very good Qt Designer from Trolltech to design your user interface, you reduce the real coding to quite nothing, as LAB Projects integrate smoothly into Qt Designer.
The next sections of this chapter will explain the parts in more details.

Physical Layer

The physical layer is constituted by network connectors to various database back end servers. This has nothing to do physically with Lab Project, but is mandatory to present the repository participants. This part of the schema is here to show the real interface for Driver Lib Slots in QlabLibrary.

QlabDatabase::QlabDatabase() class can dynamically load drivers for the following database servers:

Note:
Some other database are supported and new support is added when we get information and development kits.
Architecture Overview | LAB Project Overview

QlabLibrary

The QlabLibrary is a compound library which is mainly composed of 2 sets:

QlabDatabase entities

This library module defines most of the LAB Project Foundation classes.
Note:
All Driver Lib Slots entities will NEVER be instanciated by application programmers. They are only an opaque interface to physical backends and are only presented in the abstract Data Repository definition file to determine what backend owns a named data collection.

Driver Lib Slots

For internal use only.

This module only presents an abstract method collection and a grip to dlopen() system call for dynamic loading of needed backend interface libraries.

Please refer to Physical Layer for a full list of supported backends.

The various classes dealing with backend drivers are NOT exported to application developpers and are only accessible via an opaque interface to other QlabDatabase entities modules.

All backends support the following methods:

QlabDatabase entities | Architecture Overview | LAB Project Overview

DataCollection Schema Translator

For internal use only.

This module is totally opaque to application programmers. It is only used internally by QlabDatabase entities participants to determine which backend owns what in the data collection. It gets the LAB Project standard Data Collection definition skeletons at startup and builds the virtual connections when necessary.

It is only used by some data access classes. Those are tweaked versions of Qt database classes, modified to get their real parameters from the schema translator.

Todo:
Write a complete description with code snippets showing the real interaction between the Translator and other modules.

Prepare a complete description of the caching mechanism and the rotating bufferization implementation.

Write a more descriptive text with some nice pictures and snippets to let the mechanism be really understandable.

Write a complete tutorial about the extended dl() method and the netfetchmodule() interface.

QlabDatabase entities | Architecture Overview | LAB Project Overview

DataCollection caching

For internal use only.

This module presents the same interface as Driver Lib Slots to wich it acts as a transparent front end.

It has only one goal, dataset caching to speed up all data recovery.

QlabDatabase entities | Architecture Overview | LAB Project Overview

Data Requesting Translation

This module is the real front end to the DataCollection caching module. It gets the standard Driver Lib Slots interface.

Technically, this is the key of QlabDatabase entities system, as it is the only published interface between the Widget Manager entities and the real data. Its main feature is getting the standard query, say a filtered select on a data view, translate the query in something the backend will understand by querying DataCollection Schema Translator about the pros and cons of the needed dialect, rewrite the query according to DataCollection Schema Translator information and pass the baby to the cache. The cache then checks if it already as an answer ready. If so, it sends the answer. Else, the query is fed to the Driver Lib Slots after a new check by the schema translator.

Note:
If the prepared query involves more than one backend connection, the last schema translator check cuts the query in pieces, rewrites it as individual queries and sends the thing to needed backends. When it has the answers from all backends involved, it grabs the answers and rewrite them as a unified answer meeting the query criterias and sends it back to the cache who stores the thing for future use and feeds the Data Requesting Translation back.

QlabDatabase entities | Architecture Overview | LAB Project Overview

Widget Manager entities

This module set defines the relationship between QlabDatabase entities interface and the user. Its main role in this affair is providing the user (and the developer) with most of the needed ways to beg the data collections for information, format them as needed (lists, trees, tables, selectors...) and show them in a transparent way.

The 4 level mechanism has been set up to present a really unified interface to most data. The Widget Pool can evolve with time with more and more widget definitions. When sitting in pool, the widget becomes available for each and every user interface, be it statically bound by developers or dynamically available to users themselves via the QlabOptionEditor::QlabOptionEditor() interface.

Widget Pool

This module embeds in libraries a bunch of widgets. The available widgets are shown in Widget Pool hierarchy. Libraries share the standard plugin mechanism. Most offer a designable as well as a scriptable interface, allowing graphic parametrization in User Interfcae design tools suc as Qt Designer or the forthcoming LAB Project Aplication Designer.

The pool only contains widgets definitions. Most of the definition are stored in a System Table in the main Data Collection, allowing network wide instanciation and on the fly download.

Widget Manager entities | Architecture Overview | LAB Project Overview

Widget Factory

Widget Manager entities | Architecture Overview | LAB Project Overview

Widget Dispatcher

Widget Manager entities | Architecture Overview | LAB Project Overview

QlabApplication Instanciator

Widget Manager entities | Architecture Overview | LAB Project Overview

Module Interface

Architecture Overview | LAB Project Overview

 

L.A.B. Project © 2001-2004 LAB Project & DJ Anubis