You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
195 lines
5.6 KiB
195 lines
5.6 KiB
<?php
|
|
|
|
// +---------------------------------------------------------------------------+
|
|
// | This file is part of the core package. |
|
|
// | Copyright (c) laiketui.com |
|
|
// | |
|
|
// | For the full copyright and license information, please view the LICENSE |
|
|
// | file that was distributed with this source code. You can also view the |
|
|
// | LICENSE file online at http://www.laiketui.com |
|
|
// +---------------------------------------------------------------------------+
|
|
|
|
/**
|
|
* Storage allows you to customize the way Mojavi stores its persistent data.
|
|
*
|
|
* @package laiketui
|
|
* @subpackage storage
|
|
*
|
|
* @author ketter (ketter@laiketui.com)
|
|
* @since 3.0.0
|
|
*/
|
|
abstract class Storage extends ParameterHolder
|
|
{
|
|
|
|
// +-----------------------------------------------------------------------+
|
|
// | PRIVATE DATA |
|
|
// +-----------------------------------------------------------------------+
|
|
|
|
private
|
|
$context = null;
|
|
|
|
// +-----------------------------------------------------------------------+
|
|
// | METHODS |
|
|
// +-----------------------------------------------------------------------+
|
|
|
|
/**
|
|
* Retrieve the current application context.
|
|
*
|
|
* @return Context A Context instance.
|
|
*
|
|
* @author ketter (ketter@laiketui.com)
|
|
* @since 3.0.0
|
|
*/
|
|
public function getContext ()
|
|
{
|
|
|
|
return $this->context;
|
|
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Initialize this Storage.
|
|
*
|
|
* @param Context A Context instance.
|
|
* @param array An associative array of initialization parameters.
|
|
*
|
|
* @return bool true, if initialization completes successfully, otherwise
|
|
* false.
|
|
*
|
|
* @throws <b>InitializationException</b> If an error occurs while
|
|
* initializing this Storage.
|
|
*
|
|
* @author ketter (ketter@laiketui.com)
|
|
* @since 3.0.0
|
|
*/
|
|
public function initialize ($context, $parameters = null)
|
|
{
|
|
|
|
$this->context = $context;
|
|
|
|
if ($parameters != null)
|
|
{
|
|
|
|
$this->parameters = array_merge($this->parameters, $parameters);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Retrieve a new Storage implementation instance.
|
|
*
|
|
* @param string A Storage implementation name
|
|
*
|
|
* @return Storage A Storage implementation instance.
|
|
*
|
|
* @throws <b>FactoryException</b> If a storage implementation instance
|
|
* cannot be created.
|
|
*
|
|
* @author ketter (ketter@laiketui.com)
|
|
* @since 3.0.0
|
|
*/
|
|
public static function newInstance ($class)
|
|
{
|
|
|
|
// the class exists
|
|
$object = new $class();
|
|
|
|
if (!($object instanceof Storage))
|
|
{
|
|
|
|
// the class name is of the wrong type
|
|
$error = 'Class "%s" is not of the type Storage';
|
|
$error = sprintf($error, $class);
|
|
|
|
throw new FactoryException($error);
|
|
|
|
}
|
|
|
|
return $object;
|
|
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Read data from this storage.
|
|
*
|
|
* The preferred format for a key is directory style so naming conflicts can
|
|
* be avoided.
|
|
*
|
|
* @param string A unique key identifying your data.
|
|
*
|
|
* @return mixed Data associated with the key.
|
|
*
|
|
* @throws <b>StorageException</b> If an error occurs while reading data from
|
|
* this storage.
|
|
*
|
|
* @author ketter (ketter@laiketui.com)
|
|
* @since 3.0.0
|
|
*/
|
|
abstract function & read ($key);
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Remove data from this storage.
|
|
*
|
|
* The preferred format for a key is directory style so naming conflicts can
|
|
* be avoided.
|
|
*
|
|
* @param string A unique key identifying your data.
|
|
*
|
|
* @return mixed Data associated with the key.
|
|
*
|
|
* @throws <b>StorageException</b> If an error occurs while removing data from
|
|
* this storage.
|
|
*
|
|
* @author ketter (ketter@laiketui.com)
|
|
* @since 3.0.0
|
|
*/
|
|
abstract function & remove ($key);
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Execute the shutdown procedure.
|
|
*
|
|
* @return void
|
|
*
|
|
* @throws <b>StorageException</b> If an error occurs while shutting down
|
|
* this storage.
|
|
*
|
|
* @author ketter (ketter@laiketui.com)
|
|
* @since 3.0.0
|
|
*/
|
|
abstract function shutdown ();
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Write data to this storage.
|
|
*
|
|
* The preferred format for a key is directory style so naming conflicts can
|
|
* be avoided.
|
|
*
|
|
* @param string A unique key identifying your data.
|
|
* @param mixed Data associated with your key.
|
|
*
|
|
* @return void
|
|
*
|
|
* @throws <b>StorageException</b> If an error occurs while writing to this
|
|
* storage.
|
|
*
|
|
* @author ketter (ketter@laiketui.com)
|
|
* @since 3.0.0
|
|
*/
|
|
abstract function write ($key, &$data);
|
|
|
|
}
|
|
|
|
?>
|