CairngormLibraries

### Cairngorm 3 - [ Home ][1] - [ Guidelines ][3] - [ Tools ][4] - [ Libraries Downloads ][2]
### Cairngorm 2 - [ Home ][5] - [ Framework Downloads ][6] - [ Eclipse Plugin ][7]
### Project - [ Source ][8] - [ Bug Database ][9] - [ Submitting a Patch ][10] - [ Developer Documentation ][11] - [ Forums ][12] - [ License ][13]

Cairngorm Libraries

Cairngorm 3 provides a set of optional Flex libraries released under the Cairngorm License.

These are designed to support the Cairngorm 3 architecture by providing utilities for i.e. navigation, Object Relational Mapping, validation, module loading, reduction of view behaviour, task processing and popup management.

The Cairngorm 3 Architecture described in Cairngorm Guidelines can also be applied with other third-party libraries and frameworks. Several of the Cairngorm 3 libraries are implemented as extensions to third-party frameworks such as Parsley, Swiz and Spring ActionScript.

However, other Cairngorm libraries, such as Observer, Popup, Task, Persistence, Design by Contract and Validation are independent of any third-party framework.

Overview of Libraries

A short summary of each library follows, together with links to the download, source code and documentation.

Design by Contract Library

The Design by Contract library allows to assert pre and post-conditions, following the idea of Design by Contract. Its use of conditional compilation ensures that production code remains unaffected.

Observer Library

The Cairngorm Observer library provides a set of non-visual components for declaration in MXML that observe other objects and react to changes in some way and execute view behaviour. These components help to reduce the amount of Script-block logic required in MXML components.

The Cairngorm Popup library contains components for managing the opening, closure and general behavior of popups. They are designed to minimize Script-block logic in MXML components and to reduce code duplication across applications that manage multiple popups.

Task Library

The Cairngorm Task library provides an abstraction for performing tasks in sequence and parallel. It might be used for coordinating the start-up sequence of an application or for managing a series of asynchronous processes that need to be performed in a certain order.

Validation Library

The Cairngorm Validation library is designed to simplify validation of user input and other data. Instead of declaring validators individually in MXML and coordinating them manually, a group of validators can be defined using the ValidatorGroup component. The validity of the whole group can then be determined as one. Validator groups can be nested and detached from the view and applied to other layers of an application, such as a domain model. Additional components are provided for observing validation rules and updating view components to highlight validation errors.

The Cairngorm Navigation library provides utilities to ease the creation of point-to-point, hierarchical and deferred navigations, global and local history tracking, wizards, and enter and exit interceptions. It can reduce the amount of Script-block logic needed by allowing dedicated objects to control navigational concerns. The current version is implemented as a Parsley and a Swiz extension. A Spring ActionScript extension is currently in development .

Module Library - release candidate (Requires Parsley)

The Cairngorm Module library is designed to simplify the configuration, rendering and loading of modular content. Additonally it offers flexiblity to communicate to modules. It contains infrastructure classes, view components, a mechanism for loading and communicating to modular content on-demand in response to Parsley messages.

Persistence Library - release candidate

The Persistence library eases the communication between an Adobe AIR application and an SQLite database. Both use different type systems (relational SQL versus object-oriented ActionScript). This Object Relational Mapping (ORM) library follows an iBATIS approach.

Integration Library - alpha (Requires Parsley)

The integration library provides utilities to loosely-couple concerns of the communication with external environments with other client side architectural layers. Aside from sending and retrieving data, it also offers structures to manage global error handling, conflict resolution, and offers presentation components access progress and error information in a loosely coupled way. Supported are currently RPC, data management using LCDS, and LocalConnection. In the current version of the IntegrationParsley and IntegrationDMS libraries are dependent on Parsley. The Integration libray containing the IDataCache utility does not depend on the Parsley framework but uses the Spicelib utility library for reflection on metadata. You can use IDataCache with any IoC framework.

Maven and Bugbase

The release of Cairngorm 3.0.21 is published in a Cairngorm 3 maven repository at http://svn.code.sf.net/adobe/cairngorm/code/cairngorm3/maven-repository

Note that from Cairngorm 3.0.18 we decided to drop flex3 support.

You are encouraged to browse the trunk source code. You can subscribe for changes to the repository at https://sourceforge.net/adobe/cairngorm/code/feed

For more information about retrieving and following the source code of the SVN repository, click here. You may build this version using Maven from the main build file available at http://svn.code.sf.net/adobe/cairngorm/code/cairngorm3/trunk/

A bug base is available here.

Expectations on Versioning

  • The Observer, Task, Popup and Validation libraries have been used in production for several years, but Cairngorm 3 marks their first official open-source release.
  • Released libraries (above version 0.*) have been used extensively on production projects and are considered stable.
  • Libraries marked as release candidate are used internally, considered stable but might undergo slight API changes until release.
  • Libraries marked with beta are used internally but might undergo reasonable API changes until release.
  • Libraries marked with alpha are experimental and might be less mature and can still undergo significant API changes.