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\Image;
19:
20: use OpenCloud\Common\Constants\Header;
21: use OpenCloud\Common\Service\CatalogService;
22: use OpenCloud\Image\Resource\Image;
23: use OpenCloud\Image\Resource\Schema\Schema;
24:
25: /**
26: * Service class that represents OpenStack Glance / Rackspace Cloud Images
27: *
28: * @package OpenCloud\Images
29: */
30: class Service extends CatalogService
31: {
32: const DEFAULT_TYPE = 'image';
33: const DEFAULT_NAME = 'cloudImages';
34:
35: const PATCH_CONTENT_TYPE = 'application/openstack-images-v2.1-json-patch';
36:
37: /**
38: * Get the default headers to send for PATCH requests
39: *
40: * @return array
41: */
42: public function getPatchHeaders()
43: {
44: return array(Header::CONTENT_TYPE => self::PATCH_CONTENT_TYPE);
45: }
46:
47: /**
48: * This operation returns images you created, shared images that you accepted, and standard images.
49: *
50: * @param array $params
51: * @return \OpenCloud\Common\Collection\PaginatedIterator
52: */
53: public function listImages(array $params = array())
54: {
55: $url = clone $this->getUrl();
56: $url->addPath(Image::resourceName())->setQuery($params);
57:
58: return $this->resourceList('Image', $url);
59: }
60:
61: /**
62: * Returns details for a specific image.
63: *
64: * @param $imageId
65: * @return object
66: */
67: public function getImage($imageId)
68: {
69: $image = $this->resource('Image');
70: $image->setId($imageId);
71: $image->refresh();
72:
73: return $image;
74: }
75:
76: /**
77: * For iterator use only.
78: *
79: * @param $data
80: * @return object
81: */
82: public function image($data)
83: {
84: $image = $this->resource('Image');
85: $image->setData((array) $data);
86:
87: return $image;
88: }
89:
90: /**
91: * A convenience method which returns the URL needed to retrieve schemas.
92: *
93: * @param $path
94: * @return \Guzzle\Http\Url
95: */
96: protected function getSchemaUrl($path)
97: {
98: $url = clone $this->getUrl();
99:
100: return $url->addPath('schemas')->addPath($path);
101: }
102:
103: /**
104: * Return a JSON schema for a collection of image resources
105: *
106: * @return Schema
107: */
108: public function getImagesSchema()
109: {
110: $data = $this->getClient()->get($this->getSchemaUrl('images'))->send()->json();
111:
112: return Schema::factory($data);
113: }
114:
115: /**
116: * Return a JSON schema for an individual image resource
117: *
118: * @return Schema
119: */
120: public function getImageSchema()
121: {
122: $data = $this->getClient()->get($this->getSchemaUrl('image'))->send()->json();
123:
124: return Schema::factory($data);
125: }
126:
127: /**
128: * Return a JSON schema for a collection of member resources
129: *
130: * @return Schema
131: */
132: public function getMembersSchema()
133: {
134: $data = $this->getClient()->get($this->getSchemaUrl('members'))->send()->json();
135:
136: return Schema::factory($data);
137: }
138:
139: /**
140: * Return a JSON schema for an individual member resource
141: *
142: * @return Schema
143: */
144: public function getMemberSchema()
145: {
146: $data = $this->getClient()->get($this->getSchemaUrl('member'))->send()->json();
147:
148: return Schema::factory($data);
149: }
150: }
151: