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\Autoscale\Resource;
19:
20: use OpenCloud\Common\PersistentObject;
21:
22: /**
23: * Contains generic, abstracted functionality for Autoscale resources.
24: */
25: abstract class AbstractResource extends PersistentObject
26: {
27: /**
28: * These are used to set the object used for JSON encode.
29: *
30: * @var array
31: */
32: public $createKeys = array();
33:
34: /**
35: * These resources are associated with this one. When this resource object
36: * is populated, if a key is found matching one of these array keys, it is
37: * set as an instantiated resource object (rather than an arbitrary string
38: * or stdClass object).
39: *
40: * @var array
41: */
42: public $associatedResources = array();
43:
44: /**
45: * Same as an associated resource, but it's instantiated as a Collection.
46: *
47: * @var array
48: */
49: public $associatedCollections = array();
50:
51: /**
52: * Creates the object which will be JSON encoded for request.
53: *
54: * @return \stdClass
55: */
56: public function createJson()
57: {
58: $object = new \stdClass;
59:
60: foreach ($this->createKeys as $key) {
61: if ($value = $this->getProperty($key)) {
62: $object->$key = $value;
63: }
64: }
65:
66: if (count($this->metadata)) {
67: $object->metadata = new \stdClass;
68: foreach ($this->getMetadata()->toArray() as $key => $value) {
69: $object->metadata->$key = $value;
70: }
71: }
72:
73: return $object;
74: }
75:
76: /**
77: * Creates the object which will be JSON encoded for request.
78: *
79: * @return array
80: */
81: protected function updateJson($params = array())
82: {
83: $existing = array();
84: foreach ($this->createKeys as $key) {
85: $existing[$key] = $this->$key;
86: }
87:
88: return $existing + $params;
89: }
90:
91: public function primaryKeyField()
92: {
93: return 'id';
94: }
95: }
96: