/**
  * the singleton pattern
  *
  * @return Expressodriver_Controller
  */
 public static function getInstance()
 {
     if (self::$_instance === NULL) {
         self::$_instance = new Expressodriver_Controller();
     }
     return self::$_instance;
 }
 /**
  * set credentials for given adapter
  *
  * @param string $adapterName
  * @param string $password
  * @return array
  */
 public function setCredentials($adapterName, $password)
 {
     return Expressodriver_Controller::getInstance()->setCredentials($adapterName, $password);
 }
 /**
  * creates/updates settings
  *
  * @return array created/updated settings
  */
 public function saveSettings($recordData)
 {
     $result = Expressodriver_Controller::getInstance()->saveConfigSettings($recordData);
     return $result;
 }
 /**
  * get an adapter instance according to the path
  *
  * pathParts:
  * [0] =>
  * [1] => external
  * [2] => accountLogin
  * [3] => adapterName
  * [4..] => path in backend
  *
  * @param string $_path
  * @return Expressodriver_Backend_Adapter_Interface
  * @throws Expressodriver_Exception
  */
 public function getAdapterBackend($_path)
 {
     $pathParts = explode('/', $_path);
     $adapterName = $pathParts[1];
     if (!isset(self::$_backends[$adapterName])) {
         $adapter = null;
         $config = Expressodriver_Controller::getInstance()->getConfigSettings();
         foreach ($config['adapters'] as $adapterConfig) {
             if ($adapterName === $adapterConfig['name']) {
                 $adapter = $adapterConfig;
             }
         }
         if (!is_null($adapter)) {
             $credentialsBackend = Tinebase_Auth_CredentialCache::getInstance();
             $userCredentialCache = Tinebase_Core::getUserCredentialCache();
             $credentialsBackend->getCachedCredentials($userCredentialCache);
             $username = $adapter['useEmailAsLoginName'] ? Tinebase_Core::getUser()->accountEmailAddress : Tinebase_Core::getUser()->accountLoginName;
             $options = array('host' => $adapter['url'], 'user' => $username, 'password' => $userCredentialCache->password, 'root' => '/', 'name' => $adapter['name'], 'useCache' => $config['default']['useCache'], 'cacheLifetime' => $config['default']['cacheLifetime']);
             self::$_backends[$adapterName] = Expressodriver_Backend_Storage_Abstract::factory($adapter['adapter'], $options);
         } else {
             throw new Expressodriver_Exception('Adapter config does not exists');
         }
     }
     return self::$_backends[$adapterName];
 }