|
1
|
|
|
<?php declare(strict_types=1); |
|
2
|
|
|
|
|
3
|
|
|
namespace OpenStack\Identity\v3\Models; |
|
4
|
|
|
|
|
5
|
|
|
use OpenStack\Common\Resource\Alias; |
|
6
|
|
|
use OpenStack\Common\Resource\OperatorResource; |
|
7
|
|
|
use OpenStack\Common\Resource\Creatable; |
|
8
|
|
|
use OpenStack\Common\Resource\Deletable; |
|
9
|
|
|
use OpenStack\Common\Resource\Listable; |
|
10
|
|
|
use OpenStack\Common\Resource\Retrievable; |
|
11
|
|
|
use OpenStack\Common\Resource\Updateable; |
|
12
|
|
|
|
|
13
|
|
|
/** |
|
14
|
|
|
* @property \OpenStack\Identity\v3\Api $api |
|
15
|
|
|
*/ |
|
16
|
|
|
class Service extends OperatorResource implements Creatable, Listable, Retrievable, Updateable, Deletable |
|
17
|
|
|
{ |
|
18
|
|
|
/** @var string */ |
|
19
|
|
|
public $id; |
|
20
|
|
|
|
|
21
|
|
|
/** @var string */ |
|
22
|
|
|
public $name; |
|
23
|
|
|
|
|
24
|
|
|
/** @var string */ |
|
25
|
|
|
public $type; |
|
26
|
|
|
|
|
27
|
|
|
/** @var string */ |
|
28
|
|
|
public $description; |
|
29
|
|
|
|
|
30
|
|
|
/** @var []Endpoint */ |
|
31
|
|
|
public $endpoints; |
|
32
|
|
|
|
|
33
|
|
|
/** @var array */ |
|
34
|
|
|
public $links; |
|
35
|
|
|
|
|
36
|
|
|
protected $resourceKey = 'service'; |
|
37
|
|
|
protected $resourcesKey = 'services'; |
|
38
|
|
|
|
|
39
|
|
|
/** |
|
40
|
|
|
* @inheritdoc |
|
41
|
|
|
*/ |
|
42
|
|
View Code Duplication |
protected static function getAlias(): Alias |
|
|
|
|
|
|
43
|
1 |
|
{ |
|
44
|
|
|
$alias = parent::getAlias(); |
|
45
|
1 |
|
|
|
46
|
1 |
|
if (!$alias->hasAliases(self::class)) { |
|
47
|
|
|
$alias |
|
48
|
|
|
->add(self::class, 'endpoints', 'endpoints', Endpoint::class, true); |
|
49
|
|
|
} |
|
50
|
|
|
|
|
51
|
|
|
return $alias; |
|
52
|
1 |
|
} |
|
53
|
|
|
|
|
54
|
1 |
|
/** |
|
55
|
1 |
|
* {@inheritDoc} |
|
56
|
|
|
* |
|
57
|
|
|
* @param array $data {@see \OpenStack\Identity\v3\Api::postServices} |
|
58
|
|
|
*/ |
|
59
|
|
|
public function create(array $data): Creatable |
|
60
|
|
|
{ |
|
61
|
1 |
|
$response = $this->execute($this->api->postServices(), $data); |
|
62
|
|
|
return $this->populateFromResponse($response); |
|
63
|
1 |
|
} |
|
64
|
1 |
|
|
|
65
|
|
|
/** |
|
66
|
|
|
* {@inheritDoc} |
|
67
|
|
|
*/ |
|
68
|
|
|
public function retrieve() |
|
69
|
|
|
{ |
|
70
|
1 |
|
$response = $this->executeWithState($this->api->getService()); |
|
71
|
|
|
$this->populateFromResponse($response); |
|
72
|
1 |
|
} |
|
73
|
1 |
|
|
|
74
|
|
|
/** |
|
75
|
4 |
|
* {@inheritDoc} |
|
76
|
|
|
*/ |
|
77
|
4 |
|
public function update() |
|
78
|
|
|
{ |
|
79
|
|
|
$response = $this->executeWithState($this->api->patchService()); |
|
80
|
2 |
|
$this->populateFromResponse($response); |
|
81
|
|
|
} |
|
82
|
2 |
|
|
|
83
|
|
|
/** |
|
84
|
|
|
* {@inheritDoc} |
|
85
|
|
|
*/ |
|
86
|
|
|
public function delete() |
|
87
|
|
|
{ |
|
88
|
|
|
$this->executeWithState($this->api->deleteService()); |
|
89
|
|
|
} |
|
90
|
|
|
|
|
91
|
|
|
private function nameMatches(string $value): bool |
|
92
|
|
|
{ |
|
93
|
|
|
return $this->name && $this->name == $value; |
|
94
|
|
|
} |
|
95
|
4 |
|
|
|
96
|
|
|
private function typeMatches(string $value): bool |
|
97
|
4 |
|
{ |
|
98
|
2 |
|
return $this->type && $this->type = $value; |
|
99
|
|
|
} |
|
100
|
|
|
|
|
101
|
2 |
|
/** |
|
102
|
2 |
|
* Retrieve the base URL for a service. |
|
103
|
2 |
|
* |
|
104
|
|
|
* @param string $name The name of the service as it appears in the catalog. |
|
105
|
1 |
|
* @param string $type The type of the service as it appears in the catalog. |
|
106
|
|
|
* @param string $region The region of the service as it appears in the catalog. |
|
107
|
1 |
|
* @param string $interface The interface of the service as it appears in the catalog. |
|
108
|
|
|
* |
|
109
|
|
|
* @return string|false |
|
110
|
|
|
*/ |
|
111
|
|
|
public function getUrl(string $name, string $type, string $region, string $interface) |
|
112
|
|
|
{ |
|
113
|
|
|
if (!$this->nameMatches($name) || !$this->typeMatches($type)) { |
|
114
|
|
|
return false; |
|
115
|
|
|
} |
|
116
|
|
|
|
|
117
|
|
|
foreach ($this->endpoints as $endpoint) { |
|
118
|
|
|
if ($endpoint->regionMatches($region) && $endpoint->interfaceMatches($interface)) { |
|
119
|
|
|
return $endpoint->url; |
|
120
|
|
|
} |
|
121
|
|
|
} |
|
122
|
|
|
|
|
123
|
|
|
return false; |
|
124
|
|
|
} |
|
125
|
|
|
} |
|
126
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.