diff -r 000000000000 -r 4eba9c11703f web/Zend/Service/DeveloperGarden/Client/ClientAbstract.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/Zend/Service/DeveloperGarden/Client/ClientAbstract.php Mon Dec 13 18:29:26 2010 +0100 @@ -0,0 +1,430 @@ +_credential = new Zend_Service_DeveloperGarden_Credential(); + + while (list($name, $value) = each($options)) { + switch (ucfirst($name)) { + case 'Username' : + $this->_credential->setUsername($value); + break; + case 'Password' : + $this->_credential->setPassword($value); + break; + case 'Realm' : + $this->_credential->setRealm($value); + break; + case 'Environment' : + $this->setEnvironment($value); + } + } + + if (empty($this->_wsdlFile)) { + require_once 'Zend/Service/DeveloperGarden/Exception.php'; + throw new Zend_Service_DeveloperGarden_Exception('_wsdlFile not set for this service.'); + } + + if (!empty($this->_wsdlFileLocal)) { + $this->_wsdlFileLocal = realpath(dirname(__FILE__) . '/../' . $this->_wsdlFileLocal); + } + + if (empty($this->_wsdlFileLocal) || $this->_wsdlFileLocal === false) { + require_once 'Zend/Service/DeveloperGarden/Exception.php'; + throw new Zend_Service_DeveloperGarden_Exception('_wsdlFileLocal not set for this service.'); + } + } + + /** + * Set an option + * + * @param string $name + * @param mixed $value + * @throws Zend_Service_DeveloperGarden_Client_Exception + * @return Zend_Service_DeveloperGarden_Client_ClientAbstract + */ + public function setOption($name, $value) + { + if (!is_string($name)) { + require_once 'Zend/Service/DeveloperGarden/Client/Exception.php'; + throw new Zend_Service_DeveloperGarden_Client_Exception('Incorrect option name: ' . $name); + } + $name = strtolower($name); + if (array_key_exists($name, $this->_options)) { + $this->_options[$name] = $value; + } + + return $this; + } + + /** + * get an option value from the internal options object + * + * @param string $name + * @return mixed + */ + public function getOption($name) + { + $name = strtolower($name); + if (array_key_exists($name, $this->_options)) { + return $this->_options[$name]; + } + + return null; + } + + /** + * returns the internal soap client + * if not allready exists we create an instance of + * Zend_Soap_Client + * + * @final + * @return Zend_Service_DeveloperGarden_Client_Soap + */ + final public function getSoapClient() + { + if ($this->_soapClient === null) { + /** + * init the soapClient + */ + $this->_soapClient = new Zend_Service_DeveloperGarden_Client_Soap( + $this->getWsdl(), + $this->getClientOptions() + ); + $this->_soapClient->setCredential($this->_credential); + $tokenService = new Zend_Service_DeveloperGarden_SecurityTokenServer( + array( + 'username' => $this->_credential->getUsername(), + 'password' => $this->_credential->getPassword(), + 'environment' => $this->getEnvironment(), + 'realm' => $this->_credential->getRealm(), + ) + ); + $this->_soapClient->setTokenService($tokenService); + } + + return $this->_soapClient; + } + + /** + * sets new environment + * + * @param int $environment + * @return Zend_Service_DeveloperGarden_Client_ClientAbstract + */ + public function setEnvironment($environment) + { + self::checkEnvironment($environment); + $this->_serviceEnvironment = $environment; + return $this; + } + + /** + * returns the current configured environemnt + * + * @return int + */ + public function getEnvironment() + { + return $this->_serviceEnvironment; + } + + /** + * returns the wsdl file path, a uri or the local path + * + * @return string + */ + public function getWsdl() + { + if ($this->_useLocalWsdl) { + $retVal = $this->_wsdlFileLocal; + } else { + $retVal = $this->_wsdlFile; + } + + return $retVal; + } + + /** + * switch to the local wsdl file usage + * + * @param boolen $use + * @return Zend_Service_DeveloperGarden_Client_ClientAbstract + */ + public function setUseLocalWsdl($use = true) + { + $this->_useLocalWsdl = (boolean) $use; + return $this; + } + + /** + * sets a new wsdl file + * + * @param string $wsdlFile + * @return Zend_Service_DeveloperGarden_Client_ClientAbstract + */ + public function setWsdl($wsdlFile = null) + { + if (empty($wsdlFile)) { + require_once 'Zend/Service/DeveloperGarden/Exception.php'; + throw new Zend_Service_DeveloperGarden_Exception('_wsdlFile not set for this service.'); + } + $this->_wsdlFile = $wsdlFile; + return $this; + } + + /** + * sets a new local wsdl file + * + * @param string $wsdlFile + * @return Zend_Service_DeveloperGarden_Client_ClientAbstract + */ + public function setLocalWsdl($wsdlFile = null) + { + if (empty($wsdlFile)) { + require_once 'Zend/Service/DeveloperGarden/Exception.php'; + throw new Zend_Service_DeveloperGarden_Exception('_wsdlFileLocal not set for this service.'); + } + $this->_wsdlFileLocal = $wsdlFile; + return $this; + } + + /** + * returns an array with configured options for this client + * + * @return array + */ + public function getClientOptions() + { + $options = array( + 'soap_version' => SOAP_1_1, + ); + if (!empty($this->_classMap)) { + $options['classmap'] = $this->_classMap; + } + $wsdlCache = Zend_Service_DeveloperGarden_SecurityTokenServer_Cache::getWsdlCache(); + if ($wsdlCache !== null) { + $options['cache_wsdl'] = $wsdlCache; + } + return $options; + } + + /** + * returns the internal credential object + * + * @return Zend_Service_DeveloperGarden_Credential + */ + public function getCredential() + { + return $this->_credential; + } + + /** + * helper method to create const arrays + * @return null + */ + static protected function _buildConstArray() + { + $r = new ReflectionClass(__CLASS__); + foreach ($r->getConstants() as $k => $v) { + $s = explode('_', $k, 2); + if (!isset(self::$_consts[$s[0]])) { + self::$_consts[$s[0]] = array(); + } + self::$_consts[$s[0]][$v] = $k; + } + } + + /** + * returns an array of all available environments + * + * @return array + */ + static public function getParticipantActions() + { + if (empty(self::$_consts)) { + self::_buildConstArray(); + } + return self::$_consts['PARTICIPANT']; + } + + /** + * checks if the given action is valid + * otherwise it @throws Zend_Service_DeveloperGarden_Exception + * + * @param int $action + * @throws Zend_Service_DeveloperGarden_Client_Exception + * @return void + */ + static public function checkParticipantAction($action) + { + if (!array_key_exists($action, self::getParticipantActions())) { + require_once 'Zend/Service/DeveloperGarden/Client/Exception.php'; + throw new Zend_Service_DeveloperGarden_Client_Exception( + 'Wrong Participant Action ' . $action . ' supplied.' + ); + } + } + + /** + * returns an array of all available environments + * + * @return array + */ + static public function getEnvironments() + { + if (empty(self::$_consts)) { + self::_buildConstArray(); + } + return self::$_consts['ENV']; + } + + /** + * checks if the given environemnt is valid + * otherwise it @throws Zend_Service_DeveloperGarden_Client_Exception + * + * @param int $environment + * @throws Zend_Service_DeveloperGarden_Client_Exception + * @return void + */ + static public function checkEnvironment($environment) + { + if (!array_key_exists($environment, self::getEnvironments())) { + require_once 'Zend/Service/DeveloperGarden/Client/Exception.php'; + throw new Zend_Service_DeveloperGarden_Client_Exception( + 'Wrong environment ' . $environment . ' supplied.' + ); + } + } +}