Source: subscriber/callbackList.js

/**
 * This module represents an CallbackList. It is a subclass of AbstractList.
 * 
 * @module CallbackList
 */
define(['abstractList', 'callback'], function(AbstractList, Callback){
 	return (function() {
		/**
		 * @classdesc This class represents a list for Callback.
		 * @extends AbstractList
		 * @constructs CallbackList
		 */
		function CallbackList() {
			AbstractList.call(this);

			this._type = Callback;

			return this;
		}

		CallbackList.prototype = Object.create(AbstractList.prototype);
		CallbackList.prototype.constructor = CallbackList;

		/**
		 * Builder for item list.
		 *
		 * @public
		 * @param {(CallbackList|Array)} callbackListOrArray CallbackList
		 * @returns {CallbackList}
		 */
		CallbackList.prototype.withItems = function(callbackListOrArray){
			if (callbackListOrArray instanceof Array) {
				this._items = callbackListOrArray;
			} else if (callbackListOrArray.constructor === CallbackList) {
				this._items = callbackListOrArray.getItems();
			}
			return this;
		};

		/**
		 * Adds the specified item to the itemList.
		 *
		 * @public
		 * @param {Callback} callback Callback
		 */
		CallbackList.prototype.put = function(callback){
			if (callback.constructor === Callback) {
				if (!(this.contains(callback))) {
					this._items.push(callback);
				}
			}
		};

		/**
		 * Adds all items in the specified list to this itemList
		 *
		 * @public
		 * @param {(CallbackList|Array)} callbackListOrArray CallbackList
		 */
		CallbackList.prototype.putAll = function(callbackListOrArray){
			var list = [];
			if (callbackListOrArray instanceof Array) {
				list = callbackListOrArray;
			} else if (callbackListOrArray.constructor === CallbackList) {
				list = callbackListOrArray.getItems();
			}
			for (var i in list) {
				this.put(list[i]);
			}
		};

		/**
		 * Verifies whether the given item is included in this list.
		 *
		 * @public
		 * @param {Callback} callback CallbackType that should be verified.
		 * @returns {boolean}
		 */
		CallbackList.prototype.contains = function(callback){
			if (callback.constructor === Callback) {
				for (var index in this._items) {
					var tmp = this._items[index];
					if (tmp.equals(callback)) {
						return true;
					}
				}
			}
			return false;
		};

		/**
		 * Compare the specified CallbackList with this instance.
		 * @public
		 * @alias equals
		 * @memberof CallbackList#
		 * @param {CallbackList} callbackList CallbackList that should be compared.
		 * @returns {boolean}
		 */
		CallbackList.prototype.equals = function(callbackList){
			if (callbackList.constructor === CallbackList && callbackList.size() == this.size()) {
				for (var index in callbackList.getItems()) {
					var theCallback = callbackList.getItems()[index];
					if (!this.contains(theCallback)) return false;
				}
				return true;
			}
			return false;
		};

		return CallbackList;
	})();
});