fmsystem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Fmsystem-commits] [6865] Rest client class and SO class that uses it


From: Petur Thorsteinsson
Subject: [Fmsystem-commits] [6865] Rest client class and SO class that uses it
Date: Thu, 27 Jan 2011 08:38:59 +0000

Revision: 6865
          http://svn.sv.gnu.org/viewvc/?view=rev&root=fmsystem&revision=6865
Author:   peturbjorn
Date:     2011-01-27 08:38:58 +0000 (Thu, 27 Jan 2011)
Log Message:
-----------
Rest client class and SO class that uses it

Added Paths:
-----------
    branches/dev-bim2/property/inc/class.restrequest.inc.php
    branches/dev-bim2/property/inc/class.sobim_converter.inc.php

Added: branches/dev-bim2/property/inc/class.restrequest.inc.php
===================================================================
--- branches/dev-bim2/property/inc/class.restrequest.inc.php                    
        (rev 0)
+++ branches/dev-bim2/property/inc/class.restrequest.inc.php    2011-01-27 
08:38:58 UTC (rev 6865)
@@ -0,0 +1,249 @@
+<?php
+
+class RestRequest
+{
+       protected $url;
+       protected $verb;
+       protected $requestBody;
+       protected $requestLength;
+       protected $username;
+       protected $password;
+       protected $acceptType;
+       protected $responseBody;
+       protected $responseInfo;
+       protected $localFile;
+       protected $error = false;
+       
+       public function __construct ($url = null, $verb = 'GET', $requestBody = 
null)
+       {
+               $this->url                              = $url;
+               $this->verb                             = $verb;
+               $this->requestBody              = $requestBody;
+               $this->requestLength    = 0;
+               $this->username                 = null;
+               $this->password                 = null;
+               $this->acceptType               = 'application/json';
+               $this->responseBody             = null;
+               $this->responseInfo             = null;
+               
+               /*if ($this->requestBody !== null)
+               {
+                       $this->buildPostBody();
+               }*/
+       }
+       
+       public function flush ()
+       {
+               $this->requestBody              = null;
+               $this->requestLength    = 0;
+               $this->verb                             = 'GET';
+               $this->responseBody             = null;
+               $this->responseInfo             = null;
+       }
+       
+       public function execute ()
+       {
+               $ch = curl_init();
+               $this->setAuth($ch);
+               
+               try
+               {
+                       switch (strtoupper($this->verb))
+                       {
+                               case 'GET':
+                                       $this->executeGet($ch);
+                                       break;
+                               case 'POST':
+                                       $this->executePost($ch);
+                                       break;
+                               case 'PUT':
+                                       $this->executePut($ch);
+                                       break;
+                               case 'DELETE':
+                                       $this->executeDelete($ch);
+                                       break;
+                               default:
+                                       throw new 
InvalidArgumentException('Current verb (' . $this->verb . ') is an invalid REST 
verb.');
+                       }
+               }
+               catch (InvalidArgumentException $e)
+               {
+                       curl_close($ch);
+                       throw $e;
+               }
+               catch (Exception $e)
+               {
+                       curl_close($ch);
+                       throw $e;
+               }
+               
+       }
+       
+       public function buildPostBody ($data = null)
+       {
+               $data = ($data !== null) ? $data : $this->requestBody;
+               
+               if (!is_array($data))
+               {
+                       throw new InvalidArgumentException('Invalid data input 
for postBody.  Array expected');
+               }
+               
+               $data = http_build_query($data, '', '&');
+               $this->requestBody = $data;
+       }
+       
+       
+       
+       protected function executeGet ($ch)
+       {               
+               $this->doExecute($ch);  
+       }
+       
+       protected function executePost ($ch)
+       {
+               if (!is_string($this->requestBody))
+               {
+                       //$this->buildPostBody();
+               }
+               //var_dump($this->requestBody);
+               curl_setopt($ch, CURLOPT_POST, 1); // this line MUST COME 
BEFORE the CURLOPT_POSTFIELDS line !!!!
+               curl_setopt($ch, CURLOPT_POSTFIELDS, $this->requestBody); // 
this automatically sets Content-Type: multipart/form-data
+               //n.b. the input MUST be an array where one element is of the 
form '<file_field>' => @/<path>/filename
+               $this->doExecute($ch);
+       }
+       
+       protected function executePut ($ch)
+       {
+               /*if (!is_string($this->requestBody))
+               {
+                       $this->buildPostBody();
+               }
+               
+               $this->requestLength = strlen($this->requestBody);
+               
+               $fh = fopen('php://memory', 'rw');
+               fwrite($fh, $this->requestBody);
+               rewind($fh);*/
+               if( !file_exists($this->localFile)) {
+                       throw new InvalidArgumentException("Missing file to 
send with put request");
+               }
+               $fp = fopen ($this->localfile, "r");
+               $fileSize = filesize($fp);
+               curl_setopt($ch, CURLOPT_INFILE, $fh);
+               curl_setopt($ch, CURLOPT_INFILESIZE, $fileSize);
+               curl_setopt($ch, CURLOPT_PUT, true);
+               
+               $this->doExecute($ch);
+               
+               fclose($fh);
+       }
+       
+       protected function executeDelete ($ch)
+       {
+               curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
+               
+               $this->doExecute($ch);
+       }
+       
+       protected function doExecute (&$curlHandle)
+       {
+               $this->setCurlOpts($curlHandle);
+               $this->responseBody = curl_exec($curlHandle);
+               $this->responseInfo     = curl_getinfo($curlHandle);
+               if ( $this->responseInfo["http_code"] != 200 ) {
+                       $this->error = true;
+               } else {
+                       $this->error = false;
+               }
+               curl_close($curlHandle);
+       }
+       
+       protected function setCurlOpts (&$curlHandle)
+       {
+               curl_setopt($curlHandle, CURLOPT_TIMEOUT, 5*60); // (seconds) 
need long timeout because of large file uploads
+               curl_setopt($curlHandle, CURLOPT_URL, $this->url);
+               curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
+               $headerArray =  array ('Accept: ' . $this->acceptType);
+               //curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $headerArray);
+               curl_setopt($curlHandle, CURLINFO_HEADER_OUT, true);
+       }
+       
+       protected function setAuth (&$curlHandle)
+       {
+               if ($this->username !== null && $this->password !== null)
+               {
+                       curl_setopt($curlHandle, CURLOPT_HTTPAUTH, 
CURLAUTH_DIGEST);
+                       curl_setopt($curlHandle, CURLOPT_USERPWD, 
$this->username . ':' . $this->password);
+               }
+       }
+       
+       public function getAcceptType ()
+       {
+               return $this->acceptType;
+       } 
+       
+       public function setAcceptType ($acceptType)
+       {
+               $this->acceptType = $acceptType;
+       } 
+       
+       public function getPassword ()
+       {
+               return $this->password;
+       } 
+       
+       public function setPassword ($password)
+       {
+               $this->password = $password;
+       } 
+       
+       public function getResponseBody ()
+       {
+               return $this->responseBody;
+       } 
+       
+       public function getResponseInfo ()
+       {
+               return $this->responseInfo;
+       } 
+       
+       public function getUrl ()
+       {
+               return $this->url;
+       } 
+       
+       public function setUrl ($url)
+       {
+               $this->url = $url;
+       } 
+       
+       public function getUsername ()
+       {
+               return $this->username;
+       } 
+       
+       public function setUsername ($username)
+       {
+               $this->username = $username;
+       } 
+       
+       public function getVerb ()
+       {
+               return $this->verb;
+       } 
+       
+       public function setVerb ($verb)
+       {
+               $this->verb = $verb;
+       } 
+       
+       public function setLocalFile ( $filename) {
+               $this->localFile = $filename;
+       }
+       public function getLocalFile () {
+               return $this->localFile;
+       }
+       public function isError() {
+               return $this->error;
+       }
+}

Added: branches/dev-bim2/property/inc/class.sobim_converter.inc.php
===================================================================
--- branches/dev-bim2/property/inc/class.sobim_converter.inc.php                
                (rev 0)
+++ branches/dev-bim2/property/inc/class.sobim_converter.inc.php        
2011-01-27 08:38:58 UTC (rev 6865)
@@ -0,0 +1,68 @@
+<?php
+/*
+ * Requires the following to work:
+ * Curl library
+ * HTTP_Request (Pear)
+ */
+
+phpgw::import_class('property.restrequest');
+/*
+ * 
+ */
+interface sobim_converter {
+       public function getFacilityManagementXml();
+}
+
+class sobim_converter_impl implements sobim_converter {
+       private $baseUrl = 
"http://localhost:8080/BIM_Facility_Management/rest/";;
+       private $fileToSend;
+       
+       public function __construct() {
+               if(!$this->iscurlinstalled()) {
+                       throw new Exception("Curl library is required for this 
to work!");
+               }
+       }
+       private function iscurlinstalled() {
+               return  (in_array  ('curl', get_loaded_extensions()));
+       }
+       
+       public function getFacilityManagementXml() {
+               $restCall = "uploadIfc";
+               $url = $this->baseUrl.$restCall;
+               $verb = "POST";
+               $data = array (
+                       'file'=>'@'.$this->fileToSend
+               );
+               
+               $rest = new RestRequest($url, $verb, $data);
+               $rest->setAcceptType("application/xml");
+               $rest->execute();
+               if( $rest->isError()) {
+                       throw new Exception("Rest call error : 
".var_export($rest->getResponseInfo()));
+               }
+               return $rest->getResponseBody();
+       }
+       public function getRepositoryCountJson() {
+               
+               $url = $this->baseUrl."uploadIfc";
+               $method = "GET";
+               $rest = new RestRequest($url, $method);
+               //$rest->setAcceptType("application/xml");
+               $rest->execute();
+               $output = $rest->getResponseBody();
+               echo $output;
+       }
+       
+       public function getRepositoryNames() {
+               $url = $this->baseUrl."/names";
+               $method = "GET";
+               $rest = new RestRequest($url, $method);
+               //$rest->setAcceptType("application/xml");
+               $rest->execute();
+               $output = $rest->getResponseBody();
+               echo $output;
+       }
+       public function setFileToSend($name) {
+               $this->fileToSend = $name;
+       }
+}
\ No newline at end of file




reply via email to

[Prev in Thread] Current Thread [Next in Thread]