]> git.mxchange.org Git - core.git/blobdiff - framework/main/classes/class_BaseFrameworkSystem.php
Continued:
[core.git] / framework / main / classes / class_BaseFrameworkSystem.php
index e7cd1955d441173505cf0e96116c0b9952f3b4de..dc2410c324d9991d2e8a4b91f5a4c7c791cd87e7 100644 (file)
@@ -34,7 +34,7 @@ use \stdClass;
  *
  * @author             Roland Haeder <webmaster@shipsimu.org>
  * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2022 Core Developer Team
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2023 Core Developer Team
  * @license            GNU GPL 3.0 or any newer version
  * @link               http://www.shipsimu.org
  *
@@ -57,6 +57,11 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac
         */
        private static $selfInstance = NULL;
 
+       /**
+        * Debug instance
+        */
+       private static $debugInstance = NULL;
+
        /**
         * Stub methods
         */
@@ -131,24 +136,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
@@ -184,13 +188,13 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac
                        $this->setRealClass('DestructedObject');
                } elseif ((defined('DEBUG_DESTRUCTOR')) && (is_object($this->getDebugInstance()))) {
                        // Already destructed object
-                       self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('The object <span class="object_name">%s</span> is already destroyed.',
+                       self::createDebugInstance(__CLASS__, __LINE__)->warningMessage(sprintf('The object <span class="object_name">%s</span> is already destroyed.',
                                $this->__toString()
                        ));
                } else {
                        // Do not call this twice
                        trigger_error(__METHOD__ . ': Called twice.');
-                       exit;
+                       exit(255);
                }
        }
 
@@ -290,7 +294,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac
 
                // Output stub message
                // @TODO __CLASS__ does always return BaseFrameworkSystem but not the extending (=child) class
