2013-08-20 12:00:41 +02:00
|
|
|
/**
|
|
|
|
* {{LICENSE_HEADER}}
|
|
|
|
* {{LICENSE_HEADER}}
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* A component registry that maps components to unique IDs and keeps track
|
|
|
|
* of component types to allow easy querying
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
define(['jquery'], function($) {
|
|
|
|
"use strict";
|
|
|
|
|
2013-08-20 14:16:21 +02:00
|
|
|
var ComponentRegistry = function() {
|
2013-08-20 12:00:41 +02:00
|
|
|
var self = this;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Map ids to components
|
|
|
|
*/
|
|
|
|
var components = {};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generate a new component id
|
|
|
|
*/
|
|
|
|
var createId = (function() {
|
|
|
|
var id = 0;
|
|
|
|
return function() {
|
2013-08-20 19:31:29 +02:00
|
|
|
return 'icinga-component-' + id++;
|
2013-08-20 12:00:41 +02:00
|
|
|
};
|
|
|
|
})();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the id of the given component, if one is assigned
|
|
|
|
*
|
|
|
|
* @param {*} component The component of which the id should be retrieved
|
|
|
|
*
|
|
|
|
* @returns {String|null} The id of the component, or null
|
|
|
|
*/
|
|
|
|
this.getId = function(cmp) {
|
|
|
|
var id = null;
|
|
|
|
$.each(components, function(key, value) {
|
|
|
|
if (value && value.cmp === cmp) {
|
|
|
|
id = key;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return id;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the component that is assigned to the given id
|
|
|
|
*
|
|
|
|
* @param {String} id The id of the component
|
|
|
|
*
|
|
|
|
* @returns {*} The component or null
|
|
|
|
*/
|
|
|
|
this.getById = function(id) {
|
|
|
|
return components[id] && components[id].cmp;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get all components that match the given type
|
|
|
|
*
|
|
|
|
* @param {String} type The component type in the form '<module>/<component>'
|
|
|
|
*
|
|
|
|
* @returns {*|Array} The components or an empty array
|
|
|
|
*/
|
|
|
|
this.getByType = function(type) {
|
|
|
|
return $.map(components, function(entry) {
|
|
|
|
return entry.type === type ? entry.cmp : null;
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get all components
|
|
|
|
*
|
|
|
|
* @returns {*|Array} The components or an empty array
|
|
|
|
*/
|
|
|
|
this.getComponents = function() {
|
|
|
|
return $.map(components, function(entry) {
|
|
|
|
return entry.cmp;
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Add the given component to the registry and return the assigned id
|
|
|
|
*
|
|
|
|
* @param {*} cmp The component to add
|
|
|
|
* @param {String} id The optional id that should be assigned to that component
|
|
|
|
* @param {String} type The component type to load '<module>/<component>'
|
|
|
|
*
|
|
|
|
* @returns {*|Array}
|
|
|
|
*/
|
|
|
|
this.add = function(cmp, id, type) {
|
|
|
|
if (!id){
|
|
|
|
id = self.getId(cmp) || createId();
|
|
|
|
}
|
|
|
|
components[id] = {
|
|
|
|
cmp: cmp,
|
|
|
|
type: type,
|
|
|
|
active: true
|
|
|
|
};
|
|
|
|
return id;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Mark all components inactive
|
|
|
|
*/
|
|
|
|
this.markAllInactive = function() {
|
|
|
|
$.each(components,function(index, el){
|
|
|
|
if (el && el.active) {
|
|
|
|
el.active = false;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Mark the component with the given id as active
|
|
|
|
*/
|
|
|
|
this.markActive = function(id) {
|
|
|
|
if (components[id]) {
|
|
|
|
components[id].active = true;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Let the garbage collection remove all inactive components
|
|
|
|
*/
|
|
|
|
this.removeInactive = function() {
|
|
|
|
$.each(components, function(key,value) {
|
|
|
|
if (!value || !value.active) {
|
|
|
|
delete components[key];
|
|
|
|
}
|
|
|
|
});
|
|
|
|
};
|
|
|
|
};
|
2013-08-20 14:16:21 +02:00
|
|
|
return new ComponentRegistry();
|
2013-08-20 12:00:41 +02:00
|
|
|
});
|