X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=ship-simu%2Finc%2Fclasses%2Fmain%2Fio%2Fclass_FrameworkFileOutputPointer.php;fp=ship-simu%2Finc%2Fclasses%2Fmain%2Fio%2Fclass_FrameworkFileOutputPointer.php;h=439b12327cc1ea5dc51ac05ca226ed3096075803;hb=85db0cda2cdb5a801db7020aa55b6f4d969f7674;hp=0000000000000000000000000000000000000000;hpb=6f7c99239b34b8ff5e05d719ea24dd213f03f955;p=shipsimu.git diff --git a/ship-simu/inc/classes/main/io/class_FrameworkFileOutputPointer.php b/ship-simu/inc/classes/main/io/class_FrameworkFileOutputPointer.php new file mode 100644 index 0000000..439b123 --- /dev/null +++ b/ship-simu/inc/classes/main/io/class_FrameworkFileOutputPointer.php @@ -0,0 +1,180 @@ +setPartDescr("Dateiausgabe-Handler"); + + // Create unique ID + $this->createUniqueID(); + + // Clean-up a little + $this->removeNumberFormaters(); + } + + /** + * Destructor for cleaning purposes, etc + */ + public final function __destruct() { + // Is there a resource pointer? Then we have to close the file here! + if (is_resource($this->getPointer())) { + // Try to close a file + $this->closeFile(); + } + + // Call the parent destructor + parent::__destruct(); + } + + /** + * Create a file pointer based on the given file. The file will also + * be verified here. + * + * @param $fileName The file name we shall pass + * to fopen() + * @param $mode The output mode ('w', 'a' are valid) + * @throws FileIsEmptyException If the provided file name is empty. + * @throws FilePointerNotOpened If fopen() returns not a file + * resource + * @return void + */ + public final static function createFrameworkFileOutputPointer ($fileName, $mode) { + // Some pre-sanity checks... + if (is_null($fileName)) { + // No filename given + throw new FileIsEmptyException(null, self::EXCEPTION_UNEXPECTED_EMPTY_STRING); + } + + // Try to open a handler + $filePointer = @fopen($fileName, $mode); + if (($filePointer === null) || ($filePointer === false)) { + // Something bad happend + throw new FilePointerNotOpenedException ($fileName, self::EXCEPTION_FILE_POINTER_INVALID); + } + + // Create new instance + $pointerInstance = new FrameworkFileOutputPointer(); + + // Set file pointer and file name + $pointerInstance->setPointer($filePointer); + $pointerInstance->setFileName($fileName); + + // Return the instance + return $pointerInstance; + } + + /** + * Write data to a file pointer + * + * @param $dataStream The data stream we shall write to the file + * @return mixed The result of fwrite() + * @throws NullPointerException If the file pointer instance + * is not set by setPointer() + * @throws InvalidFileResourceException If there is being set + * an invalid file resource + */ + public function writeToFile ($dataStream) { + if (is_null($this->getPointer())) { + // Pointer not initialized + throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER); + } elseif (!is_resource($this->getPointer())) { + // Pointer is not a valid resource! + throw new InvalidFileResourceException($this, self::EXCEPTION_INVALID_DIRECTORY_POINTER); + } + + // Read data from the file pointer and return it + return fwrite($this->getPointer(), $dataStream); + } + + /** + * Close a file source and set it's instance to null and the file name + * to empty + * + * @return void + * @throws NullPointerException If the file pointer instance + * is not set by setPointer() + * @throws InvalidFileResourceException If there is being set + */ + public function closeFile () { + if (is_null($this->getPointer())) { + // Pointer not initialized + throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER); + } elseif (!is_resource($this->getPointer())) { + // Pointer is not a valid resource! + throw new InvalidFileResourceException($this, self::EXCEPTION_INVALID_DIRECTORY_POINTER); + } + + // Close the file pointer and reset the instance variable + @fclose($this->getPointer()); + $this->setPointer(null); + $this->setFileName(""); + } + + /** + * Setter for the file pointer + * + * @param $filePointer File resource + * @return void + */ + public final function setPointer ($filePointer) { + // Sanity-check if the pointer is a valid file resource + if (is_resource($filePointer) || is_null($filePointer)) { + // Is a valid resource + $this->filePointer = $filePointer; + } else { + // Throw exception + throw new InvalidFileResourceException($this, self::EXCEPTION_INVALID_DIRECTORY_POINTER); + } + } + + /** + * Getter for the file pointer + * + * @return $filePointer The file pointer which shall be a valid + * file resource + */ + public final function getPointer () { + return $this->filePointer; + } + + /** + * Setter for file name + * + * @param $fileName The new file name + * @return void + */ + public final function setFileName ($fileName) { + $fileName = (string) $fileName; + $this->fileName = $fileName; + } + + /** + * Getter for file name + * + * @return $fileName The current file name + */ + public final function getFileName () { + return $this->fileName; + } +} + +// [EOF] +?>