Source: filter/defaultFilterManager.js

/**
 * @author Sloan Seaman 
 * @copyright 2016 and on
 * @version .1
 * @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
 */

/** @private */
var AbstractProviderManager = require('../provider/abstractProviderManager.js');

/**
 * Manager for managing filters.
 *
 * Supports N number of providers or various types (directory, file, map, etc.) to allow for highly dynamic 
 * configuration
 *
 * @constructor
 * @implements {AbstractProviderManager}
 * @implements {FilterManager}
 * @see {@link AbstractProviderManager}
 * @param {Provider} providers Providers to manage / use.  Can be null and providers later added via register methods
 */
function DefaultFilterManager(providers) {
	this._providers = providers;
	this._filters = {
		'pre' : [],
		'post' : []
	};
	this._notFound = {};

	AbstractProviderManager.apply(this, [providers]);
}

DefaultFilterManager.prototype = Object.create(AbstractProviderManager.prototype);
DefaultFilterManager.prototype.constructor = DefaultFilterManager;

/**
 * Returns the pre filters.  
 *
 * @function
 * @return {Array.Filter} The pre filters in the order they should be executed
 */
DefaultFilterManager.prototype.getPreFilters = function() {
	var filters = this._filters.pre;
	var providers = this.getRegisteredProviders();

	if (filters.length === 0 && !this._notFound.pre) { // isn't in cache and was never looked for
		for (var i=0;i<providers.length;i++) {
			filters = providers[i].getPreFilters();

			if (filters) {
				this._filters.pre.push(filters); // found it. set it so I never have to look again
			}
		}
		if (!filters) this._notFound.pre = true; // never will find it, so record this fact so we don't ever look again
	}

	return filters;
};

/**
 * Returns the post filters.  
 *
 * @function
 * @return {Array.Filter} The post filters in the order they should be executed
 */
DefaultFilterManager.prototype.getPostFilters = function() {
	var filters = this._filters.post;
	var providers = this.getRegisteredProviders();

	if (filters.length === 0 && !this._notFound.post) { // isn't in cache and was never looked for
		for (var i=0;i<providers.length;i++) {
			filters = providers[i].getPostFilters();

			if (filters) {
				this._filters.post.push(filters); // found it. set it so I never have to look again
			}
		}
		if (!filters) this._notFound.post = true; // never will find it, so record this fact so we don't ever look again
	}

	return filters;
};

module.exports = DefaultFilterManager;