diff options
author | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2019-10-22 14:47:55 +0300 |
---|---|---|
committer | Arthur Schiwon <blizzz@arthur-schiwon.de> | 2019-11-26 12:23:33 +0300 |
commit | 1b8cbf115af9e3f0b0997dff2b303d8fae7ca3e9 (patch) | |
tree | e98554f68a57bdd04359957121f37e122c89c77a /lib/public/EventDispatcher | |
parent | dfe85ae0c2c542178657a0a610ecea9f7cd1cea6 (diff) |
add Nextcloud specific GenericEvent implementation
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Diffstat (limited to 'lib/public/EventDispatcher')
-rw-r--r-- | lib/public/EventDispatcher/GenericEvent.php | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/lib/public/EventDispatcher/GenericEvent.php b/lib/public/EventDispatcher/GenericEvent.php new file mode 100644 index 00000000000..4607e6621ae --- /dev/null +++ b/lib/public/EventDispatcher/GenericEvent.php @@ -0,0 +1,169 @@ +<?php +declare(strict_types=1); +/** + * @copyright Copyright (c) 2019 Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @author Arthur Schiwon <blizzz@arthur-schiwon.de> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * 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 + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +namespace OCP\EventDispatcher; + +use ArrayAccess; +use ArrayIterator; +use InvalidArgumentException; +use IteratorAggregate; +use Traversable; +use function array_key_exists; + +/** + * Class GenericEvent + * + * convenience reimplementation of \Symfony\Component\GenericEvent against + * \OCP\EventDispatcher\Event + * + * @package OCP\EventDispatcher + * @since 18.0.0 + */ +class GenericEvent extends Event implements ArrayAccess, IteratorAggregate { + protected $subject; + protected $arguments; + + /** + * Encapsulate an event with $subject and $args. + * + * @since 18.0.0 + */ + public function __construct($subject = null, array $arguments = []) { + $this->subject = $subject; + $this->arguments = $arguments; + } + + /** + * Getter for subject property. + * + * @since 18.0.0 + */ + public function getSubject() { + return $this->subject; + } + + /** + * Get argument by key. + * + * @throws InvalidArgumentException if key is not found + * @since 18.0.0 + */ + public function getArgument(string $key) { + if ($this->hasArgument($key)) { + return $this->arguments[$key]; + } + + throw new InvalidArgumentException(sprintf('Argument "%s" not found.', $key)); + } + + /** + * Add argument to event. + * + * @since 18.0.0 + */ + public function setArgument($key, $value): GenericEvent { + $this->arguments[$key] = $value; + return $this; + } + + /** + * Getter for all arguments. + * + * @since 18.0.0 + */ + public function getArguments(): array { + return $this->arguments; + } + + /** + * Set args property. + * + * @since 18.0.0 + */ + public function setArguments(array $args = []): GenericEvent { + $this->arguments = $args; + return $this; + } + + /** + * Has argument. + * + * @since 18.0.0 + */ + public function hasArgument($key): bool { + return array_key_exists($key, $this->arguments); + } + + /** + * Retrieve an external iterator + * + * @link https://php.net/manual/en/iteratoraggregate.getiterator.php + * @since 18.0.0 + */ + public function getIterator(): Traversable { + return new ArrayIterator($this->arguments); + } + + /** + * Whether a offset exists + * + * @link https://php.net/manual/en/arrayaccess.offsetexists.php + * @since 18.0.0 + */ + public function offsetExists($offset): bool { + return $this->hasArgument($offset); + } + + /** + * Offset to retrieve + * + * @link https://php.net/manual/en/arrayaccess.offsetget.php + * @since 18.0.0 + */ + public function offsetGet($offset) { + return $this->arguments[$offset]; + } + + /** + * Offset to set + * + * @link https://php.net/manual/en/arrayaccess.offsetset.php + * @since 18.0.0 + */ + public function offsetSet($offset, $value): void { + $this->setArgument($offset, $value); + } + + /** + * Offset to unset + * + * @link https://php.net/manual/en/arrayaccess.offsetunset.php + * @since 18.0.0 + */ + public function offsetUnset($offset): void { + if ($this->hasArgument($offset)) { + unset($this->arguments[$offset]); + } + } +} |