'use strict';





//var ExtensionManagerBase = require('./extension-manager-base.js');

var ExtensionManager = require('./extension-manager.js');

var ExtensionManagerSync = require('./extension-manager-sync.js');

var EventHandlerList = require('./event-handler-list.js');

var DataStore = require('./data-store.js');

var ModelState = require('./model-state.js');

var ModelError = require('./model-error.js');

var ConfigurationError = require('./configuration-error.js');

//var configuration = require('./configuration-reader.js');



var PropertyInfo = require('./property-info.js');

var PropertyFlag = require('./property-flag.js');

var PropertyManager = require('./property-manager.js');

var PropertyContext = require('./property-context.js');

var TransferContext = require('./transfer-context.js');



var DataPortalAction = require('./data-portal-action.js');

var DataPortalContext = require('./data-portal-context.js');

var DataPortalEvent = require('./data-portal-event.js');

var DataPortalEventArgs = require('./data-portal-event-args.js');

var DataPortalError = require('./data-portal-error.js');



/**

 * Contains components used by models, collections and other components.

 *

 * @namespace bo.shared

 *

 * @property {function} ExtensionManager - {@link bo.shared.ExtensionManager Extension manager}

 *      constructor to create new a new extension manager object for an asynchronous model.

 * @property {function} ExtensionManagerSync - {@link bo.shared.ExtensionManagerSync Extension manager}

 *      constructor to create new a new extension manager object for a synchronous model.

 * @property {function} EventHandlerList - {@link bo.shared.EventHandlerList Event handler list}

 *      constructor to create a new event handler collection.

 * @property {function} DataStore - {@link bo.shared.DataStore DataStore}

 *      constructor to create new data store.

 * @property {object} ModelState - {@link bo.rules.ModelState Model state}

 *      object specifies the possible states of the editable models.

 * @property {function} ModelError - {@link bo.shared.ModelError Model error}

 *      constructor to create a new error related to a model.

 * @property {function} ConfigurationError - {@link bo.shared.ConfigurationError Configuration error}

 *      constructor to create a new error related to configuration.

 *

 * @property {function} PropertyInfo - {@link bo.shared.PropertyInfo Property definition}

 *      constructor to create new property definition.

 * @property {function} PropertyFlag - {@link bo.shared.PropertyFlag Property flag}

 *      constructor to create new flag set for a property definition.

 * @property {function} PropertyManager - {@link bo.shared.PropertyManager Property manager}

 *      constructor to create a new property manager.

 * @property {function} PropertyContext - {@link bo.shared.PropertyContext Property context}

 *      constructor to create new context object for custom property functions.

 * @property {function} TransferContext - {@link bo.shared.TransferContext Transfer context}

 *      constructor to create new context object for custom client and data transfer functions.

 *

 * @property {function} DataPortalAction - {@link bo.shared.DataPortalAction Data portal action}

 *      enumeration specifies the model operations to execute on data access objects.

 * @property {function} DataPortalContext - {@link bo.shared.DataPortalContext Data portal context}

 *      constructor to create new context object for custom data portal functions.

 * @property {function} DataPortalEvent - {@link bo.shared.DataPortalEvent Data portal event}

 *      enumeration specifies the events of data portal operations.

 * @property {function} DataPortalEventArgs - {@link bo.shared.DataPortalEventArgs Data portal event arguments}

 *      constructor to create new context object for data portal events.

 * @property {function} DataPortalError - {@link bo.shared.DataPortalError Data portal error}

 *      constructor to create a new error related to data portal actions.

 *

 *

 */

var index = {

  //ExtensionManagerBase: ExtensionManagerBase,

  ExtensionManager: ExtensionManager,

  ExtensionManagerSync: ExtensionManagerSync,

  EventHandlerList: EventHandlerList,

  DataStore: DataStore,

  ModelState: ModelState,

  ModelError: ModelError,

  ConfigurationError: ConfigurationError,

  //configuration: configuration,



  PropertyInfo: PropertyInfo,

  PropertyFlag: PropertyFlag,

  PropertyManager: PropertyManager,

  PropertyContext: PropertyContext,

  TransferContext: TransferContext,



  DataPortalAction: DataPortalAction,

  DataPortalContext: DataPortalContext,

  DataPortalEvent: DataPortalEvent,

  DataPortalEventArgs: DataPortalEventArgs,

  DataPortalError: DataPortalError

};



// Immutable object.

Object.freeze(index);



module.exports = index;