From 4c2fdbb9085514692bb86a73bb415a41ccd209f4 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Tue, 27 Aug 2019 16:52:00 +0200 Subject: [PATCH] merge IOperator with IOperation for simplicity Signed-off-by: Arthur Schiwon --- apps/workflowengine/lib/Manager.php | 15 ++- .../workflowengine/lib/Settings/ASettings.php | 16 ++-- lib/composer/composer/autoload_classmap.php | 5 +- lib/composer/composer/autoload_static.php | 5 +- ...plexOperator.php => IComplexOperation.php} | 4 +- lib/public/WorkflowEngine/IManager.php | 5 +- lib/public/WorkflowEngine/IOperation.php | 54 ++++++++++- lib/public/WorkflowEngine/IOperator.php | 91 ------------------- ...ficOperator.php => ISpecificOperation.php} | 4 +- 9 files changed, 77 insertions(+), 122 deletions(-) rename lib/public/WorkflowEngine/{IComplexOperator.php => IComplexOperation.php} (94%) delete mode 100644 lib/public/WorkflowEngine/IOperator.php rename lib/public/WorkflowEngine/{ISpecificOperator.php => ISpecificOperation.php} (94%) diff --git a/apps/workflowengine/lib/Manager.php b/apps/workflowengine/lib/Manager.php index d19aa31547..0a1b7fab6c 100644 --- a/apps/workflowengine/lib/Manager.php +++ b/apps/workflowengine/lib/Manager.php @@ -40,7 +40,6 @@ use OCP\WorkflowEngine\IEntity; use OCP\WorkflowEngine\IEntityAware; use OCP\WorkflowEngine\IManager; use OCP\WorkflowEngine\IOperation; -use OCP\WorkflowEngine\IOperator; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\EventDispatcher\GenericEvent; @@ -76,7 +75,7 @@ class Manager implements IManager, IEntityAware { /** @var IEntity[] */ protected $registeredEntities = []; - /** @var IOperator[] */ + /** @var IOperation[] */ protected $registeredOperators = []; /** @var ILogger */ @@ -550,16 +549,16 @@ class Manager implements IManager, IEntityAware { * @return IEntity[] */ public function getEntitiesList(): array { - $this->eventDispatcher->dispatch('OCP\WorkflowEngine::registerEntities', new GenericEvent($this)); + $this->eventDispatcher->dispatch(IManager::EVENT_NAME_REG_ENTITY, new GenericEvent($this)); return array_merge($this->getBuildInEntities(), $this->registeredEntities); } /** - * @return IOperator[] + * @return IOperation[] */ public function getOperatorList(): array { - $this->eventDispatcher->dispatch('OCP\WorkflowEngine::registerOperators', new GenericEvent($this)); + $this->eventDispatcher->dispatch(IManager::EVENT_NAME_REG_OPERATION, new GenericEvent($this)); return array_merge($this->getBuildInOperators(), $this->registeredOperators); } @@ -574,8 +573,8 @@ class Manager implements IManager, IEntityAware { $this->registeredEntities[$entity->getId()] = $entity; } - public function registerOperator(IOperator $operator): void { - $this->registeredOperators[$operator->getId()] = $operator; + public function registerOperation(IOperation $operator): void { + $this->registeredOperators[get_class($operator)] = $operator; } /** @@ -593,7 +592,7 @@ class Manager implements IManager, IEntityAware { } /** - * @return IOperator[] + * @return IOperation[] */ protected function getBuildInOperators(): array { try { diff --git a/apps/workflowengine/lib/Settings/ASettings.php b/apps/workflowengine/lib/Settings/ASettings.php index 78a23d924c..af3208fce2 100644 --- a/apps/workflowengine/lib/Settings/ASettings.php +++ b/apps/workflowengine/lib/Settings/ASettings.php @@ -30,11 +30,11 @@ use OCP\AppFramework\Http\TemplateResponse; use OCP\IInitialStateService; use OCP\IL10N; use OCP\Settings\ISettings; -use OCP\WorkflowEngine\IComplexOperator; +use OCP\WorkflowEngine\IComplexOperation; use OCP\WorkflowEngine\IEntity; use OCP\WorkflowEngine\IEntityEvent; -use OCP\WorkflowEngine\IOperator; -use OCP\WorkflowEngine\ISpecificOperator; +use OCP\WorkflowEngine\IOperation; +use OCP\WorkflowEngine\ISpecificOperation; use Symfony\Component\EventDispatcher\EventDispatcherInterface; abstract class ASettings implements ISettings { @@ -140,18 +140,18 @@ abstract class ASettings implements ISettings { } private function operatorsToArray(array $operators) { - $operators = array_filter($operators, function(IOperator $operator) { + $operators = array_filter($operators, function(IOperation $operator) { return $operator->isAvailableForScope($this->getScope()); }); - return array_map(function (IOperator $operator) { + return array_map(function (IOperation $operator) { return [ - 'id' => $operator->getId(), + 'id' => get_class($operator), 'icon' => $operator->getIcon(), 'name' => $operator->getDisplayName(), 'description' => $operator->getDescription(), - 'fixedEntity' => $operator instanceof ISpecificOperator ? $operator->getEntityId() : '', - 'isComplex' => $operator instanceof IComplexOperator, + 'fixedEntity' => $operator instanceof ISpecificOperation ? $operator->getEntityId() : '', + 'isComplex' => $operator instanceof IComplexOperation, ]; }, $operators); } diff --git a/lib/composer/composer/autoload_classmap.php b/lib/composer/composer/autoload_classmap.php index 76322993b4..f8fb8b76d6 100644 --- a/lib/composer/composer/autoload_classmap.php +++ b/lib/composer/composer/autoload_classmap.php @@ -439,14 +439,13 @@ return array( 'OCP\\User\\Backend\\ISetPasswordBackend' => $baseDir . '/lib/public/User/Backend/ISetPasswordBackend.php', 'OCP\\Util' => $baseDir . '/lib/public/Util.php', 'OCP\\WorkflowEngine\\ICheck' => $baseDir . '/lib/public/WorkflowEngine/ICheck.php', - 'OCP\\WorkflowEngine\\IComplexOperator' => $baseDir . '/lib/public/WorkflowEngine/IComplexOperator.php', + 'OCP\\WorkflowEngine\\IComplexOperation' => $baseDir . '/lib/public/WorkflowEngine/IComplexOperation.php', 'OCP\\WorkflowEngine\\IEntity' => $baseDir . '/lib/public/WorkflowEngine/IEntity.php', 'OCP\\WorkflowEngine\\IEntityAware' => $baseDir . '/lib/public/WorkflowEngine/IEntityAware.php', 'OCP\\WorkflowEngine\\IEntityEvent' => $baseDir . '/lib/public/WorkflowEngine/IEntityEvent.php', 'OCP\\WorkflowEngine\\IManager' => $baseDir . '/lib/public/WorkflowEngine/IManager.php', 'OCP\\WorkflowEngine\\IOperation' => $baseDir . '/lib/public/WorkflowEngine/IOperation.php', - 'OCP\\WorkflowEngine\\IOperator' => $baseDir . '/lib/public/WorkflowEngine/IOperator.php', - 'OCP\\WorkflowEngine\\ISpecificOperator' => $baseDir . '/lib/public/WorkflowEngine/ISpecificOperator.php', + 'OCP\\WorkflowEngine\\ISpecificOperation' => $baseDir . '/lib/public/WorkflowEngine/ISpecificOperation.php', 'OC\\Accounts\\Account' => $baseDir . '/lib/private/Accounts/Account.php', 'OC\\Accounts\\AccountManager' => $baseDir . '/lib/private/Accounts/AccountManager.php', 'OC\\Accounts\\AccountProperty' => $baseDir . '/lib/private/Accounts/AccountProperty.php', diff --git a/lib/composer/composer/autoload_static.php b/lib/composer/composer/autoload_static.php index f164d0b15b..ab47f44ff8 100644 --- a/lib/composer/composer/autoload_static.php +++ b/lib/composer/composer/autoload_static.php @@ -473,14 +473,13 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c 'OCP\\User\\Backend\\ISetPasswordBackend' => __DIR__ . '/../../..' . '/lib/public/User/Backend/ISetPasswordBackend.php', 'OCP\\Util' => __DIR__ . '/../../..' . '/lib/public/Util.php', 'OCP\\WorkflowEngine\\ICheck' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/ICheck.php', - 'OCP\\WorkflowEngine\\IComplexOperator' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IComplexOperator.php', + 'OCP\\WorkflowEngine\\IComplexOperation' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IComplexOperation.php', 'OCP\\WorkflowEngine\\IEntity' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IEntity.php', 'OCP\\WorkflowEngine\\IEntityAware' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IEntityAware.php', 'OCP\\WorkflowEngine\\IEntityEvent' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IEntityEvent.php', 'OCP\\WorkflowEngine\\IManager' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IManager.php', 'OCP\\WorkflowEngine\\IOperation' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IOperation.php', - 'OCP\\WorkflowEngine\\IOperator' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/IOperator.php', - 'OCP\\WorkflowEngine\\ISpecificOperator' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/ISpecificOperator.php', + 'OCP\\WorkflowEngine\\ISpecificOperation' => __DIR__ . '/../../..' . '/lib/public/WorkflowEngine/ISpecificOperation.php', 'OC\\Accounts\\Account' => __DIR__ . '/../../..' . '/lib/private/Accounts/Account.php', 'OC\\Accounts\\AccountManager' => __DIR__ . '/../../..' . '/lib/private/Accounts/AccountManager.php', 'OC\\Accounts\\AccountProperty' => __DIR__ . '/../../..' . '/lib/private/Accounts/AccountProperty.php', diff --git a/lib/public/WorkflowEngine/IComplexOperator.php b/lib/public/WorkflowEngine/IComplexOperation.php similarity index 94% rename from lib/public/WorkflowEngine/IComplexOperator.php rename to lib/public/WorkflowEngine/IComplexOperation.php index ee2d3d0a18..f3ba6d014a 100644 --- a/lib/public/WorkflowEngine/IComplexOperator.php +++ b/lib/public/WorkflowEngine/IComplexOperation.php @@ -25,7 +25,7 @@ declare(strict_types=1); namespace OCP\WorkflowEngine; /** - * Interface IComplexOperator + * Interface IComplexOperation * * This interface represents an operator that is less generic and indicates * that some of the tasks it does itself instead of relying on the engine. @@ -40,4 +40,4 @@ namespace OCP\WorkflowEngine; * * @sincee 18.0.0 */ -interface IComplexOperator extends IOperator { } +interface IComplexOperation extends IOperation { } diff --git a/lib/public/WorkflowEngine/IManager.php b/lib/public/WorkflowEngine/IManager.php index 6d4bacc8e1..8ef7a3a03e 100644 --- a/lib/public/WorkflowEngine/IManager.php +++ b/lib/public/WorkflowEngine/IManager.php @@ -37,6 +37,9 @@ interface IManager { const SCOPE_ADMIN = 0; const SCOPE_USER = 1; + const EVENT_NAME_REG_OPERATION = 'OCP\WorkflowEngine::registerOperations'; + const EVENT_NAME_REG_ENTITY = 'OCP\WorkflowEngine::registerEntities'; + /** * @param IStorage $storage * @param string $path @@ -66,5 +69,5 @@ interface IManager { * * @since 18.0.0 */ - public function registerOperator(IOperator $operator): void; + public function registerOperation(IOperation $operator): void; } diff --git a/lib/public/WorkflowEngine/IOperation.php b/lib/public/WorkflowEngine/IOperation.php index 491a805909..0862588e86 100644 --- a/lib/public/WorkflowEngine/IOperation.php +++ b/lib/public/WorkflowEngine/IOperation.php @@ -31,11 +31,57 @@ namespace OCP\WorkflowEngine; */ interface IOperation { /** - * @param string $name - * @param array[] $checks - * @param string $operation + * returns a translated name to be presented in the web interface + * + * Example: "Automated tagging" (en), "AĆ­tomata etikedado" (eo) + * + * @since 18.0.0 + */ + public function getDisplayName(): string; + + /** + * returns a translated, descriptive text to be presented in the web interface. + * + * It should be short and precise. + * + * Example: "Tag based automatic deletion of files after a given time." (en) + * + * @since 18.0.0 + */ + public function getDescription(): string; + + /** + * returns the URL to the icon of the operator for display in the web interface. + * + * Usually, the implementation would utilize the `imagePath()` method of the + * `\OCP\IURLGenerator` instance and simply return its result. + * + * Example implementation: return $this->urlGenerator->imagePath('myApp', 'cat.svg'); + * + * @since 18.0.0 + */ + public function getIcon(): string; + + /** + * returns whether the operation can be used in the requested scope. + * + * Scope IDs are defined as constants in OCP\WorkflowEngine\IManager. At + * time of writing these are SCOPE_ADMIN and SCOPE_USER. + * + * For possibly unknown future scopes the recommended behaviour is: if + * user scope is permitted, the default behaviour should return `true`, + * otherwise `false`. + * + * @since 18.0.0 + */ + public function isAvailableForScope(int $scope): bool; + + /** + * Validates whether a configured workflow rule is valid. If it is not, + * an `\UnexpectedValueException` is supposed to be thrown. + * * @throws \UnexpectedValueException * @since 9.1 */ - public function validateOperation($name, array $checks, $operation); + public function validateOperation(string $name, array $checks, string $operation): void; } diff --git a/lib/public/WorkflowEngine/IOperator.php b/lib/public/WorkflowEngine/IOperator.php deleted file mode 100644 index 70c80d98c4..0000000000 --- a/lib/public/WorkflowEngine/IOperator.php +++ /dev/null @@ -1,91 +0,0 @@ - - * - * @author Arthur Schiwon - * - * @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 . - * - */ - -namespace OCP\WorkflowEngine; - -/** - * @since 18.0.0 - */ -interface IOperator { - /** - * returns the unique identity of the operator - * - * It is recommended to use the namespaced class name of the IOperator - * implementation. Especially workflow applications released before - * Nextcloud 18 should chose this as id for compatibility. - * - * Example: OCA\FilesAutomatedTagging\Operation - * - * @since 18.0.0 - */ - public function getId(): string; - - /** - * returns a translated name to be presented in the web interface - * - * Example: "Automated tagging" (en), "AĆ­tomata etikedado" (eo) - * - * @since 18.0.0 - */ - public function getDisplayName(): string; - - /** - * returns a translated, descriptive text to be presented in the web interface. - * - * It should be short and precise. - * - * Example: "Tag based automatic deletion of files after a given time." (en) - * - * @since 18.0.0 - */ - public function getDescription(): string; - - /** - * returns the URL to the icon of the operator for display in the web interface. - * - * Usually, the implementation would utilize the `imagePath()` method of the - * `\OCP\IURLGenerator` instance and simply return its result. - * - * Example implementation: return $this->urlGenerator->imagePath('myApp', 'cat.svg'); - * - * @since 18.0.0 - */ - public function getIcon(): string; - - /** - * returns whether the operation can be used in the requested scope. - * - * Scope IDs are defined as constants in OCP\WorkflowEngine\IManager. At - * time of writing these are SCOPE_ADMIN and SCOPE_USER. - * - * For possibly unknown future scopes the recommended behaviour is: if - * user scope is permitted, the default behaviour should return `true`, - * otherwise `false`. - * - * @since 18.0.0 - */ - public function isAvailableForScope(int $scope): bool; - - -} diff --git a/lib/public/WorkflowEngine/ISpecificOperator.php b/lib/public/WorkflowEngine/ISpecificOperation.php similarity index 94% rename from lib/public/WorkflowEngine/ISpecificOperator.php rename to lib/public/WorkflowEngine/ISpecificOperation.php index a5ae9fc184..0b26770a13 100644 --- a/lib/public/WorkflowEngine/ISpecificOperator.php +++ b/lib/public/WorkflowEngine/ISpecificOperation.php @@ -25,7 +25,7 @@ declare(strict_types=1); namespace OCP\WorkflowEngine; /** - * Interface ISpecificOperator + * Interface ISpecificOperation * * This interface represents an operator that is designed to work with exactly * one entity type. @@ -37,7 +37,7 @@ namespace OCP\WorkflowEngine; * @package OCP\WorkflowEngine * @since 18.0.0 */ -interface ISpecificOperator extends IOperator { +interface ISpecificOperation extends IOperation { /** * returns the id of the entity the operator is designed for