'Create or retrieve an adapter for the given interface.
If such an adapter has already been created, retrieve it from the cache
that this instance keeps of all its adapters.  Adapters created through
this mechanism may safely store system-specific state.
If you want to register an adapter that will be created through
getComponent, but you don\'t require (or don\'t want) your adapter to be
cached and kept alive for the lifetime of this Componentized object,
set the attribute \'temporaryAdapter\' to True on your adapter class.
If you want to automatically register an adapter for all appropriate
interfaces (with addComponent), set the attribute \'multiComponent\' to
True on your adapter class.'

def getComponent(self, interface, default=None):

    k = reflect.qual(interface)
    if (k in self._adapterCache):
        return self._adapterCache[k]
    else:
        adapter = interface.__adapt__(self)
        if ((adapter is not None) and (not (hasattr(adapter, 'temporaryAdapter') and adapter.temporaryAdapter))):
            self._adapterCache[k] = adapter
            if (hasattr(adapter, 'multiComponent') and adapter.multiComponent):
                self.addComponent(adapter)
        if (adapter is None):
            return default
        return adapter
