Registry rewritten, exception added #2
authorRoland Häder <roland@mxchange.org>
Sat, 24 Apr 2010 01:00:00 +0000 (01:00 +0000)
committerRoland Häder <roland@mxchange.org>
Sat, 24 Apr 2010 01:00:00 +0000 (01:00 +0000)
.gitattributes
inc/classes/exceptions/socket/class_InvalidServerSocketException.php [new file with mode: 0644]
inc/classes/main/factories/registry/.htaccess [new file with mode: 0644]
inc/classes/main/factories/registry/class_SocketRegistryFactory.php [new file with mode: 0644]
inc/classes/main/registry/class_ [new file with mode: 0644]
inc/classes/main/registry/class_BaseRegistry.php [new file with mode: 0644]
inc/classes/main/registry/generic/.htaccess [new file with mode: 0644]
inc/classes/main/registry/generic/class_Registry.php [new file with mode: 0644]
inc/classes/main/registry/socket/.htaccess [new file with mode: 0644]

index 828e9f5..29969e4 100644 (file)
@@ -339,6 +339,7 @@ inc/classes/main/factories/cache/class_CacheFactory.php -text
 inc/classes/main/factories/class_BaseFactory.php -text
 inc/classes/main/factories/objects/.htaccess -text
 inc/classes/main/factories/objects/class_ObjectFactory.php -text
 inc/classes/main/factories/class_BaseFactory.php -text
 inc/classes/main/factories/objects/.htaccess -text
 inc/classes/main/factories/objects/class_ObjectFactory.php -text
+inc/classes/main/factories/registry/.htaccess -text
 inc/classes/main/factories/web/.htaccess -text
 inc/classes/main/factories/web/class_WebNewsFactory.php -text
 inc/classes/main/filter/.htaccess -text
 inc/classes/main/factories/web/.htaccess -text
 inc/classes/main/factories/web/class_WebNewsFactory.php -text
 inc/classes/main/filter/.htaccess -text
@@ -438,6 +439,9 @@ inc/classes/main/reader/class_DefaultNewsReader.php -text
 inc/classes/main/registration/.htaccess -text
 inc/classes/main/registration/class_BaseRegistration.php -text
 inc/classes/main/registry/.htaccess -text
 inc/classes/main/registration/.htaccess -text
 inc/classes/main/registration/class_BaseRegistration.php -text
 inc/classes/main/registry/.htaccess -text
+inc/classes/main/registry/class_ -text
+inc/classes/main/registry/generic/.htaccess -text
+inc/classes/main/registry/socket/.htaccess -text
 inc/classes/main/request/.htaccess -text
 inc/classes/main/request/class_ -text
 inc/classes/main/request/class_BaseRequest.php -text
 inc/classes/main/request/.htaccess -text
 inc/classes/main/request/class_ -text
 inc/classes/main/request/class_BaseRequest.php -text
