Open Journal Systems  3.3.0
Operation.php
1 <?php
2 
4 
6 
10 class Operation implements OperationInterface
11 {
13  const DEFAULT_COMMAND_CLASS = 'Guzzle\\Service\\Command\\OperationCommand';
14 
16  protected static $properties = array(
17  'name' => true, 'httpMethod' => true, 'uri' => true, 'class' => true, 'responseClass' => true,
18  'responseType' => true, 'responseNotes' => true, 'notes' => true, 'summary' => true, 'documentationUrl' => true,
19  'deprecated' => true, 'data' => true, 'parameters' => true, 'additionalParameters' => true,
20  'errorResponses' => true
21  );
22 
24  protected $parameters = array();
25 
28 
30  protected $name;
31 
33  protected $httpMethod;
34 
36  protected $summary;
37 
39  protected $notes;
40 
42  protected $documentationUrl;
43 
45  protected $uri;
46 
48  protected $class;
49 
51  protected $responseClass;
52 
54  protected $responseType;
55 
57  protected $responseNotes;
58 
60  protected $deprecated;
61 
63  protected $errorResponses;
64 
66  protected $description;
67 
69  protected $data;
70 
99  public function __construct(array $config = array(), ServiceDescriptionInterface $description = null)
100  {
101  $this->description = $description;
102 
103  // Get the intersection of the available properties and properties set on the operation
104  foreach (array_intersect_key($config, self::$properties) as $key => $value) {
105  $this->{$key} = $value;
106  }
107 
108  $this->class = $this->class ?: self::DEFAULT_COMMAND_CLASS;
109  $this->deprecated = (bool) $this->deprecated;
110  $this->errorResponses = $this->errorResponses ?: array();
111  $this->data = $this->data ?: array();
112 
113  if (!$this->responseClass) {
114  $this->responseClass = 'array';
115  $this->responseType = 'primitive';
116  } elseif ($this->responseType) {
117  // Set the response type to perform validation
118  $this->setResponseType($this->responseType);
119  } else {
120  // A response class was set and no response type was set, so guess what the type is
121  $this->inferResponseType();
122  }
123 
124  // Parameters need special handling when adding
125  if ($this->parameters) {
126  foreach ($this->parameters as $name => $param) {
127  if ($param instanceof Parameter) {
128  $param->setName($name)->setParent($this);
129  } elseif (is_array($param)) {
130  $param['name'] = $name;
131  $this->addParam(new Parameter($param, $this->description));
132  }
133  }
134  }
135 
136  if ($this->additionalParameters) {
137  if ($this->additionalParameters instanceof Parameter) {
138  $this->additionalParameters->setParent($this);
139  } elseif (is_array($this->additionalParameters)) {
140  $this->setadditionalParameters(new Parameter($this->additionalParameters, $this->description));
141  }
142  }
143  }
144 
145  public function toArray()
146  {
147  $result = array();
148  // Grab valid properties and filter out values that weren't set
149  foreach (array_keys(self::$properties) as $check) {
150  if ($value = $this->{$check}) {
151  $result[$check] = $value;
152  }
153  }
154  // Remove the name property
155  unset($result['name']);
156  // Parameters need to be converted to arrays
157  $result['parameters'] = array();
158  foreach ($this->parameters as $key => $param) {
159  $result['parameters'][$key] = $param->toArray();
160  }
161  // Additional parameters need to be cast to an array
162  if ($this->additionalParameters instanceof Parameter) {
163  $result['additionalParameters'] = $this->additionalParameters->toArray();
164  }
165 
166  return $result;
167  }
168 
169  public function getServiceDescription()
170  {
171  return $this->description;
172  }
173 
174  public function setServiceDescription(ServiceDescriptionInterface $description)
175  {
176  $this->description = $description;
177 
178  return $this;
179  }
180 
181  public function getParams()
182  {
183  return $this->parameters;
184  }
185 
186  public function getParamNames()
187  {
188  return array_keys($this->parameters);
189  }
190 
191  public function hasParam($name)
192  {
193  return isset($this->parameters[$name]);
194  }
195 
196  public function getParam($param)
197  {
198  return isset($this->parameters[$param]) ? $this->parameters[$param] : null;
199  }
200 
208  public function addParam(Parameter $param)
209  {
210  $this->parameters[$param->getName()] = $param;
211  $param->setParent($this);
212 
213  return $this;
214  }
215 
223  public function removeParam($name)
224  {
225  unset($this->parameters[$name]);
226 
227  return $this;
228  }
229 
230  public function getHttpMethod()
231  {
232  return $this->httpMethod;
233  }
234 
242  public function setHttpMethod($httpMethod)
243  {
244  $this->httpMethod = $httpMethod;
245 
246  return $this;
247  }
248 
249  public function getClass()
250  {
251  return $this->class;
252  }
253 
261  public function setClass($className)
262  {
263  $this->class = $className;
264 
265  return $this;
266  }
267 
268  public function getName()
269  {
270  return $this->name;
271  }
272 
280  public function setName($name)
281  {
282  $this->name = $name;
283 
284  return $this;
285  }
286 
287  public function getSummary()
288  {
289  return $this->summary;
290  }
291 
299  public function setSummary($summary)
300  {
301  $this->summary = $summary;
302 
303  return $this;
304  }
305 
306  public function getNotes()
307  {
308  return $this->notes;
309  }
310 
318  public function setNotes($notes)
319  {
320  $this->notes = $notes;
321 
322  return $this;
323  }
324 
325  public function getDocumentationUrl()
326  {
328  }
329 
337  public function setDocumentationUrl($docUrl)
338  {
339  $this->documentationUrl = $docUrl;
340 
341  return $this;
342  }
343 
344  public function getResponseClass()
345  {
346  return $this->responseClass;
347  }
348 
357  public function setResponseClass($responseClass)
358  {
359  $this->responseClass = $responseClass;
360  $this->inferResponseType();
361 
362  return $this;
363  }
364 
365  public function getResponseType()
366  {
367  return $this->responseType;
368  }
369 
378  public function setResponseType($responseType)
379  {
380  static $types = array(
381  self::TYPE_PRIMITIVE => true,
382  self::TYPE_CLASS => true,
383  self::TYPE_MODEL => true,
384  self::TYPE_DOCUMENTATION => true
385  );
386  if (!isset($types[$responseType])) {
387  throw new InvalidArgumentException('responseType must be one of ' . implode(', ', array_keys($types)));
388  }
389 
390  $this->responseType = $responseType;
391 
392  return $this;
393  }
394 
395  public function getResponseNotes()
396  {
397  return $this->responseNotes;
398  }
399 
407  public function setResponseNotes($notes)
408  {
409  $this->responseNotes = $notes;
410 
411  return $this;
412  }
413 
414  public function getDeprecated()
415  {
416  return $this->deprecated;
417  }
418 
426  public function setDeprecated($isDeprecated)
427  {
428  $this->deprecated = $isDeprecated;
429 
430  return $this;
431  }
432 
433  public function getUri()
434  {
435  return $this->uri;
436  }
437 
445  public function setUri($uri)
446  {
447  $this->uri = $uri;
448 
449  return $this;
450  }
451 
452  public function getErrorResponses()
453  {
454  return $this->errorResponses;
455  }
456 
466  public function addErrorResponse($code, $reason, $class)
467  {
468  $this->errorResponses[] = array('code' => $code, 'reason' => $reason, 'class' => $class);
469 
470  return $this;
471  }
472 
480  public function setErrorResponses(array $errorResponses)
481  {
482  $this->errorResponses = $errorResponses;
483 
484  return $this;
485  }
486 
487  public function getData($name)
488  {
489  return isset($this->data[$name]) ? $this->data[$name] : null;
490  }
491 
500  public function setData($name, $value)
501  {
502  $this->data[$name] = $value;
503 
504  return $this;
505  }
506 
512  public function getAdditionalParameters()
513  {
515  }
516 
524  public function setAdditionalParameters($parameter)
525  {
526  if ($this->additionalParameters = $parameter) {
527  $this->additionalParameters->setParent($this);
528  }
529 
530  return $this;
531  }
532 
536  protected function inferResponseType()
537  {
538  static $primitives = array('array' => 1, 'boolean' => 1, 'string' => 1, 'integer' => 1, '' => 1);
539  if (isset($primitives[$this->responseClass])) {
540  $this->responseType = self::TYPE_PRIMITIVE;
541  } elseif ($this->description && $this->description->hasModel($this->responseClass)) {
542  $this->responseType = self::TYPE_MODEL;
543  } else {
544  $this->responseType = self::TYPE_CLASS;
545  }
546  }
547 }
Guzzle\Service\Description\Operation\setDeprecated
setDeprecated($isDeprecated)
Definition: Operation.php:474
Guzzle\Service\Description\Operation\getData
getData($name)
Definition: Operation.php:535
Guzzle\Service\Description\Operation\setResponseNotes
setResponseNotes($notes)
Definition: Operation.php:455
Guzzle\Service\Description\Operation\setDocumentationUrl
setDocumentationUrl($docUrl)
Definition: Operation.php:385
Guzzle\Service\Description\Operation\$summary
$summary
Definition: Operation.php:51
Guzzle\Service\Description\Operation\$parameters
$parameters
Definition: Operation.php:27
Guzzle\Service\Description\Operation\setAdditionalParameters
setAdditionalParameters($parameter)
Definition: Operation.php:572
Guzzle\Service\Description\Operation\addParam
addParam(Parameter $param)
Definition: Operation.php:256
Guzzle\Service\Description\Operation\getResponseClass
getResponseClass()
Definition: Operation.php:392
Guzzle\Service\Description\Operation
Definition: Operation.php:10
Guzzle\Service\Description\Operation\getParams
getParams()
Definition: Operation.php:229
Guzzle\Service\Description\Operation\$notes
$notes
Definition: Operation.php:57
Guzzle\Service\Description\Parameter
Definition: Parameter.php:10
Guzzle\Service\Description\OperationInterface\TYPE_MODEL
const TYPE_MODEL
Definition: OperationInterface.php:15
Guzzle\Service\Description\Operation\setData
setData($name, $value)
Definition: Operation.php:548
Guzzle\Service\Description\OperationInterface
Definition: OperationInterface.php:10
Guzzle\Service\Description\Operation\$description
$description
Definition: Operation.php:111
Guzzle\Service\Description\Operation\getClass
getClass()
Definition: Operation.php:297
Guzzle\Service\Description\Operation\$errorResponses
$errorResponses
Definition: Operation.php:105
Guzzle\Service\Description\ServiceDescriptionInterface
Definition: ServiceDescriptionInterface.php:8
Guzzle\Service\Description\Operation\$responseNotes
$responseNotes
Definition: Operation.php:93
Guzzle\Service\Description\Operation\getResponseNotes
getResponseNotes()
Definition: Operation.php:443
Guzzle\Service\Description\Operation\$responseClass
$responseClass
Definition: Operation.php:81
Guzzle\Service\Description\Operation\setResponseClass
setResponseClass($responseClass)
Definition: Operation.php:405
Guzzle\Service\Description
Definition: Operation.php:3
Guzzle\Common\Exception\InvalidArgumentException
Definition: lib/vendor/guzzle/guzzle/src/Guzzle/Common/Exception/InvalidArgumentException.php:5
Guzzle\Service\Description\Operation\$deprecated
$deprecated
Definition: Operation.php:99
Guzzle\Service\Description\Operation\getDocumentationUrl
getDocumentationUrl()
Definition: Operation.php:373
Guzzle\Service\Description\Operation\getErrorResponses
getErrorResponses()
Definition: Operation.php:500
Guzzle\Service\Description\Operation\inferResponseType
inferResponseType()
Definition: Operation.php:584
Guzzle\Service\Description\Operation\getSummary
getSummary()
Definition: Operation.php:335
Guzzle\Service\Description\Operation\$httpMethod
$httpMethod
Definition: Operation.php:45
Guzzle\Service\Description\Parameter\getName
getName()
Definition: Parameter.php:240
Guzzle\Service\Description\Operation\DEFAULT_COMMAND_CLASS
const DEFAULT_COMMAND_CLASS
Definition: Operation.php:14
Guzzle\Service\Description\Operation\setServiceDescription
setServiceDescription(ServiceDescriptionInterface $description)
Definition: Operation.php:222
Guzzle\Service\Description\Parameter\setParent
setParent($parent)
Definition: Parameter.php:693
Guzzle\Service\Description\Operation\getNotes
getNotes()
Definition: Operation.php:354
Guzzle\Service\Description\Operation\getUri
getUri()
Definition: Operation.php:481
Guzzle\Service\Description\Operation\setHttpMethod
setHttpMethod($httpMethod)
Definition: Operation.php:290
Guzzle\Service\Description\Operation\__construct
__construct(array $config=array(), ServiceDescriptionInterface $description=null)
Definition: Operation.php:147
Guzzle\Service\Description\Operation\getParam
getParam($param)
Definition: Operation.php:244
Guzzle\Service\Description\Operation\hasParam
hasParam($name)
Definition: Operation.php:239
Guzzle\Service\Description\Operation\$name
$name
Definition: Operation.php:39
Guzzle\Service\Description\Operation\getName
getName()
Definition: Operation.php:316
Guzzle\Service\Description\Operation\addErrorResponse
addErrorResponse($code, $reason, $class)
Definition: Operation.php:514
Guzzle\Service\Description\Operation\$data
$data
Definition: Operation.php:117
Guzzle\Service\Description\Operation\$uri
$uri
Definition: Operation.php:69
Guzzle\Service\Description\Operation\getAdditionalParameters
getAdditionalParameters()
Definition: Operation.php:560
Guzzle\Service\Description\OperationInterface\TYPE_PRIMITIVE
const TYPE_PRIMITIVE
Definition: OperationInterface.php:12
Guzzle\Service\Description\Operation\$properties
static $properties
Definition: Operation.php:17
Guzzle\Service\Description\OperationInterface\TYPE_CLASS
const TYPE_CLASS
Definition: OperationInterface.php:13
Guzzle\Service\Description\Operation\setName
setName($name)
Definition: Operation.php:328
Guzzle\Service\Description\Operation\getServiceDescription
getServiceDescription()
Definition: Operation.php:217
Guzzle\Service\Description\Operation\$additionalParameters
$additionalParameters
Definition: Operation.php:33
Guzzle\Service\Description\Operation\getDeprecated
getDeprecated()
Definition: Operation.php:462
Guzzle\Service\Description\Operation\toArray
toArray()
Definition: Operation.php:193
Guzzle\Service\Description\Operation\setUri
setUri($uri)
Definition: Operation.php:493
Guzzle\Service\Description\Operation\setClass
setClass($className)
Definition: Operation.php:309
Guzzle\Service\Description\Operation\$responseType
$responseType
Definition: Operation.php:87
Guzzle\Service\Description\Operation\setNotes
setNotes($notes)
Definition: Operation.php:366
Guzzle\Service\Description\Operation\getResponseType
getResponseType()
Definition: Operation.php:413
Guzzle\Service\Description\Operation\$documentationUrl
$documentationUrl
Definition: Operation.php:63
Guzzle\Service\Description\Operation\getParamNames
getParamNames()
Definition: Operation.php:234
Guzzle\Service\Description\Operation\getHttpMethod
getHttpMethod()
Definition: Operation.php:278
Guzzle\Service\Description\Operation\setSummary
setSummary($summary)
Definition: Operation.php:347
Guzzle\Service\Description\Operation\setResponseType
setResponseType($responseType)
Definition: Operation.php:426
Guzzle\Service\Description\Operation\$class
$class
Definition: Operation.php:75
Guzzle\Service\Description\Operation\setErrorResponses
setErrorResponses(array $errorResponses)
Definition: Operation.php:528
Guzzle\Service\Description\Operation\removeParam
removeParam($name)
Definition: Operation.php:271