COSMOS is a framework for processing context information to aggregated raw contet data from observable entities, such as operating system resources, user preferences, or sensors, to provide a high-level and coherent view of the execution context of the end-user. COSMOS framework is available for different execution environments:

  • Java J2SE on GNU/Linux and Windows operating systems
  • Java J2ME on Windows Mobile and Symbian operating systems
  • Java on Android operating systems
  • JavaScript applications

The context management provided by the COSMOS framework is:

  • user and application centred to provide information that can be easily processed,
  • built from composed instead of programmed entities, and
  • efficient by minimizing the execution overhead.



The originality of COSMOS is to use a component-based approach for encapsulating context data, and to use an architecture description language (ADL) for composing these context data components.

COSMOS is based on the concepts of context node and context management policies translated into software components in a software:

  • Context node is the basic structuring concept of COSMOS. It is a component dedicated to a context data (low level or high level);
  • Context policy is a hierarchy of context nodes with sharing of context nodes. It is an abstract context information provided to the user/application;
  • Context report is an extensible message structure for identifying and storing context data during exchanges.




Context node and policy flexibility through parameterization

Observation Vs. notification. The observation reports containing context information are encapsulated into messages that circulate from the leaves to the root of the hierarchies. When the circulation is initiated at the request of parent nodes or client applications, it is an observation. In the other case, this is a notification.

Passive Vs. active. A passive node obtains context information upon demand and is invoked explicitly by another context node. An active node is associated to a thread and initiate the gathering and/or the treatment of context information. A typical example of an active node is the centralisation of several types of context information.

Blocking or not. During an observation or a notification, a node that treats the request can be blocking or not. A non-blocking context node calls its child nodes. In the case of a blocking node, an observed node provides the most up-to-date context information that it possesses without requesting child nodes. A typical example of a blocking node is the isolation of a part of a hierarchy from too frequent and numerous calls.