-               self::createDebugInstance(__CLASS__, __LINE__)->debugOutput(sprintf('[%s::%s]: Stub! Args: %s',
+               self::createDebugInstance(__CLASS__, __LINE__)->warningMessage(sprintf('[%s::%s]: Stub! Args: %s',
                        $className,
                        $methodName,
                        $argsString
@@ -355,7 +359,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac
         * @throws      UnsupportedOperationException   Objects of this framework cannot be serialized
         */
        public final function __sleep () {
-               throw new UnsupportedOperationException([$this, __FUNCTION__], self::EXCEPTION_UNSPPORTED_OPERATION);
+               throw new UnsupportedOperationException([$this, __FUNCTION__], FrameworkInterface::EXCEPTION_UNSPPORTED_OPERATION);
        }
 
        /**
@@ -365,7 +369,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac
         * @throws      UnsupportedOperationException   Objects of this framework cannot be serialized
         */
        public final function __wakeup () {
-               throw new UnsupportedOperationException([$this, __FUNCTION__], self::EXCEPTION_UNSPPORTED_OPERATION);
+               throw new UnsupportedOperationException([$this, __FUNCTION__], FrameworkInterface::EXCEPTION_UNSPPORTED_OPERATION);
        }
 
        /**
@@ -375,7 +379,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac
         * @throws      UnsupportedOperationException   Objects of this framework cannot be serialized
         */
        public final function __invoke () {
-               throw new UnsupportedOperationException([$this, __FUNCTION__], self::EXCEPTION_UNSPPORTED_OPERATION);
+               throw new UnsupportedOperationException([$this, __FUNCTION__], FrameworkInterface::EXCEPTION_UNSPPORTED_OPERATION);
        }
 
        /**
@@ -396,7 +400,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac
         * @return      void
         */
        public final function setDebugInstance (DebugMiddleware $debugInstance) {
-               GenericRegistry::getRegistry()->addInstance('debug', $debugInstance);
+               self::$debugInstance = $debugInstance;
        }
 
        /**
@@ -405,7 +409,7 @@ abstract class BaseFrameworkSystem extends stdClass implements FrameworkInterfac
         * @return      $debugInstance  Instance to class DebugConsoleOutput or DebugWebOutput
         */
        public final function getDebugInstance () {
-               return GenericRegistry::getRegistry()->getInstance('debug');
+               return self::$debugInstance;
        }
 
        /**
@@ -539,33 +543,6 @@ Loaded includes:
                ));
        }
 
-       /**
-        * Output a partial stub message for the caller method
-        *
-        * @param       $message        An optional message to display
-        * @return      void
-        */
-       protected function partialStub (string $message = '') {
-               // Init variable
-               $stubMessage = 'Partial stub!';
-
-               // Is an extra message given?
-               if (!empty($message)) {
-                       // Then add it as well
-                       $stubMessage .= ' Message: ' . $message;
-               }
-
-               // Debug instance is there?
-               if (!is_null($this->getDebugInstance())) {
-                       // Output stub message
-                       self::createDebugInstance(__CLASS__, __LINE__)->debugOutput($stubMessage);
-               } else {
-                       // Trigger an error
-                       trigger_error($stubMessage);
-                       exit;
-               }
-       }
-
        /**
         * Outputs a debug backtrace and stops further script execution
         *
@@ -596,38 +573,37 @@ Loaded includes:
         * @param       $className              Name of the class (currently unsupported)
         * @param       $lineNumber             Line number where the call was made
         * @return      $debugInstance  An instance of a debugger class
+        * @throws      InvalidArgumentException        If a parameter has an invalid value
         * @deprecated  Not fully, as the new Logger facilities are not finished yet.
         */
        public final static function createDebugInstance (string $className, int $lineNumber = NULL) {
                // Validate parameter
+               //* NOISY-DEBUG: */ printf('[%s:%d]: className=%s,lineNumber[%s]=%d - CALLED!' . PHP_EOL, __METHOD__, __LINE__, $className, gettype($lineNumber), $lineNumber);
                if (empty($className)) {
                        // Throw IAE
                        throw new InvalidArgumentException('Parameter "className" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
-               } elseif (!GenericRegistry::getRegistry()->instanceExists('debug')) {
+               }
+
+               // Is the debug instance set?
+               //* NOISY-DEBUG: */ printf('[%s:%d]: self::debugInstance[]=%s' . PHP_EOL, __METHOD__, __LINE__, gettype(self::$debugInstance));
+               if (is_null(self::$debugInstance)) {
                        // Init debug instance
-                       $debugInstance = NULL;
+                       self::$debugInstance = NULL;
 
                        // Try it
                        try {
                                // Get a debugger instance
-                               $debugInstance = DebugMiddleware::createDebugMiddleware(FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('debug_' . FrameworkBootstrap::getRequestTypeFromSystem() . '_class'), $className);
+                               //* NOISY-DEBUG: */ printf('[%s:%d]: className=%s' . PHP_EOL, __METHOD__, __LINE__, $className);
+                               self::$debugInstance = DebugMiddleware::createDebugMiddleware(FrameworkBootstrap::getConfigurationInstance()->getConfigEntry('debug_' . FrameworkBootstrap::getRequestTypeFromSystem() . '_class'), $className);
                        } catch (NullPointerException $e) {
                                // Didn't work, no instance there
                                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
-                       DebugMiddleware::getSelfInstance()->output('');
-
-                       // Set it in registry
-                       GenericRegistry::getRegistry()->addInstance('debug', $debugInstance);
-               } else {
-                       // Get instance from registry
-                       $debugInstance = GenericRegistry::getRegistry()->getDebugInstance();
                }
 
                // Return it
-               return $debugInstance;
+               //* NOISY-DEBUG: */ printf('[%s:%d]: self::debugInstance=%s - EXIT!' . PHP_EOL, __METHOD__, __LINE__, self::$debugInstance->__toString());
+               return self::$debugInstance;
        }
 
        /**
@@ -641,77 +617,6 @@ Loaded includes:
                print($message . PHP_EOL);
        }
 
-       /**
-        * Outputs a debug message whether to debug instance (should be set!) or
-        * dies with or ptints the message. Do NEVER EVER rewrite the exit() call to
-        * ApplicationEntryPoint::app_exit(), this would cause an endless loop.
-        *
-        * @param       $message        Message we shall send out...
-        * @param       $doPrint        Whether print or die here (default: print)
-        * @paran       $stripTags      Whether to strip tags (default: false)
-        * @return      void
-        */
-       public function debugOutput (string $message, bool $doPrint = true, bool $stripTags = false) {
-               // Set debug instance to NULL
-               $debugInstance = NULL;
-
-               // Get backtrace
-               $backtrace = debug_backtrace(!DEBUG_BACKTRACE_PROVIDE_OBJECT);
-
-               // Is function partialStub/__callStatic ?
-               if (isset(self::$stubMethods[$backtrace[1]['function']])) {
-                       // Prepend class::function:line from 3rd element
-                       $message = sprintf('[%s::%s:%d]: %s',
-                               $backtrace[2]['class'],
-                               $backtrace[2]['function'],
-                               (isset($backtrace[2]['line']) ? $backtrace[2]['line'] : '0'),
-                               $message
-                       );
-               } else {
-                       // Prepend class::function:line from 2nd element
-                       $message = sprintf('[%s::%s:%d]: %s',
-                               $backtrace[1]['class'],
-                               $backtrace[1]['function'],
-                               (isset($backtrace[1]['line']) ? $backtrace[1]['line'] : '0'),
-                               $message
-                       );
-               }
-
-               // Try it:
-               try {
-                       // Get debug instance
-                       $debugInstance = $this->getDebugInstance();
-               } catch (NullPointerException $e) {
-                       // The debug instance is not set (yet)
-               }
-
-               // Is the debug instance there?
-               if (is_object($debugInstance)) {
-                       // Use debug output handler
-                       $debugInstance->output($message, $stripTags);
-
-                       if ($doPrint === false) {
-                               // Die here if not printed
-                               exit();
-                       }
-               } else {
-                       // Are debug times enabled?
-                       if (FrameworkBootstrap::getConfigurationInstance()->isEnabled('debug_' . FrameworkBootstrap::getRequestTypeFromSystem() . '_output_timings')) {
-                               // Prepent it
-                               $message = $this->getPrintableExecutionTime() . $message;
-                       }
-
-                       // Put directly out
-                       if ($doPrint === true) {
-                               // Print message
-                               $this->outputLine($message);
-                       } else {
-                               // Die here
-                               exit($message);
-                       }
-               }
-       }
-
        /**
         * Marks up the code by adding e.g. line numbers
         *
@@ -759,30 +664,36 @@ Loaded includes:
         */
        protected final function getDatabaseEntry () {
                // This method is deprecated
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('BASE-FRAMEWORK-SYSTEM: CALLED!');
                $this->deprecationWarning('Monolithic method, should be moved to proper classes');
 
                // Is there an instance?
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: this->resultInstance[]=%s', gettype($this->getResultInstance())));
                if (!$this->getResultInstance() instanceof SearchableResult) {
                        // Throw an exception here
                        throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
                }
 
                // Rewind it
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('BASE-FRAMEWORK-SYSTEM: Invoking this->resultInstance->rewind() ...');
                $this->getResultInstance()->rewind();
 
                // Do we have an entry?
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: this->resultInstance->isValid()=%d', intval($this->getResultInstance()->isValid())));
                if ($this->getResultInstance()->valid() === false) {
                        // @TODO Move the constant to e.g. BaseDatabaseResult when there is a non-cached database result available
                        throw new InvalidDatabaseResultException(array($this, $this->getResultInstance()), CachedDatabaseResult::EXCEPTION_INVALID_DATABASE_RESULT);
                }
 
                // Get next entry
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage('BASE-FRAMEWORK-SYSTEM: Invoking this->resultInstance->next() ...');
                $this->getResultInstance()->next();
 
                // Fetch it
                $entry = $this->getResultInstance()->current();
 
                // And return it
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-FRAMEWORK-SYSTEM: entry[]=%s - EXIT!', gettype($entry)));
                return $entry;
        }
 
@@ -797,6 +708,7 @@ Loaded includes:
         */
        public final function getField (string $fieldName) {
                // Check parameter
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-FRAMEWORK-SYSTEM: fieldName=%s - CALLED!', $fieldName));
                if (empty($fieldName)) {
                        // Throw IAE
                        throw new InvalidArgumentException('Parameter "fieldName" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
@@ -812,6 +724,7 @@ Loaded includes:
                $resultInstance = $this->getResultInstance();
 
                // Is this instance null?
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: resultInstance[]=%s', gettype($resultInstance)));
                if (is_null($resultInstance)) {
                        // Then the user instance is no longer valid (expired cookies?)
                        throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
@@ -819,24 +732,26 @@ Loaded includes:
 
                // Get current array
                $fieldArray = $resultInstance->current();
-               //* DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput($fieldName.':<pre>'.print_r($fieldArray, true).'</pre>');
 
                // Convert dashes to underscore
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: fieldArray()=%d', count($fieldArray)));
                $fieldName2 = StringUtils::convertDashesToUnderscores($fieldName);
 
                // Does the field exist?
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: fieldName2=%s', $fieldName2));
                if ($this->isFieldSet($fieldName)) {
                        // Get it
                        $fieldValue = $fieldArray[$fieldName2];
                } elseif (FrameworkBootstrap::getConfigurationInstance()->isEnabled('developer_mode')) {
                        // Missing field entry, may require debugging
-                       self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('BASE-FRAMEWORK-SYSTEM: fieldArray<pre>=' . print_r($fieldArray, true) . '</pre>,fieldName=' . $fieldName . ' not found!');
+                       self::createDebugInstance(__CLASS__, __LINE__)->warningMessage('BASE-FRAMEWORK-SYSTEM: fieldArray<pre>=' . print_r($fieldArray, true) . '</pre>,fieldName=' . $fieldName . ' not found!');
                } else {
                        // Missing field entry, may require debugging
-                       self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('BASE-FRAMEWORK-SYSTEM: fieldName=' . $fieldName . ' not found!');
+                       self::createDebugInstance(__CLASS__, __LINE__)->warningMessage('BASE-FRAMEWORK-SYSTEM: fieldName=' . $fieldName . ' not found!');
                }
 
                // Return it
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-FRAMEWORK-SYSTEM: fieldValue[]=%s - EXIT!', gettype($fieldValue)));
                return $fieldValue;
        }
 
@@ -850,6 +765,7 @@ Loaded includes:
         */
        public function isFieldSet (string $fieldName) {
                // Check parameter
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-FRAMEWORK-SYSTEM: fieldName=%s - CALLED!', $fieldName));
                if (empty($fieldName)) {
                        // Throw IAE
                        throw new InvalidArgumentException('Parameter "fieldName" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
@@ -859,6 +775,7 @@ Loaded includes:
                $resultInstance = $this->getResultInstance();
 
                // Is this instance null?
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: resultInstance[]=%s', gettype($resultInstance)));
                if (is_null($resultInstance)) {
                        // Then the user instance is no longer valid (expired cookies?)
                        throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
@@ -866,16 +783,18 @@ Loaded includes:
 
                // Get current array
                $fieldArray = $resultInstance->current();
-               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('[' . $this->__toString() . ':' . __LINE__ . '] fieldName=' . $fieldName . ',fieldArray=<pre>'.print_r($fieldArray, true).'</pre>');
 
                // Convert dashes to underscore
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: fieldArray()=%d,fieldName=%s - BEFORE!', count($fieldArray), $fieldName));
                $fieldName = StringUtils::convertDashesToUnderscores($fieldName);
 
                // Determine it
-               $isSet = isset($fieldArray[$fieldName]);
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->debugMessage(sprintf('BASE-FRAMEWORK-SYSTEM: fieldName=%s - AFTER!', $fieldName));
+               $isset = isset($fieldArray[$fieldName]);
 
                // Return result
-               return $isSet;
+               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__, __LINE__)->traceMessage(sprintf('BASE-FRAMEWORK-SYSTEM: isset=%d - EXIT!', intval($isset)));
+               return $isset;
        }
 
        /**
@@ -891,15 +810,15 @@ Loaded includes:
                        // Debug instance is there?
                        if (!is_null($this->getDebugInstance())) {
                                // Output stub message
-                               self::createDebugInstance(__CLASS__, __LINE__)->debugOutput($message);
+                               self::createDebugInstance(__CLASS__, __LINE__)->warningMessage($message);
                        } else {
                                // Trigger an error
                                trigger_error($message . "<br />\n");
-                               exit;
+                               exit(255);
                        }
                } else {
                        // @TODO Finish this part!
-                       $this->partialStub('Developer mode inactive. Message:' . $message);
+                       DebugMiddleware::getSelfInstance()->partialStub('Developer mode inactive. Message:' . $message);
                }
        }
 
@@ -1125,7 +1044,7 @@ Loaded includes:
                        throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
                } elseif (!$this->isGenericArrayGroupSet($keyGroup, $subGroup)) {
                        // No, then abort here
-                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s not found.', $keyGroup, $subGroup));
+                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s not found.', $keyGroup, $subGroup), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL);
                }
 
                // Return it
@@ -1284,7 +1203,7 @@ Loaded includes:
                        throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
                } elseif (($forceInit === false) && ($this->isGenericArrayGroupSet($keyGroup, $subGroup))) {
                        // Already initialized
-                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s already initialized.', $keyGroup, $subGroup));
+                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s already initialized.', $keyGroup, $subGroup), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL);
                }
 
                // Initialize it
@@ -1316,7 +1235,7 @@ Loaded includes:
                        throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
                } elseif (($forceInit === false) && ($this->isGenericArrayKeySet($keyGroup, $subGroup, $key))) {
                        // Already initialized
-                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s already initialized.', $keyGroup, $subGroup, gettype($key), $key));
+                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s already initialized.', $keyGroup, $subGroup, gettype($key), $key), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL);
                }
 
                // Initialize it
@@ -1352,7 +1271,7 @@ Loaded includes:
                        throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
                } elseif (($forceInit === false) && ($this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element))) {
                        // Already initialized
-                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s,element[%s]=%s already initialized.', $keyGroup, $subGroup, gettype($key), $key, gettype($element), $element));
+                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s,element[%s]=%s already initialized.', $keyGroup, $subGroup, gettype($key), $key, gettype($element), $element), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL);
                }
 
                // Initialize it
@@ -1459,7 +1378,7 @@ Loaded includes:
                        throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
                } elseif (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) {
                        // Not found
-                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key));
+                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL);
                }
 
                // Then "pop" it
@@ -1495,7 +1414,7 @@ Loaded includes:
                        throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
                } elseif (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) {
                        // Not found
-                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key));
+                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL);
                }
 
                // Then "shift" it
@@ -1523,7 +1442,7 @@ Loaded includes:
                        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));
+                       throw new BadMethodCallException(sprintf('keyGroup=%s not found.', $keyGroup), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL);
                }
 
                // Then count it
@@ -1554,7 +1473,7 @@ Loaded includes:
                        throw new InvalidArgumentException('Parameter "subGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
                } elseif (!$this->isGenericArrayGroupSet($keyGroup, $subGroup)) {
                        // Abort here
-                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s not found.', $keyGroup, $subGroup));
+                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s not found.', $keyGroup, $subGroup), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL);
                }
 
                // Then count it
@@ -1589,10 +1508,10 @@ Loaded includes:
                        throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
                } elseif (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) {
                        // Abort here
-                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key));
+                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL);
                } elseif (!$this->isValidGenericArrayGroup($keyGroup, $subGroup)) {
                        // Not valid
-                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s is not a valid key/sub group.', $keyGroup, $subGroup));
+                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s is not a valid key/sub group.', $keyGroup, $subGroup), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL);
                }
 
                // Then count it
@@ -1619,7 +1538,7 @@ Loaded includes:
                        throw new InvalidArgumentException('Parameter "keyGroup" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
                } elseif (!isset($this->genericArray[$keyGroup])) {
                        // Then abort here
-                       throw new BadMethodCallException(sprintf('keyGroup=%s not found', $keyGroup));
+                       throw new BadMethodCallException(sprintf('keyGroup=%s not found', $keyGroup), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL);
                }
 
                // Return it
@@ -1651,7 +1570,7 @@ Loaded includes:
                        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));
+                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s not found', $keyGroup), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL);
                }
 
                // Set value here
@@ -1682,7 +1601,7 @@ Loaded includes:
                        throw new InvalidArgumentException('Parameter "key" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
                } elseif (!$this->isGenericArrayKeySet($keyGroup, $subGroup, $key)) {
                        // Then abort here
-                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key));
+                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL);
                }
 
                // Return it
@@ -1752,7 +1671,7 @@ Loaded includes:
                        throw new InvalidArgumentException('Parameter "element" is empty', FrameworkInterface::EXCEPTION_INVALID_ARGUMENT);
                } elseif (!$this->isGenericArrayElementSet($keyGroup, $subGroup, $key, $element)) {
                        // Then abort here
-                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s,element[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key, gettype($element), $element));
+                       throw new BadMethodCallException(sprintf('keyGroup=%s,subGroup=%s,key[%s]=%s,element[%s]=%s not found.', $keyGroup, $subGroup, gettype($key), $key, gettype($element), $element), FrameworkInterface::EXCEPTION_BAD_METHOD_CALL);
                }
 
                // Return it