merge IOperator with IOperation for simplicity
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
This commit is contained in:
parent
ec36c0ae80
commit
4c2fdbb908
9 changed files with 77 additions and 122 deletions
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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 { }
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -1,91 +0,0 @@
|
|||
<?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\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;
|
||||
|
||||
|
||||
}
|
|
@ -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
|
Loading…
Reference in a new issue