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;
*
* @author Roland Haeder <webmaster@shipsimu.org>
* @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
*
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
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
*
* @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;
'%s\%s%sCommand',
$this->getNamespace(),
$this->getCapitalizedClassPrefix(),
- self::convertToClassName($commandName)
+ StringUtils::convertToClassName($commandName)
);
// Create command class name
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;
*/
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);
// 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;
}
/**
* 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;
}
* @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
if (class_exists($this->getClassName())) {
// This class does exist. :-)
$isValid = true;
- } // END - if
+ }
// Set command name
$this->setCommandName($commandName);