Opps, had 2 Streamable interfaces ...
authorRoland Haeder <roland@mxchange.org>
Fri, 16 May 2014 22:57:00 +0000 (00:57 +0200)
committerRoland Haeder <roland@mxchange.org>
Fri, 16 May 2014 22:57:00 +0000 (00:57 +0200)
Signed-off-by: Roland Häder <roland@mxchange.org>
16 files changed:
inc/classes/interfaces/streams/class_Stream.php [new file with mode: 0644]
inc/classes/interfaces/streams/class_Streamable.php [deleted file]
inc/classes/interfaces/streams/crypto/class_EncryptableStream.php
inc/classes/interfaces/streams/input/class_InputStream.php [new file with mode: 0644]
inc/classes/interfaces/streams/input/class_InputStreamable.php [deleted file]
inc/classes/interfaces/streams/output/class_OutputStream.php [new file with mode: 0644]
inc/classes/interfaces/streams/output/class_OutputStreamable.php [deleted file]
inc/classes/main/class_BaseFrameworkSystem.php
inc/classes/main/file_directories/io_handler/.htaccess [deleted file]
inc/classes/main/file_directories/io_handler/class_FileIoStream.php [deleted file]
inc/classes/main/file_directories/io_stream/.htaccess [new file with mode: 0644]
inc/classes/main/file_directories/io_stream/class_FileIoStream.php [new file with mode: 0644]
inc/classes/main/streams/class_
inc/classes/main/streams/input/class_
inc/classes/main/streams/output/class_
inc/classes/middleware/io/class_FileIoHandler.php

