X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=framework%2Fmain%2Fclasses%2Fresolver%2Fcommand%2Fclass_BaseCommandResolver.php;h=2dcf6a3650d1787167242300838e2c5030dc53a0;hp=b0ddb5cc6dc81368d057e1f48a9a5696776b6fbb;hb=refs%2Fheads%2Fmaster;hpb=a60894f1d6ef33613d2d0351075aa07aa257f304 diff --git a/framework/main/classes/resolver/command/class_BaseCommandResolver.php b/framework/main/classes/resolver/command/class_BaseCommandResolver.php index b0ddb5cc..2a231dc0 100644 --- a/framework/main/classes/resolver/command/class_BaseCommandResolver.php +++ b/framework/main/classes/resolver/command/class_BaseCommandResolver.php @@ -6,9 +6,11 @@ namespace Org\Mxchange\CoreFramework\Resolver\Command; use Org\Mxchange\CoreFramework\Bootstrap\FrameworkBootstrap; use Org\Mxchange\CoreFramework\Command\Commandable; use Org\Mxchange\CoreFramework\Command\InvalidCommandException; -use Org\Mxchange\CoreFramework\Factory\ObjectFactory; +use Org\Mxchange\CoreFramework\Factory\Object\ObjectFactory; +use Org\Mxchange\CoreFramework\Generic\FrameworkInterface; use Org\Mxchange\CoreFramework\Request\Requestable; use Org\Mxchange\CoreFramework\Resolver\BaseResolver; +use Org\Mxchange\CoreFramework\Utils\Strings\StringUtils; // Import SPL stuff use \InvalidArgumentException; @@ -19,7 +21,7 @@ use \UnexpectedValueException; * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2017 Core Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2023 Core Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.shipsimu.org * @@ -37,17 +39,41 @@ use \UnexpectedValueException; * along with this program. If not, see . */ abstract class BaseCommandResolver extends BaseResolver { + /** + * Command name + */ + private $commandName = ''; + /** * Protected constructor * * @param $className Name of the class * @return void */ - protected function __construct ($className) { + protected function __construct (string $className) { // Call parent constructor parent::__construct($className); } + /** + * Setter for command name + * + * @param $commandName Last validated command name + * @return void + */ + protected final function setCommandName (string $commandName) { + $this->commandName = $commandName; + } + + /** + * Getter for command name + * + * @return $commandName Last validated command name + */ + public final function getCommandName () { + return $this->commandName; + } + /** * "Loads" a given command and instances it if not yet cached * @@ -56,7 +82,7 @@ abstract class BaseCommandResolver extends BaseResolver { * @throws InvalidCommandException Thrown if even the default * command class is missing (bad!) */ - protected function loadCommand ($commandName) { + protected function loadCommand (string $commandName) { // Init command instance $commandInstance = NULL; @@ -65,7 +91,7 @@ abstract class BaseCommandResolver extends BaseResolver { '%s\%s%sCommand', $this->getNamespace(), $this->getCapitalizedClassPrefix(), - self::convertToClassName($commandName) + StringUtils::convertToClassName($commandName) ); // Create command class name @@ -75,10 +101,10 @@ abstract class BaseCommandResolver extends BaseResolver { if (!class_exists($this->getClassName())) { // Class not found, so throw an exception throw new InvalidCommandException(array($this, $commandName), self::EXCEPTION_INVALID_COMMAND); - } // END - if + } // Initiate the command - $commandInstance = ObjectFactory::createObjectByName($this->getClassName(), array($this)); + $commandInstance = ObjectFactory::createObjectByName($this->getClassName(), [$this]); // Return the result return $commandInstance; @@ -95,22 +121,21 @@ abstract class BaseCommandResolver extends BaseResolver { */ public function resolveCommandByRequest (Requestable $requestInstance) { // Init variables - $commandName = ''; - $commandInstance = NULL; - - // This goes fine so let's resolve the command $commandName = $requestInstance->getRequestElement('command'); + $commandType = FrameworkBootstrap::getRequestTypeFromSystem(); + $commandInstance = NULL; // Is the command empty? Then fall back to default command if (empty($commandName)) { - $commandName = $this->getConfigInstance()->getConfigEntry('default_' . FrameworkBootstrap::getRequestTypeFromSystem() . '_command'); - } // END - if + // Fall back to default command + $commandName = FrameworkBootstrap::getConfigurationInstance()->getConfigEntry(sprintf('default_%s_command', $commandType)); + } // Check if command is valid if ($this->isCommandValid($this->getNamespace(), $commandName) === false) { // This command is invalid! throw new InvalidCommandException(array($this, $commandName), self::EXCEPTION_INVALID_COMMAND); - } // END - if + } // Get the command $commandInstance = $this->loadCommand($commandName); @@ -118,12 +143,15 @@ abstract class BaseCommandResolver extends BaseResolver { // And validate it if ((!is_object($commandInstance)) || (!$commandInstance instanceof Commandable)) { // This command has an invalid instance! - throw new UnexpectedValueException(sprintf('commandInstance for commandName=%s is not object (%s) or does not implement Commandable.', $commandName, gettype($commandInstance)), self::EXCEPTION_INVALID_COMMAND); - } // END - if + throw new UnexpectedValueException(sprintf('commandInstance for commandName=%s is not object (%s) or does not implement Commandable.', $commandName, gettype($commandInstance)), FrameworkInterface::EXCEPTION_UNEXPECTED_VALUE); + } // Set last command $this->setResolvedInstance($commandInstance); + // Init template engine + $commandInstance->initTemplateEngine($commandType); + // Return the resolved command instance return $commandInstance; } @@ -131,28 +159,43 @@ abstract class BaseCommandResolver extends BaseResolver { /** * Resolves the command by its direct name and returns an instance of its class * + * @param $namespace Namespace to look in * @param $commandName The direct command name we shall resolve * @return $commandInstance An instance of the command class * @throws InvalidCommandException Thrown if $commandName is invalid */ - public function resolveCommand ($commandName) { + public function resolveCommand (string $namespace, string $commandName) { + // Is a action set? + if (empty($namespace)) { + // Then thrown an exception here + throw new InvalidArgumentException('Parameter "namespace" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($commandName)) { + // Then thrown an exception here + throw new InvalidArgumentException('Parameter "commandName" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + // Initiate the instance variable $commandInstance = NULL; + $commandType = FrameworkBootstrap::getRequestTypeFromSystem(); // Is the command empty? Then fall back to default command if (empty($commandName)) { - $commandName = $this->getConfigInstance()->getConfigEntry('default_' . FrameworkBootstrap::getRequestTypeFromSystem() . '_command'); - } // END - if + // Init default command + $commandName = FrameworkBootstrap::getConfigurationInstance()->getConfigEntry(sprintf('default_%s_command', $commandType)); + } // Check if command is valid - if ($this->isCommandValid($commandName) === false) { + if ($this->isCommandValid($namespace, $commandName) === false) { // This command is invalid! throw new InvalidCommandException(array($this, $commandName), self::EXCEPTION_INVALID_COMMAND); - } // END - if + } // Get the command $commandInstance = $this->loadCommand($commandName); + // Init template engine + $commandInstance->initTemplateEngine($commandType); + // Return the instance return $commandInstance; } @@ -165,25 +208,25 @@ abstract class BaseCommandResolver extends BaseResolver { * @return $isValid Whether the given command is valid * @throws InvalidArgumentException Thrown if given command is not set */ - protected function isCommandValid ($namespace, $commandName) { - // By default nothing shall be valid - $isValid = false; - + protected function isCommandValid (string $namespace, string $commandName) { // Is namespace and command name set? if (empty($namespace)) { // Then thrown an exception here - throw new InvalidArgumentException('Parameter "namespace" is empty'); + throw new InvalidArgumentException('Parameter "namespace" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); } elseif (empty($commandName)) { // Then thrown an exception here - throw new InvalidArgumentException('Parameter "commandName" is empty'); - } // END - if + throw new InvalidArgumentException('Parameter "commandName" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + + // By default nothing shall be valid + $isValid = false; // Create the full class name $className = sprintf( '%s\%s%sCommand', $namespace, $this->getCapitalizedClassPrefix(), - self::convertToClassName($commandName) + StringUtils::convertToClassName($commandName) ); // Now, let us create the full name of the command class @@ -193,7 +236,7 @@ abstract class BaseCommandResolver extends BaseResolver { if (class_exists($this->getClassName())) { // This class does exist. :-) $isValid = true; - } // END - if + } // Set command name $this->setCommandName($commandName);