private $mountManager;
/**
- * @var \OC\Files\Storage\Loader
+ * @var \OC\Files\Storage\StorageFactory
*/
private $storageLoader;
* @param \OCP\IDBConnection $connection
* @param \OC\Files\Mount\Manager $mountManager
* @param \OC\User\Session $userSession
- * @param \OC\Files\Storage\Loader $storageLoader
+ * @param \OC\Files\Storage\StorageFactory $storageLoader
*/
public function __construct(\OCP\IDBConnection $connection, \OC\Files\Mount\Manager $mountManager,
- \OC\Files\Storage\Loader $storageLoader, \OC\User\Session $userSession) {
+ \OC\Files\Storage\StorageFactory $storageLoader, \OC\User\Session $userSession) {
$this->connection = $connection;
$this->mountManager = $mountManager;
$this->userSession = $userSession;
namespace OCA\Files_Sharing\External;
+use OC\Files\Mount\MountPoint;
use OC\Files\Mount\MoveableMount;
-class Mount extends \OC\Files\Mount\Mount implements MoveableMount {
+class Mount extends MountPoint implements MoveableMount {
/**
* @var \OCA\Files_Sharing\External\Manager
* @param string $mountpoint
* @param array $options
* @param \OCA\Files_Sharing\External\Manager $manager
- * @param \OC\Files\Storage\Loader $loader
+ * @param \OC\Files\Storage\StorageFactory $loader
*/
public function __construct($storage, $mountpoint, $options, $manager, $loader = null) {
parent::__construct($storage, $mountpoint, $options, $loader);
namespace OCA\Files_Sharing;
-use OC\Files\Mount\Mount;
+use OC\Files\Mount\MountPoint;
use OC\Files\Mount\MoveableMount;
/**
* Shared mount points can be moved by the user
*/
-class SharedMount extends Mount implements MoveableMount {
+class SharedMount extends MountPoint implements MoveableMount {
/**
* @var \OC\Files\Storage\Shared $storage
*/
--- /dev/null
+<?php
+/**
+ * Copyright (c) 2014 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\Config;
+
+use OCP\Files\Config\IMountProviderCollection;
+use OCP\Files\Config\IMountProvider;
+use OCP\Files\Storage\IStorageFactory;
+use OCP\IUser;
+
+class MountProviderCollection implements IMountProviderCollection {
+ /**
+ * @var \OCP\Files\Config\IMountProvider[]
+ */
+ private $providers = array();
+
+ /**
+ * @var \OCP\Files\Storage\IStorageFactory
+ */
+ private $loader;
+
+ /**
+ * @param \OCP\Files\Storage\IStorageFactory $loader
+ */
+ public function __construct(IStorageFactory $loader) {
+ $this->loader = $loader;
+ }
+
+ /**
+ * Get all configured mount points for the user
+ *
+ * @param \OCP\IUser $user
+ * @return \OCP\Files\Mount\IMountPoint[]
+ */
+ public function getMountsForUser(IUser $user) {
+ $loader = $this->loader;
+ return array_reduce($this->providers, function ($mounts, IMountProvider $provider) use ($user, $loader) {
+ return array_merge($mounts, $provider->getMountsForUser($user, $loader));
+ }, array());
+ }
+
+ /**
+ * Add a provider for mount points
+ *
+ * @param \OCP\Files\Config\IMountProvider $provider
+ */
+ public function registerProvider(IMountProvider $provider) {
+ $this->providers[] = $provider;
+ }
+}
namespace OC\Files;
-use OC\Files\Storage\Loader;
+use OC\Files\Storage\StorageFactory;
class Filesystem {
const signal_param_users = 'users';
/**
- * @var \OC\Files\Storage\Loader $loader
+ * @var \OC\Files\Storage\StorageFactory $loader
*/
private static $loader;
public static function getLoader() {
if (!self::$loader) {
- self::$loader = new Loader();
+ self::$loader = new StorageFactory();
}
return self::$loader;
}
/**
* @param string $id
- * @return Mount\Mount[]
+ * @return Mount\MountPoint[]
*/
public static function getMountByStorageId($id) {
if (!self::$mounts) {
/**
* @param int $id
- * @return Mount\Mount[]
+ * @return Mount\MountPoint[]
*/
public static function getMountByNumericId($id) {
if (!self::$mounts) {
self::mountCacheDir($user);
// Chance to mount for other storages
+ if($userObject) {
+ $mountConfigManager = \OC::$server->getMountProviderCollection();
+ $mounts = $mountConfigManager->getMountsForUser($userObject);
+ array_walk($mounts, array(self::$mounts, 'addMount'));
+ }
\OC_Hook::emit('OC_Filesystem', 'post_initMountPoints', array('user' => $user, 'user_dir' => $root));
}
if (!self::$mounts) {
\OC_Util::setupFS();
}
- $mount = new Mount\Mount($class, $mountpoint, $arguments, self::getLoader());
+ $mount = new Mount\MountPoint($class, $mountpoint, $arguments, self::getLoader());
self::$mounts->addMount($mount);
}
class Manager {
/**
- * @var Mount[]
+ * @var MountPoint[]
*/
private $mounts = array();
/**
- * @param Mount $mount
+ * @param MountPoint $mount
*/
- public function addMount(Mount $mount) {
+ public function addMount(MountPoint $mount) {
$this->mounts[$mount->getMountPoint()] = $mount;
}
* Find the mount for $path
*
* @param string $path
- * @return Mount
+ * @return MountPoint
*/
public function find($path) {
\OC_Util::setupFS();
* Find all mounts in $path
*
* @param string $path
- * @return Mount[]
+ * @return MountPoint[]
*/
public function findIn($path) {
\OC_Util::setupFS();
* Find mounts by storage id
*
* @param string $id
- * @return Mount[]
+ * @return MountPoint[]
*/
public function findByStorageId($id) {
\OC_Util::setupFS();
}
/**
- * @return Mount[]
+ * @return MountPoint[]
*/
public function getAll() {
return $this->mounts;
* Find mounts by numeric storage id
*
* @param int $id
- * @return Mount[]
+ * @return MountPoint[]
*/
public function findByNumericId($id) {
$storageId = \OC\Files\Cache\Storage::getStorageId($id);
+++ /dev/null
-<?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\Mount;
-
-use \OC\Files\Filesystem;
-use OC\Files\Storage\Loader;
-use OC\Files\Storage\Storage;
-
-class Mount {
- /**
- * @var \OC\Files\Storage\Storage $storage
- */
- protected $storage = null;
- protected $class;
- protected $storageId;
- protected $arguments = array();
- protected $mountPoint;
-
- /**
- * @var \OC\Files\Storage\Loader $loader
- */
- private $loader;
-
- /**
- * @param string|\OC\Files\Storage\Storage $storage
- * @param string $mountpoint
- * @param array $arguments (optional)\
- * @param \OC\Files\Storage\Loader $loader
- */
- public function __construct($storage, $mountpoint, $arguments = null, $loader = null) {
- if (is_null($arguments)) {
- $arguments = array();
- }
- if (is_null($loader)) {
- $this->loader = new Loader();
- } else {
- $this->loader = $loader;
- }
-
- $mountpoint = $this->formatPath($mountpoint);
- if ($storage instanceof Storage) {
- $this->class = get_class($storage);
- $this->storage = $this->loader->wrap($mountpoint, $storage);
- } else {
- // Update old classes to new namespace
- if (strpos($storage, 'OC_Filestorage_') !== false) {
- $storage = '\OC\Files\Storage\\' . substr($storage, 15);
- }
- $this->class = $storage;
- $this->arguments = $arguments;
- }
- $this->mountPoint = $mountpoint;
- }
-
- /**
- * get complete path to the mount point, relative to data/
- *
- * @return string
- */
- public function getMountPoint() {
- return $this->mountPoint;
- }
-
- /**
- * get name of the mount point
- *
- * @return string
- */
- public function getMountPointName() {
- return basename(rtrim($this->mountPoint, '/'));
- }
-
- /**
- * @param string $mountPoint new mount point
- */
- public function setMountPoint($mountPoint) {
- $this->mountPoint = $mountPoint;
- }
-
- /**
- * create the storage that is mounted
- *
- * @return \OC\Files\Storage\Storage
- */
- private function createStorage() {
- if (class_exists($this->class)) {
- try {
- return $this->loader->load($this->mountPoint, $this->class, $this->arguments);
- } catch (\Exception $exception) {
- if ($this->mountPoint === '/') {
- // the root storage could not be initialized, show the user!
- throw new \Exception('The root storage could not be initialized. Please contact your local administrator.', $exception->getCode(), $exception);
- } else {
- \OC_Log::write('core', $exception->getMessage(), \OC_Log::ERROR);
- }
- return null;
- }
- } else {
- \OC_Log::write('core', 'storage backend ' . $this->class . ' not found', \OC_Log::ERROR);
- return null;
- }
- }
-
- /**
- * @return \OC\Files\Storage\Storage
- */
- public function getStorage() {
- if (is_null($this->storage)) {
- $this->storage = $this->createStorage();
- }
- return $this->storage;
- }
-
- /**
- * @return string
- */
- public function getStorageId() {
- if (!$this->storageId) {
- if (is_null($this->storage)) {
- $storage = $this->createStorage(); //FIXME: start using exceptions
- if (is_null($storage)) {
- return null;
- }
- $this->storage = $storage;
- }
- $this->storageId = $this->storage->getId();
- if (strlen($this->storageId) > 64) {
- $this->storageId = md5($this->storageId);
- }
- }
- return $this->storageId;
- }
-
- /**
- * @param string $path
- * @return string
- */
- public function getInternalPath($path) {
- if ($this->mountPoint === $path or $this->mountPoint . '/' === $path) {
- $internalPath = '';
- } else {
- $internalPath = substr($path, strlen($this->mountPoint));
- }
- // substr returns false instead of an empty string, we always want a string
- return (string)$internalPath;
- }
-
- /**
- * @param string $path
- * @return string
- */
- private function formatPath($path) {
- $path = Filesystem::normalizePath($path);
- if (strlen($path) > 1) {
- $path .= '/';
- }
- return $path;
- }
-
- /**
- * @param callable $wrapper
- */
- public function wrapStorage($wrapper) {
- $this->storage = $wrapper($this->mountPoint, $this->getStorage());
- }
-}
--- /dev/null
+<?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\Mount;
+
+use \OC\Files\Filesystem;
+use OC\Files\Storage\StorageFactory;
+use OC\Files\Storage\Storage;
+use OCP\Files\Mount\IMountPoint;
+
+class MountPoint implements IMountPoint {
+ /**
+ * @var \OC\Files\Storage\Storage $storage
+ */
+ protected $storage = null;
+ protected $class;
+ protected $storageId;
+ protected $arguments = array();
+ protected $mountPoint;
+
+ /**
+ * @var \OC\Files\Storage\StorageFactory $loader
+ */
+ private $loader;
+
+ /**
+ * @param string|\OC\Files\Storage\Storage $storage
+ * @param string $mountpoint
+ * @param array $arguments (optional)\
+ * @param \OCP\Files\Storage\IStorageFactory $loader
+ */
+ public function __construct($storage, $mountpoint, $arguments = null, $loader = null) {
+ if (is_null($arguments)) {
+ $arguments = array();
+ }
+ if (is_null($loader)) {
+ $this->loader = new StorageFactory();
+ } else {
+ $this->loader = $loader;
+ }
+
+ $mountpoint = $this->formatPath($mountpoint);
+ if ($storage instanceof Storage) {
+ $this->class = get_class($storage);
+ $this->storage = $this->loader->wrap($mountpoint, $storage);
+ } else {
+ // Update old classes to new namespace
+ if (strpos($storage, 'OC_Filestorage_') !== false) {
+ $storage = '\OC\Files\Storage\\' . substr($storage, 15);
+ }
+ $this->class = $storage;
+ $this->arguments = $arguments;
+ }
+ $this->mountPoint = $mountpoint;
+ }
+
+ /**
+ * get complete path to the mount point, relative to data/
+ *
+ * @return string
+ */
+ public function getMountPoint() {
+ return $this->mountPoint;
+ }
+
+ /**
+ * @param string $mountPoint new mount point
+ */
+ public function setMountPoint($mountPoint) {
+ $this->mountPoint = $mountPoint;
+ }
+
+ /**
+ * create the storage that is mounted
+ *
+ * @return \OC\Files\Storage\Storage
+ */
+ private function createStorage() {
+ if (class_exists($this->class)) {
+ try {
+ return $this->loader->getInstance($this->mountPoint, $this->class, $this->arguments);
+ } catch (\Exception $exception) {
+ if ($this->mountPoint === '/') {
+ // the root storage could not be initialized, show the user!
+ throw new \Exception('The root storage could not be initialized. Please contact your local administrator.', $exception->getCode(), $exception);
+ } else {
+ \OC_Log::write('core', $exception->getMessage(), \OC_Log::ERROR);
+ }
+ return null;
+ }
+ } else {
+ \OC_Log::write('core', 'storage backend ' . $this->class . ' not found', \OC_Log::ERROR);
+ return null;
+ }
+ }
+
+ /**
+ * @return \OC\Files\Storage\Storage
+ */
+ public function getStorage() {
+ if (is_null($this->storage)) {
+ $this->storage = $this->createStorage();
+ }
+ return $this->storage;
+ }
+
+ /**
+ * @return string
+ */
+ public function getStorageId() {
+ if (!$this->storageId) {
+ if (is_null($this->storage)) {
+ $storage = $this->createStorage(); //FIXME: start using exceptions
+ if (is_null($storage)) {
+ return null;
+ }
+ $this->storage = $storage;
+ }
+ $this->storageId = $this->storage->getId();
+ if (strlen($this->storageId) > 64) {
+ $this->storageId = md5($this->storageId);
+ }
+ }
+ return $this->storageId;
+ }
+
+ /**
+ * @param string $path
+ * @return string
+ */
+ public function getInternalPath($path) {
+ if ($this->mountPoint === $path or $this->mountPoint . '/' === $path) {
+ $internalPath = '';
+ } else {
+ $internalPath = substr($path, strlen($this->mountPoint));
+ }
+ // substr returns false instead of an empty string, we always want a string
+ return (string)$internalPath;
+ }
+
+ /**
+ * @param string $path
+ * @return string
+ */
+ private function formatPath($path) {
+ $path = Filesystem::normalizePath($path);
+ if (strlen($path) > 1) {
+ $path .= '/';
+ }
+ return $path;
+ }
+
+ /**
+ * @param callable $wrapper
+ */
+ public function wrapStorage($wrapper) {
+ $this->storage = $wrapper($this->mountPoint, $this->getStorage());
+ }
+}
$nodes = array();
foreach ($mounts as $mount) {
/**
- * @var \OC\Files\Mount\Mount $mount
+ * @var \OC\Files\Mount\MountPoint $mount
*/
if ($mount->getStorage()) {
$cache = $mount->getStorage()->getCache();
use OC\Files\Cache\Cache;
use OC\Files\Mount\Manager;
-use OC\Files\Mount\Mount;
+use OC\Files\Mount\MountPoint;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
use OC\Hooks\Emitter;
* @param array $arguments
*/
public function mount($storage, $mountPoint, $arguments = array()) {
- $mount = new Mount($storage, $mountPoint, $arguments);
+ $mount = new MountPoint($storage, $mountPoint, $arguments);
$this->mountManager->addMount($mount);
}
/**
* @param string $mountPoint
- * @return \OC\Files\Mount\Mount
+ * @return \OC\Files\Mount\MountPoint
*/
public function getMount($mountPoint) {
return $this->mountManager->find($mountPoint);
/**
* @param string $mountPoint
- * @return \OC\Files\Mount\Mount[]
+ * @return \OC\Files\Mount\MountPoint[]
*/
public function getMountsIn($mountPoint) {
return $this->mountManager->findIn($mountPoint);
/**
* @param string $storageId
- * @return \OC\Files\Mount\Mount[]
+ * @return \OC\Files\Mount\MountPoint[]
*/
public function getMountByStorageId($storageId) {
return $this->mountManager->findByStorageId($storageId);
/**
* @param int $numericId
- * @return Mount[]
+ * @return MountPoint[]
*/
public function getMountByNumericStorageId($numericId) {
return $this->mountManager->findByNumericId($numericId);
}
/**
- * @param \OC\Files\Mount\Mount $mount
+ * @param \OC\Files\Mount\MountPoint $mount
*/
public function unMount($mount) {
$this->mountManager->remove($mount);
+++ /dev/null
-<?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;
-
-class Loader {
- /**
- * @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 callable $callback
- */
- public function addStorageWrapper($wrapperName, $callback) {
- $this->storageWrappers[$wrapperName] = $callback;
- }
-
- /**
- * @param string|boolean $mountPoint
- * @param string $class
- */
- public function load($mountPoint, $class, $arguments) {
- return $this->wrap($mountPoint, new $class($arguments));
- }
-
- /**
- * @param string|boolean $mountPoint
- */
- public function wrap($mountPoint, $storage) {
- foreach ($this->storageWrappers as $wrapper) {
- $storage = $wrapper($mountPoint, $storage);
- }
- return $storage;
- }
-}
--- /dev/null
+<?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;
+ }
+}
* get all storages for $dir
*
* @param string $dir
- * @return \OC\Files\Mount\Mount[]
+ * @return \OC\Files\Mount\MountPoint[]
*/
protected function getMounts($dir) {
//TODO: move to the node based fileapi once that's done
/**
* attach listeners to the scanner
*
- * @param \OC\Files\Mount\Mount $mount
+ * @param \OC\Files\Mount\MountPoint $mount
*/
protected function attachListener($mount) {
$scanner = $mount->getStorage()->getScanner();
if ($internalPath1 === '' and $mount instanceof MoveableMount) {
if ($this->isTargetAllowed($absolutePath2)) {
/**
- * @var \OC\Files\Mount\Mount | \OC\Files\Mount\MoveableMount $mount
+ * @var \OC\Files\Mount\MountPoint | \OC\Files\Mount\MoveableMount $mount
*/
$sourceMountPoint = $mount->getMountPoint();
$result = $mount->moveMount($absolutePath2);
$mounts = array_reverse($mounts);
foreach ($mounts as $mount) {
/**
- * @var \OC\Files\Mount\Mount $mount
+ * @var \OC\Files\Mount\MountPoint $mount
*/
if ($mount->getStorage()) {
$cache = $mount->getStorage()->getCache();
use OC\Diagnostics\NullQueryLogger;
use OC\Diagnostics\EventLogger;
use OC\Diagnostics\QueryLogger;
+use OC\Files\Config\StorageManager;
use OC\Security\CertificateManager;
use OC\DB\ConnectionWrapper;
use OC\Files\Node\Root;
$groupManager = $c->getGroupManager();
return new \OC\App\AppManager($userSession, $appConfig, $groupManager);
});
+ $this->registerService('MountConfigManager', function () {
+ $loader = \OC\Files\Filesystem::getLoader();
+ return new \OC\Files\Config\MountProviderCollection($loader);
+ });
}
/**
function getWebRoot() {
return $this->webRoot;
}
+
+ /**
+ * @return \OCP\Files\Config\IMountProviderCollection
+ */
+ function getMountProviderCollection(){
+ return $this->query('MountConfigManager');
+ }
}
--- /dev/null
+<?php
+/**
+ * Copyright (c) 2014 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 OCP\Files\Config;
+
+use OCP\Files\Storage\IStorageFactory;
+use OCP\IUser;
+
+/**
+ * Provides
+ */
+interface IMountProvider {
+ /**
+ * Get all mountpoints applicable for the user
+ *
+ * @param \OCP\IUser $user
+ * @param \OCP\Files\Storage\IStorageFactory $loader
+ * @return \OCP\Files\Mount\IMountPoint[]
+ */
+ public function getMountsForUser(IUser $user, IStorageFactory $loader);
+}
--- /dev/null
+<?php
+/**
+ * Copyright (c) 2014 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 OCP\Files\Config;
+
+use OCP\IUser;
+
+/**
+ * Manages the different mount providers
+ */
+interface IMountProviderCollection {
+ /**
+ * Get all configured mount points for the user
+ *
+ * @param \OCP\IUser $user
+ * @return \OCP\Files\Mount\IMountPoint[]
+ */
+ public function getMountsForUser(IUser $user);
+
+ /**
+ * Add a provider for mount points
+ *
+ * @param \OCP\Files\Config\IMountProvider $provider
+ */
+ public function registerProvider(IMountProvider $provider);
+}
--- /dev/null
+<?php
+/**
+ * Copyright (c) 2014 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 OCP\Files\Mount;
+
+/**
+ * A storage mounted to folder on the filesystem
+ */
+interface IMountPoint {
+
+ /**
+ * get complete path to the mount point
+ *
+ * @return string
+ */
+ public function getMountPoint();
+
+ /**
+ * Set the mountpoint
+ *
+ * @param string $mountPoint new mount point
+ */
+ public function setMountPoint($mountPoint);
+
+ /**
+ * Get the storage that is mounted
+ *
+ * @return \OC\Files\Storage\Storage
+ */
+ public function getStorage();
+
+ /**
+ * Get the id of the storages
+ *
+ * @return string
+ */
+ public function getStorageId();
+
+ /**
+ * Get the path relative to the mountpoint
+ *
+ * @param string $path absolute path to a file or folder
+ * @return string
+ */
+ public function getInternalPath($path);
+
+ /**
+ * Apply a storage wrapper to the mounted storage
+ *
+ * @param callable $wrapper
+ */
+ public function wrapStorage($wrapper);
+}
--- /dev/null
+<?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 OCP\Files\Storage;
+
+/**
+ * Creates storage instances and manages and applies storage wrappers
+ */
+interface IStorageFactory {
+ /**
+ * 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);
+
+ /**
+ * @param string|boolean $mountPoint
+ * @param string $class
+ * @param array $arguments
+ * @return \OCP\Files\Storage
+ */
+ public function getInstance($mountPoint, $class, $arguments);
+}
* @return string
*/
function getWebRoot();
+
+ /**
+ * @return \OCP\Files\Config\IMountProviderCollection
+ */
+ function getMountProviderCollection();
}
public function testFind() {
$this->assertNull($this->manager->find('/'));
- $rootMount = new \OC\Files\Mount\Mount(new Temporary(array()), '/');
+ $rootMount = new \OC\Files\Mount\MountPoint(new Temporary(array()), '/');
$this->manager->addMount($rootMount);
$this->assertEquals($rootMount, $this->manager->find('/'));
$this->assertEquals($rootMount, $this->manager->find('/foo/bar'));
$storage = new Temporary(array());
- $mount1 = new \OC\Files\Mount\Mount($storage, '/foo');
+ $mount1 = new \OC\Files\Mount\MountPoint($storage, '/foo');
$this->manager->addMount($mount1);
$this->assertEquals($rootMount, $this->manager->find('/'));
$this->assertEquals($mount1, $this->manager->find('/foo/bar'));
$this->assertEquals(1, count($this->manager->findIn('/')));
- $mount2 = new \OC\Files\Mount\Mount(new Temporary(array()), '/bar');
+ $mount2 = new \OC\Files\Mount\MountPoint(new Temporary(array()), '/bar');
$this->manager->addMount($mount2);
$this->assertEquals(2, count($this->manager->findIn('/')));
$id = $mount1->getStorageId();
$this->assertEquals(array($mount1), $this->manager->findByStorageId($id));
- $mount3 = new \OC\Files\Mount\Mount($storage, '/foo/bar');
+ $mount3 = new \OC\Files\Mount\MountPoint($storage, '/foo/bar');
$this->manager->addMount($mount3);
$this->assertEquals(array($mount1, $mount3), $this->manager->findByStorageId($id));
}
public function testLong() {
$storage = new LongId(array());
- $mount = new \OC\Files\Mount\Mount($storage, '/foo');
+ $mount = new \OC\Files\Mount\MountPoint($storage, '/foo');
$this->manager->addMount($mount);
$id = $mount->getStorageId();
namespace Test\Files\Mount;
-use OC\Files\Storage\Loader;
+use OC\Files\Storage\StorageFactory;
use OC\Files\Storage\Wrapper\Wrapper;
class Mount extends \Test\TestCase {
$storage = $this->getMockBuilder('\OC\Files\Storage\Temporary')
->disableOriginalConstructor()
->getMock();
- $mount = new \OC\Files\Mount\Mount($storage, '/foo');
+ $mount = new \OC\Files\Mount\MountPoint($storage, '/foo');
$this->assertInstanceOf('\OC\Files\Storage\Temporary', $mount->getStorage());
}
public function testFromStorageClassname() {
- $mount = new \OC\Files\Mount\Mount('\OC\Files\Storage\Temporary', '/foo');
+ $mount = new \OC\Files\Mount\MountPoint('\OC\Files\Storage\Temporary', '/foo');
$this->assertInstanceOf('\OC\Files\Storage\Temporary', $mount->getStorage());
}
return new Wrapper(array('storage' => $storage));
};
- $loader = new Loader();
+ $loader = new StorageFactory();
$loader->addStorageWrapper('test_wrapper', $wrapper);
$storage = $this->getMockBuilder('\OC\Files\Storage\Temporary')
->disableOriginalConstructor()
->getMock();
- $mount = new \OC\Files\Mount\Mount($storage, '/foo', array(), $loader);
+ $mount = new \OC\Files\Mount\MountPoint($storage, '/foo', array(), $loader);
$this->assertInstanceOf('\OC\Files\Storage\Wrapper\Wrapper', $mount->getStorage());
}
}
use OC\Files\Cache\Cache;
use OC\Files\FileInfo;
-use OC\Files\Mount\Mount;
+use OC\Files\Mount\MountPoint;
use OC\Files\Node\Node;
use OCP\Files\NotFoundException;
use OCP\Files\NotPermittedException;
$cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
$subCache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
$subStorage = $this->getMock('\OC\Files\Storage\Storage');
- $subMount = $this->getMock('\OC\Files\Mount\Mount', array(), array(null, ''));
+ $subMount = $this->getMock('\OC\Files\Mount\MountPoint', array(), array(null, ''));
$subMount->expects($this->once())
->method('getStorage')
->method('getUser')
->will($this->returnValue($this->user));
$storage = $this->getMock('\OC\Files\Storage\Storage');
- $mount = new Mount($storage, '/bar');
+ $mount = new MountPoint($storage, '/bar');
$cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
$view->expects($this->once())
->method('getUser')
->will($this->returnValue($this->user));
$storage = $this->getMock('\OC\Files\Storage\Storage');
- $mount = new Mount($storage, '/bar');
+ $mount = new MountPoint($storage, '/bar');
$cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
$storage->expects($this->once())
->method('getUser')
->will($this->returnValue($this->user));
$storage = $this->getMock('\OC\Files\Storage\Storage');
- $mount1 = new Mount($storage, '/bar');
- $mount2 = new Mount($storage, '/bar/foo/asd');
+ $mount1 = new MountPoint($storage, '/bar');
+ $mount2 = new MountPoint($storage, '/bar/foo/asd');
$cache = $this->getMock('\OC\Files\Cache\Cache', array(), array(''));
$view->expects($this->any())
namespace Test\Files\Utils;
use OC\Files\Filesystem;
-use OC\Files\Mount\Mount;
+use OC\Files\Mount\MountPoint;
use OC\Files\Storage\Temporary;
class TestScanner extends \OC\Files\Utils\Scanner {
/**
- * @var \OC\Files\Mount\Mount[] $mounts
+ * @var \OC\Files\Mount\MountPoint[] $mounts
*/
private $mounts = array();
/**
- * @param \OC\Files\Mount\Mount $mount
+ * @param \OC\Files\Mount\MountPoint $mount
*/
public function addMount($mount) {
$this->mounts[] = $mount;
public function testReuseExistingRoot() {
$storage = new Temporary(array());
- $mount = new Mount($storage, '');
+ $mount = new MountPoint($storage, '');
Filesystem::getMountManager()->addMount($mount);
$cache = $storage->getCache();
public function testReuseExistingFile() {
$storage = new Temporary(array());
- $mount = new Mount($storage, '');
+ $mount = new MountPoint($storage, '');
Filesystem::getMountManager()->addMount($mount);
$cache = $storage->getCache();
$propagator = $this->getMock('\OC\Files\Cache\ChangePropagator', array('propagateChanges'), array(), '', false);
$storage = new Temporary(array());
- $mount = new Mount($storage, '/foo');
+ $mount = new MountPoint($storage, '/foo');
Filesystem::getMountManager()->addMount($mount);
$cache = $storage->getCache();