9d9fa034bbede98f70a6ad85cf0e37b96d79d71c
[mailer.git] / inc / classes / main / compressor / class_GzipCompressor.php
1 <?php
2 /**
3  * GZIP compression and decompression class
4  *
5  * @author              Roland Haeder <webmaster@ship-simu.org>
6  * @version             0.3.0
7  * @copyright   Copyright(c) 2007, 2008 Roland Haeder, this is free software
8  * @license             GNU GPL 3.0 or any newer version
9  * @link                http://www.mxchange.org
10  *
11  * This program is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation, either version 3 of the License, or
14  * (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23  */
24 class GzipCompressor extends BaseFrameworkSystem implements Compressor {
25         /**
26          * Private constructor
27          *
28          * @return      void
29          */
30         private function __construct () {
31                 // Call parent constructor!
32                 parent::constructor(__CLASS__);
33
34                 // Debug message
35                 if (((defined('DEBUG_COMPRESSOR')) || (defined('DEBUG_ALL'))) && (defined('DEBUG_CONSTRUCT'))) $this->getDebugInstance()->output(sprintf("[%s:] Konstruktor erreicht.<br />\n",
36                         $this->__toString()
37                 ));
38
39                 // Set description
40                 $this->setObjectDescription("GZIP-Kompressor");
41
42                 // Create an unique ID
43                 $this->createUniqueID();
44         }
45
46         /**
47          * Create a new compressor channel based a given compression handler
48          *
49          * @return      $cInstance      An instance of this class
50          */
51         public final static function createGzipCompressor () {
52                 // Get new instance
53                 if ((function_exists('gzcompress')) && (function_exists('gzuncompress'))) {
54                         // Compressor can maybe be used
55                         $cInstance = new GzipCompressor();
56
57                         // Debug message
58                         if ((defined('DEBUG_COMPRESSOR')) || (defined('DEBUG_ALL'))) $cInstance->getDebugInstance()->output(sprintf("[%s:] GZIP-Kompression wird verwendet.<br />\n",
59                                 $cInstance->__toString()
60                         ));
61                 } else {
62                         // Routines not found!
63                         $cInstance = null;
64
65                         // Debug message
66                         if ((defined('DEBUG_COMPRESSOR')) || (defined('DEBUG_ALL'))) $cInstance->getDebugInstance()->output(sprintf("[%s:] GZIP-Kompressionsroutinen <strong>nicht</strong> gefunden.<br />\n",
67                                 $cInstance->__toString()
68                         ));
69                 }
70
71                 // Return the compressor instance
72                 return $cInstance;
73         }
74
75         /**
76          * GZIP compression stream
77          *
78          * @param       $streamData             Mixed non-object stream data
79          * @return      $streamData             The compressed stream data      
80          * @throws      InvalidObjectException  If the stream is an object
81          */
82         public function compressStream ($streamData) {
83                 if (is_object($streamData)) {
84                         // Throw an exception
85                         throw new InvalidObjectException($streamData, self::EXCEPTION_UNEXPECTED_OBJECT);
86                 }
87
88                 // Return the compressed stream
89                 return gzcompress($streamData, 1);
90         }
91
92         /**
93          * GZIP decompression stream
94          *
95          * @param       $streamData             Mixed non-object stream data
96          * @return      $streamData             The decompressed stream data    
97          * @throws      InvalidObjectException  If the stream is an object
98          */
99         public function decompressStream ($streamData) {
100                 if (is_object($streamData)) {
101                         // Throw an exception
102                         throw new InvalidObjectException($streamData, self::EXCEPTION_UNEXPECTED_OBJECT);
103                 }
104
105                 // Return the decompressed stream
106                 return gzuncompress($streamData);
107         }
108
109         /**
110          * Getter for the file extension of this compressor
111          *
112          * @return      $string Returns always "gz"
113          */
114         public final function getCompressorExtension () {
115                 if ((defined('DEBUG_COMPRESSOR')) || (defined('DEBUG_ALL'))) $this->getDebugInstance()->output(sprintf("[%s:] Dateierweiterung angefordert.<br />\n",
116                         $this->__toString()
117                 ));
118                 return "gz";
119         }
120 }
121
122 // [EOF]
123 ?>