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 use OpenCloud\Common\Exceptions\InvalidArgumentError;
21
22 /**
23 * This object represents the service catalog returned by the Rackspace API. It contains all the services available
24 * to the end-user, including specific information for each service.
25 */
26 class Catalog
27 {
28 /**
29 * @var array Service items
30 */
31 private $items = array();
32
33 /**
34 * Produces a Catalog from a mixed input.
35 *
36 * @param $config
37 * @return Catalog
38 * @throws \OpenCloud\Common\Exceptions\InvalidArgumentError
39 */
40 public static function factory($config)
41 {
42 if (is_array($config)) {
43 $catalog = new self();
44 foreach ($config as $item) {
45 $catalog->items[] = CatalogItem::factory($item);
46 }
47 } elseif ($config instanceof Catalog) {
48 $catalog = $config;
49 } else {
50 throw new InvalidArgumentError(sprintf(
51 'Argument for Catalog::factory must be either an array or an '
52 . 'instance of %s. You passed in: %s',
53 get_class(),
54 print_r($config, true)
55 ));
56 }
57
58 return $catalog;
59 }
60
61 /**
62 * @return array
63 */
64 public function getItems()
65 {
66 return $this->items;
67 }
68 }
69