From 4c2fdbb9085514692bb86a73bb415a41ccd209f4 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Tue, 27 Aug 2019 16:52:00 +0200 Subject: merge IOperator with IOperation for simplicity Signed-off-by: Arthur Schiwon --- apps/workflowengine/lib/Manager.php | 15 ++-- apps/workflowengine/lib/Settings/ASettings.php | 16 ++--- lib/composer/composer/autoload_classmap.php | 5 +- lib/composer/composer/autoload_static.php | 5 +- lib/public/WorkflowEngine/IComplexOperation.php | 43 +++++++++++ lib/public/WorkflowEngine/IComplexOperator.php | 43 ----------- lib/public/WorkflowEngine/IManager.php | 5 +- lib/public/WorkflowEngine/IOperation.php | 54 ++++++++++++-- lib/public/WorkflowEngine/IOperator.php | 91 ------------------------ lib/public/WorkflowEngine/ISpecificOperation.php | 50 +++++++++++++ lib/public/WorkflowEngine/ISpecificOperator.php | 50 ------------- 11 files changed, 166 insertions(+), 211 deletions(-) create mode 100644 lib/public/WorkflowEngine/IComplexOperation.php delete mode 100644 lib/public/WorkflowEngine/IComplexOperator.php delete mode 100644 lib/public/WorkflowEngine/IOperator.php create mode 100644 lib/public/WorkflowEngine/ISpecificOperation.php delete mode 100644 lib/public/WorkflowEngine/ISpecificOperator.php diff --git a/apps/workflowengine/lib/Manager.php b/apps/workflowengine/lib/Manager.php index d19aa31547a..0a1b7fab6c5 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 78a23d924c7..af3208fce27 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 76322993b48..f8fb8b76d6b 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 f164d0b15bd..ab47f44ff8e 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/IComplexOperation.php b/lib/public/WorkflowEngine/IComplexOperation.php new file mode 100644 index 00000000000..f3ba6d014a4 --- /dev/null +++ b/lib/public/WorkflowEngine/IComplexOperation.php @@ -0,0 +1,43 @@ + + * + * @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; + +/** + * 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. + * This includes: + * + * * registering listeners – the implementing app needs to ensure that the + * business logic registers listeners to the events it listens to. For example + * when direct storage access is required, adding a wrapper or listening to + * a specific one is required over usual file events. + * + * @package OCP\WorkflowEngine + * + * @sincee 18.0.0 + */ +interface IComplexOperation extends IOperation { } diff --git a/lib/public/WorkflowEngine/IComplexOperator.php b/lib/public/WorkflowEngine/IComplexOperator.php deleted file mode 100644 index ee2d3d0a183..00000000000 --- a/lib/public/WorkflowEngine/IComplexOperator.php +++ /dev/null @@ -1,43 +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; - -/** - * Interface IComplexOperator - * - * 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. - * This includes: - * - * * registering listeners – the implementing app needs to ensure that the - * business logic registers listeners to the events it listens to. For example - * when direct storage access is required, adding a wrapper or listening to - * a specific one is required over usual file events. - * - * @package OCP\WorkflowEngine - * - * @sincee 18.0.0 - */ -interface IComplexOperator extends IOperator { } diff --git a/lib/public/WorkflowEngine/IManager.php b/lib/public/WorkflowEngine/IManager.php index 6d4bacc8e17..8ef7a3a03e8 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 491a805909c..0862588e86f 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 70c80d98c45..00000000000 --- 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/ISpecificOperation.php b/lib/public/WorkflowEngine/ISpecificOperation.php new file mode 100644 index 00000000000..0b26770a13a --- /dev/null +++ b/lib/public/WorkflowEngine/ISpecificOperation.php @@ -0,0 +1,50 @@ + + * + * @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; + +/** + * Interface ISpecificOperation + * + * This interface represents an operator that is designed to work with exactly + * one entity type. + * + * In almost all of the cases it is not necessary to have this limitation, + * because the action is not connected to the event. This mechanism suits + * special cases. + * + * @package OCP\WorkflowEngine + * @since 18.0.0 + */ +interface ISpecificOperation extends IOperation { + + /** + * returns the id of the entity the operator is designed for + * + * Example: 'WorkflowEngine_Entity_File' + * + * @since 18.0.0 + */ + public function getEntityId():string; +} diff --git a/lib/public/WorkflowEngine/ISpecificOperator.php b/lib/public/WorkflowEngine/ISpecificOperator.php deleted file mode 100644 index a5ae9fc1841..00000000000 --- a/lib/public/WorkflowEngine/ISpecificOperator.php +++ /dev/null @@ -1,50 +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; - -/** - * Interface ISpecificOperator - * - * This interface represents an operator that is designed to work with exactly - * one entity type. - * - * In almost all of the cases it is not necessary to have this limitation, - * because the action is not connected to the event. This mechanism suits - * special cases. - * - * @package OCP\WorkflowEngine - * @since 18.0.0 - */ -interface ISpecificOperator extends IOperator { - - /** - * returns the id of the entity the operator is designed for - * - * Example: 'WorkflowEngine_Entity_File' - * - * @since 18.0.0 - */ - public function getEntityId():string; -} -- cgit v1.2.3