/**
  * Parses the application configuration
  *
  * @param ReaderInterface $reader
  *
  * @return Configuration the parsed configuration
  * @throws InvalidConfigurationException if the configuration couldn't be parsed and validated
  */
 public static function parseConfiguration(ReaderInterface $reader)
 {
     $configuration = $reader->readConfiguration();
     // Validate the configuration
     $validator = new Validator($configuration);
     $validator->validate();
     // Create the configuration object
     $config = new Configuration();
     $config->setDatabasePath($configuration['database_path'])->setLogPath($configuration['log_path'])->setInstances(self::parseInstances($configuration))->setAccessToken($configuration['access_token'])->setUpdateInterval($configuration['update_interval'])->setListenAddress($configuration['listen_address'])->setListenPort($configuration['listen_port'])->setHttpListenPort($configuration['http_listen_port'])->setHttpUsername($configuration['http_username'])->setHttpPassword($configuration['http_password']);
     return $config;
 }