Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>tags/v18.0.0RC2
@@ -37,12 +37,16 @@ use OCA\WorkflowEngine\Helper\ScopeContext; | |||
use OCA\WorkflowEngine\Service\RuleMatcher; | |||
use OCP\AppFramework\QueryException; | |||
use OCP\DB\QueryBuilder\IQueryBuilder; | |||
use OCP\EventDispatcher\IEventDispatcher; | |||
use OCP\Files\Storage\IStorage; | |||
use OCP\IDBConnection; | |||
use OCP\IL10N; | |||
use OCP\ILogger; | |||
use OCP\IServerContainer; | |||
use OCP\IUserSession; | |||
use OCP\WorkflowEngine\Events\RegisterChecksEvent; | |||
use OCP\WorkflowEngine\Events\RegisterEntitiesEvent; | |||
use OCP\WorkflowEngine\Events\RegisterOperationsEvent; | |||
use OCP\WorkflowEngine\ICheck; | |||
use OCP\WorkflowEngine\IComplexOperation; | |||
use OCP\WorkflowEngine\IEntity; | |||
@@ -50,7 +54,7 @@ use OCP\WorkflowEngine\IEntityEvent; | |||
use OCP\WorkflowEngine\IManager; | |||
use OCP\WorkflowEngine\IOperation; | |||
use OCP\WorkflowEngine\IRuleMatcher; | |||
use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |||
use Symfony\Component\EventDispatcher\EventDispatcherInterface as LegacyDispatcher; | |||
use Symfony\Component\EventDispatcher\GenericEvent; | |||
class Manager implements IManager { | |||
@@ -79,8 +83,8 @@ class Manager implements IManager { | |||
/** @var IL10N */ | |||
protected $l; | |||
/** @var EventDispatcherInterface */ | |||
protected $eventDispatcher; | |||
/** @var LegacyDispatcher */ | |||
protected $legacyEventDispatcher; | |||
/** @var IEntity[] */ | |||
protected $registeredEntities = []; | |||
@@ -100,26 +104,26 @@ class Manager implements IManager { | |||
/** @var IUserSession */ | |||
protected $session; | |||
/** | |||
* @param IDBConnection $connection | |||
* @param IServerContainer $container | |||
* @param IL10N $l | |||
*/ | |||
/** @var IEventDispatcher */ | |||
private $dispatcher; | |||
public function __construct( | |||
IDBConnection $connection, | |||
IServerContainer $container, | |||
IL10N $l, | |||
EventDispatcherInterface $eventDispatcher, | |||
LegacyDispatcher $eventDispatcher, | |||
ILogger $logger, | |||
IUserSession $session | |||
IUserSession $session, | |||
IEventDispatcher $dispatcher | |||
) { | |||
$this->connection = $connection; | |||
$this->container = $container; | |||
$this->l = $l; | |||
$this->eventDispatcher = $eventDispatcher; | |||
$this->legacyEventDispatcher = $eventDispatcher; | |||
$this->logger = $logger; | |||
$this->operationsByScope = new CappedMemoryCache(64); | |||
$this->session = $session; | |||
$this->dispatcher = $dispatcher; | |||
} | |||
public function getRuleMatcher(): IRuleMatcher { | |||
@@ -606,7 +610,8 @@ class Manager implements IManager { | |||
* @return IEntity[] | |||
*/ | |||
public function getEntitiesList(): array { | |||
$this->eventDispatcher->dispatch(IManager::EVENT_NAME_REG_ENTITY, new GenericEvent($this)); | |||
$this->dispatcher->dispatchTyped(new RegisterEntitiesEvent($this)); | |||
$this->legacyEventDispatcher->dispatch(IManager::EVENT_NAME_REG_ENTITY, new GenericEvent($this)); | |||
return array_values(array_merge($this->getBuildInEntities(), $this->registeredEntities)); | |||
} | |||
@@ -615,7 +620,8 @@ class Manager implements IManager { | |||
* @return IOperation[] | |||
*/ | |||
public function getOperatorList(): array { | |||
$this->eventDispatcher->dispatch(IManager::EVENT_NAME_REG_OPERATION, new GenericEvent($this)); | |||
$this->dispatcher->dispatchTyped(new RegisterOperationsEvent($this)); | |||
$this->legacyEventDispatcher->dispatch(IManager::EVENT_NAME_REG_OPERATION, new GenericEvent($this)); | |||
return array_merge($this->getBuildInOperators(), $this->registeredOperators); | |||
} | |||
@@ -624,7 +630,8 @@ class Manager implements IManager { | |||
* @return ICheck[] | |||
*/ | |||
public function getCheckList(): array { | |||
$this->eventDispatcher->dispatch(IManager::EVENT_NAME_REG_CHECK, new GenericEvent($this)); | |||
$this->dispatcher->dispatchTyped(new RegisterChecksEvent($this)); | |||
$this->legacyEventDispatcher->dispatch(IManager::EVENT_NAME_REG_CHECK, new GenericEvent($this)); | |||
return array_merge($this->getBuildInChecks(), $this->registeredChecks); | |||
} |
@@ -26,6 +26,7 @@ use OC\L10N\L10N; | |||
use OCA\WorkflowEngine\Entity\File; | |||
use OCA\WorkflowEngine\Helper\ScopeContext; | |||
use OCA\WorkflowEngine\Manager; | |||
use OCP\EventDispatcher\IEventDispatcher; | |||
use OCP\Files\IRootFolder; | |||
use OCP\IDBConnection; | |||
use OCP\IL10N; | |||
@@ -57,13 +58,15 @@ class ManagerTest extends TestCase { | |||
/** @var \PHPUnit\Framework\MockObject\MockObject|ILogger */ | |||
protected $logger; | |||
/** @var \PHPUnit\Framework\MockObject\MockObject|EventDispatcherInterface */ | |||
protected $eventDispatcher; | |||
protected $legacyDispatcher; | |||
/** @var MockObject|IServerContainer */ | |||
protected $container; | |||
/** @var MockObject|IUserSession */ | |||
protected $session; | |||
/** @var MockObject|L10N */ | |||
protected $l; | |||
/** @var MockObject|IEventDispatcher */ | |||
protected $dispatcher; | |||
protected function setUp(): void { | |||
parent::setUp(); | |||
@@ -77,17 +80,19 @@ class ManagerTest extends TestCase { | |||
return vsprintf($text, $parameters); | |||
})); | |||
$this->eventDispatcher = $this->createMock(EventDispatcherInterface::class); | |||
$this->legacyDispatcher = $this->createMock(EventDispatcherInterface::class); | |||
$this->logger = $this->createMock(ILogger::class); | |||
$this->session = $this->createMock(IUserSession::class); | |||
$this->dispatcher = $this->createMock(IEventDispatcher::class); | |||
$this->manager = new Manager( | |||
\OC::$server->getDatabaseConnection(), | |||
$this->container, | |||
$this->l, | |||
$this->eventDispatcher, | |||
$this->legacyDispatcher, | |||
$this->logger, | |||
$this->session | |||
$this->session, | |||
$this->dispatcher | |||
); | |||
$this->clearTables(); | |||
} | |||
@@ -402,7 +407,7 @@ class ManagerTest extends TestCase { | |||
/** @var MockObject|IEntity $extraEntity */ | |||
$extraEntity = $this->createMock(IEntity::class); | |||
$this->eventDispatcher->expects($this->once()) | |||
$this->legacyDispatcher->expects($this->once()) | |||
->method('dispatch') | |||
->with('OCP\WorkflowEngine::registerEntities', $this->anything()) | |||
->willReturnCallback(function() use ($extraEntity) { |
@@ -489,6 +489,9 @@ return array( | |||
'OCP\\WorkflowEngine\\EntityContext\\IDisplayText' => $baseDir . '/lib/public/WorkflowEngine/EntityContext/IDisplayText.php', | |||
'OCP\\WorkflowEngine\\EntityContext\\IIcon' => $baseDir . '/lib/public/WorkflowEngine/EntityContext/IIcon.php', | |||
'OCP\\WorkflowEngine\\EntityContext\\IUrl' => $baseDir . '/lib/public/WorkflowEngine/EntityContext/IUrl.php', | |||
'OCP\\WorkflowEngine\\Events\\RegisterChecksEvent' => $baseDir . '/lib/public/WorkflowEngine/Events/RegisterChecksEvent.php', | |||
'OCP\\WorkflowEngine\\Events\\RegisterEntitiesEvent' => $baseDir . '/lib/public/WorkflowEngine/Events/RegisterEntitiesEvent.php', | |||
'OCP\\WorkflowEngine\\Events\\RegisterOperationsEvent' => $baseDir . '/lib/public/WorkflowEngine/Events/RegisterOperationsEvent.php', | |||
'OCP\\WorkflowEngine\\GenericEntityEvent' => $baseDir . '/lib/public/WorkflowEngine/GenericEntityEvent.php', | |||
'OCP\\WorkflowEngine\\ICheck' => $baseDir . '/lib/public/WorkflowEngine/ICheck.php', | |||
'OCP\\WorkflowEngine\\IComplexOperation' => $baseDir . '/lib/public/WorkflowEngine/IComplexOperation.php', |
@@ -518,6 +518,9 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c | |||
'OCP\\WorkflowEngine\\EntityContext\\IDisplayText' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/EntityContext/IDisplayText.php', | |||
'OCP\\WorkflowEngine\\EntityContext\\IIcon' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/EntityContext/IIcon.php', | |||
'OCP\\WorkflowEngine\\EntityContext\\IUrl' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/EntityContext/IUrl.php', | |||
'OCP\\WorkflowEngine\\Events\\RegisterChecksEvent' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/Events/RegisterChecksEvent.php', | |||
'OCP\\WorkflowEngine\\Events\\RegisterEntitiesEvent' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/Events/RegisterEntitiesEvent.php', | |||
'OCP\\WorkflowEngine\\Events\\RegisterOperationsEvent' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/Events/RegisterOperationsEvent.php', | |||
'OCP\\WorkflowEngine\\GenericEntityEvent' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/GenericEntityEvent.php', | |||
'OCP\\WorkflowEngine\\ICheck' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/ICheck.php', | |||
'OCP\\WorkflowEngine\\IComplexOperation' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IComplexOperation.php', |
@@ -0,0 +1,54 @@ | |||
<?php | |||
declare(strict_types=1); | |||
/** | |||
* @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl> | |||
* | |||
* @author Roeland Jago Douma <roeland@famdouma.nl> | |||
* | |||
* @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\WorkflowEngine\Events; | |||
use OCP\EventDispatcher\Event; | |||
use OCP\WorkflowEngine\ICheck; | |||
use OCP\WorkflowEngine\IManager; | |||
/** | |||
* @since 18.0.0 | |||
*/ | |||
class RegisterChecksEvent extends Event { | |||
/** @var IManager */ | |||
private $manager; | |||
/** | |||
* @since 18.0.0 | |||
*/ | |||
public function __construct(IManager $manager) { | |||
parent::__construct(); | |||
$this->manager = $manager; | |||
} | |||
/** | |||
* @since 18.0.0 | |||
*/ | |||
public function registerCheck(ICheck $check): void { | |||
$this->manager->registerCheck($check); | |||
} | |||
} |
@@ -0,0 +1,54 @@ | |||
<?php | |||
declare(strict_types=1); | |||
/** | |||
* @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl> | |||
* | |||
* @author Roeland Jago Douma <roeland@famdouma.nl> | |||
* | |||
* @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\WorkflowEngine\Events; | |||
use OCP\EventDispatcher\Event; | |||
use OCP\WorkflowEngine\IEntity; | |||
use OCP\WorkflowEngine\IManager; | |||
/** | |||
* @since 18.0.0 | |||
*/ | |||
class RegisterEntitiesEvent extends Event { | |||
/** @var IManager */ | |||
private $manager; | |||
/** | |||
* @since 18.0.0 | |||
*/ | |||
public function __construct(IManager $manager) { | |||
parent::__construct(); | |||
$this->manager = $manager; | |||
} | |||
/** | |||
* @since 18.0.0 | |||
*/ | |||
public function registerEntity(IEntity $entity): void { | |||
$this->manager->registerEntity($entity); | |||
} | |||
} |
@@ -0,0 +1,54 @@ | |||
<?php | |||
declare(strict_types=1); | |||
/** | |||
* @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl> | |||
* | |||
* @author Roeland Jago Douma <roeland@famdouma.nl> | |||
* | |||
* @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\WorkflowEngine\Events; | |||
use OCP\EventDispatcher\Event; | |||
use OCP\WorkflowEngine\IManager; | |||
use OCP\WorkflowEngine\IOperation; | |||
/** | |||
* @since 18.0.0 | |||
*/ | |||
class RegisterOperationsEvent extends Event { | |||
/** @var IManager */ | |||
private $manager; | |||
/** | |||
* @since 18.0.0 | |||
*/ | |||
public function __construct(IManager $manager) { | |||
parent::__construct(); | |||
$this->manager = $manager; | |||
} | |||
/** | |||
* @since 18.0.0 | |||
*/ | |||
public function registerOperation(IOperation $operation): void { | |||
$this->manager->registerOperation($operation); | |||
} | |||
} |
@@ -35,29 +35,32 @@ interface IManager { | |||
const SCOPE_ADMIN = 0; | |||
const SCOPE_USER = 1; | |||
/** | |||
* @depreacted Will be removed in NC19. Use the dedicated events in OCP\WorkflowEngine\Events | |||
*/ | |||
const EVENT_NAME_REG_OPERATION = 'OCP\WorkflowEngine::registerOperations'; | |||
const EVENT_NAME_REG_ENTITY = 'OCP\WorkflowEngine::registerEntities'; | |||
const EVENT_NAME_REG_CHECK = 'OCP\WorkflowEngine::registerChecks'; | |||
/** | |||
* Listen to `\OCP\WorkflowEngine::EVENT_NAME_REG_ENTITY` at the | |||
* EventDispatcher for registering your entities. | |||
* Listen to `OCP\WorkflowEngine\Events\RegisterEntitiesEvent` at the | |||
* IEventDispatcher for registering your entities. | |||
* | |||
* @since 18.0.0 | |||
*/ | |||
public function registerEntity(IEntity $entity): void; | |||
/** | |||
* Listen to `\OCP\WorkflowEngine::EVENT_NAME_REG_OPERATION` at the | |||
* EventDispatcher for registering your operators. | |||
* Listen to `OCP\WorkflowEngine\Events\RegisterOperationsEvent` at the | |||
* IEventDispatcher for registering your operators. | |||
* | |||
* @since 18.0.0 | |||
*/ | |||
public function registerOperation(IOperation $operator): void; | |||
/** | |||
* Listen to `\OCP\WorkflowEngine::EVENT_NAME_REG_CHECK` at the | |||
* EventDispatcher for registering your operators. | |||
* Listen to `OCP\WorkflowEngine\Events\RegisterChecksEvent` at the | |||
* IEventDispatcher for registering your operators. | |||
* | |||
* @since 18.0.0 | |||
*/ |