    /**
     * @class Ext.AbstractPlugin
     * @extends Object
     *
     * Plugins are injected
     */
    Ext.define('Ext.AbstractPlugin', {
        disabled: false,

        constructor: function(config) {
            //<debug>
            if (!config.cmp && Ext.global.console) {
                Ext.global.console.warn("Attempted to attach a plugin ");
            }
            //</debug>
            Ext.apply(this, config);
        },

        getCmp: function() {
            return this.cmp;
        },

        /**
         * The init method is invoked after initComponent has been run for the
         * component which we are injecting the plugin into.
         */
        init: Ext.emptyFn,

        /**
         * The destroy method is invoked by the owning Component at the time the Component is being destroyed.
         * Use this method to clean up an resources.
         */
        destroy: Ext.emptyFn,

        /**
         * Enable the plugin and set the disabled flag to false.
         */
        enable: function() {
            this.disabled = false;
        },

        /**
         * Disable the plugin and set the disabled flag to true.
         */
        disable: function() {
            this.disabled = true;
        }
    });