Skip to content

Commit

Permalink
Use the new Events in Flow
Browse files Browse the repository at this point in the history
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
  • Loading branch information
rullzer committed Dec 27, 2019
1 parent f3232fc commit 39a597f
Show file tree
Hide file tree
Showing 7 changed files with 198 additions and 20 deletions.
35 changes: 21 additions & 14 deletions apps/workflowengine/lib/Manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,20 +37,24 @@
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;
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 {
Expand Down Expand Up @@ -79,8 +83,8 @@ class Manager implements IManager {
/** @var IL10N */
protected $l;

/** @var EventDispatcherInterface */
protected $eventDispatcher;
/** @var LegacyDispatcher */
protected $legacyEventDispatcher;

/** @var IEntity[] */
protected $registeredEntities = [];
Expand All @@ -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 {
Expand Down Expand Up @@ -606,7 +610,8 @@ public function formatOperation(array $operation): array {
* @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));
}
Expand All @@ -615,7 +620,8 @@ public function getEntitiesList(): array {
* @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);
}
Expand All @@ -624,7 +630,8 @@ public function getOperatorList(): array {
* @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);
}
Expand Down
3 changes: 3 additions & 0 deletions lib/composer/composer/autoload_classmap.php
Original file line number Diff line number Diff line change
Expand Up @@ -489,6 +489,9 @@
'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',
Expand Down
3 changes: 3 additions & 0 deletions lib/composer/composer/autoload_static.php
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
54 changes: 54 additions & 0 deletions lib/public/WorkflowEngine/Events/RegisterChecksEvent.php
Original file line number Diff line number Diff line change
@@ -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);
}
}
54 changes: 54 additions & 0 deletions lib/public/WorkflowEngine/Events/RegisterEntitiesEvent.php
Original file line number Diff line number Diff line change
@@ -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);
}
}
54 changes: 54 additions & 0 deletions lib/public/WorkflowEngine/Events/RegisterOperationsEvent.php
Original file line number Diff line number Diff line change
@@ -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);
}
}
15 changes: 9 additions & 6 deletions lib/public/WorkflowEngine/IManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
*/
Expand Down

0 comments on commit 39a597f

Please sign in to comment.