You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by ch...@apache.org on 2008/06/25 16:30:14 UTC

svn commit: r671560 - /incubator/shindig/trunk/php/src/socialrest/http/RestRequestItem.php

Author: chabotc
Date: Wed Jun 25 07:30:14 2008
New Revision: 671560

URL: http://svn.apache.org/viewvc?rev=671560&view=rev
Log:
Forgot to svn add RequestItem, woops

Added:
    incubator/shindig/trunk/php/src/socialrest/http/RestRequestItem.php

Added: incubator/shindig/trunk/php/src/socialrest/http/RestRequestItem.php
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/socialrest/http/RestRequestItem.php?rev=671560&view=auto
==============================================================================
--- incubator/shindig/trunk/php/src/socialrest/http/RestRequestItem.php (added)
+++ incubator/shindig/trunk/php/src/socialrest/http/RestRequestItem.php Wed Jun 25 07:30:14 2008
@@ -0,0 +1,222 @@
+<?php
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.
+ */
+
+/**
+ * Represents the request items that come from the restful request.
+ */
+class RestRequestItem {
+	// Common OpenSocial RESTful fields
+	public static $APP_ID = "appId";
+	public static $USER_ID = "userId";
+	public static $GROUP_ID = "groupId";
+	public static $START_INDEX = "startIndex";
+	public static $COUNT = "count";
+	public static $ORDER_BY = "orderBy";
+	public static $FILTER_BY = "filterBy";
+	public static $FIELDS = "fields";
+	
+	// OpenSocial defaults
+	public static $DEFAULT_START_INDEX = 0;
+	public static $DEFAULT_COUNT = 20;
+	
+	public static $APP_SUBSTITUTION_TOKEN = "@app";
+	
+	private $url;
+	private $method;
+	private $parameters = array();
+	private $token;
+	private $postData;
+
+	public function createRequestItemWithRequest($request, $token)
+	{
+		$this->url = $request->url;
+		$this->parameters = $this->createParameterMap($request->url);
+		$this->token = $token;
+		$this->method = $request->method;
+		if (isset($request->postData)) {
+			$this->postData = $request->postData;
+		}
+	}
+
+	public function createRequestItem($url, $token, $method, $params, $postData)
+	{
+		$this->url = $url;
+		$this->parameters = $params;
+		$this->token = $token;
+		$this->method = $method;
+		$this->postData = $postData;
+	}
+
+	private function createParameterMap($uri)
+	{
+		// get the rest params
+		if ($uri == null) {
+			$uri = substr($_SERVER["REQUEST_URI"], strlen(Config::get('web_prefix') . '/social/rest') + 1);
+		} else {
+			$uri = substr($uri, 1);
+		}
+		if (($pos = strpos($uri, '?')) !== false) {
+			$uri = substr($uri, 0, $pos);
+		}
+		return explode('/', $uri);
+	}
+
+	/*
+	 * Takes any url params out of the url and puts them into the param map.
+	 * Usually the servlet request code does this for us but the batch request calls have to do it
+	 * by hand.
+	 */
+	private function putUrlParamsIntoParameters()
+	{
+		$fullUrl = $this->url;
+		$queryParamIndex = strpos($fullUrl, "?");
+		if ($queryParamIndex > 0) {
+			$this->url = substr($fullUrl, 0, $queryParamIndex);
+			$queryParams = substr($fullUrl, $queryParamIndex + 1);
+			$params = explode("&", $queryParams);
+			foreach ($params as $param) {
+				$paramPieces = explode("=", $param, 2);
+				$this->parameters[$paramPieces[0]] = count($paramPieces) == 2 ? $paramPieces[1] : "";
+			}
+		}
+	}
+
+	/**
+	 * This could definitely be cleaner..
+	 * TODO: Come up with a cleaner way to handle all of this code.
+	 *
+	 * @param urlTemplate The template the url follows
+	 */
+	public function parseUrlWithTemplate($urlTemplate)
+	{
+		$this->putUrlParamsIntoParameters();
+		$actualUrl = explode("/", $this->url);
+		$expectedUrl = explode("/", $urlTemplate);
+		for ($i = 0; $i < count($actualUrl); $i ++) {
+			$actualPart = $actualUrl[$i];
+			$expectedPart = $expectedUrl[$i];
+			if (strpos($expectedPart, "{") !== false) {
+				$this->parameters[substr($expectedPart, 1, strlen($expectedPart) - 2)] = $actualPart;
+			}
+		}
+	}
+
+	public function getAppId()
+	{
+		$appId = $this->parameters[self::$APP_ID];
+		if ($appId != null && $appId == self::$APP_SUBSTITUTION_TOKEN) {
+			return $this->token->getAppId();
+		} else {
+			return $appId;
+		}
+	}
+
+	public function getUser()
+	{
+		return UserId::fromJson($this->parameters[self::$USER_ID]);
+	}
+
+	public function getGroup()
+	{
+		return GroupId::fromJson($this->parameters[self::$GROUP_ID]);
+	}
+
+	public function getStartIndex()
+	{
+		$startIndex = $this->parameters[self::$START_INDEX];
+		return $startIndex == null ? self::$DEFAULT_START_INDEX : $startIndex;
+	}
+
+	public function getCount()
+	{
+		$count = $this->parameters[self::$COUNT];
+		return $count == null ? self::$DEFAULT_COUNT : $count;
+	}
+
+	public function getOrderBy()
+	{
+		$orderBy = $this->parameters[self::$ORDER_BY];
+		return $orderBy == null ? PeopleService::$sortOrder : $orderBy;
+	}
+
+	public function getFilterBy()
+	{
+		$filterBy = $this->parameters[self::$FILTER_BY];
+		return $filterBy == null ? PeopleService::$filterType : $filterBy;
+	}
+
+	public function getFields()
+	{
+		return $this->getFieldsWithDefaultValue(array());
+	}
+
+	public function getFieldsWithDefaultValue(Array $defaultValue)
+	{
+		$paramValue = $this->parameters[self::$FIELDS];
+		if ($paramValue != null) {
+			return explode(',', $paramValue);
+		}
+		return $defaultValue;
+	}
+
+	public function getPostData()
+	{
+		return $this->postData;
+	}
+
+	public function getUrl()
+	{
+		return $this->url;
+	}
+
+	public function setUrl($url)
+	{
+		$this->url = $url;
+	}
+
+	public function getMethod()
+	{
+		return $this->method;
+	}
+
+	public function setMethod($method)
+	{
+		$this->method = $method;
+	}
+
+	public function getParameters()
+	{
+		return $this->parameters;
+	}
+
+	public function setParameters($parameters)
+	{
+		$this->parameters = $parameters;
+	}
+
+	public function getToken()
+	{
+		return $this->token;
+	}
+
+	public function setToken($token)
+	{
+		$this->token = $token;
+	}
+}