def EnabledVocabFactory(context):
        terms = []

        registry = queryUtility(IRegistry)
        if not registry:
            logger.warning(
                'No registry found, unable to provide registry backed '
                'vocabulary.'
            )
            return SimpleVocabulary([])
        enabled = registry.get(enabled_vocab) or []
        for name in enabled:
            if queryUtility(interface, name=name) is None:
                continue
            # TODO define standard i18n the title for implementations
            title = name
            terms.append(SimpleVocabulary.createTerm(name, name, title))

        return SimpleVocabulary(terms)
    def verify_registry_key(self):
        registry = queryUtility(IRegistry)

        if registry is None:
            logger.warning('Plone registry is not available, doing nothing.')
            return False

        record = registry.records.get(self.name)

        if record is None:
            logger.warning(
                'The registry key for the utility registry `%s` is not '
                'registered.', self.name)
            return False

        if not (IList.providedBy(record.field) and
                IChoice.providedBy(record.field.value_type) and
                record.field.value_type.vocabularyName == self.available_vocab
                ):
            logger.warning(
                'The registry key for the utility registry `%s` is registered '
                'incorrectly.', self.name)
            return False

        return True