X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=framework%2Fmain%2Fclasses%2Fclass_BaseFrameworkSystem.php;h=a22be776047b4fd5dac3ffffe534344297d79302;hb=c20af2b1b05f92040a8cfabfb1d0c5cd2771f7c5;hp=f1c3b49a342ae3bdb4fb4c11bb96f9863b72ce4c;hpb=0a198892c079422ef72d679321caad9310b417f4;p=core.git diff --git a/framework/main/classes/class_BaseFrameworkSystem.php b/framework/main/classes/class_BaseFrameworkSystem.php index f1c3b49a..a22be776 100644 --- a/framework/main/classes/class_BaseFrameworkSystem.php +++ b/framework/main/classes/class_BaseFrameworkSystem.php @@ -4,13 +4,14 @@ namespace Org\Mxchange\CoreFramework\Object; // Import framework stuff use Org\Mxchange\CoreFramework\Bootstrap\FrameworkBootstrap; -use Org\Mxchange\CoreFramework\Criteria\Criteria; use Org\Mxchange\CoreFramework\EntryPoint\ApplicationEntryPoint; -use Org\Mxchange\CoreFramework\Factory\ObjectFactory; +use Org\Mxchange\CoreFramework\Factory\Object\ObjectFactory; +use Org\Mxchange\CoreFramework\Filesystem\FileIoException; use Org\Mxchange\CoreFramework\Filesystem\PathWriteProtectedException; use Org\Mxchange\CoreFramework\Generic\FrameworkInterface; use Org\Mxchange\CoreFramework\Generic\NullPointerException; use Org\Mxchange\CoreFramework\Generic\UnsupportedOperationException; +use Org\Mxchange\CoreFramework\Helper\Application\ApplicationHelper; use Org\Mxchange\CoreFramework\Loader\ClassLoader; use Org\Mxchange\CoreFramework\Manager\ManageableApplication; use Org\Mxchange\CoreFramework\Middleware\Debug\DebugMiddleware; @@ -18,13 +19,14 @@ use Org\Mxchange\CoreFramework\Registry\GenericRegistry; use Org\Mxchange\CoreFramework\Result\Database\CachedDatabaseResult; use Org\Mxchange\CoreFramework\State\Stateable; use Org\Mxchange\CoreFramework\Stream\Output\OutputStreamer; -use Org\Mxchange\CoreFramework\Utils\String\StringUtils; +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 @@ -32,7 +34,7 @@ use \SplFileInfo; * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2020 Core Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2022 Core Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.shipsimu.org * @@ -51,14 +53,18 @@ use \SplFileInfo; */ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterface { /** - * Length of output from hash() + * Self-referencing instance */ - private static $hashLength = NULL; + private static $selfInstance = NULL; /** - * Self-referencing instance + * Stub methods */ - private static $selfInstance = NULL; + private static $stubMethods = [ + 'partialStub' => true, + '__call' => true, + '__callStatic' => true, + ]; /** * The real class name @@ -125,24 +131,23 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac const EXCEPTION_ATTRIBUTES_ARE_MISSING = 0x02b; const EXCEPTION_ARRAY_ELEMENTS_MISSING = 0x02c; const EXCEPTION_TEMPLATE_ENGINE_UNSUPPORTED = 0x02d; - const EXCEPTION_UNSPPORTED_OPERATION = 0x02e; - const EXCEPTION_FACTORY_REQUIRE_PARAMETER = 0x02f; - const EXCEPTION_MISSING_ELEMENT = 0x030; - const EXCEPTION_HEADERS_ALREADY_SENT = 0x031; - const EXCEPTION_DEFAULT_CONTROLLER_GONE = 0x032; - const EXCEPTION_CLASS_NOT_FOUND = 0x033; - const EXCEPTION_REQUIRED_INTERFACE_MISSING = 0x034; - const EXCEPTION_FATAL_ERROR = 0x035; - const EXCEPTION_FILE_NOT_FOUND = 0x036; - const EXCEPTION_ASSERTION_FAILED = 0x037; - const EXCEPTION_FILE_NOT_REACHABLE = 0x038; - const EXCEPTION_FILE_CANNOT_BE_READ = 0x039; - const EXCEPTION_FILE_CANNOT_BE_WRITTEN = 0x03a; - const EXCEPTION_PATH_CANNOT_BE_WRITTEN = 0x03b; - const EXCEPTION_DATABASE_UPDATED_NOT_ALLOWED = 0x03c; - const EXCEPTION_FILTER_CHAIN_INTERCEPTED = 0x03d; - const EXCEPTION_INVALID_SOCKET = 0x03e; - const EXCEPTION_SELF_INSTANCE = 0x03f; + const EXCEPTION_FACTORY_REQUIRE_PARAMETER = 0x02e; + const EXCEPTION_MISSING_ELEMENT = 0x02f; + const EXCEPTION_HEADERS_ALREADY_SENT = 0x030; + const EXCEPTION_DEFAULT_CONTROLLER_GONE = 0x031; + const EXCEPTION_CLASS_NOT_FOUND = 0x032; + const EXCEPTION_REQUIRED_INTERFACE_MISSING = 0x033; + const EXCEPTION_FATAL_ERROR = 0x034; + const EXCEPTION_FILE_NOT_FOUND = 0x035; + const EXCEPTION_ASSERTION_FAILED = 0x036; + const EXCEPTION_FILE_NOT_REACHABLE = 0x037; + const EXCEPTION_FILE_CANNOT_BE_READ = 0x038; + const EXCEPTION_FILE_CANNOT_BE_WRITTEN = 0x039; + const EXCEPTION_PATH_CANNOT_BE_WRITTEN = 0x03a; + const EXCEPTION_DATABASE_UPDATED_NOT_ALLOWED = 0x03b; + const EXCEPTION_FILTER_CHAIN_INTERCEPTED = 0x03c; + const EXCEPTION_INVALID_SOCKET = 0x03d; + const EXCEPTION_SELF_INSTANCE = 0x03e; /** * Startup time in miliseconds @@ -349,7 +354,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac * @throws UnsupportedOperationException Objects of this framework cannot be serialized */ public final function __sleep () { - throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION); + throw new UnsupportedOperationException([$this, __FUNCTION__], FrameworkInterface::EXCEPTION_UNSPPORTED_OPERATION); } /** @@ -359,7 +364,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac * @throws UnsupportedOperationException Objects of this framework cannot be serialized */ public final function __wakeup () { - throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION); + throw new UnsupportedOperationException([$this, __FUNCTION__], FrameworkInterface::EXCEPTION_UNSPPORTED_OPERATION); } /** @@ -369,7 +374,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac * @throws UnsupportedOperationException Objects of this framework cannot be serialized */ public final function __invoke () { - throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION); + throw new UnsupportedOperationException([$this, __FUNCTION__], FrameworkInterface::EXCEPTION_UNSPPORTED_OPERATION); } /** @@ -399,11 +404,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'); } /** @@ -422,8 +423,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'); } /** @@ -497,7 +497,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac * @param $message Optional message to show in debug output * @return void */ - public final function debugInstance ($message = '') { + public final function debugInstance (string $message = '') { // Restore the error handler to avoid trouble with missing array elements or undeclared variables restore_error_handler(); @@ -538,32 +538,13 @@ Loaded includes: )); } - /** - * Replaces control characters with printable output - * - * @param $str String with control characters - * @return $str Replaced string - */ - protected function replaceControlCharacters ($str) { - // Replace them - $str = str_replace( - chr(13), '[r]', str_replace( - chr(10), '[n]', str_replace( - chr(9) , '[t]', - $str - ))); - - // Return it - return $str; - } - /** * Output a partial stub message for the caller method * * @param $message An optional message to display * @return void */ - protected function partialStub ($message = '') { + protected function partialStub (string $message = '') { // Init variable $stubMessage = 'Partial stub!'; @@ -591,7 +572,7 @@ Loaded includes: * @param $doExit Whether exit the program (true is default) * @return void */ - public function debugBackTrace ($message = '', $doExit = true) { + public function debugBackTrace (string $message = '', bool $doExit = true) { // Sorry, there is no other way getting this nice backtrace if (!empty($message)) { // Output message @@ -616,9 +597,12 @@ Loaded includes: * @return $debugInstance An instance of a debugger class * @deprecated Not fully, as the new Logger facilities are not finished yet. */ - public final static function createDebugInstance ($className, $lineNumber = NULL) { - // Is the instance set? - if (!GenericRegistry::getRegistry()->instanceExists('debug')) { + public final static function createDebugInstance (string $className, int $lineNumber = NULL) { + // Validate parameter + if (empty($className)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "className" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!GenericRegistry::getRegistry()->instanceExists('debug')) { // Init debug instance $debugInstance = NULL; @@ -628,7 +612,7 @@ Loaded includes: $debugInstance = DebugMiddleware::createDebugMiddleware(FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('debug_' . FrameworkBootstrap::getRequestTypeFromSystem() . '_class'), $className); } catch (NullPointerException $e) { // Didn't work, no instance there - exit(sprintf('Cannot create debugInstance! Exception=%s,message=%s,className=%s,lineNumber=%d' . PHP_EOL, $e->__toString(), $e->getMessage(), $className, $lineNumber)); + exit(sprintf('[%s:%d]: Cannot create debugInstance! Exception=%s,message=%s,className=%s,lineNumber=%d' . PHP_EOL, __METHOD__, __LINE__, $e->__toString(), $e->getMessage(), $className, $lineNumber)); } // Empty string should be ignored and used for testing the middleware @@ -651,7 +635,7 @@ Loaded includes: * @param $message Message to output * @return void */ - public function outputLine ($message) { + public function outputLine (string $message) { // Simply output it print($message . PHP_EOL); } @@ -666,7 +650,7 @@ Loaded includes: * @paran $stripTags Whether to strip tags (default: false) * @return void */ - public function debugOutput ($message, $doPrint = true, $stripTags = false) { + public function debugOutput (string $message, bool $doPrint = true, bool $stripTags = false) { // Set debug instance to NULL $debugInstance = NULL; @@ -674,7 +658,7 @@ Loaded includes: $backtrace = debug_backtrace(!DEBUG_BACKTRACE_PROVIDE_OBJECT); // Is function partialStub/__callStatic ? - if (in_array($backtrace[1]['function'], array('partialStub', '__call', '__callStatic'))) { + if (isset(self::$stubMethods[$backtrace[1]['function']])) { // Prepend class::function:line from 3rd element $message = sprintf('[%s::%s:%d]: %s', $backtrace[2]['class'], @@ -711,7 +695,7 @@ Loaded includes: } } else { // Are debug times enabled? - if (FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('debug_' . FrameworkBootstrap::getRequestTypeFromSystem() . '_output_timings') == 'Y') { + if (FrameworkBootstrap::getConfigurationInstance()->isEnabled('debug_' . FrameworkBootstrap::getRequestTypeFromSystem() . '_output_timings')) { // Prepent it $message = $this->getPrintableExecutionTime() . $message; } @@ -733,7 +717,7 @@ Loaded includes: * @param $phpCode Unmarked PHP code * @return $markedCode Marked PHP code */ - public function markupCode ($phpCode) { + public function markupCode (string $phpCode) { // Init marked code $markedCode = ''; @@ -770,9 +754,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 @@ -804,8 +791,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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + + // This method is deprecated + $this->deprecationWarning('Monolithic method, should be moved to proper classes'); + // Default field value $fieldValue = NULL; @@ -829,7 +827,7 @@ Loaded includes: if ($this->isFieldSet($fieldName)) { // Get it $fieldValue = $fieldArray[$fieldName2]; - } elseif (FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('developer_mode_enabled')) { + } elseif (FrameworkBootstrap::getConfigurationInstance()->isEnabled('developer_mode')) { // Missing field entry, may require debugging self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('BASE-FRAMEWORK-SYSTEM: fieldArray
=' . print_r($fieldArray, true) . '
,fieldName=' . $fieldName . ' not found!'); } else { @@ -847,8 +845,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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + // Get result instance $resultInstance = $this->getResultInstance(); @@ -879,9 +884,9 @@ Loaded includes: * @return void * @todo Write a logging mechanism for productive mode */ - public function deprecationWarning ($message) { + public function deprecationWarning (string $message) { // Is developer mode active? - if (FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('developer_mode_enabled')) { + if (FrameworkBootstrap::getConfigurationInstance()->isEnabled('developer_mode')) { // Debug instance is there? if (!is_null($this->getDebugInstance())) { // Output stub message @@ -902,8 +907,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 ($phpExtension) { + public final function isPhpExtensionLoaded (string $phpExtension) { + // Check parameter + if (empty($phpExtension)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "phpExtension" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + // Is it loaded? $isLoaded = in_array($phpExtension, get_loaded_extensions()); @@ -929,8 +941,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 ($milliSeconds) { + 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; @@ -958,8 +977,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 ($encodedData) { + protected function isBase64Encoded (string $encodedData) { + // Check parameter + if (empty($encodedData)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "encodedData" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } + // Determine it $isBase64 = (@base64_decode($encodedData, true) !== false); @@ -967,26 +993,6 @@ Loaded includes: return $isBase64; } - /** - * Gets a cache key from Criteria instance - * - * @param $criteriaInstance An instance of a Criteria class - * @param $onlyKeys Only use these keys for a cache key - * @return $cacheKey A cache key suitable for lookup/storage purposes - */ - protected function getCacheKeyByCriteria (Criteria $criteriaInstance, array $onlyKeys = []) { - // Generate it - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('BASE-FRAMEWORK-SYSTEM: criteriaInstance=' . $criteriaInstance->__toString() . ',onlyKeys()=' . count($onlyKeys) . ' - CALLED!'); - $cacheKey = sprintf('%s@%s', - $this->__toString(), - $criteriaInstance->getCacheKey($onlyKeys) - ); - - // And return it - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('BASE-FRAMEWORK-SYSTEM: cacheKey=' . $cacheKey . ' - EXIT!'); - return $cacheKey; - } - /** * Getter for startup time in miliseconds * @@ -1002,48 +1008,13 @@ Loaded includes: * @return $executionTime Current execution time in nice braces */ protected function getPrintableExecutionTime () { - // Caculate the execution time - $executionTime = microtime(true) - $this->getStartupTime(); - - // Pack it in nice braces - $executionTime = sprintf('[ %01.5f ] ', $executionTime); + // Calculate execution time and pack it in nice braces + $executionTime = sprintf('[ %01.5f ] ', (microtime(true) - $this->getStartupTime())); // And return it return $executionTime; } - /** - * Hashes a given string with a simple but stronger hash function (no salt) - * and hex-encode it. - * - * @param $str The string to be hashed - * @return $hash The hash from string $str - */ - public static final function hash ($str) { - // Hash given string with (better secure) hasher - $hash = bin2hex(mhash(MHASH_SHA256, $str)); - - // Return it - return $hash; - } - - /** - * "Getter" for length of hash() output. This will be "cached" to speed up - * things. - * - * @return $length Length of hash() output - */ - public static final function getHashLength () { - // Is it cashed? - if (is_null(self::$hashLength)) { - // No, then hash a string and save its length. - self::$hashLength = strlen(self::hash('abc123')); - } - - // Return it - return self::$hashLength; - } - /** * Determines if an element is set in the generic array * @@ -1052,12 +1023,26 @@ Loaded includes: * @param $key Key to check * @param $element Element to check * @return $isset Whether the given key is set - */ - protected final function isGenericArrayElementSet (string $keyGroup, string $subGroup, $key, $element) { - // Debug message - //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key . ',element=' . $element); + * @throws InvalidArgumentException If a parameter is not valid + */ + protected final function isGenericArrayElementSet (string $keyGroup, string $subGroup, string $key, string $element) { + // Check parameter + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif ($element === '') { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } // 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]); // Return it @@ -1070,29 +1055,47 @@ Loaded includes: * @param $subGroup Sub group for the key * @param $key Key to check * @return $isset Whether the given key is set - */ - protected final function isGenericArrayKeySet (string $keyGroup, string $subGroup, $key) { - // Debug message - //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); + * @throws InvalidArgumentException If a parameter is not valid + */ + protected final function isGenericArrayKeySet (string $keyGroup, string $subGroup, string $key) { + // Check parameter + if (empty($keyGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } // Is it there? + //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',key=' . $key); $isset = isset($this->genericArray[$keyGroup][$subGroup][$key]); // Return it 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) { - // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } // Is it there? $isset = isset($this->genericArray[$keyGroup][$subGroup]); @@ -1107,18 +1110,23 @@ 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } 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)); } - // Debug message - //* NOISY-DEBUG: */ $this->outputLine('[' . __METHOD__ . ':' . __LINE__ . '] keyGroup=' . $keyGroup . ',subGroup=' . $subGroup . ',value=' . print_r($this->genericArray[$keyGroup][$subGroup], true)); - // Return it return $this->genericArray[$keyGroup][$subGroup]; } @@ -1130,10 +1138,21 @@ 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) { - // Debug message + protected final function unsetGenericArrayKey (string $keyGroup, string $subGroup, string $key) { + // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } // Remove it unset($this->genericArray[$keyGroup][$subGroup][$key]); @@ -1147,10 +1166,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 + protected final function unsetGenericArrayElement (string $keyGroup, string $subGroup, string $key, string $element) { + // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif ($element === '') { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } // Remove it unset($this->genericArray[$keyGroup][$subGroup][$key][$element]); @@ -1164,18 +1197,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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } // 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; } } @@ -1188,39 +1232,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, string $key, string $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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif ($element === '') { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } // 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); + $this->setGenericArrayElement($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 * @@ -1229,16 +1269,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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } 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 @@ -1253,16 +1298,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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } 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 @@ -1278,16 +1331,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 + protected final function initGenericArrayElement (string $keyGroup, string $subGroup, string $key, string $element, bool $forceInit = false) { + // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif ($element === '') { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } 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 @@ -1295,20 +1359,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 + protected final function pushValueToGenericArrayKey (string $keyGroup, string $subGroup, string $key, $value) { + // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) { // Initialize array $this->initGenericArrayKey($keyGroup, $subGroup, $key); } @@ -1323,7 +1395,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 @@ -1331,13 +1403,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 + protected final function pushValueToGenericArrayElement (string $keyGroup, string $subGroup, string $key, string $element, $value) { + // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif ($element === '') { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (!$this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) { // Initialize array $this->initGenericArrayElement($keyGroup, $subGroup, $key, $element); } @@ -1358,16 +1441,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 + protected final function popGenericArrayElement (string $keyGroup, string $subGroup, string $key) { + // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } 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 @@ -1385,17 +1476,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 + protected final function shiftGenericArrayElement (string $keyGroup, string $subGroup, string $key) { + // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } 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 @@ -1412,25 +1511,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 ($keyGroup) { - // Debug message + protected final function countGenericArray (string $keyGroup) { + // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } 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; } @@ -1440,25 +1539,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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } 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; } @@ -1467,31 +1569,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 + protected final function countGenericArrayElements (string $keyGroup, string $subGroup, string $key) { + // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } 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; } @@ -1500,16 +1607,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 ($keyGroup) { - // Debug message + protected final function getGenericArray (string $keyGroup) { + // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } 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 @@ -1524,10 +1633,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 + protected final function setGenericArrayKey (string $keyGroup, string $subGroup, string $key, $value) { + // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } 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; @@ -1540,16 +1664,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 + protected final function getGenericArrayKey (string $keyGroup, string $subGroup, string $key) { + // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } 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 @@ -1565,10 +1697,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 + protected final function setGenericArrayElement (string $keyGroup, string $subGroup, string $key, string $element, $value) { + // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif ($element === '') { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } 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; @@ -1582,16 +1731,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 + protected final function getGenericArrayElement (string $keyGroup, string $subGroup, string $key, string $element) { + // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif ($element === '') { + // Throw IAE + throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } 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 @@ -1604,10 +1764,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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } // Determine it $isValid = (($this->isGenericArrayGroupSet($keyGroup, $subGroup)) && (is_array($this->getGenericSubArray($keyGroup, $subGroup)))); @@ -1624,9 +1792,19 @@ Loaded includes: * @param $key Key to check * @return $isValid Whether given sub group is valid */ - protected final function isValidGenericArrayKey (string $keyGroup, string $subGroup, $key) { - // Debug message + protected final function isValidGenericArrayKey (string $keyGroup, string $subGroup, string $key) { + // 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', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($subGroup)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } elseif (empty($key)) { + // Throw IAE + throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT); + } // Determine it $isValid = (($this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) && (is_array($this->getGenericArrayKey($keyGroup, $subGroup, $key)))); @@ -1641,11 +1819,8 @@ Loaded includes: * @return void */ protected function initWebOutputInstance () { - // Get application instance - $applicationInstance = GenericRegistry::getRegistry()->getInstance('application'); - // Init web output instance - $outputInstance = ObjectFactory::createObjectByConfiguredName('output_class', array($applicationInstance)); + $outputInstance = ObjectFactory::createObjectByConfiguredName('output_class'); // Set it locally $this->setWebOutputInstance($outputInstance); @@ -1658,9 +1833,6 @@ Loaded includes: * @return $translated Translated boolean value */ public static final function translateBooleanToYesNo (bool $boolean) { - // Make sure it is really boolean - assert(is_bool($boolean)); - // "Translate" it $translated = ($boolean === true) ? 'Y' : 'N';