/******************************************************************************
* Sheet implementation
* ***************************************************************************/
/**
* Constructs a sheet
* @param context {object} a context object
* @class
* @classdesc A Sheet is an operationnal configuration in an application. It
* contains many things: multiple sets of {@link ARCS.Invocation}
* performed at different times
* and a set of {@link ARCS.Connection}. Sheets have two high level operations:
* activation and deactivation.
*/
ARCS.Sheet = function (context) {
//var context = ctx;
var preconnections = [], postconnections = [], cleanups = [], connections = [],
invokePreconnections, invokePostconnections, invokeCleanups, connect, disconnect;
invokePreconnections = function () {
var i;
for (i = 0; i < preconnections.length; i++) {
preconnections[i].invoke();
}
};
invokePostconnections = function () {
var i;
for (i = 0; i < postconnections.length; i++) {
postconnections[i].invoke();
}
};
invokeCleanups = function () {
var i;
for (i = 0; i < cleanups.length; i++) {
cleanups[i].invoke();
}
};
connect = function () {
var i;
for (i = 0; i < connections.length; i++) {
connections[i].connect();
}
};
disconnect = function () {
var i;
for (i = 0; i < connections.length; i++) {
connections[i].disconnect();
}
};
/**
* Activates this sheet. Pre-connection invocations are peformed, then
* connections are established and post-connection invocations are finally
* performed.
*/
this.activate = function () {
invokePreconnections();
connect();
invokePostconnections();
};
/**
* Deactivates this sheet. Connections are removed and then cleanup invocations
* are performed.
*/
this.deactivate = function () {
disconnect();
invokeCleanups();
};
/**
* Imports a structure object describing the content of a sheet.
* @param object {object} structured object describing sheet's content.
*/
this.import = function (object) {
var i = 0, castInvocation = ARCS.Invocation.cast, castConnection = ARCS.Connection.cast;
for (i = 0; i < object.preconnections.length; i++) {
preconnections.push(castInvocation(object.preconnections[i], context));
}
for (i = 0; i < object.postconnections.length; i++) {
postconnections.push(castInvocation(object.postconnections[i], context));
}
for (i = 0; i < object.cleanups.length; i++) {
cleanups.push(castInvocation(object.cleanups[i], context));
}
for (i = 0; i < object.connections.length; i++) {
connections.push(castConnection(object.connections[i], context));
}
};
};