Connected.php #1

  • //
  • guest/
  • perforce_software/
  • chronicle/
  • main/
  • library/
  • P4Cms/
  • Record/
  • Connected.php
  • View
  • Commits
  • Open Download .zip Download (5 KB)
<?php
/**
 * Extends P4Cms_Model class and provides in-memory storage of a record adapter
 * and records default adapter.
 *
 * It only provides methods to retrieve, store, check-for and clear a record adapter
 * and/or records default adapter; it doesn't provide any functionality for permanent
 * storage of P4Cms_Model objects.
 *
 * Constructor will set an adapter for the new instance if the caller
 * provides one or there is a default record adapter available.
 *
 * @copyright   2012 Perforce Software. All rights reserved.
 * @license     Please see LICENSE.txt in top-level folder of this distribution.
 * @version     <release>/<patch>
 */
class P4Cms_Record_Connected extends P4Cms_Model
{
    protected           $_adapter           = null;
    protected static    $_defaultAdapter    = null;

    /**
     * We need a custom sleep to exclude the adapter property.
     * Adapter connection objects cannot be serialized.
     *
     * @return  array   list of properties to serialize
     */
    public function __sleep()
    {
        return array_diff(
            array_keys(get_object_vars($this)),
            array('_adapter')
        );
    }

    /**
     * Create a new model instance and (optionally) set the field values.
     * Extends parent to set the default adapter in the instance.
     *
     * @param   array                   $values     array of key/values to load into the model.
     * @param   P4Cms_Record_Adapter    $adapter    optional - storage adapter to use.
     */
    public function __construct($values = null, P4Cms_Record_Adapter $adapter = null)
    {
        // if no adapter given, use the default adapter.
        if (!$adapter && static::hasDefaultAdapter()) {
            $adapter = static::getDefaultAdapter();
        }

        // set the adapter if we have one.
        if ($adapter) {
            $this->setAdapter($adapter);
        }

        parent::__construct($values);
    }

    /**
     * Set the storage adapter to use when accessing records.
     *
     * @param   P4Cms_Record_Adapter    $adapter    the adapter to use for this instance.
     * @return  P4Cms_Record_Connected  provides fluent interface.
     */
    public function setAdapter(P4Cms_Record_Adapter $adapter)
    {
        $this->_adapter = $adapter;

        return $this;
    }

    /**
     * Get the storage adapter used by this instance when accessing records.
     *
     * @return  P4Cms_Record_Adapter    the adapter used by this instance.
     * @throws  P4Cms_Record_Exception  if the adapter was not set.
     */
    public function getAdapter()
    {
        if ($this->_adapter instanceof P4Cms_Record_Adapter) {
            return $this->_adapter;
        }

        throw new P4Cms_Record_Exception(
            "Cannot get storage adapter. Adapter has not been set."
        );
    }

    /**
     * Determine if a record adapter has been set.
     *
     * @return  bool    true if a record adapter has been set, false otherwise.
     */
    public function hasAdapter()
    {
        try {
            $this->getAdapter();
            return true;
        } catch (P4Cms_Record_Exception $e) {
            return false;
        }
    }

    /**
     * Clear this record's storage adapter. This is primarily for testing purposes.
     */
    public function clearAdapter()
    {
        $this->_adapter = null;
    }

    /**
     * Set the default storage adapter to use when accessing records.
     *
     * @param   P4Cms_Record_Adapter    $adapter    the adapter to use by default.
     */
    public static function setDefaultAdapter(P4Cms_Record_Adapter $adapter)
    {
        static::$_defaultAdapter = $adapter;
    }

    /**
     * Get the default storage adapter to use when accessing records.
     *
     * @return  P4Cms_Record_Adapter    the default storage adapter.
     */
    public static function getDefaultAdapter()
    {
        if (static::$_defaultAdapter instanceof P4Cms_Record_Adapter) {
            return static::$_defaultAdapter;
        }

        throw new P4Cms_Record_Exception(
            "Cannot get default storage adapter. Adapter has not been set."
        );
    }

    /**
     * Determine if a default storage adapter has been set.
     *
     * @return  bool    true if a default storage adapter has been set.
     */
    public static function hasDefaultAdapter()
    {
        try {
            static::getDefaultAdapter();
            return true;
        } catch (P4Cms_Record_Exception $e) {
            return false;
        }
    }

    /**
     * Clear the default record storage adapter. This is primarily for testing purposes.
     */
    public static function clearDefaultAdapter()
    {
        static::$_defaultAdapter = null;
    }
}
# Change User Description Committed
#1 16170 perforce_software Move Chronicle files to follow new path scheme for branching.
//guest/perforce_software/chronicle/library/P4Cms/Record/Connected.php
#1 8972 Matt Attaway Initial add of the Chronicle source code