. */ require_once 'phing/system/io/PhingFile.php'; require_once 'phing/system/io/FileWriter.php'; /** * An abstract representation of file and directory pathnames. * * @package phing.util * @author Michiel Rook * @version $Revision: 905 $ */ class DataStore { private $data = array(); private $file = null; /** * Constructs a new data store * * @param PhingFile $file object pointing to the data store on disk */ function __construct(PhingFile $file) { $this->file = $file; if ($this->file->exists()) { $this->read(); } } /** * Destructor */ function __destruct() { $this->commit(); } /** * Retrieves a value from the data store * * @param string $key the key * * @return mixed the value */ public function get($key) { if (!isset($this->data[$key])) { return null; } else { return $this->data[$key]; } } /** * Adds a value to the data store * * @param string $key the key * @param mixed $value the value * @param boolean $autocommit whether to auto-commit (write) * the data store to disk * * @return none */ public function put($key, $value, $autocommit = false) { $this->data[$key] = $value; if ($autocommit) { $this->commit(); } } /** * Commits data store to disk * * @return none */ public function commit() { $this->write(); } /** * Internal function to read data store from file * * @return none */ private function read() { if (!$this->file->canRead()) { throw new BuildException("Can't read data store from '" . $file->getPath() . "'"); } else { $serializedData = $this->file->contents(); $this->data = unserialize($serializedData); } } /** * Internal function to write data store to file * * @return none */ private function write() { if (!$this->file->canWrite()) { throw new BuildException("Can't write data store to '" . $file->getPath() . "'"); } else { $serializedData = serialize($this->data); $writer = new FileWriter($this->file); $writer->write($serializedData); $writer->close(); } } };