<?php
// Own namespace
-namespace CoreFramework\Stream\Filesystem;
+namespace Org\Mxchange\CoreFramework\Stream\Filesystem;
// Import framework stuff
-use CoreFramework\EntryPoint\ApplicationEntryPoint;
-use CoreFramework\Factory\ObjectFactory;
-use CoreFramework\Filesystem\FileNotFoundException;
-use CoreFramework\Generic\UnsupportedOperationException;
-use CoreFramework\Object\BaseFrameworkSystem;
-use CoreFramework\Stream\Filesystem\FileInputStreamer;
-use CoreFramework\Stream\Filesystem\FileOutputStreamer;
+use Org\Mxchange\CoreFramework\EntryPoint\ApplicationEntryPoint;
+use Org\Mxchange\CoreFramework\Factory\Object\ObjectFactory;
+use Org\Mxchange\CoreFramework\Filesystem\FileNotFoundException;
+use Org\Mxchange\CoreFramework\Generic\UnsupportedOperationException;
+use Org\Mxchange\CoreFramework\Object\BaseFrameworkSystem;
+use Org\Mxchange\CoreFramework\Stream\Filesystem\FileInputStreamer;
+use Org\Mxchange\CoreFramework\Stream\Filesystem\FileOutputStreamer;
+
+// Import SPL stuff
+use \SplFileInfo;
/**
* 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 - 2017 Core Developer Team
+ * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2021 Core Developer Team
* @license GNU GPL 3.0 or any newer version
* @link http://www.shipsimu.org
*
/**
* Protected constructor
*/
- protected function __construct () {
+ private function __construct () {
// Call parent constructor
parent::__construct(__CLASS__);
}
/**
* Saves data to a given local file and create missing directory structures
*
- * @param $fileName The file name for the to be saved file
+ * @param $fileInfoInstance An instance of a SplFileInfo class
* @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) {
+ public final function saveFile (SplFileInfo $fileInfoInstance, 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, 'wb'));
+ $fileInstance = ObjectFactory::createObjectByConfiguredName('file_raw_output_class', array($fileInfoInstance, 'wb'));
} catch (FileNotFoundException $e) {
// Bail out
ApplicationEntryPoint::exitApplication('The application has made a fatal error. Exception: ' . $e->__toString() . ' with message: ' . $e->getMessage());
}
- } // END - for
+ }
// Write a header information for validation purposes
$fileInstance->writeToFile(sprintf('%s%s%s%s%s%s%s%s%s' . PHP_EOL,
// Advance to the next 50-chars block
$idx += 50;
- } // END - while
+ }
// Close the file
unset($fileInstance);
/**
* Reads from a local file
*
- * @param $fqfn The full-qualified file-name which we shall load
+ * @param $infoInstance An instance of a SplFileInfo class
* @return $array An array with the element 'header' and 'data'
* @see FileInputStreamer
*/
- public final function loadFileContents ($fqfn) {
+ public final function loadFileContents (SplFileInfo $infoInstance) {
// Initialize some variables and arrays
$inputBuffer = '';
$lastBuffer = '';
- $header = array();
- $data = array();
+ $header = [];
+ $data = [];
$readData = ''; // This will contain our read data
// Get a file input handler
- $fileInstance = ObjectFactory::createObjectByConfiguredName('file_raw_input_class', array($fqfn));
+ $fileInstance = ObjectFactory::createObjectByConfiguredName('file_raw_input_class', array($infoInstance));
// Read all it's contents (we very and transparently decompress it below)
while ($readRawLine = $fileInstance->readFromFile()) {
// 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
unset($fileInstance);
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);
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);
// 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);
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(
* @return $data The data (string mostly) to "stream"
* @throws UnsupportedOperationException If this method is called
*/
- public function streamData ($data) {
+ public function streamData (string $data) {
self::createDebugInstance(__CLASS__, __LINE__)->debugOutput('Unhandled ' . strlen($data) . ' bytes in this stream.');
throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION);
}
* @param $whence Added to offset (default: only use offset to seek to)
* @return $status Status of file seek: 0 = success, -1 = failed
*/
- public function seek ($offset, $whence = SEEK_SET) {
+ public function seek (int $offset, int $whence = SEEK_SET) {
$this->partialStub('offset=' . $offset . ',whence=' . $whence);
}