/**
  * Sets all the required parameters to configure a given Source instance.
  *
  * @param SourceConfig $sourceConfig
  *
  * @throws \Msl\ResourceProxy\Exception\BadSourceConfigurationException
  *
  * @return void
  */
 public function setConfig(SourceConfig $sourceConfig)
 {
     // Setting the source config
     $this->sourceConfig = $sourceConfig;
     // Setting object fields from configuration
     $this->name = $sourceConfig->getName();
     // Checking if crypt protocol is accepted
     $cryptProtocol = $sourceConfig->getCryptProtocol();
     if (!empty($cryptProtocol)) {
         if ($cryptProtocol !== self::SSL_CRYPT_PROTOCOL && $cryptProtocol !== self::TSL_CRYPT_PROTOCOL) {
             throw new Exception\BadSourceConfigurationException(sprintf('Unrecognized cryptographic protocol \'%s\'. Accepted values are:  \'%s\'.', $cryptProtocol, self::SSL_CRYPT_PROTOCOL));
         }
     }
     // Setting zend imap configuration
     $storageConfig = array('host' => $sourceConfig->getHost(), 'user' => $sourceConfig->getUsername(), 'port' => $sourceConfig->getPort(), 'password' => $sourceConfig->getPassword());
     if (!empty($cryptProtocol)) {
         $storageConfig['ssl'] = $cryptProtocol;
     }
     if (!empty($this->folder)) {
         $storageConfig['folder'] = $this->folder;
     }
     // Initializing zend imap instance
     $this->storage = $this->getStorageInstance($storageConfig);
 }