You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wookie.apache.org by kr...@apache.org on 2010/03/09 19:37:54 UTC

svn commit: r921050 - /incubator/wookie/trunk/connector/php/

Author: krispopat
Date: Tue Mar  9 18:37:54 2010
New Revision: 921050

URL: http://svn.apache.org/viewvc?rev=921050&view=rev
Log:
Added:

Basic connection testing
add/get/delete participant
add/get/delete properties

Lot's of other code work.

See TestWookieService.php 

Thanks to Raido Kuli

Added:
    incubator/wookie/trunk/connector/php/WidgetProperties.php   (with props)
Modified:
    incubator/wookie/trunk/connector/php/HTTP_Response.php
    incubator/wookie/trunk/connector/php/TestWookieService.php
    incubator/wookie/trunk/connector/php/Widget.php
    incubator/wookie/trunk/connector/php/WidgetInstance.php
    incubator/wookie/trunk/connector/php/WidgetInstances.php
    incubator/wookie/trunk/connector/php/WookieConnectorExceptions.php
    incubator/wookie/trunk/connector/php/WookieConnectorService.php
    incubator/wookie/trunk/connector/php/WookieServerConnection.php

Modified: incubator/wookie/trunk/connector/php/HTTP_Response.php
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/connector/php/HTTP_Response.php?rev=921050&r1=921049&r2=921050&view=diff
==============================================================================
--- incubator/wookie/trunk/connector/php/HTTP_Response.php (original)
+++ incubator/wookie/trunk/connector/php/HTTP_Response.php Tue Mar  9 18:37:54 2010
@@ -1,5 +1,6 @@
 <?php
-/**
+
+/*
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
  *  You may obtain a copy of the License at
@@ -12,7 +13,7 @@
  *  See the License for the specific language governing permissions and
  * limitations under the License.
  */
