From 14567fcd5820f2fcc3c78e816e782f34b8d49e6d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Fri, 10 Feb 2023 08:48:08 +0100 Subject: [PATCH] Continued: - added more checks on parameter and thrown proper exceptions --- .../classes/class_BaseFrameworkSystem.php | 529 +++++++++++++----- 1 file changed, 392 insertions(+), 137 deletions(-) diff --git a/framework/main/classes/class_BaseFrameworkSystem.php b/framework/main/classes/class_BaseFrameworkSystem.php index 31ee5443..dcabe48c 100644 --- a/framework/main/classes/class_BaseFrameworkSystem.php +++ b/framework/main/classes/class_BaseFrameworkSystem.php @@ -22,10 +22,11 @@ use Org\Mxchange\CoreFramework\Stream\Output\OutputStreamer; use Org\Mxchange\CoreFramework\Utils\Strings\StringUtils; // Import SPL stuff -use \stdClass; +use \BadMethodCallException; use \InvalidArgumentException; use \ReflectionClass; use \SplFileInfo; +use \stdClass; /** * The simulator system class is the super class of all other classes. This @@ -404,11 +405,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac * @return $debugInstance Instance to class DebugConsoleOutput or DebugWebOutput */ public final function getDebugInstance () { - // Get debug instance - $debugInstance = GenericRegistry::getRegistry()->getInstance('debug'); - - // Return it - return $debugInstance; + return GenericRegistry::getRegistry()->getInstance('debug'); } /** @@ -427,8 +424,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac * @return $webOutputInstance - Instance to class WebOutput */ public final function getWebOutputInstance () { - $webOutputInstance = GenericRegistry::getRegistry()->getInstance('web_output'); - return $webOutputInstance; + return GenericRegistry::getRegistry()->getInstance('web_output'); } /** @@ -759,9 +755,12 @@ Loaded includes: * @return $entry An array with database entries * @throws NullPointerException If the database result is not found * @throws InvalidDatabaseResultException If the database result is invalid - * @todo Monolithic method, should be moved to proper classes + * @deprecated Monolithic method, should be moved to proper classes */ protected final function getDatabaseEntry () { + // This method is deprecated + $this->deprecationWarning('Monolithic method, should be moved to proper classes'); + // Is there an instance? if (!$this->getResultInstance() instanceof SearchableResult) { // Throw an exception here @@ -793,8 +792,19 @@ Loaded includes: * @param $fieldName Field name which we shall get * @return $fieldValue Field value from the user * @throws NullPointerException If the result instance is null + * @throws InvalidArgumentException If a parameter is not valid + * @deprecated Monolithic method, should be moved to proper classes */ public final function getField (string $fieldName) { + // Check parameter + if (empty($fieldName)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "fieldName" is empty'); + } + + // This method is deprecated + $this->deprecationWarning('Monolithic method, should be moved to proper classes'); + // Default field value $fieldValue = NULL; @@ -836,8 +846,15 @@ Loaded includes: * @param $fieldName Field name to check * @return $isSet Whether the given field name is set * @throws NullPointerException If the result instance is null + * @throws InvalidArgumentException If a parameter is not valid */ public function isFieldSet (string $fieldName) { + // Check parameter + if (empty($fieldName)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "fieldName" is empty'); + } + // Get result instance $resultInstance = $this->getResultInstance(); @@ -891,8 +908,15 @@ Loaded includes: * * @param $phpExtension The PHP extension we shall check * @return $isLoaded Whether the PHP extension is loaded + * @throws InvalidArgumentException If a parameter is not valid */ public final function isPhpExtensionLoaded (string $phpExtension) { + // Check parameter + if (empty($phpExtension)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "phpExtension" is empty'); + } + // Is it loaded? $isLoaded = in_array($phpExtension, get_loaded_extensions()); @@ -918,8 +942,15 @@ Loaded includes: * Idles (sleeps) for given milliseconds * * @return $hasSlept Whether it goes fine + * @throws InvalidArgumentException If a parameter is not valid */ public function idle (int $milliSeconds) { + // Check parameter + if ($milliSeconds < 1) { + // Throw IAE + throw new InvalidArgumentException(sprintf('milliSeconds=%d are not a reasonable value to idle', $milliSeconds)); + } + // Sleep is fine by default $hasSlept = true; @@ -947,8 +978,15 @@ Loaded includes: * * @param $encodedData Encoded data we shall check * @return $isBase64 Whether the encoded data is Base64 + * @throws InvalidArgumentException If a parameter is not valid */ protected function isBase64Encoded (string $encodedData) { + // Check parameter + if (empty($encodedData)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "encodedData" is empty'); + } + // Determine it $isBase64 = (@base64_decode($encodedData, true) !== false); @@ -986,8 +1024,24 @@ Loaded includes: * @param $key Key to check * @param $element Element to check * @return $isset Whether the given key is set + * @throws InvalidArgumentException If a parameter is not valid */ protected final function isGenericArrayElementSet (string $keyGroup, string $subGroup, $key, $element) { + // Check parameter + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } elseif (empty($element)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty'); + } + // Is it there? //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element); $isset = isset($this->genericArray[$keyGroup][$subGroup][$key][$element]); @@ -1002,8 +1056,21 @@ Loaded includes: * @param $subGroup Sub group for the key * @param $key Key to check * @return $isset Whether the given key is set + * @throws InvalidArgumentException If a parameter is not valid */ protected final function isGenericArrayKeySet (string $keyGroup, string $subGroup, $key) { + // Check parameter + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } + // Is it there? //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); $isset = isset($this->genericArray[$keyGroup][$subGroup][$key]); @@ -1012,17 +1079,26 @@ Loaded includes: return $isset; } - /** * Determines if a group is set in the generic array * * @param $keyGroup Main group * @param $subGroup Sub group * @return $isset Whether the given group is set + * @throws InvalidArgumentException If a parameter is not valid */ protected final function isGenericArrayGroupSet (string $keyGroup, string $subGroup) { - // Is it there? + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } + + // Is it there? $isset = isset($this->genericArray[$keyGroup][$subGroup]); // Return it @@ -1035,17 +1111,24 @@ Loaded includes: * @param $keyGroup Main key group * @param $subGroup Sub key group * @return $array An array with all array elements + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ protected final function getGenericSubArray (string $keyGroup, string $subGroup) { - // Is it there? - if (!$this->isGenericArrayGroupSet($keyGroup, $subGroup)) { + // Check parameter + //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',value=' . print_r($this->genericArray[$keyGroup][$subGroup], true)); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (!$this->isGenericArrayGroupSet($keyGroup, $subGroup)) { // No, then abort here - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' not found.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s not found.', $keyGroup, $subGroup)); } // Return it - //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',value=' . print_r($this->genericArray[$keyGroup][$subGroup], true)); return $this->genericArray[$keyGroup][$subGroup]; } @@ -1056,10 +1139,23 @@ Loaded includes: * @param $subGroup Sub group for the key * @param $key Key to unset * @return void + * @throws InvalidArgumentException If a parameter is not valid */ protected final function unsetGenericArrayKey (string $keyGroup, string $subGroup, $key) { - // Remove it + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } + + // Remove it unset($this->genericArray[$keyGroup][$subGroup][$key]); } @@ -1071,10 +1167,24 @@ Loaded includes: * @param $key Key to unset * @param $element Element to unset * @return void + * @throws InvalidArgumentException If a parameter is not valid */ protected final function unsetGenericArrayElement (string $keyGroup, string $subGroup, $key, $element) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } elseif (empty($element)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty'); + } // Remove it unset($this->genericArray[$keyGroup][$subGroup][$key][$element]); @@ -1088,18 +1198,29 @@ Loaded includes: * @param $key Key to unset * @param $value Value to add/append * @return void + * @throws InvalidArgumentException If a parameter is not valid */ - protected final function appendStringToGenericArrayKey (string $keyGroup, string $subGroup, $key, string $value, $appendGlue = '') { - // Debug message + protected final function appendStringToGenericArrayKey (string $keyGroup, string $subGroup, $key, string $value, string $appendGlue = '') { + // Check parameter //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',value[' . gettype($value) . ']=' . print_r($value, true) . ',appendGlue=' . $appendGlue); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } // Is it already there? if ($this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { // Append it - $this->genericArray[$keyGroup][$subGroup][$key] .= $appendGlue . (string) $value; + $this->genericArray[$keyGroup][$subGroup][$key] .= $appendGlue . $value; } else { // Add it - $this->genericArray[$keyGroup][$subGroup][$key] = (string) $value; + $this->genericArray[$keyGroup][$subGroup][$key] = $value; } } @@ -1112,39 +1233,35 @@ Loaded includes: * @param $element Element to check * @param $value Value to add/append * @return void + * @throws InvalidArgumentException If a parameter is not valid */ - protected final function appendStringToGenericArrayElement (string $keyGroup, string $subGroup, $key, $element, $value, $appendGlue = '') { - // Debug message + protected final function appendStringToGenericArrayElement (string $keyGroup, string $subGroup, $key, $element, string $value, string $appendGlue = '') { + // Check parameter //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ',value[' . gettype($value) . ']=' . print_r($value, true) . ',appendGlue=' . $appendGlue); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } elseif (empty($element)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty'); + } // Is it already there? if ($this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) { // Append it - $this->genericArray[$keyGroup][$subGroup][$key][$element] .= $appendGlue . (string) $value; + $this->genericArray[$keyGroup][$subGroup][$key][$element] .= $appendGlue . $value; } else { // Add it $this->setStringGenericArrayElement($keyGroup, $subGroup, $key, $element, $value); } } - /** - * Sets a string in a given generic array element - * - * @param $keyGroup Main group for the key - * @param $subGroup Sub group for the key - * @param $key Key to unset - * @param $element Element to check - * @param $value Value to add/append - * @return void - */ - protected final function setStringGenericArrayElement (string $keyGroup, string $subGroup, $key, $element, $value, $appendGlue = '') { - // Debug message - //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ',value[' . gettype($value) . ']=' . print_r($value, true) . ',appendGlue=' . $appendGlue); - - // Set it - $this->genericArray[$keyGroup][$subGroup][$key][$element] = (string) $value; - } - /** * Initializes given generic array group * @@ -1153,16 +1270,21 @@ Loaded includes: * @param $key Key to use * @param $forceInit Optionally force initialization * @return void + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group has already been initialized */ protected final function initGenericArrayGroup (string $keyGroup, string $subGroup, bool $forceInit = false) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',forceInit=' . intval($forceInit)); - - // Is it already set? - if (($forceInit === false) && ($this->isGenericArrayGroupSet($keyGroup, $subGroup))) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (($forceInit === false) && ($this->isGenericArrayGroupSet($keyGroup, $subGroup))) { // Already initialized - trigger_error(__METHOD__ . ':keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' already initialized.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s already initialized.', $keyGroup, $subGroup)); } // Initialize it @@ -1177,16 +1299,24 @@ Loaded includes: * @param $key Key to use * @param $forceInit Optionally force initialization * @return void + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group has already been initialized */ protected final function initGenericArrayKey (string $keyGroup, string $subGroup, $key, bool $forceInit = false) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',forceInit=' . intval($forceInit)); - - // Is it already set? - if (($forceInit === false) && ($this->isGenericArrayKeySet($keyGroup, $subGroup, $key))) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } elseif (($forceInit === false) && ($this->isGenericArrayKeySet($keyGroup, $subGroup, $key))) { // Already initialized - trigger_error(__METHOD__ . ':keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ' already initialized.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s already initialized.', $keyGroup, $subGroup, gettype($key), $key)); } // Initialize it @@ -1202,16 +1332,27 @@ Loaded includes: * @param $element Element to use * @param $forceInit Optionally force initialization * @return void + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ protected final function initGenericArrayElement (string $keyGroup, string $subGroup, $key, $element, bool $forceInit = false) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ',forceInit=' . intval($forceInit)); - - // Is it already set? - if (($forceInit === false) && ($this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element))) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } elseif (empty($element)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty'); + } elseif (($forceInit === false) && ($this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element))) { // Already initialized - trigger_error(__METHOD__ . ':keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ' already initialized.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s,element[%s]=%s already initialized.', $keyGroup, $subGroup, gettype($key), $key, gettype($element), $element)); } // Initialize it @@ -1219,20 +1360,28 @@ Loaded includes: } /** - * Pushes an element to a generic key + * Pushes an element to a generic key. If the key isn't found, it will be initialized. * * @param $keyGroup Main group for the key * @param $subGroup Sub group for the key * @param $key Key to use * @param $value Value to add/append * @return $count Number of array elements + * @throws InvalidArgumentException If a parameter is not valid */ protected final function pushValueToGenericArrayKey (string $keyGroup, string $subGroup, $key, $value) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',value[' . gettype($value) . ']=' . print_r($value, true)); - - // Is it set? - if (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } elseif (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { // Initialize array $this->initGenericArrayKey($keyGroup, $subGroup, $key); } @@ -1247,7 +1396,7 @@ Loaded includes: } /** - * Pushes an element to a generic array element + * Pushes an element to a generic array element. If the key isn't found, it will be initialized. * * @param $keyGroup Main group for the key * @param $subGroup Sub group for the key @@ -1255,13 +1404,24 @@ Loaded includes: * @param $element Element to check * @param $value Value to add/append * @return $count Number of array elements + * @throws InvalidArgumentException If a parameter is not valid */ protected final function pushValueToGenericArrayElement (string $keyGroup, string $subGroup, $key, $element, $value) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ',value[' . gettype($value) . ']=' . print_r($value, true)); - - // Is it set? - if (!$this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } elseif (empty($element)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty'); + } elseif (!$this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) { // Initialize array $this->initGenericArrayElement($keyGroup, $subGroup, $key, $element); } @@ -1282,16 +1442,24 @@ Loaded includes: * @param $subGroup Sub group for the key * @param $key Key to unset * @return $value Last "popped" value + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ protected final function popGenericArrayElement (string $keyGroup, string $subGroup, $key) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); - - // Is it set? - if (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } elseif (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { // Not found - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ' not found.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key)); } // Then "pop" it @@ -1309,17 +1477,25 @@ Loaded includes: * @param $keyGroup Main group for the key * @param $subGroup Sub group for the key * @param $key Key to unset - * @return $value Last "popped" value + * @return $value Last "shifted" value + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ protected final function shiftGenericArrayElement (string $keyGroup, string $subGroup, $key) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); - - // Is it set? - if (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } elseif (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { // Not found - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ' not found.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key)); } // Then "shift" it @@ -1336,25 +1512,25 @@ Loaded includes: * * @param $keyGroup Main group for the key * @return $count Count of given group + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key group isn't there but this method is invoked */ protected final function countGenericArray (string $keyGroup) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup); - - // Is it there? - if (!isset($this->genericArray[$keyGroup])) { - // Abort here - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ' not found.'); - exit; + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (!isset($this->genericArray[$keyGroup])) { + // Not found + throw new BadMethodCallException(sprintf('keyGroup=%s not found.', $keyGroup)); } // Then count it $count = count($this->genericArray[$keyGroup]); - // Debug message - //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',count=' . $count); - // Return it + //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',count=' . $count); return $count; } @@ -1364,25 +1540,28 @@ Loaded includes: * @param $keyGroup Main group for the key * @param $subGroup Sub group for the key * @return $count Count of given group + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ protected final function countGenericArrayGroup (string $keyGroup, string $subGroup) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup); - - // Is it there? - if (!$this->isGenericArrayGroupSet($keyGroup, $subGroup)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (!$this->isGenericArrayGroupSet($keyGroup, $subGroup)) { // Abort here - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' not found.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s not found.', $keyGroup, $subGroup)); } // Then count it $count = count($this->genericArray[$keyGroup][$subGroup]); - // Debug message - //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',count=' . $count); - // Return it + //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',count=' . $count); return $count; } @@ -1391,31 +1570,36 @@ Loaded includes: * * @param $keyGroup Main group for the key * @param $subGroup Sub group for the key - * @para $key Key to count + * @param $key Key to count * @return $count Count of given key + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ protected final function countGenericArrayElements (string $keyGroup, string $subGroup, $key) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); - - // Is it there? - if (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } elseif (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { // Abort here - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' not found.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key)); } elseif (!$this->isValidGenericArrayGroup($keyGroup, $subGroup)) { // Not valid - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ' is not an array.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s is not a valid key/sub group.', $keyGroup, $subGroup)); } // Then count it $count = count($this->genericArray[$keyGroup][$subGroup][$key]); - // Debug message - //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',count=' . $count); - // Return it + //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',count=' . $count); return $count; } @@ -1424,16 +1608,18 @@ Loaded includes: * * @param $keyGroup Key group to get * @return $array Whole generic array group + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ protected final function getGenericArray (string $keyGroup) { - // Debug message + // Check parameters //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup); - - // Is it there? - if (!isset($this->genericArray[$keyGroup])) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (!isset($this->genericArray[$keyGroup])) { // Then abort here - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ' does not exist.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s not found', $keyGroup)); } // Return it @@ -1448,10 +1634,25 @@ Loaded includes: * @param $key Key to unset * @param $value Mixed value from generic array element * @return void + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ protected final function setGenericArrayKey (string $keyGroup, string $subGroup, $key, $value) { - // Debug message + // Check parameters //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',value[' . gettype($value) . ']=' . print_r($value, true)); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } elseif (!$this->isValidGenericArrayGroup($keyGroup, $subGroup)) { + // Then abort here + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s not found', $keyGroup)); + } // Set value here $this->genericArray[$keyGroup][$subGroup][$key] = $value; @@ -1464,16 +1665,24 @@ Loaded includes: * @param $subGroup Sub group for the key * @param $key Key to unset * @return $value Mixed value from generic array element + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ protected final function getGenericArrayKey (string $keyGroup, string $subGroup, $key) { - // Debug message + // Check parameters //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); - - // Is it there? - if (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } elseif (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { // Then abort here - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ' does not exist.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key)); } // Return it @@ -1489,10 +1698,27 @@ Loaded includes: * @param $element Element to set * @param $value Value to set * @return void + * @throws InvalidArgumentException If a parameter is not valid */ protected final function setGenericArrayElement (string $keyGroup, string $subGroup, $key, $element, $value) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ if (!is_object($value)) $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ',value[' . gettype($value) . ']=' . print_r($value, true)); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } elseif (empty($element)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty'); + } elseif (!$this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) { + // Initialize array + $this->initGenericArrayElement($keyGroup, $subGroup, $key, $element); + } // Then set it $this->genericArray[$keyGroup][$subGroup][$key][$element] = $value; @@ -1506,16 +1732,27 @@ Loaded includes: * @param $key Key to look for * @param $element Element to look for * @return $value Mixed value from generic array element + * @throws InvalidArgumentException If a parameter is not valid + * @throws BadMethodCallException If key/sub group isn't there but this method is invoked */ protected final function getGenericArrayElement (string $keyGroup, string $subGroup, $key, $element) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element); - - // Is it there? - if (!$this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) { + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } elseif (empty($element)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty'); + } elseif (!$this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) { // Then abort here - trigger_error(__METHOD__ . ': keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element . ' does not exist.'); - exit; + throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s,element[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key, gettype($element), $element)); } // Return it @@ -1528,10 +1765,18 @@ Loaded includes: * @param $keyGroup Key group to get * @param $subGroup Sub group for the key * @return $isValid Whether given sub group is valid + * @throws InvalidArgumentException If a parameter is not valid */ protected final function isValidGenericArrayGroup (string $keyGroup, string $subGroup) { - // Debug message + // Check parameter //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } // Determine it $isValid = (($this->isGenericArrayGroupSet($keyGroup, $subGroup)) && (is_array($this->getGenericSubArray($keyGroup, $subGroup)))); @@ -1549,8 +1794,18 @@ Loaded includes: * @return $isValid Whether given sub group is valid */ protected final function isValidGenericArrayKey (string $keyGroup, string $subGroup, $key) { - // Debug message + // Check parameters //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty'); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty'); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty'); + } // Determine it $isValid = (($this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) && (is_array($this->getGenericArrayKey($keyGroup, $subGroup, $key)))); -- 2.39.5