def __init__(self, yaml_data, config):

        # Configuration
        self._config = config

        # Extract the input/source link directories to utilize and build databases
        links = self._config.get('links')
        hide = self._config.get('hide')

        # Create the database of input files and source code
        inputs = collections.OrderedDict()
        children = collections.OrderedDict()
        options = {'repo': self._config['repo']}
        log.info('Building input and inheritance databases...')
        for key, path in links.iteritems():
            inputs[key] = database.Database('.i', path,
                                            database.items.InputFileItem,
                                            **options)
            children[key] = database.Database('.h', path,
                                              database.items.ChildClassItem,
                                              **options)

        # Combine the 'include' and 'source' into a single list (putting the include first)
        include = self._config.get('include')
        if not isinstance(include, list):
            include = [include]
        source = self._config.get('source')
        if not isinstance(source, list):
            source = [source]

        # Parse the syntax for the given source directory.
        paths = include + source
        log.info('Locating syntax for application: {}'.format(paths))
        self._yaml_data = yaml_data
        self._syntax = MooseApplicationSyntax(yaml_data, paths)

        self._systems = []
        log.info('Initializing MOOSE system information...')
        for system in self._syntax.systems():
            node = yaml_data.find(system)
            if not any([node['name'].startswith(h) for h in hide]):
                self._systems.append(
                    MooseSystemInformation(node, self._syntax, **self._config))

        self._objects = []
        log.info('Initializing MooseObject information...')
        for key, value in self._syntax.objects().iteritems():
            src = self._syntax.filenames(key)
            nodes = yaml_data[key]
            for node in nodes:
                if not any([node['name'].startswith(h) for h in hide]):
                    self._objects.append(
                        MooseObjectInformation(node,
                                               src,
                                               inputs=inputs,
                                               children=children,
                                               **self._config))