- 
+
 class HTTP_Response {
 	private $statusCode;
 	private $responseText;

Modified: incubator/wookie/trunk/connector/php/TestWookieService.php
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/connector/php/TestWookieService.php?rev=921050&r1=921049&r2=921050&view=diff
==============================================================================
--- incubator/wookie/trunk/connector/php/TestWookieService.php (original)
+++ incubator/wookie/trunk/connector/php/TestWookieService.php Tue Mar  9 18:37:54 2010
@@ -1,5 +1,5 @@
 <?php
-/**
+/*
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
  *  You may obtain a copy of the License at
@@ -17,15 +17,18 @@
 ini_set('display_errors', 1);
 error_reporting(E_ALL &~ E_NOTICE);
 
-require("WookieConnectorService.php");
+require_once("WookieConnectorService.php");
 
-$test = new WookieConnectorService("http://127.0.0.1:8080/wookie/", "TEST", "localhost_test", 'demo_2');
+$test = new WookieConnectorService("http://localhost:8080/wookie/", "TEST", "localhost_test", 'demo_2');
 //setup different userName
 $test->getUser()->setLoginName("demo_1");
 //get all available widgets
 $availableWidgets = $test->getAvailableWidgets();
 //print_r($availableWidgets);
 
+//check connection
+echo $test->getConnection()->Test().'<br />';
+
 //create select menus
 echo '<pre>';
 echo '<form action="" method="GET">';
@@ -66,20 +69,45 @@ if($_GET['widget_id'] != '') {
 	//setup different userName for current user
 	$test->getUser()->setLoginName("demo_2");
 	$widget = $test->getOrCreateInstance($_GET['widget_id']);
-	echo '<iframe src="'.$widget->getUrl().'" width="'.$widget->getWidth().'" height="'.$widget->getHeight().'"></iframe><br />';
-	
+	if($widget) {
+		echo '<iframe src="'.$widget->getUrl().'" width="'.$widget->getWidth().'" height="'.$widget->getHeight().'"></iframe><br />';
+	}
 	//add participant
 	$testUser = new User('demo_2', 'demo_2');
 	$test->addParticipant($widget, $testUser);
 	print_r($test->getUsers($widget));
+	
+	//delete participant DOES NOT WORK
+	$testUser = new User('demo_2', 'demo_2');
+    $test->deleteParticipant($widget, $testUser);
+	$test->deleteParticipant($widget, $testUser);
+	echo 'Users after delete <br />';
+	print_r($test->getUsers($widget));
+	
+	
+	//add property
+	$newProperty = new Property('demo_property', 'demo_value');
+	$result = $test->setProperty($widget, $newProperty);
+	print_r($result);
+	
+	//get property from server
+	$newProperty = new Property('demo_property');
+	print_r($test->getProperty($widget, $newProperty)); // you can use property without value for get -> new Property('proovikas');
+	
+	//finally delete it from server 
+	$newProperty = new Property('proovikas');
+	echo 'Properties after delete<br />';
+	print_r($test->deleteProperty($widget, $newProperty)); // you can use property without value for get -> new Property('proovikas');
+	echo '<br />';
 }
 
 if($_GET['widget_id2'] != '') {
 	//setup different userName for current user
 	$test->getUser()->setLoginName("demo_3");
 	$widget2 = $test->getOrCreateInstance($_GET['widget_id2']);
-	echo '<iframe src="'.$widget2->getUrl().'" width="'.$widget2->getWidth().'" height="'.$widget2->getHeight().'"></iframe><br />';
-	
+	if($widget2) {
+		echo '<iframe src="'.$widget2->getUrl().'" width="'.$widget2->getWidth().'" height="'.$widget2->getHeight().'"></iframe><br />';
+	}
 	//add participant
 	$testUser = new User('demo_3', 'demo_3');
 	$test->addParticipant($widget2, $testUser);

Modified: incubator/wookie/trunk/connector/php/Widget.php
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/connector/php/Widget.php?rev=921050&r1=921049&r2=921050&view=diff
==============================================================================
--- incubator/wookie/trunk/connector/php/Widget.php (original)
+++ incubator/wookie/trunk/connector/php/Widget.php Tue Mar  9 18:37:54 2010
@@ -1,5 +1,6 @@
 <?php
-/**
+
+/*
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
  *  You may obtain a copy of the License at
@@ -12,8 +13,7 @@
  *  See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-
+ 
 /**
  * A client side representation of a widget. 
  * 

Modified: incubator/wookie/trunk/connector/php/WidgetInstance.php
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/connector/php/WidgetInstance.php?rev=921050&r1=921049&r2=921050&view=diff
==============================================================================
--- incubator/wookie/trunk/connector/php/WidgetInstance.php (original)
+++ incubator/wookie/trunk/connector/php/WidgetInstance.php Tue Mar  9 18:37:54 2010
@@ -1,4 +1,5 @@
 <?php
+
 /*
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.

Modified: incubator/wookie/trunk/connector/php/WidgetInstances.php
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/connector/php/WidgetInstances.php?rev=921050&r1=921049&r2=921050&view=diff
==============================================================================
--- incubator/wookie/trunk/connector/php/WidgetInstances.php (original)
+++ incubator/wookie/trunk/connector/php/WidgetInstances.php Tue Mar  9 18:37:54 2010
@@ -1,4 +1,5 @@
 <?php
+
 /*
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.

Added: incubator/wookie/trunk/connector/php/WidgetProperties.php
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/connector/php/WidgetProperties.php?rev=921050&view=auto
==============================================================================
--- incubator/wookie/trunk/connector/php/WidgetProperties.php (added)
+++ incubator/wookie/trunk/connector/php/WidgetProperties.php Tue Mar  9 18:37:54 2010
@@ -0,0 +1,52 @@
+<?php
+
+/*
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ class Property {
+	private $propertyName = '';
+	private $propertyValue = '';
+	private $isPublic = 'false';
+	
+	function __construct($propertyName, $propertyValue = null, $isPublic = 'false') {
+		$this->propertyName = (string) $propertyName;
+		$this->propertyValue = (string) $propertyValue;
+		$this->isPublic = (string) $isPublic;
+	}
+	
+	public function getValue() {
+		return $this->propertyValue;
+	}
+	
+	public function getName() {
+		return $this->propertyName;
+	}
+	public function isPublic() {
+		return $this->isPublic;
+	}
+	
+	public function setValue($value) {
+		$this->propertyValue = (string) $value;
+	}
+	
+	public function setName($propertyName) {
+		$this->propertyName = (string) $propertyName;
+	}
+	public function set_isPublic($isPublic) {
+		$this->isPublic = (string) $isPublic;
+	}
+	
+ }
+
+?>
\ No newline at end of file

Propchange: incubator/wookie/trunk/connector/php/WidgetProperties.php
------------------------------------------------------------------------------
    svn:executable = *

Modified: incubator/wookie/trunk/connector/php/WookieConnectorExceptions.php
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/connector/php/WookieConnectorExceptions.php?rev=921050&r1=921049&r2=921050&view=diff
==============================================================================
--- incubator/wookie/trunk/connector/php/WookieConnectorExceptions.php (original)
+++ incubator/wookie/trunk/connector/php/WookieConnectorExceptions.php Tue Mar  9 18:37:54 2010
@@ -1,4 +1,5 @@
 <?php
+
 /*
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.

Modified: incubator/wookie/trunk/connector/php/WookieConnectorService.php
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/connector/php/WookieConnectorService.php?rev=921050&r1=921049&r2=921050&view=diff
==============================================================================
--- incubator/wookie/trunk/connector/php/WookieConnectorService.php (original)
+++ incubator/wookie/trunk/connector/php/WookieConnectorService.php Tue Mar  9 18:37:54 2010
@@ -1,4 +1,5 @@
 <?php
+
 /*
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -18,168 +19,182 @@ require("WookieServerConnection.php");
 require("WidgetInstances.php");
 require("Widget.php");
 require("WidgetInstance.php");
+require("WidgetProperties.php");
 require("User.php");
 require("HTTP_Response.php");
 
 
 class WookieConnectorService {
-  private $conn;
-  public  $WidgetInstances;
-  private $user;
-  
-  function __construct($url, $apiKey, $sharedDataKey, $loginName, $screenName = null) {
-    $this->setConnection(new WookieServerConnection($url, $apiKey, $sharedDataKey));
-	$this->setWidgetInstancesHolder();
-	$this->setUser($loginName, $screenName);
-  }
-  
-  public function setConnection($newConn) {
-    $this->conn = $newConn;
-  }
-  
-  public function getConnection() {
-    return $this->conn;
-  }
-  
-  public function setWidgetInstancesHolder() {
-	$this->WidgetInstances = new WidgetInstances();
-  }
-  
-  public function setUser($loginName, $screenName = null) {
-	if($screenName == null) {
-		$screenName = $loginName;
-	}
-	$this->user = new User($loginName, $screenName);
-  }
-  
-  public function getUser() {
-	return $this->user;
-  }
-  
-  /* Do POST request
-  /* @return new HTTP_Response instance */
-  
-  private function do_post_request($url, $data, $optional_headers = null)
-  {
-	if(is_array($data)) {
-		 // convert variables array to string:
-		$_data = array();    
-		while(list($n,$v) = each($data)){
-			$_data[] = urlencode($n)."=".urlencode($v);
-		}    
-		$data = implode('&', $_data);
+	private $conn;
+	public  $WidgetInstances;
+	private $user;
+	private $httpStreamCtx;
+
+	function __construct($url, $apiKey, $sharedDataKey, $loginName, $screenName = null) {
+		$this->setConnection(new WookieServerConnection($url, $apiKey, $sharedDataKey));
+		$this->setWidgetInstancesHolder();
+		$this->setUser($loginName, $screenName);
+		$this->setHttpStreamContext(array('http' => array('timeout' => 15)));
+	}
+
+	public function setConnection($newConn) {
+		$this->conn = $newConn;
+	}
+
+	public function getConnection() {
+		return $this->conn;
+	}
+
+	public function setWidgetInstancesHolder() {
+		$this->WidgetInstances = new WidgetInstances();
+	}
+
+	public function setUser($loginName, $screenName = null) {
+		if($screenName == null) {
+			$screenName = $loginName;
+		}
+		$this->user = new User($loginName, $screenName);
+	}
+
+	public function getUser() {
+		return $this->user;
 	}
 	
-     $params = array('http' => array(
-                  'method' => 'POST',
-                  'content' => $data
-               ));
+	private function setHttpStreamContext($params = null) {
+		$this->httpStreamCtx = @stream_context_create($params);
+	}
 	
-     if ($optional_headers !== null) {
-        $params['http']['header'] = $optional_headers;
-     }
-     $ctx = @stream_context_create($params);
-    // $fp = @@file_get_contents($url, 'rb', false, $ctx);
-     $response = @file_get_contents($url, false, $ctx);
-
-     return new HTTP_Response($response, $http_response_header);
-  }
-  
-  
-  /**
-   * Get or create an instance of a widget.
-   * 
-   * @param widget
-   * @return the ID of the widget instance
-   * @throws IOException
-   * @throws SimalRepositoryException
-   */
-
-  public function getOrCreateInstance($Widget_or_GUID = null) {
-    try {
-		if(is_object($Widget_or_GUID)) {
-			$guid = $Widget_or_GUID->getIdentifier();
-		} else {
-			$guid = $Widget_or_GUID;
-		}
-		if($guid == '') {
-			throw new WookieConnectorException("No GUID nor Widget object");
-		}
-		$requestUrl = $this->getConnection()->getURL().'/widgetinstances';
-		$request.= '&api_key='.$this->getConnection()->getApiKey();
-		$request.= '&servicetype=';
-		$request.= '&userid='.$this->getUser()->getLoginName();
-		$request.= '&shareddatakey='.$this->getConnection()->getSharedDataKey();
-		$request.= '&widgetid='.$guid;
-		
-		if(!$this->checkURL($requestUrl)) {
-			throw new WookieConnectorException("URL for supplied Wookie Server is malformed: ".$requestUrl);
-		}	
-		$response = $this->do_post_request($requestUrl, $request);
+	private function getHttpStreamContext() {
+		return $this->httpStreamCtx;
+	}
+
+	/* Do HTTP request
+	 /* @return new HTTP_Response instance */
+
+	private function do_request($url, $data, $method = 'POST')
+	{
+		if(is_array($data)) {
+		 // convert variables array to string:
+			$_data = array();
+			while(list($n,$v) = each($data)){
+				$_data[] = urlencode($n)."=".urlencode($v);
+			}
+			$data = implode('&', $_data);
+		}
+
+		$params = array('http' => array(
+                  'method' => $method,
+                  'content' => $data,
+     			  'timeout' => 15
+		));
+		$this->setHttpStreamContext($params);
+		$response = @file_get_contents($url, false, $this->getHttpStreamContext());
 		
-		//if instance was created, perform second request to get widget instance
-		if($response->getStatusCode() == 201) {
-			$response = $this->do_post_request($requestUrl, $request);
-		}
-		$instance = $this->parseInstance($guid, $response->getResponseText());
-		$this->WidgetInstances->put($instance);
-		return $instance;
-	} catch (WookieConnectorException $e) {
-		echo $e->errorMessage();
+		//revert back to default value for other requests
+		$this->setHttpStreamContext(array('http' => array('timeout' => 15)));
+
+		return new HTTP_Response($response, $http_response_header);
 	}
+
+
+	/**
+	 * Get or create an instance of a widget.
+	 *
+	 * @param widget
+	 * @return the ID of the widget instance
+	 * @throws IOException
+	 * @throws SimalRepositoryException
+	 */
+
+	public function getOrCreateInstance($Widget_or_GUID = null) {
+		try {
+			if(is_object($Widget_or_GUID)) {
+				$guid = $Widget_or_GUID->getIdentifier();
+			} else {
+				$guid = $Widget_or_GUID;
+			}
+			if($guid == '') {
+				throw new WookieConnectorException("No GUID nor Widget object");
+			}
+			$requestUrl = $this->getConnection()->getURL().'widgetinstances';
+			$request.= '&api_key='.$this->getConnection()->getApiKey();
+			$request.= '&servicetype=';
+			$request.= '&userid='.$this->getUser()->getLoginName();
+			$request.= '&shareddatakey='.$this->getConnection()->getSharedDataKey();
+			$request.= '&widgetid='.$guid;
+
+			if(!$this->checkURL($requestUrl)) {
+				throw new WookieConnectorException("URL for supplied Wookie Server is malformed: ".$requestUrl);
+			}
+			$response = $this->do_request($requestUrl, $request);
+
+			//if instance was created, perform second request to get widget instance
+			if($response->getStatusCode() == 201) {
+				$response = $this->do_request($requestUrl, $request);
+			}
+			if($response->getStatusCode() == 401) { throw new WookieConnectorException("Invalid API key"); }
+
+			$instance = $this->parseInstance($guid, $response->getResponseText());
+			$this->WidgetInstances->put($instance);
+			return $instance;
+		} catch (WookieConnectorException $e) {
+			echo $e->errorMessage();
+		}
 		return false;
-  }
-  
-  
-    /**
-   * Record an instance of the given widget.
-   * 
-   * @param xml description of the instance as returned by the widget server when the widget was instantiated.
-   * @return new Widget instance
-   */
-  private function parseInstance($widgetGuid, $xml) {
-	$xmlWidgetData = @simplexml_load_string($xml);
-	if(is_object($xmlWidgetData)) {
-		$url = (string) $xmlWidgetData->url;
-		$title = (string) $xmlWidgetData->title;
-		$height = (string) $xmlWidgetData->height;
-		$width = (string) $xmlWidgetData->width;
-		$maximize = (string) $xmlWidgetData->maximize;
-		$instance = new WidgetInstance($url, $widgetGuid, $title, $height, $width, $maximize);
-		return $instance;
-	} 
-	return false;
-  }
-  
-   /**
-   * Check if URL is parsable.
-   * 
-   * @param url
-   * @return boolean
-   */
-  
-  private function checkURL($url) {
-	$UrlCheck = parse_url($url);
-	if($UrlCheck['scheme'] != 'http' || $UrlCheck['host'] == null || $UrlCheck['path'] == null) {
+	}
+
+
+	/**
+	 * Record an instance of the given widget.
+	 *
+	 * @param xml description of the instance as returned by the widget server when the widget was instantiated.
+	 * @return new Widget instance
+	 */
+	private function parseInstance($widgetGuid, $xml) {
+		$xmlWidgetData = @simplexml_load_string($xml);
+		if(is_object($xmlWidgetData)) {
+			//print_r($xmlWidgetData);
+			$url = (string) $xmlWidgetData->url;
+			$title = (string) $xmlWidgetData->title;
+			$height = (string) $xmlWidgetData->height;
+			$width = (string) $xmlWidgetData->width;
+			$maximize = (string) $xmlWidgetData->maximize;
+			$instance = new WidgetInstance($url, $widgetGuid, $title, $height, $width, $maximize);
+			return $instance;
+		}
 		return false;
 	}
-	return true;
-  }
-  
-   /**
-   * @refactor At time of writing the REST API for adding a participant is broken so we are
-   * using the non-REST approach. The code for REST API is commented out and should be used
-   * in the future.
-   */
-   
-  public function addParticipant($widgetInstance, $User)  {
-	$Url = $this->getConnection()->getURL().'/participants';
-	
-	try {
-		if(!is_object($widgetInstance)) throw new WookieWidgetInstanceException('No Widget instance');
-		if(!is_object($User)) throw new WookieConnectorException('No User object');
-		
-		$data = array(
+
+	/**
+	 * Check if URL is parsable.
+	 *
+	 * @param url
+	 * @return boolean
+	 */
+
+	private function checkURL($url) {
+		$UrlCheck = @parse_url($url);
+		if($UrlCheck['scheme'] != 'http' || $UrlCheck['host'] == null || $UrlCheck['path'] == null) {
+			return false;
+		}
+		return true;
+	}
+
+	/**
+	 * @refactor At time of writing the REST API for adding a participant is broken so we are
+	 * using the non-REST approach. The code for REST API is commented out and should be used
+	 * in the future.
+	 * @return boolean true - if added/exists - false if some error
+	 */
+
+	public function addParticipant($widgetInstance, $User)  {
+		$Url = $this->getConnection()->getURL().'participants';
+
+		try {
+			if(!is_object($widgetInstance)) throw new WookieWidgetInstanceException('No Widget instance');
+			if(!is_object($User)) throw new WookieConnectorException('No User object');
+
+			$data = array(
 				'api_key' => $this->getConnection()->getApiKey(),
 				'shareddatakey' => $this->getConnection()->getSharedDataKey(),
 				'userid' => $this->getUser()->getLoginName(),
@@ -187,111 +202,157 @@ class WookieConnectorService {
 				'participant_id' => $this->getUser()->getLoginName(),
 				'participant_display_name' => $User->getScreenName(),
 				'participant_thumbnail_url' => $User->getThumbnailUrl(),
-		);	
-		
-		if(!$this->checkURL($Url)) {
-			throw new WookieConnectorException("Participants rest URL is incorrect: ".$Url);
-		}	
-		
-		$response = $this->do_post_request($Url, $data);
-		$statusCode = $response->getStatusCode();
-		
-		switch($statusCode) {
+			);
+
+			if(!$this->checkURL($Url)) {
+				throw new WookieConnectorException("Participants rest URL is incorrect: ".$Url);
+			}
+
+			$response = $this->do_request($Url, $data);
+			$statusCode = $response->getStatusCode();
+
+			switch($statusCode) {
 		  case 200: //participant already exists
-			return true;
-			break;
+		  	return true;
+		  	break;
 		  case 201:
-			return true; //new participant added
-			break;
+		  	return true; //new participant added
+		  	break;
 		  case ($statusCode > 201):
-			throw new WookieConnectorException($response->headerToString().'<br />'.$response->getResponseText());
-			break;
-		  default:
-			return false;
+		  	throw new WookieConnectorException($response->headerToString().'<br />'.$response->getResponseText());
+		  	break;
+			}
+
+		} catch (WookieConnectorException $e) {
+			echo $e->errorMessage();
+		} catch (WookieWidgetInstanceException $e) {
+			echo '<b>function.addParticipant:</b> '.$e->getMessage().'<br />';
 		}
+	return false;
+	}
+
+	/**
+	 * @refactor Delete participant
+	 * @param WidgetInstance $widgetInstance
+	 * @param UserInstance $User
+	 * @return boolean true - if deleted, false - if not found
+	 */
+
+	public function deleteParticipant($widgetInstance, $User)  {
+		$Url = $this->getConnection()->getURL().'participants';
 
-	} catch (WookieConnectorException $e) {
-		echo $e->errorMessage();
-	} catch (WookieWidgetInstanceException $e) {
-		echo '<b>function.addParticipant:</b> '.$e->getMessage().'<br />';
-	}
-    
-  }
-  
-   /**
-   * Get the array of users for a widget instance
-   * @param instance
-   * @return an array of users
-   * @throws WookieConnectorException
-   */
-  public function getUsers($widgetInstance) {
-	$Url = $this->getConnection()->getURL().'/participants';
-	$Users = array();
 		try {
 			if(!is_object($widgetInstance)) throw new WookieWidgetInstanceException('No Widget instance');
+			if(!is_object($User)) throw new WookieConnectorException('No User object');
+
 			$request = '?api_key='.$this->getConnection()->getApiKey();
 			$request .= '&shareddatakey='.$this->getConnection()->getSharedDataKey();
 			$request .= '&userid='.$this->getUser()->getLoginName();
 			$request .= '&widgetid='.$widgetInstance->getIdentifier();
-			
+			$request .= '&participant_id='.$this->getUser()->getLoginName();
+
+
 			if(!$this->checkURL($Url)) {
 				throw new WookieConnectorException("Participants rest URL is incorrect: ".$Url);
 			}
-			
-			$response = new HTTP_Response(@file_get_contents($Url.$request), $http_response_header);
+
+			$response = $this->do_request($Url.$request, false, 'DELETE');
+			$statusCode = $response->getStatusCode();
+
+		switch($statusCode) {
+		  case 200: //participant deleted
+		  	return true;
+		  	break;
+		  case 404:
+		  	return false; //participant not found
+		  	break;
+		  case ($statusCode > 201):
+		  	throw new WookieConnectorException($response->headerToString().'<br />'.$response->getResponseText());
+		  	break;
+		}
+
+		} catch (WookieConnectorException $e) {
+			echo $e->errorMessage();
+		} catch (WookieWidgetInstanceException $e) {
+			echo '<b>function.deleteParticipant:</b> '.$e->getMessage().'<br />';
+		}
+		return false;
+	}
+
+	/**
+	 * Get the array of users for a widget instance
+	 * @param instance
+	 * @return an array of users
+	 * @throws WookieConnectorException
+	 */
+	public function getUsers($widgetInstance) {
+		$Url = $this->getConnection()->getURL().'participants';
+		$Users = array();
+		try {
+			if(!is_object($widgetInstance)) throw new WookieWidgetInstanceException('No Widget instance');
+			$request = '?api_key='.$this->getConnection()->getApiKey();
+			$request .= '&shareddatakey='.$this->getConnection()->getSharedDataKey();
+			$request .= '&userid='.$this->getUser()->getLoginName();
+			$request .= '&widgetid='.$widgetInstance->getIdentifier();
+
+			if(!$this->checkURL($Url)) {
+				throw new WookieConnectorException("Participants rest URL is incorrect: ".$Url);
+			}
+
+			$response = new HTTP_Response(@file_get_contents($Url.$request, false, $this->getHttpStreamContext()), $http_response_header);
 			if($response->getStatusCode() > 200) throw new WookieConnectorException($response->headerToString().'<br />'.$response->getResponseText());
-			
+
 			$xmlObj = @simplexml_load_string($response->getResponseText());
-			
+
 			if(is_object($xmlObj)) {
 				foreach($xmlObj->children() as $participant) {
-				  $participantAttr = $participant->attributes();
-				  
-				  $id = (string) $participantAttr->id;
-				  $name = (string) $participantAttr->display_name;
-				  $thumbnail_url = (string) $participantAttr->thumbnail_url;
-				  
-				  $newUser = new User($id, $name, $thumbnail_url);
-				  array_push($Users, $newUser);
+					$participantAttr = $participant->attributes();
+
+					$id = (string) $participantAttr->id;
+					$name = (string) $participantAttr->display_name;
+					$thumbnail_url = (string) $participantAttr->thumbnail_url;
+
+					$newUser = new User($id, $name, $thumbnail_url);
+					array_push($Users, $newUser);
 				}
 			} else {
 				throw new WookieConnectorException('Problem getting participants');
 			}
-			
-			return $Users;
+
 		} catch (WookieWidgetInstanceException $e) {
 			echo '<b>function.getUsers:</b> '.$e->getMessage().'<br />';
 		} catch (WookieConnectorException $e) {
 			echo $e->errorMessage();
 		}
-  }
+		return $Users;
+	}
 
- 
 
-  /**
-   * Get a set of all the available widgets in the server. If there is an error
-   * communicating with the server return an empty set, or the set received so
-   * far in order to allow the application to proceed. The application should
-   * display an appropriate message in this case.
-   * 
-   * @return array of available widgets
-   * @throws WookieConnectorException
-   */
-   
-  public function getAvailableWidgets() {
-	$widgets = array();
-	try {
-		$request = $this->getConnection()->getURL().'/widgets?all=true';
-		
-		if(!$this->checkURL($request)) {
-			throw new WookieConnectorException("URL for Wookie is malformed");
-		}
-		
-		$response = new HTTP_Response(@file_get_contents($request), $http_response_header);
-		$xmlObj = @simplexml_load_string($response->getResponseText());
-		
-		if(is_object($xmlObj)) {
-			foreach($xmlObj->children() as $widget) {
+
+	/**
+	 * Get a set of all the available widgets in the server. If there is an error
+	 * communicating with the server return an empty set, or the set received so
+	 * far in order to allow the application to proceed. The application should
+	 * display an appropriate message in this case.
+	 *
+	 * @return array of available widgets
+	 * @throws WookieConnectorException
+	 */
+
+	public function getAvailableWidgets() {
+		$widgets = array();
+		try {
+			$request = $this->getConnection()->getURL().'widgets?all=true';
+
+			if(!$this->checkURL($request)) {
+				throw new WookieConnectorException("URL for Wookie is malformed");
+			}
+
+			$response = new HTTP_Response(@file_get_contents($request, false, $this->getHttpStreamContext()), $http_response_header);
+			$xmlObj = @simplexml_load_string($response->getResponseText());
+
+			if(is_object($xmlObj)) {
+				foreach($xmlObj->children() as $widget) {
 				 $id = (string) $widget->attributes()->identifier;
 				 $title = (string) $widget->title;
 				 $description = (string) $widget->description;
@@ -299,18 +360,152 @@ class WookieConnectorService {
 				 if($iconURL == '') {
 						$iconURL = (string) 'http://www.oss-watch.ac.uk/images/logo2.gif';
 					}
-				$Widget = new Widget($id, $title, $description, $iconURL);
-				$widgets[$id] = $Widget;
-			}
-		} else {
+					$Widget = new Widget($id, $title, $description, $iconURL);
+					$widgets[$id] = $Widget;
+				}
+			} else {
 				throw new WookieConnectorException('Problem getting available widgets');
 			}
-			
+
 	 } catch(WookieConnectorException $e) {
 			echo $e->errorMessage();
 		}
-    return $widgets;
-  }
-    
+		return $widgets;
+	}
+
+	/**
+	 * Set property for Widget instance
+	 *
+	 * @return new Property instance
+	 * @throws WookieConnectorException, WookieWidgetInstanceException
+	 */
+
+	public function setProperty($widgetInstance = null, $propertyInstance = null) {
+		$Url = $this->getConnection()->getURL().'properties';
+
+		try {
+			if(!is_object($widgetInstance)) throw new WookieWidgetInstanceException('No Widget instance');
+			if(!is_object($propertyInstance)) throw new WookieConnectorException('No properties instance');
+
+			$data = array(
+				'api_key' => $this->getConnection()->getApiKey(),
+				'shareddatakey' => $this->getConnection()->getSharedDataKey(),
+				'userid' => $this->getUser()->getLoginName(),
+				'widgetid' => $widgetInstance->getIdentifier(),
+				'propertyname' => $propertyInstance->getName(),
+				'propertyvalue' => $propertyInstance->getValue(),
+				'is_public' => $propertyInstance->isPublic(),
+			);
+
+			if(!$this->checkURL($Url)) {
+				throw new WookieConnectorException("Properties rest URL is incorrect: ".$Url);
+			}
+
+			$response = $this->do_request($Url, $data);
+			$statusCode = $response->getStatusCode();
+
+		switch($statusCode) {
+		  case 201:
+		  	return $propertyInstance; //new property added, let's return initial Property instance
+		  	break;
+		  case ($statusCode != 201):
+		  	throw new WookieConnectorException($response->headerToString().'<br />'.$response->getResponseText());
+		  	break;
+			}
+
+		} catch (WookieConnectorException $e) {
+			echo $e->errorMessage();
+		} catch (WookieWidgetInstanceException $e) {
+			echo '<b>function.setProperty:</b> '.$e->getMessage().'<br />';
+		}
+		return false;
+	}
+
+	/**
+	 * Get property for Widget instance
+	 *
+	 * @return new Property(), if request fails, return false;
+	 * @throws WookieConnectorException, WookieWidgetInstanceException
+	 */
+
+	public function getProperty($widgetInstance = null, $propertyInstance = null) {
+		$Url = $this->getConnection()->getURL().'properties';
+
+		try {
+			if(!is_object($widgetInstance)) throw new WookieWidgetInstanceException('No Widget instance');
+			if(!is_object($propertyInstance)) throw new WookieConnectorException('No properties instance');
+
+			$data = array(
+				'api_key' => $this->getConnection()->getApiKey(),
+				'shareddatakey' => $this->getConnection()->getSharedDataKey(),
+				'userid' => $this->getUser()->getLoginName(),
+				'widgetid' => $widgetInstance->getIdentifier(),
+				'propertyname' => $propertyInstance->getName()
+			);
+			$request = @http_build_query($data);
+
+			if(!$this->checkURL($Url)) {
+				throw new WookieConnectorException("Properties rest URL is incorrect: ".$Url);
+			}
+
+			$response = new HTTP_Response(@file_get_contents($Url.'?'.$request, false, $this->getHttpStreamContext()), $http_response_header);
+			$statusCode = $response->getStatusCode();
+			if($statusCode != 200) {
+				throw new WookieConnectorException($response->headerToString().'<br />'.$response->getResponseText());
+			}
+			return new Property($propertyInstance->getName(), $response->getResponseText());
+
+		} catch (WookieConnectorException $e) {
+			echo $e->errorMessage();
+		} catch (WookieWidgetInstanceException $e) {
+			echo '<b>function.getProperty:</b> '.$e->getMessage().'<br />';
+		}
+		return false;
+	}
+
+	/**
+	 * Delete property for Widget instance
+	 *
+	 * @access Public
+	 * @return boolean true/false -- true if deleted, false if doesnt exist
+	 * @throws WookieConnectorException, WookieWidgetInstanceException
+	 */
+
+	public function deleteProperty($widgetInstance = null, $propertyInstance = null) {
+		$Url = $this->getConnection()->getURL().'properties';
+
+		try {
+			if(!is_object($widgetInstance)) throw new WookieWidgetInstanceException('No Widget instance');
+			if(!is_object($propertyInstance)) throw new WookieConnectorException('No properties instance');
+
+			$request = '?api_key='.$this->getConnection()->getApiKey();
+			$request .= '&shareddatakey='.$this->getConnection()->getSharedDataKey();
+			$request .= '&userid='.$this->getUser()->getLoginName();
+			$request .= '&widgetid='.$widgetInstance->getIdentifier();
+			$request .= '&propertyname='.$propertyInstance->getName();
+
+			if(!$this->checkURL($Url)) {
+				throw new WookieConnectorException("Properties rest URL is incorrect: ".$Url);
+			}
+
+			$response = $this->do_request($Url.$request, false, 'DELETE');
+			$statusCode = $response->getStatusCode();
+			
+			if($statusCode != 200 && $statusCode != 404) {
+				throw new WookieConnectorException($response->headerToString().'<br />'.$response->getResponseText());
+			}
+			if($statusCode == 404) {
+				return false;
+			}
+			return true;
+
+		} catch (WookieConnectorException $e) {
+			echo $e->errorMessage();
+		} catch (WookieWidgetInstanceException $e) {
+			echo '<b>function.getProperty:</b> '.$e->getMessage().'<br />';
+		}
+		return false;
+	}
+
 }
 ?>
\ No newline at end of file

Modified: incubator/wookie/trunk/connector/php/WookieServerConnection.php
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/connector/php/WookieServerConnection.php?rev=921050&r1=921049&r2=921050&view=diff
==============================================================================
--- incubator/wookie/trunk/connector/php/WookieServerConnection.php (original)
+++ incubator/wookie/trunk/connector/php/WookieServerConnection.php Tue Mar  9 18:37:54 2010
@@ -1,4 +1,5 @@
 <?php
+
 /*
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -17,89 +18,112 @@
  * A connection to a Wookie server. This maintains the necessary data for
  * connecting to the server and provides utility methods for making common calls
  * via the Wookie REST API.
- * 
+ *
  */
 
- 
+
 class WookieServerConnection {
-  private $url;
-  private $apiKey = "TEST";
-  private $sharedDataKey = "mysharedkey";
-
-  /**
-   * Create a connection to a Wookie server at a given URL.
-   * @param url the URL of the wookie server
-   * @param apiKey the API key for the server
-   * @param sharedDataKey the sharedDataKey for the server connection 
-   * 
-   * @throws WookieConnectorException if there is a problem setting up this connection.
-   */
-  function __construct($url, $apiKey, $sharedDataKey) {
-    $this->setURL($url);
-    $this->setApiKey($apiKey);
-    $this->setSharedDataKey($sharedDataKey);
-  }
-
-  /**
-   * Get the URL of the wookie server.
-   * 
-   * @return
-   * @throws WookieConnectionException
-   */
-  public function getURL() {
-    return $this->url;
-  }
-  
-  /**
-   * Set the URL of the wookie server.
-   * 
-   * @throws WookieConnectionException
-   */
-  public function setURL($newUrl) {
-    $this->url = $newUrl;
-  }
-  
-  /**
-   * Get the API key for this server.
-   * 
-   * @return
-   */
-  public function getApiKey() {
-    return $this->apiKey;
-  }
-
-  /**
-   * Set the API key for this server.
-   * 
-   */
-  public function setApiKey($newApiKey) {
-    $this->apiKey = $newApiKey;
-  }
-
-  /**
-   * Get the shared data key for this server.
-   * 
-   * @return
-   */
-  public function getSharedDataKey() {
-    return $this->sharedDataKey;
-  }
-
-  /**
-   * Set the shared data key for this server.
-   *
-   */
-  public function setSharedDataKey($newKey) {
-    $this->sharedDataKey = $newKey;
-  }
-  
-  public function toString() {
-    $str = "Wookie Server Connection - ";
-    $str .= "URL: ".$this->getURL();
-    $str .= "API Key: ".$this->getApiKey();
-    $str .= "Shared Data Key: ".$this->getSharedDataKey();
-    return $str;
-  }
+	private $url;
+	private $apiKey = "TEST";
+	private $sharedDataKey = "mysharedkey";
+
+	/**
+	 * Create a connection to a Wookie server at a given URL.
+	 * @param url the URL of the wookie server
+	 * @param apiKey the API key for the server
+	 * @param sharedDataKey the sharedDataKey for the server connection
+	 *
+	 * @throws WookieConnectorException if there is a problem setting up this connection.
+	 */
+	function __construct($url, $apiKey, $sharedDataKey) {
+		$this->setURL($url);
+		$this->setApiKey($apiKey);
+		$this->setSharedDataKey($sharedDataKey);
+	}
+
+	/**
+	 * Get the URL of the wookie server.
+	 *
+	 * @return
+	 * @throws WookieConnectionException
+	 */
+	public function getURL() {
+		return $this->url;
+	}
+
+	/**
+	 * Set the URL of the wookie server.
+	 *
+	 * @throws WookieConnectionException
+	 */
+	public function setURL($newUrl) {
+		//parse url, if host == localhost, replace it with 127.0.0.1
+		// Bug causes Apache crash, while using file_get_contents function
+		// with 'localhost'
+		$urlParts = @parse_url($newUrl);
+		if($urlParts['host'] == 'localhost') {
+			$newUrl = str_replace('localhost', '127.0.0.1', $newUrl);
+		}
+		$this->url = strrchr($newUrl, '/') != '/'?$newUrl.'/':$newUrl;
+	}
+
+	/**
+	 * Get the API key for this server.
+	 *
+	 * @return
+	 */
+	public function getApiKey() {
+		return $this->apiKey;
+	}
+
+	/**
+	 * Set the API key for this server.
+	 *
+	 */
+	public function setApiKey($newApiKey) {
+		$this->apiKey = (string) $newApiKey;
+	}
+
+	/**
+	 * Get the shared data key for this server.
+	 *
+	 * @return
+	 */
+	public function getSharedDataKey() {
+		return $this->sharedDataKey;
+	}
+
+	/**
+	 * Set the shared data key for this server.
+	 *
+	 */
+	public function setSharedDataKey($newKey) {
+		$this->sharedDataKey = $newKey;
+	}
+
+	public function toString() {
+		$str = "Wookie Server Connection - ";
+		$str .= "URL: ".$this->getURL();
+		$str .= "API Key: ".$this->getApiKey();
+		$str .= "Shared Data Key: ".$this->getSharedDataKey();
+		return $str;
+	}
+
+	/* Test Wookie server connection
+	 *  @return boolean - true if success, otherwise false
+	 */
+
+	public function Test() {
+		$ctx = @stream_context_create(array('http' => array('timeout' => 15)));
+		$response = new HTTP_Response(@file_get_contents($this->getURL().'advertise?all=true', false, $ctx), $http_response_header);
+		if($response->getStatusCode() == 200) {
+			$xmlDoc = @simplexml_load_string($response->getResponseText());
+			if(is_object($xmlDoc) && $xmlDoc->getName() == 'widgets') {
+				return true;
+			}
+		}
+		return false;
+	}
 }