4 * This file is part of Zippy.
6 * (c) Alchemy <info@alchemy.fr>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Alchemy\Zippy\Adapter;
14 use Alchemy\Zippy\Adapter\BSDTar\TarBSDTarAdapter;
15 use Alchemy\Zippy\Adapter\BSDTar\TarBz2BSDTarAdapter;
16 use Alchemy\Zippy\Adapter\BSDTar\TarGzBSDTarAdapter;
17 use Alchemy\Zippy\Adapter\GNUTar\TarBz2GNUTarAdapter;
18 use Alchemy\Zippy\Adapter\GNUTar\TarGNUTarAdapter;
19 use Alchemy\Zippy\Adapter\GNUTar\TarGzGNUTarAdapter;
20 use Alchemy\Zippy\Resource\RequestMapper;
21 use Alchemy\Zippy\Resource\ResourceManager;
22 use Alchemy\Zippy\Resource\ResourceTeleporter;
23 use Alchemy\Zippy\Resource\TargetLocator;
24 use Alchemy\Zippy\Resource\TeleporterContainer;
25 use Symfony\Component\Filesystem\Filesystem;
26 use Symfony\Component\Process\ExecutableFinder;
28 class AdapterContainer implements \ArrayAccess
31 private $items = array();
34 * Builds the adapter container
36 * @return AdapterContainer
38 public static function load()
40 $container = new static();
42 $container['zip.inflator'] = null;
43 $container['zip.deflator'] = null;
45 $container['resource-manager'] = function($container) {
46 return new ResourceManager(
47 $container['request-mapper'],
48 $container['resource-teleporter'],
49 $container['filesystem']
53 $container['executable-finder'] = function($container) {
54 return new ExecutableFinder();
57 $container['request-mapper'] = function($container) {
58 return new RequestMapper($container['target-locator']);
61 $container['target-locator'] = function() {
62 return new TargetLocator();
65 $container['teleporter-container'] = function($container) {
66 return TeleporterContainer::load();
69 $container['resource-teleporter'] = function($container) {
70 return new ResourceTeleporter($container['teleporter-container']);
73 $container['filesystem'] = function() {
74 return new Filesystem();
77 $container['Alchemy\\Zippy\\Adapter\\ZipAdapter'] = function($container) {
78 return ZipAdapter::newInstance(
79 $container['executable-finder'],
80 $container['resource-manager'],
81 $container['zip.inflator'],
82 $container['zip.deflator']
86 $container['gnu-tar.inflator'] = null;
87 $container['gnu-tar.deflator'] = null;
89 $container['Alchemy\\Zippy\\Adapter\\GNUTar\\TarGNUTarAdapter'] = function($container) {
90 return TarGNUTarAdapter::newInstance(
91 $container['executable-finder'],
92 $container['resource-manager'],
93 $container['gnu-tar.inflator'],
94 $container['gnu-tar.deflator']
98 $container['Alchemy\\Zippy\\Adapter\\GNUTar\\TarGzGNUTarAdapter'] = function($container) {
99 return TarGzGNUTarAdapter::newInstance(
100 $container['executable-finder'],
101 $container['resource-manager'],
102 $container['gnu-tar.inflator'],
103 $container['gnu-tar.deflator']
107 $container['Alchemy\\Zippy\\Adapter\\GNUTar\\TarBz2GNUTarAdapter'] = function($container) {
108 return TarBz2GNUTarAdapter::newInstance(
109 $container['executable-finder'],
110 $container['resource-manager'],
111 $container['gnu-tar.inflator'],
112 $container['gnu-tar.deflator']
116 $container['bsd-tar.inflator'] = null;
117 $container['bsd-tar.deflator'] = null;
119 $container['Alchemy\\Zippy\\Adapter\\BSDTar\\TarBSDTarAdapter'] = function($container) {
120 return TarBSDTarAdapter::newInstance(
121 $container['executable-finder'],
122 $container['resource-manager'],
123 $container['bsd-tar.inflator'],
124 $container['bsd-tar.deflator']
128 $container['Alchemy\\Zippy\\Adapter\\BSDTar\\TarGzBSDTarAdapter'] = function($container) {
129 return TarGzBSDTarAdapter::newInstance(
130 $container['executable-finder'],
131 $container['resource-manager'],
132 $container['bsd-tar.inflator'],
133 $container['bsd-tar.deflator']
137 $container['Alchemy\\Zippy\\Adapter\\BSDTar\\TarBz2BSDTarAdapter'] = function($container) {
138 return TarBz2BSDTarAdapter::newInstance(
139 $container['executable-finder'],
140 $container['resource-manager'],
141 $container['bsd-tar.inflator'],
142 $container['bsd-tar.deflator']);
145 $container['Alchemy\\Zippy\\Adapter\\ZipExtensionAdapter'] = function() {
146 return ZipExtensionAdapter::newInstance();
153 * (PHP 5 >= 5.0.0)<br/>
154 * Whether a offset exists
156 * @link http://php.net/manual/en/arrayaccess.offsetexists.php
158 * @param mixed $offset <p>
159 * An offset to check for.
162 * @return bool true on success or false on failure.
163 * <p>The return value will be casted to boolean if non-boolean was returned.</p>
165 public function offsetExists($offset)
167 return isset($this->items[$offset]);
171 * (PHP 5 >= 5.0.0)<br/>
173 * @link http://php.net/manual/en/arrayaccess.offsetget.php
174 * @param mixed $offset <p>
175 * The offset to retrieve.
177 * @return mixed Can return all value types.
179 public function offsetGet($offset)
181 if (array_key_exists($offset, $this->items) && is_callable($this->items[$offset])) {
182 $this->items[$offset] = call_user_func($this->items[$offset], $this);
185 if (array_key_exists($offset, $this->items)) {
186 return $this->items[$offset];
189 throw new \InvalidArgumentException();
193 * (PHP 5 >= 5.0.0)<br/>
195 * @link http://php.net/manual/en/arrayaccess.offsetset.php
196 * @param mixed $offset <p>
197 * The offset to assign the value to.
199 * @param mixed $value <p>
204 public function offsetSet($offset, $value)
206 $this->items[$offset] = $value;
210 * (PHP 5 >= 5.0.0)<br/>
212 * @link http://php.net/manual/en/arrayaccess.offsetunset.php
213 * @param mixed $offset <p>
214 * The offset to unset.
218 public function offsetUnset($offset)
220 unset($this->items[$offset]);