/**
 * This class implements the controller event domain. All classes extending from
 * {@link Ext.app.Controller} are included in this domain. The selectors are simply id, 
 * alias, or the wildcard "*" to match any controller.
 * 
 * @private
 */
Ext.define('Ext.app.domain.Controller', {
    extend: 'Ext.app.EventDomain',
    singleton: true,

    requires: [
        'Ext.app.Controller'
    ],

    type: 'controller',
    prefix: 'controller.',
    idMatchRe: /^#/,

    constructor: function() {
        var me = this;

        me.callParent();
        me.monitor(Ext.app.BaseController);
    },

    match: function(target, selector) {
        var result = false,
            alias = target.alias;

        if (selector === '*') {
            result = true;
        }
        else if (selector === '#') {
            result = !!target.isApplication;
        }
        else if (this.idMatchRe.test(selector)) {
            result = target.getId() === selector.substring(1);
        }
        else if (alias) {
            result = Ext.Array.indexOf(alias, this.prefix + selector) > -1;
        }

        return result;
    }
});