From f090ddd80669edddadcf4d682384532d93ce1fff Mon Sep 17 00:00:00 2001
From: =?utf8?q?Roland=20H=C3=A4der?= <roland@mxchange.org>
Date: Fri, 11 Apr 2008 18:46:19 +0000
Subject: [PATCH] More patterns added, part description changed to object
 description

---
 .gitattributes                                |  10 ++
 .../selector/class_ApplicationHelper.php      |   6 +-
 docs/THANKS                                   |   1 +
 .../main/class_InvalidObjectException.php     |   2 +-
 inc/classes/interfaces/request/.htaccess      |   1 +
 .../interfaces/request/class_Requestable.php  |  68 ++++++++
 inc/classes/interfaces/response/.htaccess     |   1 +
 .../response/class_Responseable.php           |  63 ++++++++
 .../main/class_BaseFrameworkSystem.php        |  27 ++--
 inc/classes/main/commands/extended/.htaccess  |   1 +
 inc/classes/main/commands/extended/class_     |  57 +++++++
 .../main/compressor/class_Bzip2Compressor.php |   2 +-
 .../main/compressor/class_GzipCompressor.php  |  10 +-
 .../main/compressor/class_NullCompressor.php  |  12 +-
 .../main/console/class_ConsoleTools.php       |   2 +-
 .../classes/class_LocalFileDatabase.php       |   2 +-
 .../main/debug/class_DebugConsoleOutput.php   |   2 +-
 .../main/debug/class_DebugErrorLogOutput.php  |   2 +-
 .../main/debug/class_DebugWebOutput.php       |   2 +-
 .../main/extended/class_ObjectLimits.php      |   2 +-
 inc/classes/main/io/class_FileIOStream.php    |   2 +-
 .../io/class_FrameworkDirectoryPointer.php    |   2 +-
 .../io/class_FrameworkFileInputPointer.php    |   2 +-
 .../io/class_FrameworkFileOutputPointer.php   |   2 +-
 .../main/language/class_LanguageSystem.php    |   2 +-
 .../main/output/class_ConsoleOutput.php       |   2 +-
 inc/classes/main/output/class_WebOutput.php   |   2 +-
 inc/classes/main/request/.htaccess            |   1 +
 .../main/request/class_HttpRequest.php        | 151 ++++++++++++++++++
 inc/classes/main/response/.htaccess           |   1 +
 .../main/response/class_HttpResponse.php      | 133 +++++++++++++++
 .../main/template/class_TemplateEngine.php    |   2 +-
 .../compressor/class_CompressorChannel.php    |   2 +-
 .../database/class_DatabaseConnection.php     |   2 +-
 .../debug/class_DebugMiddleware.php           |   2 +-
 .../middleware/io/class_FileIOHandler.php     |   2 +-
 inc/selector.php                              |   6 +-
 37 files changed, 539 insertions(+), 50 deletions(-)
 create mode 100644 inc/classes/interfaces/request/.htaccess
 create mode 100644 inc/classes/interfaces/request/class_Requestable.php
 create mode 100644 inc/classes/interfaces/response/.htaccess
 create mode 100644 inc/classes/interfaces/response/class_Responseable.php
 create mode 100644 inc/classes/main/commands/extended/.htaccess
 create mode 100644 inc/classes/main/commands/extended/class_
 create mode 100644 inc/classes/main/request/.htaccess
 create mode 100644 inc/classes/main/request/class_HttpRequest.php
 create mode 100644 inc/classes/main/response/.htaccess
 create mode 100644 inc/classes/main/response/class_HttpResponse.php

diff --git a/.gitattributes b/.gitattributes
index bf1e6d7..f06da2f 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -214,12 +214,18 @@ inc/classes/interfaces/io/output/.htaccess -text
 inc/classes/interfaces/io/output/class_OutputStreamer.php -text
 inc/classes/interfaces/language/.htaccess -text
 inc/classes/interfaces/language/class_ManageableLanguage.php -text
+inc/classes/interfaces/request/.htaccess -text
+inc/classes/interfaces/request/class_Requestable.php -text
+inc/classes/interfaces/response/.htaccess -text
+inc/classes/interfaces/response/class_Responseable.php -text
 inc/classes/interfaces/template/.htaccess -text
 inc/classes/interfaces/template/class_CompileableTemplate.php -text
 inc/classes/interfaces/template/view/class_ViewHelper.php -text
 inc/classes/main/.htaccess -text
 inc/classes/main/class_BaseFrameworkSystem.php -text
 inc/classes/main/class_FrameworkArrayObject.php -text
+inc/classes/main/commands/extended/.htaccess -text
+inc/classes/main/commands/extended/class_ -text
 inc/classes/main/compressor/.htaccess -text
 inc/classes/main/compressor/class_Bzip2Compressor.php -text
 inc/classes/main/compressor/class_GzipCompressor.php -text
@@ -247,6 +253,10 @@ inc/classes/main/language/class_LanguageSystem.php -text
 inc/classes/main/output/.htaccess -text
 inc/classes/main/output/class_ConsoleOutput.php -text
 inc/classes/main/output/class_WebOutput.php -text
