]> git.mxchange.org Git - core.git/blobdiff - framework/main/classes/factories/objects/class_ObjectFactory.php
Continued:
[core.git] / framework / main / classes / factories / objects / class_ObjectFactory.php
index ebde62499338fe56c3bfe666bd45da5c4955cf60..c0c4552dcab0f8640b74b678652e4c7aa9f03899 100644 (file)
@@ -1,11 +1,10 @@
 <?php
 // Own namespace
-namespace CoreFramework\Factory;
+namespace Org\Mxchange\CoreFramework\Factory;
 
 // Import framework stuff
-use CoreFramework\Configuration\FrameworkConfiguration;
-use CoreFramework\Generic\EmptyVariableException;
-use CoreFramework\Loader\NoClassException;
+use Org\Mxchange\CoreFramework\Bootstrap\FrameworkBootstrap;
+use Org\Mxchange\CoreFramework\Loader\NoClassException;
 
 // Import SPL stuff
 use \InvalidArgumentException;
@@ -15,7 +14,7 @@ use \InvalidArgumentException;
  *
  * @author             Roland Haeder <webmaster@shipsimu.org>
  * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2017 Core Developer Team
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2019 Core Developer Team
  * @license            GNU GPL 3.0 or any newer version
  * @link               http://www.shipsimu.org
  *
@@ -36,12 +35,12 @@ class ObjectFactory extends BaseFactory {
        /**
         * Protected constructor
         *
-        * @param       $className      Name of this class
+        * @param       $fullClassName  Name of this class
         * @return      void
         */
-       protected function __construct ($className = __CLASS__) {
+       protected function __construct ($fullClassName = __CLASS__) {
                // Call parent constructor
-               parent::__construct($className);
+               parent::__construct($fullClassName);
        }
 
        /**
@@ -49,40 +48,42 @@ class ObjectFactory extends BaseFactory {
         * the class was not found. No parameters for the object are currently
         * supported.
         *
-        * @param       $className                      Name of the class we shall construct
+        * @param       $fullClassName                  Name of the class we shall construct
         * @param       $args                           Arguments in an indexed array
         * @return      $objectInstance         An instance of the requested object
         * @throws      NoClassException        If the requested class was not found
-        * @throws      EmptyVariableException  If a variable is empty unexpectly
-        * @throws      InvalidArgumentException        If class name is not following naming-convention
+        * @throws      InvalidArgumentException        If className is empty or the name not following naming-convention
         */
-       public static final function createObjectByName ($className, array $args = array()) {
-               // First get an instance of this factory
-               $factoryInstance = new ObjectFactory();
-
-               // Split class name on backslash to check naming-convention
-               $classNameParts = explode("\\", $className);
-
+       public static final function createObjectByName ($fullClassName, array $args = array()) {
                // Is the class name valid and is the class there?
-               if (empty($className)) {
+               if (empty($fullClassName)) {
                        // Throw an exception here
-                       throw new EmptyVariableException(array($factoryInstance, 'className'), self::EXCEPTION_UNEXPECTED_EMPTY_STRING);
-               } elseif (!class_exists($className)) {
+                       throw new InvalidArgumentException('Parameter "className" is empty');
+               } elseif (!class_exists($fullClassName)) {
+                       // First get an instance of this factory
+                       $factoryInstance = new ObjectFactory();
+
                        // Then throw an exception
-                       throw new NoClassException(array($factoryInstance, $className), self::EXCEPTION_CLASS_NOT_FOUND);
-               } elseif (count($classNameParts) < 3) {
-                       // Namespaces are missing
-                       throw new InvalidArgumentException(sprintf('Class name "%s" is not conform to naming-convention: Project\Package[\SubPackage...]\SomeFooBar', $className));
+                       throw new NoClassException(array($factoryInstance, $fullClassName), self::EXCEPTION_CLASS_NOT_FOUND);
                }
 
+               // Split class name on backslash to check naming-convention
+               $classNameParts = explode("\\", $fullClassName);
+
+               // Okay, does it follow naming-convention?
+               if (count($classNameParts) < 4) {
+                       // Namespaces are missing
+                       throw new InvalidArgumentException(sprintf('Class name "%s" is not conform to naming-convention: Tld\Domain\Project\Package[\SubPackage...]\SomeFooBar', $fullClassName));
+               } // END - if
+
                // Create method name
-               $methodName = sprintf('create%s', self::stripNamespaceFromClassName($className));
+               $methodName = sprintf('create%s', self::stripNamespaceFromClassName($fullClassName));
 
                // Run the user function
-               $objectInstance = call_user_func_array(array($className, $methodName), $args);
+               $objectInstance = call_user_func_array(array($fullClassName, $methodName), $args);
 
                // Count this one up
-               self::countObject($className);
+               self::countObject($fullClassName);
 
                // Return the prepared instance
                return $objectInstance;
@@ -97,10 +98,10 @@ class ObjectFactory extends BaseFactory {
         */
        public static final function createObjectByConfiguredName ($configEntry, array $args = array()) {
                // Read the configuration entry
-               $className = FrameworkConfiguration::getSelfInstance()->getConfigEntry($configEntry);
+               $fullClassName = FrameworkBootstrap::getConfigurationInstance()->getConfigEntry($configEntry);
 
                // Send this to the other factory...
-               $objectInstance = self::createObjectByName($className, $args);
+               $objectInstance = self::createObjectByName($fullClassName, $args);
 
                // Return the instance
                return $objectInstance;
@@ -113,18 +114,11 @@ class ObjectFactory extends BaseFactory {
         *
         * @param       $fullClassName  Class name with namespace
         * @return      $shortClassName Stripped class name (no namespace)
-        * @throws      InvalidClassNameException       If the class name does not follow naming convention
         */
        private static function stripNamespaceFromClassName ($fullClassName) {
                // The class name should contain at least 2 back-slashes, so split at them
                $classNameParts = explode("\\", $fullClassName);
 
-               // At least 3 parts should be there
-               if (count($classNameParts) < 3) {
-                       // Namespace scheme is: Project\Package[\SubPackage...]
-                       throw new InvalidClassNameException($fullClassName, self::EXCEPTION_INVALID_CLASS_NAME);
-               } // END - if
-
                // Get last element
                $shortClassName = array_pop($classNameParts);