Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
ActionDefinitionProvider
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
2 / 2
4
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 provideActionDefinitions
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2namespace Apie\Common;
3
4use Apie\Common\ActionDefinitions\ActionDefinitionInterface;
5use Apie\Common\ActionDefinitions\CreateResourceActionDefinition;
6use Apie\Common\ActionDefinitions\DownloadFilesActionDefinition;
7use Apie\Common\ActionDefinitions\GetResourceActionDefinition;
8use Apie\Common\ActionDefinitions\GetResourceListActionDefinition;
9use Apie\Common\ActionDefinitions\ModifyResourceActionDefinition;
10use Apie\Common\ActionDefinitions\RemoveResourceActionDefinition;
11use Apie\Common\ActionDefinitions\ReplaceResourceActionDefinition;
12use Apie\Common\ActionDefinitions\RunGlobalMethodDefinition;
13use Apie\Common\ActionDefinitions\RunResourceMethodDefinition;
14use Apie\Common\ContextBuilders\ServiceContextBuilder;
15use Apie\Common\Lists\ActionDefinitionList;
16use Apie\Core\BoundedContext\BoundedContext;
17use Apie\Core\Context\ApieContext;
18use Symfony\Component\DependencyInjection\ServiceLocator;
19
20class ActionDefinitionProvider
21{
22    /**
23     * @var array<int, class-string<ActionDefinitionInterface>>
24     */
25    private const ACTION_DEFINITION_CLASSES = [
26        CreateResourceActionDefinition::class,
27        ReplaceResourceActionDefinition::class,
28        GetResourceActionDefinition::class,
29        GetResourceListActionDefinition::class,
30        ModifyResourceActionDefinition::class,
31        RemoveResourceActionDefinition::class,
32        RunGlobalMethodDefinition::class,
33        RunResourceMethodDefinition::class,
34        DownloadFilesActionDefinition::class,
35    ];
36
37    private ServiceContextBuilder $serviceContextBuilder;
38
39    /**
40     * @param ServiceLocator<object> $serviceLocator
41     */
42    public function __construct(ServiceLocator $serviceLocator)
43    {
44        $this->serviceContextBuilder = new ServiceContextBuilder($serviceLocator);
45    }
46    
47    public function provideActionDefinitions(BoundedContext $boundedContext, ApieContext $apieContext, bool $runtimeChecks = false): ActionDefinitionList
48    {
49        $apieContext = $this->serviceContextBuilder->process($apieContext);
50        $actionDefinitions = [];
51        foreach (self::ACTION_DEFINITION_CLASSES as $actionDefinitionClass) {
52            foreach ($actionDefinitionClass::provideActionDefinitions($boundedContext, $apieContext, $runtimeChecks) as $actionDefinition) {
53                $actionDefinitions[] = $actionDefinition;
54            }
55        }
56
57        return new ActionDefinitionList($actionDefinitions);
58    }
59}