Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
namespace Aws\Api;
3
 
4
/**
5
 * Builds shape based on shape references.
6
 */
7
class ShapeMap
8
{
9
    /** @var array */
10
    private $definitions;
11
 
12
    /** @var Shape[] */
13
    private $simple;
14
 
15
    /**
16
     * @param array $shapeModels Associative array of shape definitions.
17
     */
18
    public function __construct(array $shapeModels)
19
    {
20
        $this->definitions = $shapeModels;
21
    }
22
 
23
    /**
24
     * Get an array of shape names.
25
     *
26
     * @return array
27
     */
28
    public function getShapeNames()
29
    {
30
        return array_keys($this->definitions);
31
    }
32
 
33
    /**
34
     * Resolve a shape reference
35
     *
36
     * @param array $shapeRef Shape reference shape
37
     *
38
     * @return Shape
39
     * @throws \InvalidArgumentException
40
     */
41
    public function resolve(array $shapeRef)
42
    {
43
        $shape = $shapeRef['shape'];
44
 
45
        if (!isset($this->definitions[$shape])) {
46
            throw new \InvalidArgumentException('Shape not found: ' . $shape);
47
        }
48
 
49
        $isSimple = count($shapeRef) == 1;
50
        if ($isSimple && isset($this->simple[$shape])) {
51
            return $this->simple[$shape];
52
        }
53
 
54
        $definition = $shapeRef + $this->definitions[$shape];
55
        $definition['name'] = $definition['shape'];
56
        if (isset($definition['shape'])) {
57
            unset($definition['shape']);
58
        }
59
 
60
        $result = Shape::create($definition, $this);
61
 
62
        if ($isSimple) {
63
            $this->simple[$shape] = $result;
64
        }
65
 
66
        return $result;
67
    }
68
}