1 <?php
2 /**
3 * Copyright 2012-2014 Rackspace US, Inc.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 namespace OpenCloud\Common\Service;
19
20 /**
21 * This object represents an individual service catalog item - in other words an API Service. Each service has
22 * particular information which form the basis of how it distinguishes itself, and how it executes API operations.
23 */
24 class CatalogItem
25 {
26 /**
27 * @var string
28 */
29 private $name;
30
31 /**
32 * @var string
33 */
34 private $type;
35
36 /**
37 * @var array
38 */
39 private $endpoints = array();
40
41 /**
42 * Construct a CatalogItem from a mixed input.
43 *
44 * @param $object
45 * @return CatalogItem
46 */
47 public static function factory($object)
48 {
49 $item = new self();
50 $item->setName($object->name)
51 ->setType($object->type)
52 ->setEndpoints($object->endpoints);
53
54 return $item;
55 }
56
57 /**
58 * @param $name
59 * @return $this
60 */
61 public function setName($name)
62 {
63 $this->name = $name;
64
65 return $this;
66 }
67
68 /**
69 * @return string
70 */
71 public function getName()
72 {
73 return $this->name;
74 }
75
76 /**
77 * A basic string check.
78 *
79 * @param $string
80 * @return bool
81 */
82 public function hasName($string)
83 {
84 return !strnatcasecmp($this->name, $string);
85 }
86
87 /**
88 * @param $type
89 * @return $this
90 */
91 public function setType($type)
92 {
93 $this->type = $type;
94
95 return $this;
96 }
97
98 /**
99 * @return string
100 */
101 public function getType()
102 {
103 return $this->type;
104 }
105
106 /**
107 * @param $string
108 * @return bool
109 */
110 public function hasType($string)
111 {
112 return !strnatcasecmp($this->type, $string);
113 }
114
115 /**
116 * @param array $endpoints
117 * @return $this
118 */
119 public function setEndpoints(array $endpoints)
120 {
121 $this->endpoints = $endpoints;
122
123 return $this;
124 }
125
126 /**
127 * @return array
128 */
129 public function getEndpoints()
130 {
131 return $this->endpoints;
132 }
133
134 /**
135 * Using a standard data object, extract its endpoint.
136 *
137 * @param $region
138 * @return mixed
139 * @throws \OpenCloud\Common\Exceptions\EndpointError
140 */
141 public function getEndpointFromRegion($region)
142 {
143 foreach ($this->endpoints as $endpoint) {
144 // Return the endpoint if it is regionless OR if the endpoint's
145 // region matches the $region supplied by the caller.
146 if (!isset($endpoint->region) || $endpoint->region == $region) {
147 return $endpoint;
148 }
149 }
150
151 throw new \OpenCloud\Common\Exceptions\EndpointError(sprintf(
152 'This service [%s] does not have access to the [%s] endpoint.',
153 $this->name,
154 $region
155 ));
156 }
157 }
158