diff options
Diffstat (limited to 'lib/private/files/storage/storagefactory.php')
-rw-r--r-- | lib/private/files/storage/storagefactory.php | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/lib/private/files/storage/storagefactory.php b/lib/private/files/storage/storagefactory.php new file mode 100644 index 00000000000..c9e8d422f9d --- /dev/null +++ b/lib/private/files/storage/storagefactory.php @@ -0,0 +1,54 @@ +<?php +/** + * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +namespace OC\Files\Storage; + +use OCP\Files\Storage\IStorageFactory; + +class StorageFactory implements IStorageFactory { + /** + * @var callable[] $storageWrappers + */ + private $storageWrappers = array(); + + /** + * allow modifier storage behaviour by adding wrappers around storages + * + * $callback should be a function of type (string $mountPoint, Storage $storage) => Storage + * + * @param string $wrapperName + * @param callable $callback + */ + public function addStorageWrapper($wrapperName, $callback) { + $this->storageWrappers[$wrapperName] = $callback; + } + + /** + * Create an instance of a storage and apply the registered storage wrappers + * + * @param string|boolean $mountPoint + * @param string $class + * @param array $arguments + * @return \OCP\Files\Storage + */ + public function getInstance($mountPoint, $class, $arguments) { + return $this->wrap($mountPoint, new $class($arguments)); + } + + /** + * @param string|boolean $mountPoint + * @param \OCP\Files\Storage $storage + * @return \OCP\Files\Storage + */ + public function wrap($mountPoint, $storage) { + foreach ($this->storageWrappers as $wrapper) { + $storage = $wrapper($mountPoint, $storage); + } + return $storage; + } +} |