mirror of
https://github.com/kevinveenbirkenbach/infinito.git
synced 2025-09-13 13:57:10 +02:00
Renamed domain ActionManagement to Action
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
namespace Infinito\Domain\Action;
|
||||
|
||||
use Infinito\Exception\NoDefaultClassException;
|
||||
|
||||
/**
|
||||
* @author kevinfrantz
|
||||
*/
|
||||
final class ActionFactoryService extends AbstractActionConstructor implements ActionFactoryServiceInterface
|
||||
{
|
||||
/**
|
||||
* @var string Namespace in which the actions will be found
|
||||
*/
|
||||
private const BASE_NAMESPACE = 'Infinito\\Domain\\Action\\';
|
||||
|
||||
/**
|
||||
* @var string Suffix for action classes
|
||||
*/
|
||||
private const CLASS_SUFFIX = 'Action';
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function ucfirst(string $name): string
|
||||
{
|
||||
return ucfirst(strtolower($name));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $action
|
||||
* @param string $layer
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function getClassName(string $action, string $layer = ''): string
|
||||
{
|
||||
return $this->ucfirst($action).$this->ucfirst($layer).self::CLASS_SUFFIX;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $layer
|
||||
* @param string $action
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
private function getActionNamespace(string $action, string $layer = ''): string
|
||||
{
|
||||
return self::BASE_NAMESPACE.$this->ucfirst($action).'\\'.$this->getClassName($action, $layer);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private function generateFullClassName(): string
|
||||
{
|
||||
$requestedAction = $this->actionService->getRequestedAction();
|
||||
$action = $requestedAction->getActionType();
|
||||
$layer = $requestedAction->getLayer();
|
||||
$class = $this->getActionNamespace($action, $layer);
|
||||
if (class_exists($class)) {
|
||||
return $class;
|
||||
}
|
||||
$defaultClass = $this->getActionNamespace($action);
|
||||
if (class_exists($defaultClass)) {
|
||||
return $defaultClass;
|
||||
}
|
||||
throw new NoDefaultClassException("There is no default substitution class for $class with attributes {layer:\"$layer\",action:\"$action\"}");
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*
|
||||
* @see \Infinito\Domain\Action\ActionFactoryServiceInterface::create()
|
||||
*/
|
||||
public function create(): ActionInterface
|
||||
{
|
||||
$class = $this->generateFullClassName();
|
||||
|
||||
return new $class($this->actionService);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user