+inc/classes/main/request/.htaccess -text
+inc/classes/main/request/class_HttpRequest.php -text
+inc/classes/main/response/.htaccess -text
+inc/classes/main/response/class_HttpResponse.php -text
 inc/classes/main/template/.htaccess -text
 inc/classes/main/template/class_TemplateEngine.php -text
 inc/classes/middleware/.htaccess -text
diff --git a/application/selector/class_ApplicationHelper.php b/application/selector/class_ApplicationHelper.php
index 7655415..9e62fc0 100644
--- a/application/selector/class_ApplicationHelper.php
+++ b/application/selector/class_ApplicationHelper.php
@@ -106,7 +106,7 @@ class ApplicationHelper extends BaseFrameworkSystem implements ManageableApplica
 	/**
 	 * Setter for the version number
 	 *
-	 * @param		$appVersion	The application's version number
+	 * @param	$appVersion	The application's version number
 	 * @return	void
 	 */
 	public final function setAppVersion ($appVersion) {
@@ -127,7 +127,7 @@ class ApplicationHelper extends BaseFrameworkSystem implements ManageableApplica
 	/**
 	 * Setter for human-readable name
 	 *
-	 * @param		$appName	The application's human-readable name
+	 * @param	$appName	The application's human-readable name
 	 * @return	void
 	 */
 	public final function setAppName ($appName) {
@@ -148,7 +148,7 @@ class ApplicationHelper extends BaseFrameworkSystem implements ManageableApplica
 	/**
 	 * Setter for short uni*-like name
 	 *
-	 * @param		$shortName	The application's short uni*-like name
+	 * @param	$shortName	The application's short uni*-like name
 	 * @return	void
 	 */
 	public final function setAppShortName ($shortName) {
diff --git a/docs/THANKS b/docs/THANKS
index bd56a2c..91bd29d 100644
--- a/docs/THANKS
+++ b/docs/THANKS
@@ -1,6 +1,7 @@
 Special Thanks goes to:
  - Daff
  - toms
+ - Arne Brodowski (http://www.arnebrodowski.de/blog/)
  - And all the others I have not listed here.
 
 If you think your name is missing here please ICQ me: 8809296
diff --git a/inc/classes/exceptions/main/class_InvalidObjectException.php b/inc/classes/exceptions/main/class_InvalidObjectException.php
index 9dca343..76a4a4c 100644
--- a/inc/classes/exceptions/main/class_InvalidObjectException.php
+++ b/inc/classes/exceptions/main/class_InvalidObjectException.php
@@ -34,7 +34,7 @@ class InvalidObjectException extends FrameworkException {
 		$message = sprintf("[%s:%d] Objekte sind nicht erlaubt. (Objekt: <u>%s</u>)",
 			$class->__toString(),
 			$this->getLine(),
-			$class->getPartDescr()
+			$class->getObjectDescription()
 		);
 
 		// Call parent constructor
diff --git a/inc/classes/interfaces/request/.htaccess b/inc/classes/interfaces/request/.htaccess
new file mode 100644
index 0000000..3a42882
--- /dev/null
+++ b/inc/classes/interfaces/request/.htaccess
@@ -0,0 +1 @@
+Deny from all
diff --git a/inc/classes/interfaces/request/class_Requestable.php b/inc/classes/interfaces/request/class_Requestable.php
new file mode 100644
index 0000000..7ef0f9a
--- /dev/null
+++ b/inc/classes/interfaces/request/class_Requestable.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * An interface for requests
+ *
+ * @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/>.
+ */
+interface Requestable extends FrameworkInterface {
+	/**
+	 * Prepares the HTTP request data for usage by currently copying
+	 * $_REQUEST into a private attribute. Later on we can add more
+	 * things for initialization here.
+	 *
+	 * @return	void
+	 */
+	function prepareRequestData ();
+
+	/**
+	 * Checks wether a request element is set
+	 * @param	$element	Name of the request element we want to check
+	 * @return	$isSet		Wether the request element is set
+	 * @throws	MissingArrayElementsException	Thrown if a request element is not set
+	 */
+	function isRequestElementSet ($element);
+
+	/**
+	 * Getter for request element or 'null' if the element was not found
+	 *
+	 * @param	$element	Name of the request element we want to check
+	 * @return	$value		Value of the found request element or 'null' if the
+	 *						element was not found
+	 */
+	function getRequestElement ($element);
+
+	/**
+	 * Wrapper method for array_key() function for the request data array
+	 *
+	 * @return	$array	An array containing all array keys to return
+	 */
+	function getParameterNames ();
+
+	/**
+	 * Getter for a header element or 'null' if the header was not found
+	 *
+	 * @param	$headerName		Name of the header
+	 * @return	$headerValue	Value of the header or 'null' if not found
+	 */
+	function getHeader ($headerName);
+}
+
+//
+?>
diff --git a/inc/classes/interfaces/response/.htaccess b/inc/classes/interfaces/response/.htaccess
new file mode 100644
index 0000000..3a42882
--- /dev/null
+++ b/inc/classes/interfaces/response/.htaccess
@@ -0,0 +1 @@
+Deny from all
diff --git a/inc/classes/interfaces/response/class_Responseable.php b/inc/classes/interfaces/response/class_Responseable.php
new file mode 100644
index 0000000..22ee2cb
--- /dev/null
+++ b/inc/classes/interfaces/response/class_Responseable.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * An interface for responses
+ *
+ * @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/>.
+ */
+interface Responseable extends FrameworkInterface {
+	/**
+	 * Setter for status
+	 *
+	 * @param	$status		New response status
+	 * @return	void
+	 */
+	function setResponseStatus ($status);
+
+	/**
+	 * Add header element
+	 *
+	 * @param	$name	Name of header element
+	 * @param	$value	Value of header element
+	 * @return	void
+	 */
+	function addHeader ($name, $value);
+
+	/**
+	 * "Writes" data to the response body
+	 *
+	 * @param	$output		Output we shall sent in the HTTP response
+	 * @return	void
+	 */
+	function writeToBody ($output);
+
+	/**
+	 * Flushs the cached HTTP response to the outer world
+	 *
+	 * @param	$foce	Wether we shall force the output or abort if headers are
+	 *					already sent with an exception
+	 * @return	void
+	 * @throws	ResponseHeadersAlreadySentException		Thrown if headers are
+	 *													already sent
+	 */
+	function flushResponse($force=false);
+}
+
+//
+?>
diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php
index 8ac8d31..dbf69b1 100644
--- a/inc/classes/main/class_BaseFrameworkSystem.php
+++ b/inc/classes/main/class_BaseFrameworkSystem.php
@@ -61,7 +61,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 	/**
 	 * A human-readable description for this simulator part
 	 */
-	private $partDescr      = "Namenlose Framework-Einheit";
+	private $objectDescription      = "Namenlose Framework-Einheit";
 
 	/**
 	 * The unique ID string for identifying all type of classes
@@ -139,6 +139,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 	const EXCEPTION_TEMPLATE_ENGINE_UNSUPPORTED  = 0x02d;
 	const EXCEPTION_MISSING_LANGUAGE_HANDLER     = 0x02e;
 	const EXCEPTION_MISSING_FILE_IO_HANDLER      = 0x02f;
+	const EXCEPTION_MISSING_ELEMENT              = 0x030;
 
 	/**
 	 * In the super constructor these system classes shall be ignored or else
@@ -187,7 +188,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 			}
 
 			// Destroy all informations about this class but keep some text about it alive
-			$this->setPartDescr(sprintf("Entferntes Objekt <em>%s</em>", $this->__toString()));
+			$this->setObjectDescription(sprintf("Entferntes Objekt <em>%s</em>", $this->__toString()));
 			$this->setRealClass("DestructedObject");
 			$this->resetUniqueID();
 		} elseif ((defined('DEBUG_DESTRUCTOR')) && (is_object($this->getDebugInstance()))) {
@@ -489,7 +490,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 			$this->__toString(),
 			md5(sprintf("%s:%s:%s:%s:%s:%s",
 				$this->__toString(),
-				$this->getPartDescr(),
+				$this->getObjectDescription(),
 				time(),
 				getenv('REMOTE_ADDR'),
 				getenv('SERVER_ADDR'),
@@ -548,14 +549,14 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 	/**
 	 * Getter for simulator description
 	 *
-	 * @return	$partDescr	The description of this simulation part
+	 * @return	$objectDescription	The description of this simulation part
 	 */
-	public final function getPartDescr () {
-		if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] getPartDescr erreicht.<br />\n",
+	public final function getObjectDescription () {
+		if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] getObjectDescription erreicht.<br />\n",
 			$this->__toString()
 		));
-		if (isset($this->partDescr)) {
-			return $this->partDescr;
+		if (isset($this->objectDescription)) {
+			return $this->objectDescription;
 		} else {
 			return null;
 		}
@@ -564,14 +565,14 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 	/**
 	 * Setter for simulation part description
 	 *
-	 * @param		$partDescr 	The description as string for this simulation part
+	 * @param		$objectDescription 	The description as string for this simulation part
 	 * @return	void
 	 */
-	public final function setPartDescr ($partDescr) {
-		$this->partDescr = (String) $partDescr;
+	public final function setObjectDescription ($objectDescription) {
+		$this->objectDescription = (String) $objectDescription;
 		if ((defined('DEBUG_SYSTEM')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] Teilbeschreibung wird auf <strong>%s</strong> gesetzt.<br />\n",
 			$this->__toString(),
-			$this->partDescr
+			$this->objectDescription
 		));
 	}
 
@@ -597,7 +598,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 			(
 				$this->__toString()   == $itemInstance->__toString()
 			) && (
-				$this->getPartDescr() == $itemInstance->getPartDescr()
+				$this->getObjectDescription() == $itemInstance->getObjectDescription()
 			)
 		);
 	}
diff --git a/inc/classes/main/commands/extended/.htaccess b/inc/classes/main/commands/extended/.htaccess
new file mode 100644
index 0000000..3a42882
--- /dev/null
+++ b/inc/classes/main/commands/extended/.htaccess
@@ -0,0 +1 @@
+Deny from all
diff --git a/inc/classes/main/commands/extended/class_ b/inc/classes/main/commands/extended/class_
new file mode 100644
index 0000000..919a549
--- /dev/null
+++ b/inc/classes/main/commands/extended/class_
@@ -0,0 +1,57 @@
+<?php
+/**
+ * 
+ *
+ * @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 Command extends BaseCommand implements Commandable {
+	/**
+	 * Private constructor
+	 *
+	 * @return	void
+	 */
+	private function __construct () {
+		// Call parent constructor
+		parent::constructor(__CLASS__);
+
+		// Set special description
+		$this->setObjectDescription("Spezieller Command");
+
+		// Create unique ID number
+		$this->createUniqueID();
+
+		// Clean up a little
+		$this->removeNumberFormaters();
+		$this->removeSystemArray();
+	}
+
+	/**
+	 * Executes the given command with given request and response objects
+	 *
+	 * @param	$requestInstance	An instance of a class with an Requestable interface
+	 * @param	$responseInstance	An instance of a class with an Responseable interface
+	 * @return	void
+	 */
+	public function execute (Requestable $requestInstance, Responseable $responseInstance) {
+	}
+}
+
+// [EOF]
+?>
diff --git a/inc/classes/main/compressor/class_Bzip2Compressor.php b/inc/classes/main/compressor/class_Bzip2Compressor.php
index c0c475f..48eb84c 100644
--- a/inc/classes/main/compressor/class_Bzip2Compressor.php
+++ b/inc/classes/main/compressor/class_Bzip2Compressor.php
@@ -37,7 +37,7 @@ class Bzip2Compressor extends BaseFrameworkSystem implements Compressor {
 		));
 
 		// Set description
