- <?php
- /**
- * Provides a base implementation for connected models.
- *
- * @copyright 2011 Perforce Software. All rights reserved.
- * @license Please see LICENSE.txt in top-level folder of this distribution.
- * @version <release>/<patch>
- */
- namespace P4\Model\Connected;
- use P4\Connection\ConnectionInterface;
- use P4\Connection\Connection;
- use P4\Exception;
- abstract class ConnectedAbstract implements ConnectedInterface
- {
- protected $connection = null;
- /**
- * We need a custom sleep to exclude the connection property.
- * 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('connection')
- );
- }
- /**
- * Instantiate the model and set the connection to use.
- *
- * @param ConnectionInterface $connection optional - a connection to use for this instance.
- */
- public function __construct(ConnectionInterface $connection = null)
- {
- if ($connection) {
- $this->setConnection($connection);
- } elseif (Connection::hasDefaultConnection()) {
- $this->setConnection(Connection::getDefaultConnection());
- }
- }
- /**
- * Set the Perforce connection to use when
- * issuing Perforce commands for this instance.
- *
- * @param ConnectionInterface $connection the connection to use for this instance.
- * @return ConnectedAbstract provides fluent interface.
- */
- public function setConnection(ConnectionInterface $connection)
- {
- $this->connection = $connection;
- return $this;
- }
- /**
- * Get the Perforce connection used by this model.
- *
- * @return ConnectionInterface the connection instance used by this model.
- */
- public function getConnection()
- {
- if ($this->connection instanceof ConnectionInterface) {
- return $this->connection;
- }
- throw new Exception("Cannot get connection. No connection is set.");
- }
- /**
- * Get the default Perforce connection to use.
- *
- * @return ConnectionInterface the default connection.
- */
- public static function getDefaultConnection()
- {
- return Connection::getDefaultConnection();
- }
- /**
- * Determine if this model has a connection to Perforce.
- *
- * @return bool true if the model has a connection to Perforce.
- */
- public function hasConnection()
- {
- try {
- $this->getConnection();
- return true;
- } catch (Exception $e) {
- return false;
- }
- }
- /**
- * Clear this model's connection. This is primarily for testing purposes.
- */
- public function clearConnection()
- {
- $this->connection = null;
- }
- }