From 5c6079cd89376c7852f23f6e51b8fdd6425bd11e Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Fri, 15 Apr 2016 12:01:13 +0200 Subject: Move \OC\Command to PSR-4 --- lib/private/Command/AsyncBus.php | 140 ++++++++++++++++++++++++++++++++++++ lib/private/Command/CallableJob.php | 35 +++++++++ lib/private/Command/ClosureJob.php | 37 ++++++++++ lib/private/Command/CommandJob.php | 39 ++++++++++ lib/private/Command/FileAccess.php | 35 +++++++++ lib/private/Command/QueueBus.php | 72 +++++++++++++++++++ lib/private/command/asyncbus.php | 140 ------------------------------------ lib/private/command/callablejob.php | 35 --------- lib/private/command/closurejob.php | 37 ---------- lib/private/command/commandjob.php | 39 ---------- lib/private/command/fileaccess.php | 35 --------- lib/private/command/queuebus.php | 72 ------------------- 12 files changed, 358 insertions(+), 358 deletions(-) create mode 100644 lib/private/Command/AsyncBus.php create mode 100644 lib/private/Command/CallableJob.php create mode 100644 lib/private/Command/ClosureJob.php create mode 100644 lib/private/Command/CommandJob.php create mode 100644 lib/private/Command/FileAccess.php create mode 100644 lib/private/Command/QueueBus.php delete mode 100644 lib/private/command/asyncbus.php delete mode 100644 lib/private/command/callablejob.php delete mode 100644 lib/private/command/closurejob.php delete mode 100644 lib/private/command/commandjob.php delete mode 100644 lib/private/command/fileaccess.php delete mode 100644 lib/private/command/queuebus.php diff --git a/lib/private/Command/AsyncBus.php b/lib/private/Command/AsyncBus.php new file mode 100644 index 00000000000..eb692f9a8fb --- /dev/null +++ b/lib/private/Command/AsyncBus.php @@ -0,0 +1,140 @@ + + * + * @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\Command; + +use OCP\Command\IBus; +use OCP\Command\ICommand; +use SuperClosure\Serializer; + +/** + * Asynchronous command bus that uses the background job system as backend + */ +class AsyncBus implements IBus { + /** + * @var \OCP\BackgroundJob\IJobList + */ + private $jobList; + + /** + * List of traits for command which require sync execution + * + * @var string[] + */ + private $syncTraits = []; + + /** + * @param \OCP\BackgroundJob\IJobList $jobList + */ + function __construct($jobList) { + $this->jobList = $jobList; + } + + /** + * Schedule a command to be fired + * + * @param \OCP\Command\ICommand | callable $command + */ + public function push($command) { + if ($this->canRunAsync($command)) { + $this->jobList->add($this->getJobClass($command), $this->serializeCommand($command)); + } else { + $this->runCommand($command); + } + } + + /** + * Require all commands using a trait to be run synchronous + * + * @param string $trait + */ + public function requireSync($trait) { + $this->syncTraits[] = trim($trait, '\\'); + } + + /** + * @param \OCP\Command\ICommand | callable $command + */ + private function runCommand($command) { + if ($command instanceof ICommand) { + $command->handle(); + } else { + $command(); + } + } + + /** + * @param \OCP\Command\ICommand | callable $command + * @return string + */ + private function getJobClass($command) { + if ($command instanceof \Closure) { + return 'OC\Command\ClosureJob'; + } else if (is_callable($command)) { + return 'OC\Command\CallableJob'; + } else if ($command instanceof ICommand) { + return 'OC\Command\CommandJob'; + } else { + throw new \InvalidArgumentException('Invalid command'); + } + } + + /** + * @param \OCP\Command\ICommand | callable $command + * @return string + */ + private function serializeCommand($command) { + if ($command instanceof \Closure) { + $serializer = new Serializer(); + return $serializer->serialize($command); + } else if (is_callable($command) or $command instanceof ICommand) { + return serialize($command); + } else { + throw new \InvalidArgumentException('Invalid command'); + } + } + + /** + * @param \OCP\Command\ICommand | callable $command + * @return bool + */ + private function canRunAsync($command) { + $traits = $this->getTraits($command); + foreach ($traits as $trait) { + if (array_search($trait, $this->syncTraits) !== false) { + return false; + } + } + return true; + } + + /** + * @param \OCP\Command\ICommand | callable $command + * @return string[] + */ + private function getTraits($command) { + if ($command instanceof ICommand) { + return class_uses($command); + } else { + return []; + } + } +} diff --git a/lib/private/Command/CallableJob.php b/lib/private/Command/CallableJob.php new file mode 100644 index 00000000000..acfeb83d606 --- /dev/null +++ b/lib/private/Command/CallableJob.php @@ -0,0 +1,35 @@ + + * + * @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\Command; + +use OC\BackgroundJob\QueuedJob; + +class CallableJob extends QueuedJob { + protected function run($serializedCallable) { + $callable = unserialize($serializedCallable); + if (is_callable($callable)) { + $callable(); + } else { + throw new \InvalidArgumentException('Invalid serialized callable'); + } + } +} diff --git a/lib/private/Command/ClosureJob.php b/lib/private/Command/ClosureJob.php new file mode 100644 index 00000000000..be2b5f0a4ba --- /dev/null +++ b/lib/private/Command/ClosureJob.php @@ -0,0 +1,37 @@ + + * + * @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\Command; + +use OC\BackgroundJob\QueuedJob; +use SuperClosure\Serializer; + +class ClosureJob extends QueuedJob { + protected function run($serializedCallable) { + $serializer = new Serializer(); + $callable = $serializer->unserialize($serializedCallable); + if (is_callable($callable)) { + $callable(); + } else { + throw new \InvalidArgumentException('Invalid serialized callable'); + } + } +} diff --git a/lib/private/Command/CommandJob.php b/lib/private/Command/CommandJob.php new file mode 100644 index 00000000000..5d613c0305b --- /dev/null +++ b/lib/private/Command/CommandJob.php @@ -0,0 +1,39 @@ + + * + * @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\Command; + +use OC\BackgroundJob\QueuedJob; +use OCP\Command\ICommand; + +/** + * Wrap a command in the background job interface + */ +class CommandJob extends QueuedJob { + protected function run($serializedCommand) { + $command = unserialize($serializedCommand); + if ($command instanceof ICommand) { + $command->handle(); + } else { + throw new \InvalidArgumentException('Invalid serialized command'); + } + } +} diff --git a/lib/private/Command/FileAccess.php b/lib/private/Command/FileAccess.php new file mode 100644 index 00000000000..6fe3e111aef --- /dev/null +++ b/lib/private/Command/FileAccess.php @@ -0,0 +1,35 @@ + + * + * @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\Command; + +use OCP\IUser; + +trait FileAccess { + protected function setupFS(IUser $user){ + \OC_Util::setupFS($user->getUID()); + } + + protected function getUserFolder(IUser $user) { + $this->setupFS($user); + return \OC::$server->getUserFolder($user->getUID()); + } +} diff --git a/lib/private/Command/QueueBus.php b/lib/private/Command/QueueBus.php new file mode 100644 index 00000000000..be4ee589e6f --- /dev/null +++ b/lib/private/Command/QueueBus.php @@ -0,0 +1,72 @@ + + * + * @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\Command; + +use OCP\Command\IBus; +use OCP\Command\ICommand; + +class QueueBus implements IBus { + /** + * @var (ICommand|callable)[] + */ + private $queue = []; + + /** + * Schedule a command to be fired + * + * @param \OCP\Command\ICommand | callable $command + */ + public function push($command) { + $this->queue[] = $command; + } + + /** + * Require all commands using a trait to be run synchronous + * + * @param string $trait + */ + public function requireSync($trait) { + } + + /** + * @param \OCP\Command\ICommand | callable $command + */ + private function runCommand($command) { + if ($command instanceof ICommand) { + // ensure the command can be serialized + $serialized = serialize($command); + if(strlen($serialized) > 4000) { + throw new \InvalidArgumentException('Trying to push a command which serialized form can not be stored in the database (>4000 character)'); + } + $unserialized = unserialize($serialized); + $unserialized->handle(); + } else { + $command(); + } + } + + public function run() { + while ($command = array_shift($this->queue)) { + $this->runCommand($command); + } + } +} diff --git a/lib/private/command/asyncbus.php b/lib/private/command/asyncbus.php deleted file mode 100644 index eb692f9a8fb..00000000000 --- a/lib/private/command/asyncbus.php +++ /dev/null @@ -1,140 +0,0 @@ - - * - * @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\Command; - -use OCP\Command\IBus; -use OCP\Command\ICommand; -use SuperClosure\Serializer; - -/** - * Asynchronous command bus that uses the background job system as backend - */ -class AsyncBus implements IBus { - /** - * @var \OCP\BackgroundJob\IJobList - */ - private $jobList; - - /** - * List of traits for command which require sync execution - * - * @var string[] - */ - private $syncTraits = []; - - /** - * @param \OCP\BackgroundJob\IJobList $jobList - */ - function __construct($jobList) { - $this->jobList = $jobList; - } - - /** - * Schedule a command to be fired - * - * @param \OCP\Command\ICommand | callable $command - */ - public function push($command) { - if ($this->canRunAsync($command)) { - $this->jobList->add($this->getJobClass($command), $this->serializeCommand($command)); - } else { - $this->runCommand($command); - } - } - - /** - * Require all commands using a trait to be run synchronous - * - * @param string $trait - */ - public function requireSync($trait) { - $this->syncTraits[] = trim($trait, '\\'); - } - - /** - * @param \OCP\Command\ICommand | callable $command - */ - private function runCommand($command) { - if ($command instanceof ICommand) { - $command->handle(); - } else { - $command(); - } - } - - /** - * @param \OCP\Command\ICommand | callable $command - * @return string - */ - private function getJobClass($command) { - if ($command instanceof \Closure) { - return 'OC\Command\ClosureJob'; - } else if (is_callable($command)) { - return 'OC\Command\CallableJob'; - } else if ($command instanceof ICommand) { - return 'OC\Command\CommandJob'; - } else { - throw new \InvalidArgumentException('Invalid command'); - } - } - - /** - * @param \OCP\Command\ICommand | callable $command - * @return string - */ - private function serializeCommand($command) { - if ($command instanceof \Closure) { - $serializer = new Serializer(); - return $serializer->serialize($command); - } else if (is_callable($command) or $command instanceof ICommand) { - return serialize($command); - } else { - throw new \InvalidArgumentException('Invalid command'); - } - } - - /** - * @param \OCP\Command\ICommand | callable $command - * @return bool - */ - private function canRunAsync($command) { - $traits = $this->getTraits($command); - foreach ($traits as $trait) { - if (array_search($trait, $this->syncTraits) !== false) { - return false; - } - } - return true; - } - - /** - * @param \OCP\Command\ICommand | callable $command - * @return string[] - */ - private function getTraits($command) { - if ($command instanceof ICommand) { - return class_uses($command); - } else { - return []; - } - } -} diff --git a/lib/private/command/callablejob.php b/lib/private/command/callablejob.php deleted file mode 100644 index acfeb83d606..00000000000 --- a/lib/private/command/callablejob.php +++ /dev/null @@ -1,35 +0,0 @@ - - * - * @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\Command; - -use OC\BackgroundJob\QueuedJob; - -class CallableJob extends QueuedJob { - protected function run($serializedCallable) { - $callable = unserialize($serializedCallable); - if (is_callable($callable)) { - $callable(); - } else { - throw new \InvalidArgumentException('Invalid serialized callable'); - } - } -} diff --git a/lib/private/command/closurejob.php b/lib/private/command/closurejob.php deleted file mode 100644 index be2b5f0a4ba..00000000000 --- a/lib/private/command/closurejob.php +++ /dev/null @@ -1,37 +0,0 @@ - - * - * @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\Command; - -use OC\BackgroundJob\QueuedJob; -use SuperClosure\Serializer; - -class ClosureJob extends QueuedJob { - protected function run($serializedCallable) { - $serializer = new Serializer(); - $callable = $serializer->unserialize($serializedCallable); - if (is_callable($callable)) { - $callable(); - } else { - throw new \InvalidArgumentException('Invalid serialized callable'); - } - } -} diff --git a/lib/private/command/commandjob.php b/lib/private/command/commandjob.php deleted file mode 100644 index 5d613c0305b..00000000000 --- a/lib/private/command/commandjob.php +++ /dev/null @@ -1,39 +0,0 @@ - - * - * @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\Command; - -use OC\BackgroundJob\QueuedJob; -use OCP\Command\ICommand; - -/** - * Wrap a command in the background job interface - */ -class CommandJob extends QueuedJob { - protected function run($serializedCommand) { - $command = unserialize($serializedCommand); - if ($command instanceof ICommand) { - $command->handle(); - } else { - throw new \InvalidArgumentException('Invalid serialized command'); - } - } -} diff --git a/lib/private/command/fileaccess.php b/lib/private/command/fileaccess.php deleted file mode 100644 index 6fe3e111aef..00000000000 --- a/lib/private/command/fileaccess.php +++ /dev/null @@ -1,35 +0,0 @@ - - * - * @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\Command; - -use OCP\IUser; - -trait FileAccess { - protected function setupFS(IUser $user){ - \OC_Util::setupFS($user->getUID()); - } - - protected function getUserFolder(IUser $user) { - $this->setupFS($user); - return \OC::$server->getUserFolder($user->getUID()); - } -} diff --git a/lib/private/command/queuebus.php b/lib/private/command/queuebus.php deleted file mode 100644 index be4ee589e6f..00000000000 --- a/lib/private/command/queuebus.php +++ /dev/null @@ -1,72 +0,0 @@ - - * - * @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\Command; - -use OCP\Command\IBus; -use OCP\Command\ICommand; - -class QueueBus implements IBus { - /** - * @var (ICommand|callable)[] - */ - private $queue = []; - - /** - * Schedule a command to be fired - * - * @param \OCP\Command\ICommand | callable $command - */ - public function push($command) { - $this->queue[] = $command; - } - - /** - * Require all commands using a trait to be run synchronous - * - * @param string $trait - */ - public function requireSync($trait) { - } - - /** - * @param \OCP\Command\ICommand | callable $command - */ - private function runCommand($command) { - if ($command instanceof ICommand) { - // ensure the command can be serialized - $serialized = serialize($command); - if(strlen($serialized) > 4000) { - throw new \InvalidArgumentException('Trying to push a command which serialized form can not be stored in the database (>4000 character)'); - } - $unserialized = unserialize($serialized); - $unserialized->handle(); - } else { - $command(); - } - } - - public function run() { - while ($command = array_shift($this->queue)) { - $this->runCommand($command); - } - } -} -- cgit v1.2.3