[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Fmsystem-commits] [6865] Rest client class and SO class that uses it,
Petur Thorsteinsson <=