-		$this->setPartDescr("BZIP2-Kompressor");
+		$this->setObjectDescription("BZIP2-Kompressor");
 
 		// Create an unique ID
 		$this->createUniqueID();
diff --git a/inc/classes/main/compressor/class_GzipCompressor.php b/inc/classes/main/compressor/class_GzipCompressor.php
index 0caae9f..9d9fa03 100644
--- a/inc/classes/main/compressor/class_GzipCompressor.php
+++ b/inc/classes/main/compressor/class_GzipCompressor.php
@@ -37,7 +37,7 @@ class GzipCompressor extends BaseFrameworkSystem implements Compressor {
 		));
 
 		// Set description
-		$this->setPartDescr("GZIP-Kompressor");
+		$this->setObjectDescription("GZIP-Kompressor");
 
 		// Create an unique ID
 		$this->createUniqueID();
@@ -75,8 +75,8 @@ class GzipCompressor extends BaseFrameworkSystem implements Compressor {
 	/**
 	 * GZIP compression stream
 	 *
-	 * @param		$streamData			Mixed non-object stream data
-	 * @return	$streamData			The compressed stream data	
+	 * @param	$streamData		Mixed non-object stream data
+	 * @return	$streamData		The compressed stream data	
 	 * @throws	InvalidObjectException	If the stream is an object
 	 */
 	public function compressStream ($streamData) {
@@ -92,8 +92,8 @@ class GzipCompressor extends BaseFrameworkSystem implements Compressor {
 	/**
 	 * GZIP decompression stream
 	 *
-	 * @param		$streamData			Mixed non-object stream data
-	 * @return	$streamData			The decompressed stream data	
+	 * @param	$streamData		Mixed non-object stream data
+	 * @return	$streamData		The decompressed stream data	
 	 * @throws	InvalidObjectException	If the stream is an object
 	 */
 	public function decompressStream ($streamData) {
diff --git a/inc/classes/main/compressor/class_NullCompressor.php b/inc/classes/main/compressor/class_NullCompressor.php
index 56b2d5f..c432efe 100644
--- a/inc/classes/main/compressor/class_NullCompressor.php
+++ b/inc/classes/main/compressor/class_NullCompressor.php
@@ -37,7 +37,7 @@ class NullCompressor extends BaseFrameworkSystem implements Compressor {
 		));
 
 		// Set description
-		$this->setPartDescr("Null-Kompressor");
+		$this->setObjectDescription("Null-Kompressor");
 
 		// Create an unique ID
 		$this->createUniqueID();
@@ -59,8 +59,8 @@ class NullCompressor extends BaseFrameworkSystem implements Compressor {
 	/**
 	 * Null compression stream
 	 *
-	 * @param		$streamData			Mixed non-object stream data
-	 * @return	$streamData			The compressed stream data	
+	 * @param	$streamData		Mixed non-object stream data
+	 * @return	$streamData		The compressed stream data	
 	 * @throws	InvalidObjectException	If the stream is an object
 	 */
 	public function compressStream ($streamData) {
@@ -76,8 +76,8 @@ class NullCompressor extends BaseFrameworkSystem implements Compressor {
 	/**
 	 * Null decompression stream
 	 *
-	 * @param		$streamData			Mixed non-object stream data
-	 * @return	$streamData			The decompressed stream data	
+	 * @param	$streamData		Mixed non-object stream data
+	 * @return	$streamData		The decompressed stream data	
 	 * @throws	InvalidObjectException	If the stream is an object
 	 */
 	public function decompressStream ($streamData) {
@@ -93,7 +93,7 @@ class NullCompressor extends BaseFrameworkSystem implements Compressor {
 	/**
 	 * Getter for the file extension of this compressor
 	 *
-	 * @return	$string	Returns always "bz2"
+	 * @return	$string		Returns always "null"
 	 */
 	public final function getCompressorExtension () {
 		if ((defined('DEBUG_COMPRESSOR')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:] Dateierweiterung angefordert.<br />\n",
diff --git a/inc/classes/main/console/class_ConsoleTools.php b/inc/classes/main/console/class_ConsoleTools.php
index 5ba9ae6..175102a 100644
--- a/inc/classes/main/console/class_ConsoleTools.php
+++ b/inc/classes/main/console/class_ConsoleTools.php
@@ -32,7 +32,7 @@ class ConsoleTools extends BaseFrameworkSystem {
 		parent::constructor(__CLASS__);
 
 		// Set description
-		$this->setPartDescr("Console-Tools");
+		$this->setObjectDescription("Console-Tools");
 
 		// Create an unique ID
 		$this->createUniqueID();
diff --git a/inc/classes/main/database/classes/class_LocalFileDatabase.php b/inc/classes/main/database/classes/class_LocalFileDatabase.php
index 1734064..3f207c8 100644
--- a/inc/classes/main/database/classes/class_LocalFileDatabase.php
+++ b/inc/classes/main/database/classes/class_LocalFileDatabase.php
@@ -55,7 +55,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
 		parent::constructor(__CLASS__);
 
 		// Set description
-		$this->setPartDescr("Dateidatenbankschicht");
+		$this->setObjectDescription("Dateidatenbankschicht");
 
 		// Create unique ID
 		$this->createUniqueID();
diff --git a/inc/classes/main/debug/class_DebugConsoleOutput.php b/inc/classes/main/debug/class_DebugConsoleOutput.php
index 82bcd7f..8efe0b5 100644
--- a/inc/classes/main/debug/class_DebugConsoleOutput.php
+++ b/inc/classes/main/debug/class_DebugConsoleOutput.php
@@ -32,7 +32,7 @@ class DebugConsoleOutput extends BaseFrameworkSystem implements Debugger, Output
 		parent::constructor(__CLASS__);
 
 		// Set description
-		$this->setPartDescr("Debug-Ausgabe auf Konsole");
+		$this->setObjectDescription("Debug-Ausgabe auf Konsole");
 
 		// Create an unique ID
 		$this->createUniqueID();
diff --git a/inc/classes/main/debug/class_DebugErrorLogOutput.php b/inc/classes/main/debug/class_DebugErrorLogOutput.php
index c8e6293..a11a9f7 100644
--- a/inc/classes/main/debug/class_DebugErrorLogOutput.php
+++ b/inc/classes/main/debug/class_DebugErrorLogOutput.php
@@ -32,7 +32,7 @@ class DebugErrorLogOutput extends BaseFrameworkSystem implements Debugger, Outpu
 		parent::constructor(__CLASS__);
 
 		// Set description
-		$this->setPartDescr("Debug-Ausgabe in error_log()");
+		$this->setObjectDescription("Debug-Ausgabe in error_log()");
 
 		// Create an unique ID
 		$this->createUniqueID();
diff --git a/inc/classes/main/debug/class_DebugWebOutput.php b/inc/classes/main/debug/class_DebugWebOutput.php
index ee3ae81..844605f 100644
--- a/inc/classes/main/debug/class_DebugWebOutput.php
+++ b/inc/classes/main/debug/class_DebugWebOutput.php
@@ -32,7 +32,7 @@ class DebugWebOutput extends BaseFrameworkSystem implements Debugger, OutputStre
 		parent::constructor(__CLASS__);
 
 		// Set description
-		$this->setPartDescr("Debug-Ausgabe auf Konsole");
+		$this->setObjectDescription("Debug-Ausgabe auf Konsole");
 
 		// Create an unique ID
 		$this->createUniqueID();
diff --git a/inc/classes/main/extended/class_ObjectLimits.php b/inc/classes/main/extended/class_ObjectLimits.php
index 91dc519..13a658a 100644
--- a/inc/classes/main/extended/class_ObjectLimits.php
+++ b/inc/classes/main/extended/class_ObjectLimits.php
@@ -39,7 +39,7 @@ class ObjectLimits extends BaseFrameworkSystem {
 		parent::constructor(__CLASS__);
 
 		// Set part description
-		$this->setPartDescr("Limitierungsobjekt");
+		$this->setObjectDescription("Limitierungsobjekt");
 
 		// Create unique ID number
 		$this->createUniqueID();
diff --git a/inc/classes/main/io/class_FileIOStream.php b/inc/classes/main/io/class_FileIOStream.php
index 2eedf3c..155774a 100644
--- a/inc/classes/main/io/class_FileIOStream.php
+++ b/inc/classes/main/io/class_FileIOStream.php
@@ -30,7 +30,7 @@ class FileIOStream extends BaseFrameworkSystem implements FileInputStreamer, Fil
 		parent::constructor(__CLASS__);
 
 		// Set part description
-		$this->setPartDescr("Universal Datei-Ein-/Ausgabesystem");
+		$this->setObjectDescription("Universal Datei-Ein-/Ausgabesystem");
 
 		// Create unique ID
 		$this->createUniqueID();
diff --git a/inc/classes/main/io/class_FrameworkDirectoryPointer.php b/inc/classes/main/io/class_FrameworkDirectoryPointer.php
index e8af817..f02faf9 100644
--- a/inc/classes/main/io/class_FrameworkDirectoryPointer.php
+++ b/inc/classes/main/io/class_FrameworkDirectoryPointer.php
@@ -40,7 +40,7 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem {
 		parent::constructor(__CLASS__);
 
 		// Set part description
-		$this->setPartDescr("Verzeichnis-Handler");
+		$this->setObjectDescription("Verzeichnis-Handler");
 
 		// Create unique ID
 		$this->createUniqueID();
diff --git a/inc/classes/main/io/class_FrameworkFileInputPointer.php b/inc/classes/main/io/class_FrameworkFileInputPointer.php
index 534650a..c66d76d 100644
--- a/inc/classes/main/io/class_FrameworkFileInputPointer.php
+++ b/inc/classes/main/io/class_FrameworkFileInputPointer.php
@@ -40,7 +40,7 @@ class FrameworkFileInputPointer extends BaseFrameworkSystem {
 		parent::constructor(__CLASS__);
 
 		// Set part description
-		$this->setPartDescr("Dateiausgabe-Handler");
+		$this->setObjectDescription("Dateiausgabe-Handler");
 
 		// Create unique ID
 		$this->createUniqueID();
diff --git a/inc/classes/main/io/class_FrameworkFileOutputPointer.php b/inc/classes/main/io/class_FrameworkFileOutputPointer.php
index 59de4f6..9705137 100644
--- a/inc/classes/main/io/class_FrameworkFileOutputPointer.php
+++ b/inc/classes/main/io/class_FrameworkFileOutputPointer.php
@@ -40,7 +40,7 @@ class FrameworkFileOutputPointer extends BaseFrameworkSystem {
 		parent::constructor(__CLASS__);
 
 		// Set part description
-		$this->setPartDescr("Dateiausgabe-Handler");
+		$this->setObjectDescription("Dateiausgabe-Handler");
 
 		// Create unique ID
 		$this->createUniqueID();
diff --git a/inc/classes/main/language/class_LanguageSystem.php b/inc/classes/main/language/class_LanguageSystem.php
index 419a856..baac159 100644
--- a/inc/classes/main/language/class_LanguageSystem.php
+++ b/inc/classes/main/language/class_LanguageSystem.php
@@ -53,7 +53,7 @@ class LanguageSystem extends BaseFrameworkSystem implements ManageableLanguage {
 		parent::constructor(__CLASS__);
 
 		// Set part description
-		$this->setPartDescr("Sprachsystem");
+		$this->setObjectDescription("Sprachsystem");
 
 		// Create unique ID number
 		$this->createUniqueID();
diff --git a/inc/classes/main/output/class_ConsoleOutput.php b/inc/classes/main/output/class_ConsoleOutput.php
index 374c2af..3bf27fc 100644
--- a/inc/classes/main/output/class_ConsoleOutput.php
+++ b/inc/classes/main/output/class_ConsoleOutput.php
@@ -43,7 +43,7 @@ class ConsoleOutput extends BaseFrameworkSystem implements OutputStreamer {
 		parent::constructor(__CLASS__);
 
 		// Set description
-		$this->setPartDescr("Console-Ausgabe-Handler");
+		$this->setObjectDescription("Console-Ausgabe-Handler");
 
 		// Create an unique ID
 		$this->createUniqueID();
diff --git a/inc/classes/main/output/class_WebOutput.php b/inc/classes/main/output/class_WebOutput.php
index 40d425c..27e5c83 100644
--- a/inc/classes/main/output/class_WebOutput.php
+++ b/inc/classes/main/output/class_WebOutput.php
@@ -38,7 +38,7 @@ class WebOutput extends BaseFrameworkSystem implements OutputStreamer {
 		parent::constructor(__CLASS__);
 
 		// Set description
-		$this->setPartDescr("Web-Ausgabe-Handler");
+		$this->setObjectDescription("Web-Ausgabe-Handler");
 
 		// Create an unique ID
 		$this->createUniqueID();
diff --git a/inc/classes/main/request/.htaccess b/inc/classes/main/request/.htaccess
new file mode 100644
index 0000000..3a42882
--- /dev/null
+++ b/inc/classes/main/request/.htaccess
@@ -0,0 +1 @@
+Deny from all
diff --git a/inc/classes/main/request/class_HttpRequest.php b/inc/classes/main/request/class_HttpRequest.php
new file mode 100644
index 0000000..2a12d30
--- /dev/null
+++ b/inc/classes/main/request/class_HttpRequest.php
@@ -0,0 +1,151 @@
+<?php
+/**
+ * A concrete HTTP request class to make HTTP requests more abstract
+ *
+ * @author		Roland Haeder <webmaster@ship-simu.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 HttpRequest extends BaseFrameworkSystem implements Requestable {
+	/**
+	 * Array for the request data
+	 */
+	private $requestData = array();
+
+	/**
+	 * Private constructor
+	 *
+	 * @return	void
+	 */
+	private final function __construct () {
+		// Call parent constructor
+		parent::constructor(__CLASS__);
+
+		// Set part description
+		$this->setObjectDescription("HTTP-Anfrage");
+
+		// Create unique ID number
+		$this->createUniqueID();
+
+		// Clean up a little
+		$this->removeNumberFormaters();
+		$this->removeSystemArray();
+	}
+
+	/**
+	 * Creates an instance of this class and prepares it a little
+	 *
+	 * @return	$httpInstance	An instance of this class
+	 */
+	public final static function createHttpRequest () {
+		// Create an instance
+		$httpInstance = new HttpRequest();
+
+		// Prepare the HTTP request data for usage
+		$httpInstance->prepareRequestData();
+
+		// Return the prepared instance
+		return $httpInstance;
+	}
+
+	/**
+	 * Prepares the HTTP request data for usage by currently copying
+	 * $_REQUEST into a private attribute. Later on we can add more
+	 * things for initialization here.
+	 *
+	 * @return	void
+	 */
+	public function prepareRequestData () {
+		// Copy the $_REQUEST array
+		$this->requestData = $_REQUEST;
+	}
+
+	/**
+	 * Checks wether a request element is set
+	 * @param	$element	Name of the request element we want to check
+	 * @return	$isSet		Wether the request element is set
+	 * @throws	MissingArrayElementsException	Thrown if a request element is not set
+	 */
+	public function isRequestElementSet ($element) {
+		// Is this element found?
+		if (!isset($this->requestData[$element])) {
+			// Then throw an exception
+			throw new MissingArrayElementsException(array($this, 'requestData', $element), self::EXCEPTION_MISSING_ELEMENT);
+		}
+
+		// All clear
+		return true;
+	}
+
+	/**
+	 * Getter for request element or 'null' if the element was not found
+	 *
+	 * @param	$element	Name of the request element we want to check
+	 * @return	$value		Value of the found request element or 'null' if the
+	 *						element was not found
+	 */
+	public function getRequestElement ($element) {
+		// Initialize value
+		$value = null;
+
+		try {
+			if ($this->isRequestElementSet($element)) {
+				$value = $this->requestData[$element];
+			}
+		} catch (MissingArrayElementsException $e) {
+			// Do nothing here
+		}
+
+		// Return the element's value
+		return $value;
+	}
+
+	/**
+	 * Wrapper method for array_key() function for the request data array
+	 *
+	 * @return	$array	An array containing all array keys to return
+	 */
+	public function getParameterNames () {
+		return array_keys($this->requestData);
+	}
+
+	/**
+	 * Getter for a header element or 'null' if the header was not found
+	 *
+	 * @param	$headerName		Name of the header
+	 * @return	$headerValue	Value of the header or 'null' if not found
+	 */
+	public function getHeader ($headerName) {
+		// Default return value on error
+		$headerValue = null;
+
+		// Construct the name
+		$name = 'HTTP_' . strtolower(str_replace('-', '_', $headerName));
+
+		// Does this header exist?
+		if (isset($_SERVER[$name])) {
+			$headerValue = $_SERVER[$name];
+		}
+
+		// Return the value
+		return $headerValue;
+	}
+}
+
+// [EOF]
+?>
diff --git a/inc/classes/main/response/.htaccess b/inc/classes/main/response/.htaccess
new file mode 100644
index 0000000..3a42882
--- /dev/null
+++ b/inc/classes/main/response/.htaccess
@@ -0,0 +1 @@
+Deny from all
diff --git a/inc/classes/main/response/class_HttpResponse.php b/inc/classes/main/response/class_HttpResponse.php
new file mode 100644
index 0000000..1ee74ca
--- /dev/null
+++ b/inc/classes/main/response/class_HttpResponse.php
@@ -0,0 +1,133 @@
+<?php
+/**
+ * A class for an HTTP response on an HTTP request
+ *
+ * @author		Roland Haeder <webmaster@ship-simu.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 HttpResponse extends BaseFrameworkSystem implements Responseable {
+	/**
+	 * Response status
+	 */
+	private $responseStatus = "200 OK";
+
+	/**
+	 * Array with all headers
+	 */
+	private $responseHeaders = array();
+
+	/**
+	 * Body of the response
+	 */
+	private $responseBody = "";
+
+	/**
+	 * Private constructor
+	 *
+	 * @return	void
+	 */
+	private function __construct () {
+		// Call parent constructor
+		parent::constructor(__CLASS__);
+
+		// Set part description
+		$this->setObjectDescription("HTTP-Antwort");
+
+		// Create unique ID number
+		$this->createUniqueID();
+
+		// Clean up a little
+		$this->removeNumberFormaters();
+		$this->removeSystemArray();
+	}
+
+	/**
+	 * Creates an object of this class
+	 *
+	 * @return	$responseInstance	A prepared instance of this class
+	 */
+	public final static function createHttpResponse () {
+		// Get a new instance
+		$responseInstance = new HttpResponse();
+
+		// Return the prepared instance
+		return $responseInstance;
+	}
+
+	/**
+	 * Setter for status
+	 *
+	 * @param	$status		New response status
+	 * @return	void
+	 */
+	public final function setResponseStatus ($status) {
+		$this->responseStatus = (string) $status;
+	}
+
+	/**
+	 * Add header element
+	 *
+	 * @param	$name	Name of header element
+	 * @param	$value	Value of header element
+	 * @return	void
+	 */
+	public final function addHeader ($name, $value) {
+		$this->responseHeaders[$name] = $value;
+	}
+
+	/**
+	 * "Writes" data to the response body
+	 *
+	 * @param	$output		Output we shall sent in the HTTP response
+	 * @return	void
+	 */
+	public function writeToBody ($output) {
+		$this->responseBody .= $output;
+	}
+
+	/**
+	 * Flushs the cached HTTP response to the outer world
+	 *
+	 * @param	$foce	Wether we shall force the output or abort if headers are
+	 *					already sent with an exception
+	 * @return	void
+	 * @throws	ResponseHeadersAlreadySentException		Thrown if headers are
+	 *													already sent
+	 */
+	public function flushResponse($force=false) {
+		if ((headers_sent()) && (!$force)) {
+			// Headers are already sent!
+			throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
+		} elseif (!headers_sent()) {
+			// Send headers out
+			header("HTTP/1.0 {$this->responseStatus}");
+			foreach ($this->responseHeaders as $name=>$value) {
+				header("{$name}: {$value}");
+			}
+		}
+
+		// Flush the output to the world
+		$this->getWebOutputInstance()->output($this->responseBody);
+		$this->reponseBody = "";
+		$this->responseHeaders = array();
+	}
+}
+
+// [EOF]
+?>
diff --git a/inc/classes/main/template/class_TemplateEngine.php b/inc/classes/main/template/class_TemplateEngine.php
index 1dfb7ad..44f374f 100644
--- a/inc/classes/main/template/class_TemplateEngine.php
+++ b/inc/classes/main/template/class_TemplateEngine.php
@@ -123,7 +123,7 @@ class TemplateEngine extends BaseFrameworkSystem implements CompileableTemplate
 		parent::constructor(__CLASS__);
 
 		// Set part description
-		$this->setPartDescr("Template-Engine");
+		$this->setObjectDescription("Template-Engine");
 
 		// Create unique ID number
 		$this->createUniqueID();
diff --git a/inc/classes/middleware/compressor/class_CompressorChannel.php b/inc/classes/middleware/compressor/class_CompressorChannel.php
index 5d5017c..8dae607 100644
--- a/inc/classes/middleware/compressor/class_CompressorChannel.php
+++ b/inc/classes/middleware/compressor/class_CompressorChannel.php
@@ -31,7 +31,7 @@ class CompressorChannel extends BaseMiddleware {
 		parent::constructor(__CLASS__);
 
 		// Set description
-		$this->setPartDescr("Komprimierungshandler");
+		$this->setObjectDescription("Komprimierungshandler");
 
 		// Create an unique ID
 		$this->createUniqueID();
diff --git a/inc/classes/middleware/database/class_DatabaseConnection.php b/inc/classes/middleware/database/class_DatabaseConnection.php
index e6adbbe..d7db9d8 100644
--- a/inc/classes/middleware/database/class_DatabaseConnection.php
+++ b/inc/classes/middleware/database/class_DatabaseConnection.php
@@ -37,7 +37,7 @@ class DatabaseConnection extends BaseMiddleware implements DatabaseConnector, Li
 		parent::constructor(__CLASS__);
 
 		// Set description
-		$this->setPartDescr("Datenbank-Mittelschicht");
+		$this->setObjectDescription("Datenbank-Mittelschicht");
 
 		// Create an unique ID
 		$this->createUniqueID();
diff --git a/inc/classes/middleware/debug/class_DebugMiddleware.php b/inc/classes/middleware/debug/class_DebugMiddleware.php
index 5193532..2cc4882 100644
--- a/inc/classes/middleware/debug/class_DebugMiddleware.php
+++ b/inc/classes/middleware/debug/class_DebugMiddleware.php
@@ -44,7 +44,7 @@ class DebugMiddleware extends BaseMiddleware {
 		parent::constructor(__CLASS__);
 
 		// Set description
-		$this->setPartDescr("Debug-Ausgabe-Handler");
+		$this->setObjectDescription("Debug-Ausgabe-Handler");
 
 		// Create an unique ID
 		$this->createUniqueID();
diff --git a/inc/classes/middleware/io/class_FileIOHandler.php b/inc/classes/middleware/io/class_FileIOHandler.php
index 7e624cc..7e0d35a 100644
--- a/inc/classes/middleware/io/class_FileIOHandler.php
+++ b/inc/classes/middleware/io/class_FileIOHandler.php
@@ -48,7 +48,7 @@ class FileIOHandler extends BaseMiddleware {
 		parent::constructor(__CLASS__);
 
 		// Set description
-		$this->setPartDescr("Datei-Ein-/Ausgabe-Handler");
+		$this->setObjectDescription("Datei-Ein-/Ausgabe-Handler");
 
 		// Create an unique ID
 		$this->createUniqueID();
diff --git a/inc/selector.php b/inc/selector.php
index 23acabe..7af8aa0 100644
--- a/inc/selector.php
+++ b/inc/selector.php
@@ -52,11 +52,11 @@ $application = preg_replace('/([^a-z_-])+/i', "", $application);
 $configAppIncludes = array(
 	sprintf("class_%s", FrameworkConfiguration::getInstance()->readConfig("app_helper_class")), // The ApplicationHelper class
 	"config",		// The application's own configuration
-	"init",		// The application initializer
-	"loader", 	// The application's class loader
+	"init",			// The application initializer
+	"loader",		// The application's class loader
 	"debug",		// Some debugging stuff
 	"exceptions",	// The application's own exception handler
-	"starter",	// The application starter (calls entryPoint(), etc.)
+	"starter",		// The application starter (calls entryPoint(), etc.)
 );
 
 // Load them all (try only)
-- 
2.39.5