From 9ad41b1a5047ba120036230e61e9d519bcb72a86 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Mon, 27 Feb 2023 05:59:23 +0100 Subject: [PATCH] Continued: - added more checks on parameter - added more debug lines --- .../classes/handler/class_BaseHandler.php | 17 +++ .../handler/tasks/class_TaskHandler.php | 100 +++++++++++++----- .../main/classes/helper/class_BaseHelper.php | 38 +++++++ 3 files changed, 128 insertions(+), 27 deletions(-) diff --git a/framework/main/classes/handler/class_BaseHandler.php b/framework/main/classes/handler/class_BaseHandler.php index 47bfc2d5..a492266c 100644 --- a/framework/main/classes/handler/class_BaseHandler.php +++ b/framework/main/classes/handler/class_BaseHandler.php @@ -4,9 +4,13 @@ namespace Org\Mxchange\CoreFramework\Handler; // Import framework stuff use Org\Mxchange\CoreFramework\Criteria\Storing\StoreableCriteria; +use Org\Mxchange\CoreFramework\Generic\FrameworkInterface; use Org\Mxchange\CoreFramework\Handler\DataSet\HandleableDataSet; use Org\Mxchange\CoreFramework\Object\BaseFrameworkSystem; +// Import SPL stuff +use \InvalidArgumentException; + /** * A general Handler * @@ -43,7 +47,11 @@ abstract class BaseHandler extends BaseFrameworkSystem implements HandleableData */ protected function __construct (string $className) { // Call parent constructor + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-HANDLER: className=%s - CONSTRUCTED!', $className)); parent::__construct($className); + + // Trace message + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('BASE-HANDLER: EXIT!'); } /** @@ -74,6 +82,15 @@ abstract class BaseHandler extends BaseFrameworkSystem implements HandleableData * @todo Rewrite this to use DHT */ public function addArrayToDataSet (StoreableCriteria $dataSetInstance, array $messageData) { + // Check parameter + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-HANDLER: dataSetInstance=%s,messageData()=%d - CALLED!', $dataSetInstance->__toString(), count($messageData))); + if (count($messageData) == 0) { + // Throw IAE + throw new InvalidArgumentException('Parameter "messageData" is an empty array', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + + // Trace message + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('BASE-HANDLER: EXIT!'); } } diff --git a/framework/main/classes/handler/tasks/class_TaskHandler.php b/framework/main/classes/handler/tasks/class_TaskHandler.php index 792073e1..93963c8a 100644 --- a/framework/main/classes/handler/tasks/class_TaskHandler.php +++ b/framework/main/classes/handler/tasks/class_TaskHandler.php @@ -56,10 +56,15 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { */ private function __construct () { // Call parent constructor + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: CONSTRUCTWD!'); parent::__construct(__CLASS__); // Set handler name + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage('TASK-HANDLER: Setting handlerName=task ...'); $this->setHandlerName('task'); + + // Trace message + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: EXIT!'); } /** @@ -69,10 +74,11 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { */ public static final function createTaskHandler () { // Get new instance + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: CALLED!'); $handlerInstance = new TaskHandler(); // Output debug message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Initializing task handler.'); + self::createDebugInstance(__CLASS__, __LINE__)->debugMessage('TASK-HANDLER: Initializing task handler.'); // Init the task list $handlerInstance->setListInstance(ObjectFactory::createObjectByConfiguredName('task_list_class')); @@ -88,9 +94,10 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { $handlerInstance->registerTask('idle_loop', $taskInstance); // Output debug message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Task handler initialized.'); + self::createDebugInstance(__CLASS__, __LINE__)->debugMessage('TASK-HANDLER: Task handler initialized.'); // Return the prepared instance + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('TASK-HANDLER:handlerInstance=%s - EXIT!', $handlerInstance->__toString())); return $handlerInstance; } @@ -104,6 +111,7 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { */ private function executeCurrentTask () { // Update no task by default + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: CALLED!'); $updateTask = false; // Is the current task valid? @@ -116,14 +124,17 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { $currentTask = $this->getListInstance()->getIterator()->current(); // Is the task not yet started? + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('TASK-HANDLER: currentTask()=%d', count($currentTask))); if ($currentTask['task_started'] === false) { // Determine difference between current time and registration + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('TASK-HANDLER: currentTask[id]=%s has not started yet, checking ...', $currentTask['id'])); $diff = ($this->getMilliTime() - $currentTask['task_registered']) * 1000; // Should we start now? + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('TASK-HANDLER: diff=%d,currentTask[task_startup_delay]=%d', $diff, $currentTask['task_startup_delay'])); if ($diff < $currentTask['task_startup_delay']) { // Skip this silently - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Task ' . $currentTask['id'] . ' not started: diff=' . $diff . ',task_startup_delay=' . $currentTask['task_startup_delay']); + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('TASK-HANDLER: Task %s not started: diff=%d,task_startup_delay=%d', $currentTask['id'], $diff, $currentTask['task_startup_delay'])); return; } @@ -132,22 +143,25 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { $updateTask = true; // Debug message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Task ' . $currentTask['id'] . ' started with startup_delay=' . $currentTask['task_startup_delay'] . 'ms'); + self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('TASK-HANDLER: Task %s started with startup_delay=%dms', $currentTask['id'], $currentTask['task_startup_delay'])); } // Get time difference from interval delay $diff = ($this->getMilliTime() - $currentTask['task_last_activity']) * 1000; // Is the interval delay reached? - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Task ' . $currentTask['id'] . ' diff=' . $diff . ',task_interval_delay=' . $currentTask['task_interval_delay'] . ',task_max_runs=' . $currentTask['task_max_runs'] . ',task_total_runs=' . $currentTask['task_total_runs']); + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage('TASK-HANDLER: Task ' . $currentTask['id'] . ' diff=' . $diff . ',task_interval_delay=' . $currentTask['task_interval_delay'] . ',task_max_runs=' . $currentTask['task_max_runs'] . ',task_total_runs=' . $currentTask['task_total_runs']); if ((($diff < $currentTask['task_interval_delay']) && ($currentTask['task_max_runs'] == 0)) || (($currentTask['task_max_runs'] > 0) && ($currentTask['task_total_runs'] == $currentTask['task_max_runs']))) { // Should we update the task from startup? + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('TASK-HANDLER: currentTask[id]=%s has reached interval ... updateTask=%d', $currentTask['id'], intval($updateTask))); if ($updateTask === true) { // Update the task before leaving + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('TASK-HANDLER: Updating task %s ...', $currentTask['id'])); $this->updateTask($currentTask); } // Skip this silently + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('TASK-HANDLER: Task %s has been updated - EXIT!', $currentTask['id'])); return; } @@ -158,11 +172,16 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { $currentTask['task_total_runs']++; // Update the task + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('TASK-HANDLER: Updating task %s ...', $currentTask['id'])); $this->updateTask($currentTask); // And visit/run it // @TODO Messurement can be added around this call + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('TASK-HANDLER: Invoking currentTask[task_instance]->accept(%s), task_instance=%s ...', $this->getVisitorInstance()->__toString(), $currentTask['task_instance']->__toString())); $currentTask['task_instance']->accept($this->getVisitorInstance()); + + // Trace message + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: EXIT!'); } /** @@ -173,13 +192,19 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { */ private function updateTask (array $taskEntry) { // Get the key from current iteration + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('TASK-HANDLER: taskEntry()=%d - CALLED!', count($taskEntry))); $key = $this->getListInstance()->getIterator()->key(); // Get the hash from key + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('TASK-HANDLER: key=%s', $key)); $hash = $this->getListInstance()->getHashByIndex($key); // Update the entry + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('TASK-HANDLER: Invoking this->listInstance->updateCurrentEntryByHash(%s,taskEntry()=%d) ...', $hash, count($taskEntry))); $this->getListInstance()->updateCurrentEntryByHash($hash, $taskEntry); + + // Trace message + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: EXIT!'); } /** @@ -189,14 +214,12 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { * @return void */ private function unregisterTask (array $taskData) { - // Debug output - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Removing task ' . $taskData['id'] . ' from queue - CALLED!'); - // Remove the entry + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('TASK-HANDLER: Removing task %s from queue - CALLED!', $taskData['id'])); $this->getListInstance()->removeEntry('tasks', $taskData); - // Debug output - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Removing task ' . $taskData['id'] . ' from queue - EXIT!'); + // Trace message + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('TASK-HANDLER: Removing task %s from queue - EXIT!', $taskData['id'])); } /** @@ -207,24 +230,29 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { */ public function searchTask (Taskable $taskInstance) { // Default is an empty (not found) task name + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('TASK-HANDLER: taskInstance=%s - CALLED!', $taskInstance->__toString())); $taskName = ''; // Get whole list $taskList = $this->getListInstance()->getArrayFromList('tasks'); // Search all instances + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('TASK-HANDLER: taskList()=%d', count($taskList))); foreach ($taskList as $currentTask) { // Does it match given task instance? + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('TASK-HANDLER: currentTask[id=%s', $currentTask['id'])); if ($currentTask['task_instance']->equals($taskInstance)) { // Found it $taskName = $currentTask['id']; // Abort here + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('TASK-HANDLER: taskName=%s - BREAK!', $taskName)); break; } } // Return found name + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('TASK-HANDLER: taskName=%s - EXIT!', $taskName)); return $taskName; } @@ -239,6 +267,7 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { */ public function registerTask (string $taskName, Taskable $taskInstance) { // Is the parameter valid + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('TASK-HANDLER: taskName=%s,taskInstance - CALLED!', $taskName, $taskInstance->__toString())); if (empty($taskName)) { // Task name cannot be empty throw new InvalidArgumentException('Parameter "taskName" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); @@ -250,6 +279,7 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { $maxRuns = FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('task_' . $taskName . '_max_runs'); // If the task is 'idle_loop', a deplay of zero seconds is fine + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('TASK-HANDLER: intervalDelay=%d,startupDelay=%d,maxRuns=%d', $intervalDelay, $startupDelay, $maxRuns)); if ($intervalDelay < 0) { // Invalid configuration value throw new UnexpectedValueException(sprintf('taskName=%s has intervalDelay=%d below zero', $taskName, $intervalDelay), FrameworkInterface::EXCEPTION_UNEXPECTED_VALUE); @@ -294,15 +324,20 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { ]; // Add the entry + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('TASK-HANDLER: Invoking this->listInstance->addEntry(tasks,taskEntry()=%d) ...', count($taskEntry))); $this->getListInstance()->addEntry('tasks', $taskEntry); // Debug message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Task registered: taskName=' . $taskName . - ' (taskInstance=' . $taskInstance->__toString() . ')' . - ', startupDelay=' . $taskEntry['task_startup_delay'] . 'ms' . - ', intervalDelay=' . $taskEntry['task_interval_delay'] . 'ms' . - ', maxRuns=' . $taskEntry['task_max_runs'] . ' ...' - ); + self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('TASK-HANDLER: Task registered: taskName=%s (taskInstance=%s), startupDelay=%dms, intervalDelay=%dms, maxRuns=%d ...', + $taskName, + $taskInstance->__toString(), + $taskEntry['task_startup_delay'], + $taskEntry['task_interval_delay'], + $taskEntry['task_max_runs'], + )); + + // Trace message + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: EXIT!'); } /** @@ -312,9 +347,11 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { */ public function hasTasksLeft () { // Do we have tasks there? + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: CALLED!'); $tasksLeft = ($this->getListInstance()->count() > 0); // Return result + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('TASK-HANDLER: tasksLeft=%d - EXIT!', intval($tasksLeft))); return $tasksLeft; } @@ -328,16 +365,23 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { */ public function handleTasks () { // Should we rewind? + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: CALLED!'); if (!$this->getListInstance()->getIterator()->valid()) { // Rewind to the beginning for next loop + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: Invoking this->listInstance->iterator->rewind() ...'); $this->getListInstance()->getIterator()->rewind(); } // Try to execute the task + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: Invoking this->executeCurrentTask() ...'); $this->executeCurrentTask(); // Go to next entry + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: Invoking this->listInstance->iterator->next() ...'); $this->getListInstance()->getIterator()->next(); + + // Trace message + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: EXIT!'); } /** @@ -348,15 +392,15 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { */ public function doShutdown () { // Always rewind to the beginning for next loop + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: Invoking this->listInstance->iterator->rewind() - CALLED!'); $this->getListInstance()->getIterator()->rewind(); - // Debug message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Shutting down all ' . $this->getListInstance()->count() . ' tasks...'); - // Remember all tasks that has been shutdown for removal + self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('TASK-HANDLER: Shutting down all %d tasks...', $this->getListInstance()->count())); $tasks = []; // Instance a visitor + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage('TASK-HANDLER: Setting visitorInstance=shutdown_task_visitor_class from configuration ...'); $this->setVisitorInstance(ObjectFactory::createObjectByConfiguredName('shutdown_task_visitor_class')); // Shutdown all tasks in once go @@ -364,26 +408,28 @@ class TaskHandler extends BaseHandler implements Registerable, HandleableTask { // Get current entry $currentTask = $this->getListInstance()->getIterator()->current(); - // Output debug message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Shutting down task ' . $currentTask['id'] . ' (taskInstance=' . $currentTask['task_instance']->__toString() . ') ...'); - // Shutdown the task + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage('TASK-HANDLER: Shutting down task ' . $currentTask['id'] . ' (taskInstance=' . $currentTask['task_instance']->__toString() . ') ...'); $currentTask['task_instance']->accept($this->getVisitorInstance()); // Remember this task array_push($tasks, $currentTask); // Advance to next one + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: Invoking this->listInstance->iterator->next() ...'); $this->getListInstance()->getIterator()->next(); } - // Debug message - self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('TASK-HANDLER: Shutdown of all tasks completed.'); - // Remove all tasks - foreach ($tasks as $entry) { - $this->unregisterTask($entry); + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('TASK-HANDLER: Shutdown of all tasks completed. tasks()=%d', count($tasks))); + foreach ($tasks as $taskEntry) { + // Unregister this task + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('TASK-HANDLER: Invokint this->unregisterTask(taskEntry()=%d) ...', count($taskEntry))); + $this->unregisterTask($taskEntry); } + + // Trace message + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('TASK-HANDLER: EXIT!'); } } diff --git a/framework/main/classes/helper/class_BaseHelper.php b/framework/main/classes/helper/class_BaseHelper.php index 5c6ab752..f32b3618 100644 --- a/framework/main/classes/helper/class_BaseHelper.php +++ b/framework/main/classes/helper/class_BaseHelper.php @@ -91,7 +91,11 @@ abstract class BaseHelper extends BaseFrameworkSystem { */ protected function __construct (string $className) { // Call parent constructor + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-HELPER: className=%s - CONSTRUCTED!', $className)); parent::__construct($className); + + // Trace message + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('BASE-HELPER: EXIT!'); } /** @@ -99,9 +103,21 @@ abstract class BaseHelper extends BaseFrameworkSystem { * * @param $newContent New content to add * @return void + * @throws InvalidArgumentException If a parameter has an invalid value */ protected final function addContent (string $newContent) { + // Check variable + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-HELPER: newContent=%s - CALLED!', $newContent)); + if (empty(trim($newContent))) { + // Throw IAE + throw new InvalidArgumentException('Parameter "newContent" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + + // Append content with EOL $this->content .= trim($newContent) . PHP_EOL; + + // Trace message + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-HELPER: this->content()=%d - EXIT!', strlen($this->content))); } /** @@ -109,10 +125,21 @@ abstract class BaseHelper extends BaseFrameworkSystem { * * @param $content Content to to the base * @return void + * @throws InvalidArgumentException If a parameter has an invalid value */ protected function addHeaderContent (string $content) { + // Check variable + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-HELPER: content=%s - CALLED!', $content)); + if (empty(trim($content))) { + // Throw IAE + throw new InvalidArgumentException('Parameter "content" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + // Add the header content $this->groups['header']['content'] = trim($content); + + // Trace message + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('BASE-HELPER: EXIT!'); } /** @@ -120,10 +147,21 @@ abstract class BaseHelper extends BaseFrameworkSystem { * * @param $content Content to to the base * @return void + * @throws InvalidArgumentException If a parameter has an invalid value */ protected function addFooterContent (string $content) { + // Check variable + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-HELPER: content=%s - CALLED!', $content)); + if (empty(trim($content))) { + // Throw IAE + throw new InvalidArgumentException('Parameter "content" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + // Add the footer content $this->groups['footer']['content'] = trim($content); + + // Trace message + /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('BASE-HELPER: EXIT!'); } /** -- 2.39.5