public static function factory($message = null, $responseCode = 0)
 {
     $errorMessage = null;
     switch ($responseCode) {
         case 400:
             $errorMessage = 'Bad Request';
             break;
         case 401:
             $errorMessage = 'Unauthorized';
             break;
         case 403:
             $errorMessage = 'Forbidden';
             break;
         case 404:
             $errorMessage = 'Not Found';
             break;
         case 405:
             $errorMessage = 'Method Not Allowed';
             break;
         case 406:
             $errorMessage = 'Not Acceptable';
             break;
         case 407:
             $errorMessage = 'Proxy Authentication Required';
             break;
         case 408:
             $errorMessage = 'Request Timeout';
             break;
         case 409:
             $errorMessage = 'Conflict';
             break;
         case 500:
             $errorMessage = 'Internal Server Error';
             break;
         case 501:
             $errorMessage = 'Not Implemented';
             break;
         case 502:
             $errorMessage = 'Bad Gateway';
             break;
     }
     if ($errorMessage != null) {
         $exception = __CLASS__ . '_' . str_replace(' ', '', $errorMessage);
     } else {
         $exception = __CLASS__;
         $errorMessage = 'Unable to process your request';
     }
     if ($message == '') {
         $message = $errorMessage;
     }
     ObjectStorage_Util::__autoload_objectStorage_client($exception);
     if (!class_exists($exception)) {
         $exception = 'ObjectStorage_Exception';
     }
     $newException = new $exception($message, $responseCode);
     // Set the initial caller's file name and line number instead of this factory method
     $stackTrace = debug_backtrace();
     $newException->setFile($stackTrace[0]['file']);
     $newException->setLine($stackTrace[0]['line']);
     return $newException;
 }
 /**
  * Creates a ObjectStorage container or an object
  *
  * @param ObjectStorage_Abstract $objectStorageObject
  *
  * @return ObjectStorage_Abstract
  */
 public function create(ObjectStorage_Abstract $objectStorageObject)
 {
     $authData = $this->getAuthenticationData();
     $client = $this->getHttpClient();
     $client->setUri($authData->objectStorageUrl . '/' . rawurlencode(ltrim($objectStorageObject->getPath(), '/')));
     $client->setHeaders('X-Auth-Token', $authData->authToken);
     $client->setMethod('PUT');
     $request = $objectStorageObject->getRequest();
     if ($objectStorageObject instanceof ObjectStorage_Object) {
         $localFile = $objectStorageObject->getLocalFile();
         if ($localFile != '') {
             if (!is_readable($localFile)) {
                 throw new ObjectStorage_Exception('Local file ' . $localFile . ' is not readable.');
             }
             $fileHander = fopen($localFile, 'r');
             if ($fileHander == false) {
                 throw new ObjectStorage_Exception('Failed to open local file ' . $localFile);
             }
             $client->setFileHandler($fileHander);
             // Override the content-length
             $request->setHeader('Content-Length', filesize($localFile));
         } else {
             $client->setBody($objectStorageObject->getRequest()->getBody());
         }
         if ($request->getHeader('Content-type') == '') {
             $request->setHeader('Content-type', ObjectStorage_Util::getMimeByName($objectStorageObject->getPath()));
         }
     }
     $headers = $request->getHeaders();
     if (count($headers) > 0) {
         foreach ($headers as $key => $value) {
             $client->setHeaders($key, $value);
         }
     }
     $response = $client->request();
     if ($this->isAcceptableResponse($response->getStatusCode())) {
         $objectStorageObject->setResponse($response);
         return $objectStorageObject;
     } else {
         throw ObjectStorage_Exception_Http::factory('Failed to create ' . $objectStorageObject . '.', $response->getStatusCode());
     }
 }