diff --git a/inc/classes/interfaces/streams/class_Stream.php b/inc/classes/interfaces/streams/class_Stream.php
new file mode 100644 (file)
index 0000000..ba88ae8
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+/**
+ * An interface for streams
+ *
+ * @author             Roland Haeder <webmaster@shipsimu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 Core Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.shipsimu.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 Stream extends FrameworkInterface {
+       /**
+        * Streams the data and maybe does something to it
+        *
+        * @param       $data   The data (string mostly) to "stream"
+        * @return      $data   The data (string mostly) to "stream"
+        */
+       function streamData ($data);
+}
+
+// [EOF]
+?>
diff --git a/inc/classes/interfaces/streams/class_Streamable.php b/inc/classes/interfaces/streams/class_Streamable.php
deleted file mode 100644 (file)
index 46eac25..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * An interface for streams
- *
- * @author             Roland Haeder <webmaster@shipsimu.org>
- * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 Core Developer Team
- * @license            GNU GPL 3.0 or any newer version
- * @link               http://www.shipsimu.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 Streamable extends FrameworkInterface {
-       /**
-        * Streams the data and maybe does something to it
-        *
-        * @param       $data   The data (string mostly) to "stream"
-        * @return      $data   The data (string mostly) to "stream"
-        */
-       function streamData ($data);
-}
-
-// [EOF]
-?>
index a908f9b2b2cfa61057ce4663da22759a13d7b454..9a7e94e2093d9f3d56220c6f2fa3d461fd701ff0 100644 (file)
@@ -21,7 +21,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
  * 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 EncryptableStream extends Streamable {
+interface EncryptableStream extends Stream {
        /**
         * Encrypt the string with fixed salt
         *
        /**
         * Encrypt the string with fixed salt
         *
diff --git a/inc/classes/interfaces/streams/input/class_InputStream.php b/inc/classes/interfaces/streams/input/class_InputStream.php
new file mode 100644 (file)
index 0000000..149f63c
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+/**
+ * An InputStream interface
+ *
+ * @author             Roland Haeder <webmaster@shipsimu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 Core Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.shipsimu.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 InputStream extends Stream {
+}
+
+// [EOF]
+?>
diff --git a/inc/classes/interfaces/streams/input/class_InputStreamable.php b/inc/classes/interfaces/streams/input/class_InputStreamable.php
deleted file mode 100644 (file)
index 6e213e8..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * An InputStreamable interface
- *
- * @author             Roland Haeder <webmaster@shipsimu.org>
- * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 Core Developer Team
- * @license            GNU GPL 3.0 or any newer version
- * @link               http://www.shipsimu.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 InputStreamable extends Streamable {
-}
-
-// [EOF]
-?>
diff --git a/inc/classes/interfaces/streams/output/class_OutputStream.php b/inc/classes/interfaces/streams/output/class_OutputStream.php
new file mode 100644 (file)
index 0000000..2d2dba5
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+/**
+ * An OutputStream interface
+ *
+ * @author             Roland Haeder <webmaster@shipsimu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 Core Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.shipsimu.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 OutputStream extends Stream {
+}
+
+// [EOF]
+?>
diff --git a/inc/classes/interfaces/streams/output/class_OutputStreamable.php b/inc/classes/interfaces/streams/output/class_OutputStreamable.php
deleted file mode 100644 (file)
index 6838219..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * An OutputStreamable interface
- *
- * @author             Roland Haeder <webmaster@shipsimu.org>
- * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 Core Developer Team
- * @license            GNU GPL 3.0 or any newer version
- * @link               http://www.shipsimu.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 OutputStreamable extends Streamable {
-}
-
-// [EOF]
-?>
index abcefc8c35f6b2aaed66eaa6e7fa31ed0e3c14c1..0bd390928a913efcbcdedf2d8bd51c4e628172d9 100644 (file)
@@ -144,12 +144,12 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
        private $sourceInstance = NULL;
 
        /**
        private $sourceInstance = NULL;
 
        /**
-        * An instance of a InputStreamable class
+        * An instance of a InputStream class
         */
        private $inputStreamInstance = NULL;
 
        /**
         */
        private $inputStreamInstance = NULL;
 
        /**
-        * An instance of a OutputStreamable class
+        * An instance of a OutputStream class
         */
        private $outputStreamInstance = NULL;
 
         */
        private $outputStreamInstance = NULL;
 
@@ -1090,40 +1090,40 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
        }
 
        /**
        }
 
        /**
-        * Getter for a InputStreamable instance
+        * Getter for a InputStream instance
         *
         *
-        * @param       $inputStreamInstance    The InputStreamable instance
+        * @param       $inputStreamInstance    The InputStream instance
         */
        protected final function getInputStreamInstance () {
                return $this->inputStreamInstance;
        }
 
        /**
         */
        protected final function getInputStreamInstance () {
                return $this->inputStreamInstance;
        }
 
        /**
-        * Setter for a InputStreamable instance
+        * Setter for a InputStream instance
         *
         *
-        * @param       $inputStreamInstance    The InputStreamable instance
+        * @param       $inputStreamInstance    The InputStream instance
         * @return      void
         */
         * @return      void
         */
-       protected final function setInputStreamInstance (InputStreamable $inputStreamInstance) {
+       protected final function setInputStreamInstance (InputStream $inputStreamInstance) {
                $this->inputStreamInstance = $inputStreamInstance;
        }
 
        /**
                $this->inputStreamInstance = $inputStreamInstance;
        }
 
        /**
-        * Getter for a OutputStreamable instance
+        * Getter for a OutputStream instance
         *
         *
-        * @param       $outputStreamInstance   The OutputStreamable instance
+        * @param       $outputStreamInstance   The OutputStream instance
         */
        protected final function getOutputStreamInstance () {
                return $this->outputStreamInstance;
        }
 
        /**
         */
        protected final function getOutputStreamInstance () {
                return $this->outputStreamInstance;
        }
 
        /**
-        * Setter for a OutputStreamable instance
+        * Setter for a OutputStream instance
         *
         *
-        * @param       $outputStreamInstance   The OutputStreamable instance
+        * @param       $outputStreamInstance   The OutputStream instance
         * @return      void
         */
         * @return      void
         */
-       protected final function setOutputStreamInstance (OutputStreamable $outputStreamInstance) {
+       protected final function setOutputStreamInstance (OutputStream $outputStreamInstance) {
                $this->outputStreamInstance = $outputStreamInstance;
        }
 
                $this->outputStreamInstance = $outputStreamInstance;
        }
 
diff --git a/inc/classes/main/file_directories/io_handler/.htaccess b/inc/classes/main/file_directories/io_handler/.htaccess
deleted file mode 100644 (file)
index 3a42882..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Deny from all
diff --git a/inc/classes/main/file_directories/io_handler/class_FileIoStream.php b/inc/classes/main/file_directories/io_handler/class_FileIoStream.php
deleted file mode 100644 (file)
index 956ca34..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-<?php
-/**
- * An universal class for file input/output streams.
- *
- * @author             Roland Haeder <webmaster@shipsimu.org>
- * @version            0.0.0
- * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 Core Developer Team
- * @license            GNU GPL 3.0 or any newer version
- * @link               http://www.shipsimu.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 FileIoStream extends BaseFrameworkSystem implements FileInputStreamer, FileOutputStreamer {
-       /**
-        * File header indicator
-        */
-       const FILE_IO_FILE_HEADER_ID = '@head';
-
-       /**
-        * Data block indicator
-        */
-       const FILE_IO_DATA_BLOCK_ID = '@data';
-
-       /**
-        * Separator #1
-        */
-       const FILE_IO_CHUNKER = ':';
-
-       /**
-        * Separator #2
-        */
-       const FILE_IO_SEPARATOR = '^';
-
-       /**
-        * Protected constructor
-        */
-       protected function __construct () {
-               // Call parent constructor
-               parent::__construct(__CLASS__);
-       }
-
-       /**
-        * Create a file IO stream. This is a class for performing all actions
-        * on files like creating, deleting and loading them.
-        *
-        * @return      $ioInstance     An instance of FileIoStream
-        */
-       public static final function createFileIoStream () {
-               // Create new instance
-               $ioInstance = new FileIoStream();
-
-               // Return the instance
-               return $ioInstance;
-       }
-
-       /**
-        * Saves data to a given local file and create missing directory structures
-        *
-        * @param       $fileName       The file name for the to be saved file
-        * @param       $dataArray      The data we shall store to the file
-        * @return      void
-        * @see         FileOutputStreamer
-        * @todo        This method needs heavy rewrite
-        */
-       public final function saveFile ($fileName, array $dataArray) {
-               // Try it five times
-               $dirName = '';
-               $fileInstance = NULL;
-
-               for ($idx = 0; $idx < 5; $idx++) {
-                       // Get a file output pointer
-                       try {
-                               $fileInstance = ObjectFactory::createObjectByConfiguredName('file_raw_output_class', array($fileName));
-                       } catch (FileIoException $e) {
-                               // Create missing directory
-                               $dirName = dirname($fileName);
-                               for ($idx2 = 0; $idx2 < (2 - $idx); $idx2++) {
-                                       $dirName = dirname($dirName);
-                               } // END - for
-
-                               // Try to create it
-                               @mkdir($dirName);
-                       }
-               } // END - for
-
-               // Write a header information for validation purposes
-               $fileInstance->writeToFile(sprintf('%s%s%s%s%s%s%s%s%s' . PHP_EOL,
-                       self::FILE_IO_FILE_HEADER_ID,
-                       self::FILE_IO_SEPARATOR,
-                       $dataArray[0],
-                       self::FILE_IO_CHUNKER,
-                       time(),
-                       self::FILE_IO_CHUNKER,
-                       strlen($dataArray[1]),
-                       self::FILE_IO_CHUNKER,
-                       md5($dataArray[1])
-               ));
-
-               // Encode the (maybe) binary stream with Base64
-               $b64Stream = base64_encode($dataArray[1]);
-
-               // write the data line by line
-               $line = str_repeat(' ', 50); $idx = 0;
-               while (strlen($line) == 50) {
-                       // Get 50 chars or less
-                       $line = substr($b64Stream, $idx, 50);
-
-                       // Save it to the stream
-                       $fileInstance->writeToFile(sprintf('%s%s%s%s%s' . PHP_EOL,
-                               self::FILE_IO_DATA_BLOCK_ID,
-                               self::FILE_IO_SEPARATOR,
-                               $line,
-                               self::FILE_IO_CHUNKER,
-                               md5($line)
-                       ));
-
-                       // Advance to the next 50-chars block
-                       $idx += 50;
-               } // END - while
-
-               // Close the file
-               $fileInstance->closeFile();
-       }
-
-       /**
-        * Reads from a local file
-        *
-        * @param       $fqfn   The full-qualified file-name which we shall load
-        * @return      $array  An array with the element 'header' and 'data'
-        * @see         FileInputStreamer
-        */
-       public final function loadFileContents ($fqfn) {
-               // Initialize some variables and arrays
-               $inputBuffer = '';
-               $lastBuffer = '';
-               $header = array();
-               $data = array();
-               $readData = ''; // This will contain our read data
-
-               // Get a file input handler
-               $fileInstance = ObjectFactory::createObjectByConfiguredName('file_raw_input_class', array($fqfn));
-
-               // Read all it's contents (we very and transparently decompress it below)
-               while ($readRawLine = $fileInstance->readFromFile()) {
-                       // Add the read line to the buffer
-                       $inputBuffer .= $readRawLine;
-
-                       // Break infinite loop maybe caused by the input handler
-                       if ($lastBuffer == $inputBuffer) {
-                               break;
-                       } // END - if
-
-                       // Remember last read line for avoiding possible infinite loops
-                       $lastBuffer = $inputBuffer;
-               } // END - while
-
-               // Close directory handle
-               $fileInstance->closeFile();
-
-               // Convert it into an array
-               $inputBuffer = explode(chr(10), $inputBuffer);
-
-               // Now process the read lines and verify it's content
-               foreach ($inputBuffer as $rawLine) {
-                       // Trim it a little but not the leading spaces/tab-stops
-                       $rawLine = rtrim($rawLine);
-
-                       // Analyze this line
-                       if (substr($rawLine, 0, 5) == self::FILE_IO_FILE_HEADER_ID) {
-                               // Header found, so let's extract it
-                               $header = explode(self::FILE_IO_SEPARATOR, $rawLine);
-                               $header = trim($header[1]);
-
-                               // Now we must convert it again into an array
-                               $header = explode(self::FILE_IO_CHUNKER, $header);
-
-                               // Is the header (maybe) valid?
-                               if (count($header) != 4) {
-                                       // Throw an exception
-                                       throw new InvalidArrayCountException(array($this, 'header', count($header), 4), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT);
-                               } // END - if
-                       } elseif (substr($rawLine, 0, 5) == self::FILE_IO_DATA_BLOCK_ID) {
-                               // Is a data line!
-                               $data = explode(self::FILE_IO_SEPARATOR, $rawLine);
-                               $data = $data[1];
-
-                               // First element is the data, second the MD5 checksum
-                               $data = explode(self::FILE_IO_CHUNKER, $data);
-
-                               // Validate the read line
-                               if (count($data) == 2) {
-                                       if (md5($data[0]) != $data[1]) {
-                                               // MD5 hash did not match!
-                                               throw new InvalidMD5ChecksumException(array($this, md5($data[0]), $data[1]), self::EXCEPTION_MD5_CHECKSUMS_MISMATCH);
-                                       } // END - if
-                               } else {
-                                       // Invalid count!
-                                       throw new InvalidArrayCountException(array($this, 'data', count($data), 2), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT);
-                               }
-
-                               // Add this to the readData string
-                               $readData .= $data[0];
-                       } else {
-                               // Other raw lines than header/data tagged lines and re-add the new-line char
-                               $readData .= $rawLine . PHP_EOL;
-                       }
-               } // END - foreach
-
-               // Was raw lines read and no header/data?
-               if ((!empty($readData)) && (count($header) == 0) && (count($data) == 0)) {
-                       // Return raw lines back
-                       return $readData;
-               } // END - if
-
-               // Was a header found?
-               if (count($header) != 4) {
-                       // Throw an exception
-                       throw new InvalidArrayCountException(array($this, 'header', count($header), 4), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT);
-               } // END - if
-
-               // Decode all from Base64
-               $readData = @base64_decode($readData);
-
-               // Does the size match?
-               if (strlen($readData) != $header[2]) {
-                       // Size did not match
-                       throw new InvalidDataLengthException(array($this, strlen($readData), $header[2]), self::EXCEPTION_UNEXPECTED_STRING_SIZE);
-               } // END - if
-
-               // Validate the decoded data with the final MD5 hash
-               if (md5($readData) != $header[3]) {
-                       // MD5 hash did not match!
-                       throw new InvalidMD5ChecksumException(array($this, md5($readData), $header[3]), self::EXCEPTION_MD5_CHECKSUMS_MISMATCH);
-               } // END - if
-
-               // Return all in an array
-               return array(
-                       'header' => $header,
-                       'data'   => $readData
-               );
-       }
-
-       /**
-        * Streams the data and maybe does something to it
-        *
-        * @param       $data   The data (string mostly) to "stream"
-        * @return      $data   The data (string mostly) to "stream"
-        * @throws      UnsupportedOperationException   If this method is called
-        */
-       public function streamData ($data) {
-               self::createDebugInstance(__CLASS__)->debugOutput('Unhandled ' . strlen($data) . ' bytes in this stream.');
-               throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION);
-       }
-}
-
-// [EOF]
-?>
diff --git a/inc/classes/main/file_directories/io_stream/.htaccess b/inc/classes/main/file_directories/io_stream/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/inc/classes/main/file_directories/io_stream/class_FileIoStream.php b/inc/classes/main/file_directories/io_stream/class_FileIoStream.php
new file mode 100644 (file)
index 0000000..956ca34
--- /dev/null
@@ -0,0 +1,268 @@
+<?php
+/**
+ * An universal class for file input/output streams.
+ *
+ * @author             Roland Haeder <webmaster@shipsimu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 Core Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.shipsimu.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 FileIoStream extends BaseFrameworkSystem implements FileInputStreamer, FileOutputStreamer {
+       /**
+        * File header indicator
+        */
+       const FILE_IO_FILE_HEADER_ID = '@head';
+
+       /**
+        * Data block indicator
+        */
+       const FILE_IO_DATA_BLOCK_ID = '@data';
+
+       /**
+        * Separator #1
+        */
+       const FILE_IO_CHUNKER = ':';
+
+       /**
+        * Separator #2
+        */
+       const FILE_IO_SEPARATOR = '^';
+
+       /**
+        * Protected constructor
+        */
+       protected function __construct () {
+               // Call parent constructor
+               parent::__construct(__CLASS__);
+       }
+
+       /**
+        * Create a file IO stream. This is a class for performing all actions
+        * on files like creating, deleting and loading them.
+        *
+        * @return      $ioInstance     An instance of FileIoStream
+        */
+       public static final function createFileIoStream () {
+               // Create new instance
+               $ioInstance = new FileIoStream();
+
+               // Return the instance
+               return $ioInstance;
+       }
+
+       /**
+        * Saves data to a given local file and create missing directory structures
+        *
+        * @param       $fileName       The file name for the to be saved file
+        * @param       $dataArray      The data we shall store to the file
+        * @return      void
+        * @see         FileOutputStreamer
+        * @todo        This method needs heavy rewrite
+        */
+       public final function saveFile ($fileName, array $dataArray) {
+               // Try it five times
+               $dirName = '';
+               $fileInstance = NULL;
+
+               for ($idx = 0; $idx < 5; $idx++) {
+                       // Get a file output pointer
+                       try {
+                               $fileInstance = ObjectFactory::createObjectByConfiguredName('file_raw_output_class', array($fileName));
+                       } catch (FileIoException $e) {
+                               // Create missing directory
+                               $dirName = dirname($fileName);
+                               for ($idx2 = 0; $idx2 < (2 - $idx); $idx2++) {
+                                       $dirName = dirname($dirName);
+                               } // END - for
+
+                               // Try to create it
+                               @mkdir($dirName);
+                       }
+               } // END - for
+
+               // Write a header information for validation purposes
+               $fileInstance->writeToFile(sprintf('%s%s%s%s%s%s%s%s%s' . PHP_EOL,
+                       self::FILE_IO_FILE_HEADER_ID,
+                       self::FILE_IO_SEPARATOR,
+                       $dataArray[0],
+                       self::FILE_IO_CHUNKER,
+                       time(),
+                       self::FILE_IO_CHUNKER,
+                       strlen($dataArray[1]),
+                       self::FILE_IO_CHUNKER,
+                       md5($dataArray[1])
+               ));
+
+               // Encode the (maybe) binary stream with Base64
+               $b64Stream = base64_encode($dataArray[1]);
+
+               // write the data line by line
+               $line = str_repeat(' ', 50); $idx = 0;
+               while (strlen($line) == 50) {
+                       // Get 50 chars or less
+                       $line = substr($b64Stream, $idx, 50);
+
+                       // Save it to the stream
+                       $fileInstance->writeToFile(sprintf('%s%s%s%s%s' . PHP_EOL,
+                               self::FILE_IO_DATA_BLOCK_ID,
+                               self::FILE_IO_SEPARATOR,
+                               $line,
+                               self::FILE_IO_CHUNKER,
+                               md5($line)
+                       ));
+
+                       // Advance to the next 50-chars block
+                       $idx += 50;
+               } // END - while
+
+               // Close the file
+               $fileInstance->closeFile();
+       }
+
+       /**
+        * Reads from a local file
+        *
+        * @param       $fqfn   The full-qualified file-name which we shall load
+        * @return      $array  An array with the element 'header' and 'data'
+        * @see         FileInputStreamer
+        */
+       public final function loadFileContents ($fqfn) {
+               // Initialize some variables and arrays
+               $inputBuffer = '';
+               $lastBuffer = '';
+               $header = array();
+               $data = array();
+               $readData = ''; // This will contain our read data
+
+               // Get a file input handler
+               $fileInstance = ObjectFactory::createObjectByConfiguredName('file_raw_input_class', array($fqfn));
+
+               // Read all it's contents (we very and transparently decompress it below)
+               while ($readRawLine = $fileInstance->readFromFile()) {
+                       // Add the read line to the buffer
+                       $inputBuffer .= $readRawLine;
+
+                       // Break infinite loop maybe caused by the input handler
+                       if ($lastBuffer == $inputBuffer) {
+                               break;
+                       } // END - if
+
+                       // Remember last read line for avoiding possible infinite loops
+                       $lastBuffer = $inputBuffer;
+               } // END - while
+
+               // Close directory handle
+               $fileInstance->closeFile();
+
+               // Convert it into an array
+               $inputBuffer = explode(chr(10), $inputBuffer);
+
+               // Now process the read lines and verify it's content
+               foreach ($inputBuffer as $rawLine) {
+                       // Trim it a little but not the leading spaces/tab-stops
+                       $rawLine = rtrim($rawLine);
+
+                       // Analyze this line
+                       if (substr($rawLine, 0, 5) == self::FILE_IO_FILE_HEADER_ID) {
+                               // Header found, so let's extract it
+                               $header = explode(self::FILE_IO_SEPARATOR, $rawLine);
+                               $header = trim($header[1]);
+
+                               // Now we must convert it again into an array
+                               $header = explode(self::FILE_IO_CHUNKER, $header);
+
+                               // Is the header (maybe) valid?
+                               if (count($header) != 4) {
+                                       // Throw an exception
+                                       throw new InvalidArrayCountException(array($this, 'header', count($header), 4), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT);
+                               } // END - if
+                       } elseif (substr($rawLine, 0, 5) == self::FILE_IO_DATA_BLOCK_ID) {
+                               // Is a data line!
+                               $data = explode(self::FILE_IO_SEPARATOR, $rawLine);
+                               $data = $data[1];
+
+                               // First element is the data, second the MD5 checksum
+                               $data = explode(self::FILE_IO_CHUNKER, $data);
+
+                               // Validate the read line
+                               if (count($data) == 2) {
+                                       if (md5($data[0]) != $data[1]) {
+                                               // MD5 hash did not match!
+                                               throw new InvalidMD5ChecksumException(array($this, md5($data[0]), $data[1]), self::EXCEPTION_MD5_CHECKSUMS_MISMATCH);
+                                       } // END - if
+                               } else {
+                                       // Invalid count!
+                                       throw new InvalidArrayCountException(array($this, 'data', count($data), 2), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT);
+                               }
+
+                               // Add this to the readData string
+                               $readData .= $data[0];
+                       } else {
+                               // Other raw lines than header/data tagged lines and re-add the new-line char
+                               $readData .= $rawLine . PHP_EOL;
+                       }
+               } // END - foreach
+
+               // Was raw lines read and no header/data?
+               if ((!empty($readData)) && (count($header) == 0) && (count($data) == 0)) {
+                       // Return raw lines back
+                       return $readData;
+               } // END - if
+
+               // Was a header found?
+               if (count($header) != 4) {
+                       // Throw an exception
+                       throw new InvalidArrayCountException(array($this, 'header', count($header), 4), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT);
+               } // END - if
+
+               // Decode all from Base64
+               $readData = @base64_decode($readData);
+
+               // Does the size match?
+               if (strlen($readData) != $header[2]) {
+                       // Size did not match
+                       throw new InvalidDataLengthException(array($this, strlen($readData), $header[2]), self::EXCEPTION_UNEXPECTED_STRING_SIZE);
+               } // END - if
+
+               // Validate the decoded data with the final MD5 hash
+               if (md5($readData) != $header[3]) {
+                       // MD5 hash did not match!
+                       throw new InvalidMD5ChecksumException(array($this, md5($readData), $header[3]), self::EXCEPTION_MD5_CHECKSUMS_MISMATCH);
+               } // END - if
+
+               // Return all in an array
+               return array(
+                       'header' => $header,
+                       'data'   => $readData
+               );
+       }
+
+       /**
+        * Streams the data and maybe does something to it
+        *
+        * @param       $data   The data (string mostly) to "stream"
+        * @return      $data   The data (string mostly) to "stream"
+        * @throws      UnsupportedOperationException   If this method is called
+        */
+       public function streamData ($data) {
+               self::createDebugInstance(__CLASS__)->debugOutput('Unhandled ' . strlen($data) . ' bytes in this stream.');
+               throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION);
+       }
+}
+
+// [EOF]
+?>
index 5cc8474dc773e75b36491f77995248d56745e73e..d7e24e2d60e58f5b0a753aeadbc5911f7636b599 100644 (file)
@@ -21,7 +21,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
  * 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 ???Stream extends BaseStream implements Streamable {
+class ???Stream extends BaseStream implements Stream {
        /**
         * Protected constructor
         *
        /**
         * Protected constructor
         *
index 108f48f23b64142c6067e369aaf466799c7dc99d..0bae09ff7bbe905f7dbdc56d9bb05142c4390a80 100644 (file)
@@ -21,7 +21,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
  * 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 ???InputStream extends BaseStream implements InputStreamable {
+class ???InputStream extends BaseStream implements InputStream {
        /**
         * Protected constructor
         *
        /**
         * Protected constructor
         *
index ce5dda254096c5cd8e37891d25b72a10e1f3f45b..10b3c7224ff59c0d409ef94c2cb418ee13f5c603 100644 (file)
@@ -21,7 +21,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
  * 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 ???OutputStream extends BaseStream implements OutputStreamable {
+class ???OutputStream extends BaseStream implements OutputStream {
        /**
         * Protected constructor
         *
        /**
         * Protected constructor
         *
index 8e5559b065a8abf510d3dc9dc960e5972ff758fe..e7578348f4eb922d28052e07c11f567cf9237232 100644 (file)
@@ -119,8 +119,8 @@ class FileIoHandler extends BaseMiddleware implements IoHandler {
         * Saves streamed (that are mostly serialized objects) data to files or
         * external servers.
         *
         * Saves streamed (that are mostly serialized objects) data to files or
         * external servers.
         *
-        * @param       $fileName                       The local file's name including full path
-        * @param       $dataArray                      Array containing the compressor's extension and streamed data
+        * @param       $fileName       The local file's name including full path
+        * @param       $dataArray      Array containing the compressor's extension and streamed data
         * @return      void
         * @throws      UnsupportedOperationException   If this method is called
         */
         * @return      void
         * @throws      UnsupportedOperationException   If this method is called
         */