--- /dev/null
+<?php
+/**
+ * Middleware class for selecting the right compressor channel
+ *
+ * @author Roland Haeder <webmaster@mxchange.org>
+ * @version 0.3.0
+ * @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
+ * @license GNU GPL 3.0 or any newer version
+ * @link http://www.mxchange.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 CompressorChannel extends BaseMiddleware {
+ // Output handler instance
+ private $compressor = null;
+
+ // Public constructor
+ private function __construct () {
+ // Call parent constructor!
+ parent::constructor(__CLASS__);
+
+ // Set description
+ $this->setPartDescr("Komprimierungshandler");
+
+ // Create an unique ID
+ $this->createUniqueID();
+ }
+
+ // Create a new compressor channel based a given compression handler
+ public final static function createCompressorChannel ($baseDir) {
+ // Get new instance
+ $cInstance = new CompressorChannel();
+
+ // Is the compressor handler set?
+ if (
+ (is_null($cInstance->getCompressor()))
+ || (!is_object($cInstance->getCompressor()))
+ || (!method_exists($cInstance->getCompressor(), 'compressStream'))
+ || (!method_exists($cInstance->getCompressor(), 'decompressStream'))
+ ) {
+ // Get a directory pointer
+ $dirPointer = FrameworkDirectoryPointer::createFrameworkDirectoryPointer($baseDir);
+
+ // Read all directories but no sub directories
+ while ($dir = $dirPointer->readDirectoryExcept(array("..", ".", ".htaccess"))) {
+ // Is this a class file?
+ if ((substr($dir, 0, 6) == "class_") && (substr($dir, -4, 4) == $cInstance->getConfigInstance()->readConfig("php_extension"))) {
+ // Get the compressor's name. That's why you must name
+ // your files like your classes and also that's why you
+ // must keep on class in one file.
+ $class = substr($dir, 6, -4);
+
+ // Create eval command
+ $eval = sprintf("\$tempInstance = %s::create%s();",
+ $class,
+ $class
+ );
+
+ // Debug message
+ if ((defined('DEBUG_EVAL')) || (defined('DEBUG_ALL'))) $cInstance->getDebugInstance()->output(sprintf("[%s:] Konstruierte PHP-Anweisung: <pre><em>%s</em></pre><br />\n",
+ $cInstance->__toString(),
+ htmlentities($eval)
+ ));
+
+ // Run it. This will create an instance to the current class
+ eval($eval);
+
+ // Is the instance valid? We have the stream handler here
+ if ((!is_null($tempInstance)) && (method_exists($tempInstance, 'compressStream')) && (method_exists($tempInstance, 'decompressStream'))) {
+ // Okay, this handler is valid
+ $cInstance->setCompressor($tempInstance);
+
+ // No more searches required because we have found a valid compressor stream
+ break;
+ }
+ }
+ }
+
+ // Close the directory
+ $dirPointer->closeDirectory();
+ }
+
+ // Check again if there is a compressor
+ if (
+ (is_null($cInstance->getCompressor()))
+ || (!is_object($cInstance->getCompressor()))
+ || (!method_exists($cInstance->getCompressor(), 'compressStream'))
+ || (!method_exists($cInstance->getCompressor(), 'decompressStream'))
+ ) {
+ // Set the null compressor handler
+ $cInstance->setCompressor(NullCompressor::createNullCompressor());
+ }
+
+ // Return the compressor instance
+ return $cInstance;
+ }
+
+ /**
+ * Getter for compressor instance
+ *
+ * @return $compressor The compressor instance
+ */
+ public final function getCompressor () {
+ return $this->compressor;
+ }
+
+ /**
+ * Setter for compressor
+ *
+ * @param $compressorInstance The compressor instance we shall use
+ * @return void
+ */
+ public final function setCompressor (Compressor $compressorInstance) {
+ $this->compressor = $compressorInstance;
+ }
+
+ /**
+ * Getter for the file extension of the current compressor
+ */
+ public final function getCompressorExtension () {
+ // Get compressor extension from current compressor
+ return $this->getCompressor()->getCompressorExtension();
+ }
+}
+
+// [EOF]
+?>