* * @copyright Copyright (c) 2016, ownCloud, Inc. * @license AGPL-3.0 * * This code is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License, version 3, * along with this program. If not, see * */ namespace OC\Share20; use OC\Share20\Exception\ProviderException; use OCP\IServerContainer; /** * Class ProviderFactory * * @package OC\Share20 */ class ProviderFactory implements IProviderFactory { /** @var IServerContainer */ private $serverContainer; /** @var DefaultShareProvider */ private $defaultProvider = null; /** * IProviderFactory constructor. * @param IServerContainer $serverContainer */ public function __construct(IServerContainer $serverContainer) { $this->serverContainer = $serverContainer; } /** * Create the default share provider. * * @return DefaultShareProvider */ protected function defaultShareProvider() { if ($this->defaultProvider === null) { $this->defaultProvider = new DefaultShareProvider( $this->serverContainer->getDatabaseConnection(), $this->serverContainer->getUserManager(), $this->serverContainer->getGroupManager(), $this->serverContainer->getRootFolder() ); } return $this->defaultProvider; } /** * @inheritdoc */ public function getProvider($id) { if ($id === 'ocinternal') { return $this->defaultShareProvider(); } throw new ProviderException('No provider with id .' . $id . ' found.'); } /** * @inheritdoc */ public function getProviderForType($shareType) { //FIXME we should not report type 2 if ($shareType === \OCP\Share::SHARE_TYPE_USER || $shareType === 2 || $shareType === \OCP\Share::SHARE_TYPE_GROUP || $shareType === \OCP\Share::SHARE_TYPE_LINK) { return $this->defaultShareProvider(); } throw new ProviderException('No share provider for share type ' . $shareType); } }