Open Journal Systems  3.3.0
ServiceDescription.php
1 <?php
2 
4 
7 
12 {
14  protected $operations = array();
15 
17  protected $models = array();
18 
20  protected $name;
21 
23  protected $apiVersion;
24 
26  protected $description;
27 
29  protected $extraData = array();
30 
32  protected static $descriptionLoader;
33 
35  protected $baseUrl;
36 
44  public static function factory($config, array $options = array())
45  {
46  // @codeCoverageIgnoreStart
47  if (!self::$descriptionLoader) {
48  self::$descriptionLoader = new ServiceDescriptionLoader();
49  }
50  // @codeCoverageIgnoreEnd
51 
52  return self::$descriptionLoader->load($config, $options);
53  }
54 
58  public function __construct(array $config = array())
59  {
60  $this->fromArray($config);
61  }
62 
63  public function serialize()
64  {
65  return json_encode($this->toArray());
66  }
67 
68  public function unserialize($json)
69  {
70  $this->operations = array();
71  $this->fromArray(json_decode($json, true));
72  }
73 
74  public function toArray()
75  {
76  $result = array(
77  'name' => $this->name,
78  'apiVersion' => $this->apiVersion,
79  'baseUrl' => $this->baseUrl,
80  'description' => $this->description
81  ) + $this->extraData;
82  $result['operations'] = array();
83  foreach ($this->getOperations() as $name => $operation) {
84  $result['operations'][$operation->getName() ?: $name] = $operation->toArray();
85  }
86  if (!empty($this->models)) {
87  $result['models'] = array();
88  foreach ($this->models as $id => $model) {
89  $result['models'][$id] = $model instanceof Parameter ? $model->toArray(): $model;
90  }
91  }
92 
93  return array_filter($result);
94  }
95 
96  public function getBaseUrl()
97  {
98  return $this->baseUrl;
99  }
100 
108  public function setBaseUrl($baseUrl)
109  {
110  $this->baseUrl = $baseUrl;
111 
112  return $this;
113  }
114 
115  public function getOperations()
116  {
117  foreach (array_keys($this->operations) as $name) {
118  $this->getOperation($name);
119  }
120 
121  return $this->operations;
122  }
123 
124  public function hasOperation($name)
125  {
126  return isset($this->operations[$name]);
127  }
128 
129  public function getOperation($name)
130  {
131  // Lazily retrieve and build operations
132  if (!isset($this->operations[$name])) {
133  return null;
134  }
135 
136  if (!($this->operations[$name] instanceof Operation)) {
137  $this->operations[$name] = new Operation($this->operations[$name], $this);
138  }
139 
140  return $this->operations[$name];
141  }
142 
150  public function addOperation(OperationInterface $operation)
151  {
152  $this->operations[$operation->getName()] = $operation->setServiceDescription($this);
153 
154  return $this;
155  }
156 
157  public function getModel($id)
158  {
159  if (!isset($this->models[$id])) {
160  return null;
161  }
162 
163  if (!($this->models[$id] instanceof Parameter)) {
164  $this->models[$id] = new Parameter($this->models[$id] + array('name' => $id), $this);
165  }
166 
167  return $this->models[$id];
168  }
169 
170  public function getModels()
171  {
172  // Ensure all models are converted into parameter objects
173  foreach (array_keys($this->models) as $id) {
174  $this->getModel($id);
175  }
176 
177  return $this->models;
178  }
179 
180  public function hasModel($id)
181  {
182  return isset($this->models[$id]);
183  }
184 
192  public function addModel(Parameter $model)
193  {
194  $this->models[$model->getName()] = $model;
195 
196  return $this;
197  }
198 
199  public function getApiVersion()
200  {
202  }
203 
204  public function getName()
205  {
206  return $this->name;
207  }
208 
209  public function getDescription()
210  {
211  return $this->description;
212  }
213 
214  public function getData($key)
215  {
216  return isset($this->extraData[$key]) ? $this->extraData[$key] : null;
217  }
218 
219  public function setData($key, $value)
220  {
221  $this->extraData[$key] = $value;
222 
223  return $this;
224  }
225 
232  protected function fromArray(array $config)
233  {
234  // Keep a list of default keys used in service descriptions that is later used to determine extra data keys
235  static $defaultKeys = array('name', 'models', 'apiVersion', 'baseUrl', 'description');
236  // Pull in the default configuration values
237  foreach ($defaultKeys as $key) {
238  if (isset($config[$key])) {
239  $this->{$key} = $config[$key];
240  }
241  }
242 
243  // Account for the Swagger name for Guzzle's baseUrl
244  if (isset($config['basePath'])) {
245  $this->baseUrl = $config['basePath'];
246  }
247 
248  // Ensure that the models and operations properties are always arrays
249  $this->models = (array) $this->models;
250  $this->operations = (array) $this->operations;
251 
252  // We want to add operations differently than adding the other properties
253  $defaultKeys[] = 'operations';
254 
255  // Create operations for each operation
256  if (isset($config['operations'])) {
257  foreach ($config['operations'] as $name => $operation) {
258  if (!($operation instanceof Operation) && !is_array($operation)) {
259  throw new InvalidArgumentException('Invalid operation in service description: '
260  . gettype($operation));
261  }
262  $this->operations[$name] = $operation;
263  }
264  }
265 
266  // Get all of the additional properties of the service description and store them in a data array
267  foreach (array_diff(array_keys($config), $defaultKeys) as $key) {
268  $this->extraData[$key] = $config[$key];
269  }
270  }
271 }
Guzzle\Common\ToArrayInterface
Definition: paymethod/paypal/lib/vendor/guzzle/guzzle/src/Guzzle/Common/ToArrayInterface.php:8
Guzzle\Service\Description\ServiceDescription\setBaseUrl
setBaseUrl($baseUrl)
Definition: ServiceDescription.php:129
Guzzle\Service\Description\ServiceDescription\$apiVersion
$apiVersion
Definition: ServiceDescription.php:35
Guzzle\Service\Description\ServiceDescription\setData
setData($key, $value)
Definition: ServiceDescription.php:240
Guzzle\Service\Description\OperationInterface\getName
getName()
Guzzle\Service\Description\Operation
Definition: Operation.php:10
Guzzle\Service\Description\ServiceDescription\getDescription
getDescription()
Definition: ServiceDescription.php:230
Guzzle\Service\Description\ServiceDescription\addOperation
addOperation(OperationInterface $operation)
Definition: ServiceDescription.php:171
Guzzle\Service\Description\ServiceDescription\unserialize
unserialize($json)
Definition: ServiceDescription.php:89
Guzzle\Service\Description\Parameter
Definition: Parameter.php:10
Guzzle\Service\Description\ServiceDescription\toArray
toArray()
Definition: ServiceDescription.php:95
Guzzle\Service\Description\ServiceDescription\factory
static factory($config, array $options=array())
Definition: ServiceDescription.php:65
Guzzle\Service\Description\ServiceDescription\addModel
addModel(Parameter $model)
Definition: ServiceDescription.php:213
Guzzle\Service\Description\ServiceDescription\$name
$name
Definition: ServiceDescription.php:29
Guzzle\Service\Description\OperationInterface
Definition: OperationInterface.php:10
Guzzle\Service\Description\ServiceDescription\$description
$description
Definition: ServiceDescription.php:41
Guzzle\Service\Description\ServiceDescription
Definition: ServiceDescription.php:11
Guzzle\Service\Description\ServiceDescriptionInterface
Definition: ServiceDescriptionInterface.php:8
Guzzle\Service\Description\ServiceDescription\getData
getData($key)
Definition: ServiceDescription.php:235
Guzzle\Service\Description\ServiceDescription\hasModel
hasModel($id)
Definition: ServiceDescription.php:201
Guzzle\Service\Description\ServiceDescription\getModel
getModel($id)
Definition: ServiceDescription.php:178
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\ServiceDescription\$extraData
$extraData
Definition: ServiceDescription.php:47
Guzzle\Service\Description\ServiceDescription\getOperation
getOperation($name)
Definition: ServiceDescription.php:150
Guzzle\Service\Description\ServiceDescription\fromArray
fromArray(array $config)
Definition: ServiceDescription.php:253
Guzzle\Service\Description\Parameter\toArray
toArray()
Definition: Parameter.php:134
Guzzle\Service\Description\Parameter\getName
getName()
Definition: Parameter.php:240
Guzzle\Service\Description\ServiceDescription\$operations
$operations
Definition: ServiceDescription.php:17
Guzzle\Service\Description\ServiceDescription\$models
$models
Definition: ServiceDescription.php:23
Guzzle\Service\Description\ServiceDescription\getModels
getModels()
Definition: ServiceDescription.php:191
Guzzle\Service\Description\ServiceDescription\getBaseUrl
getBaseUrl()
Definition: ServiceDescription.php:117
Guzzle\Service\Description\OperationInterface\setServiceDescription
setServiceDescription(ServiceDescriptionInterface $description)
Guzzle\Service\Description\ServiceDescription\serialize
serialize()
Definition: ServiceDescription.php:84
Guzzle\Service\Description\ServiceDescription\__construct
__construct(array $config=array())
Definition: ServiceDescription.php:79
Guzzle\Service\Description\ServiceDescription\$descriptionLoader
static $descriptionLoader
Definition: ServiceDescription.php:51
Guzzle\Service\Description\ServiceDescription\hasOperation
hasOperation($name)
Definition: ServiceDescription.php:145
Guzzle\Service\Description\ServiceDescription\getName
getName()
Definition: ServiceDescription.php:225
Guzzle\Service\Description\ServiceDescription\getOperations
getOperations()
Definition: ServiceDescription.php:136
Guzzle\Service\Description\ServiceDescriptionLoader
Definition: ServiceDescriptionLoader.php:11
Guzzle\Service\Description\ServiceDescription\$baseUrl
$baseUrl
Definition: ServiceDescription.php:56
Guzzle\Service\Description\ServiceDescription\getApiVersion
getApiVersion()
Definition: ServiceDescription.php:220