'Initializes ``FigConfiguration`` attributes and validates config.
:param dict application_configuration: The intermediate
configuration representation to load into ``Application``
instances.  See :ref:`Configuration` for details.
Attributes initialized in this method are:
self._application_configuration: the application_configuration
parameter
self._application_names: A ``list`` of keys in
application_configuration representing all application
names.
self._applications: The ``dict`` of ``Application`` objects
after parsing.
self._application_links: ``dict`` acting as an internal map
of links to create between applications, this serves as an
intermediary when parsing applications, since an application
name specified in a link may not have been parsed at the point
the link is encountered.
self._possible_identifiers: A ``dict`` of keys that may identify a
dictionary of parsed YAML as being Fig-format.
self._unsupported_keys: A ``dict`` of keys representing Fig config
directives that are not yet supported by Flocker.
self._allowed_keys: A ``dict`` representing all the keys that are
supported and therefore allowed to appear in a single Fig service
definition.'

def __init__(self, application_configuration):

    if (not isinstance(application_configuration, dict)):
        raise ConfigurationError(u'Application    configuration    must    be    a    dictionary,    got    {type}.'.format(type=type(application_configuration).__name__))
    self._application_configuration = application_configuration
    self._application_names = self._application_configuration.keys()
    self._applications = {}
    self._application_links = {}
    self._validated = False
    self._possible_identifiers = {u'image', u'build'}
    self._unsupported_keys = {u'working_dir', u'entrypoint', u'user', u'hostname', u'domainname', u'privileged', u'dns', u'net', u'volumes_from', u'expose', u'command'}
    self._allowed_keys = {u'image', u'environment', u'ports', u'links', u'volumes', u'mem_limit'}