diff --git a/inc/classes/exceptions/socket/class_InvalidServerSocketException.php b/inc/classes/exceptions/socket/class_InvalidServerSocketException.php
new file mode 100644 (file)
index 0000000..0bf9268
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+/**
+ * This exception is thrown when the socket resource is an invalid server socket.
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009, 2010 Core Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class InvalidServerSocketException extends FrameworkException {
+       /**
+        * A Constructor for this exception
+        *
+        * @param               $messageArray   Error message array
+        * @param               $code                   Error code
+        * @return      void
+        */
+       public function __construct(array $messageData, $code) {
+               // Construct the message
+               $message = sprintf("[%s:] Socket resource %s is not a server socket!",
+                       $messageData[0]->__toString(),
+                       $messageData[1]
+               );
+
+               // Call parent exception constructor
+               parent::__construct($message, $code);
+       }
+}
+
+// [EOF]
+?>
diff --git a/inc/classes/main/factories/registry/.htaccess b/inc/classes/main/factories/registry/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/inc/classes/main/factories/registry/class_SocketRegistryFactory.php b/inc/classes/main/factories/registry/class_SocketRegistryFactory.php
new file mode 100644 (file)
index 0000000..e0b909b
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+/**
+ * A factory class for socket registries
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009, 2010 Hub Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class SocketRegistryFactory extends ObjectFactory {
+       /**
+        * Returns a singleton socket registry instance. If an instance is found in
+        * the registry it will be returned, else a new instance is created and
+        * stored in the same registry entry.
+        *
+        * @return      $packageInstance        A socket registry instance
+        */
+       public static final function createNetworkPackageInstance () {
+               // Do we have an instance in the registry?
+               if (Registry::getRegistry()->instanceExists('socket_registry')) {
+                       // Then use this instance
+                       $packageInstance = Registry::getRegistry()->getInstance('socket_registry');
+               } else {
+                       // Get the registry instance
+                       $packageInstance = ObjectFactory::createObjectByConfiguredName('socket_registry_class', array($compressorInstance));
+
+                       // Set the instance in registry for further use
+                       Registry::getRegistry()->addInstance('socket_registry', $packageInstance);
+               }
+
+               // Return the instance
+               return $packageInstance;
+       }
+
+       /**
+        * Protected constructor
+        *
+        * @return      void
+        */
+       protected function __construct () {
+               // Call parent constructor
+               parent::__construct(__CLASS__);
+       }
+}
+?>
diff --git a/inc/classes/main/registry/class_ b/inc/classes/main/registry/class_
new file mode 100644 (file)
index 0000000..e86c165
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+/**
+ * A ??? registry
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009, 2010 Core Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class ???Registry extends BaseRegistry implements Register {
+       /**
+        * Instance of this class
+        */
+       private static $registryInstance = null;
+
+       /**
+        * Protected constructor
+        *
+        * @return      void
+        */
+       protected function __construct () {
+               // Call parent constructor
+               parent::__construct(__CLASS__);
+       }
+
+       /**
+        * Singleton getter for self instance. This class has no factory pattern
+        * because here is no need for special parameters.
+        *
+        * @return      $registryInstance       Instance of this class
+        */
+       public final static function getRegistry () {
+               // Is an instance there?
+               if (is_null(self::$registryInstance)) {
+                       // Not yet, so create one
+                       self::$registryInstance = new ???Registry();
+               } // END - if
+
+               // Return the instance
+               return self::$registryInstance;
+       }
+}
+
+// [EOF]
+?>
+
diff --git a/inc/classes/main/registry/class_BaseRegistry.php b/inc/classes/main/registry/class_BaseRegistry.php
new file mode 100644 (file)
index 0000000..0cf9aeb
--- /dev/null
@@ -0,0 +1,100 @@
+<?php
+/**
+ * A general Registry
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009, 2010 Core Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+class BaseRegistry extends BaseFrameworkSystem {
+       /**
+        * Instance of this class
+        */
+       private static $registryInstance = null;
+
+       /**
+        * Instance registry
+        */
+       private $instanceRegistry = array();
+
+       /**
+        * Protected constructor
+        *
+        * @param       $className      Name of the class
+        * @return      void
+        */
+       protected function __construct ($className) {
+               // Call parent constructor
+               parent::__construct($className);
+       }
+
+       /**
+        * Checks wether an instance key was found
+        *
+        * @param       $instanceKey    The key holding an instance in registry
+        * @return      $exists                 Wether the key exists in registry
+        */
+       public function instanceExists ($instanceKey) {
+               // Does this key exists?
+               $exists = (isset($this->instanceRegistry[$instanceKey]));
+
+               // Return the result
+               return $exists;
+       }
+
+       /**
+        * Adds/overwrites a new instance to the registry at the given key
+        *
+        * @param       $instanceKey            The key to identify the instance
+        * @param       $objectInstance         An instance we shall store
+        * @return      void
+        */
+       public function addInstance ($instanceKey, Registerable $objectInstance) {
+               $this->instanceRegistry[$instanceKey] = $objectInstance;
+       }
+
+       /**
+        * Gets a registered instance or null if not found
+        *
+        * @param       $instanceKey            The key to identify the instance
+        * @return      $objectInstance         An instance we shall store
+        * @throws      NullPointerException    If the requested key is not found
+        */
+       public function getInstance ($instanceKey) {
+               // By default the instance is not in registry
+               $objectInstance = null;
+
+               // Is the instance there?
+               if ($this->instanceExists($instanceKey)) {
+                       $objectInstance = $this->instanceRegistry[$instanceKey];
+               } // END - if
+
+               // Still not fetched?
+               if (is_null($objectInstance)) {
+                       // This might happen if a non-registered key was requested
+                       throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
+               } // END - if
+
+               // Return the result
+               return $objectInstance;
+       }
+}
+
+// [EOF]
+?>
+
diff --git a/inc/classes/main/registry/generic/.htaccess b/inc/classes/main/registry/generic/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/inc/classes/main/registry/generic/class_Registry.php b/inc/classes/main/registry/generic/class_Registry.php
new file mode 100644 (file)
index 0000000..4211e01
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+/**
+ * A registry for several data types and objects. Objects should be added by
+ * addInstance() and therefore must implement the interface Registerable.
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009, 2010 Core Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class Registry extends BaseRegistry implements Register {
+       /**
+        * Instance of this class
+        */
+       private static $registryInstance = null;
+
+       /**
+        * Protected constructor
+        *
+        * @return      void
+        */
+       protected function __construct () {
+               // Call parent constructor
+               parent::__construct(__CLASS__);
+       }
+
+       /**
+        * Singleton getter for self instance. This class has no factory pattern
+        * because here is no need for special parameters.
+        *
+        * @return      $registryInstance       Instance of this class
+        */
+       public final static function getRegistry () {
+               // Is an instance there?
+               if (is_null(self::$registryInstance)) {
+                       // Not yet, so create one
+                       self::$registryInstance = new Registry();
+               } // END - if
+
+               // Return the instance
+               return self::$registryInstance;
+       }
+}
+
+// [EOF]
+?>
+
diff --git a/inc/classes/main/registry/socket/.htaccess b/inc/classes/main/registry/socket/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all